private boolean isAllowedMethodOnConditionLeft(SQLMethodInvokeExpr method, SQLBinaryOperator operator) { return (method.getMethodName().toLowerCase().equals("nested") || method.getMethodName().toLowerCase().equals("children") || SQLFunctions.buildInFunctions.contains(method.getMethodName().toLowerCase()) ) && !operator.isLogical(); }
public boolean applyDropColumn(SQLName columnName) { for (int i = columns.size() - 1; i >= 0; i--) { SQLExpr expr = columns.get(i).getExpr(); if (expr instanceof SQLName && SQLUtils.nameEquals((SQLName) expr, columnName)) { columns.remove(i); return true; } if (expr instanceof SQLMethodInvokeExpr && SQLUtils.nameEquals(((SQLMethodInvokeExpr) expr).getMethodName(), columnName.getSimpleName())) { columns.remove(i); return true; } } return false; } }
public boolean applyDropColumn(SQLName columnName) { for (int i = columns.size() - 1; i >= 0; i--) { SQLExpr expr = columns.get(i).getExpr(); if (expr instanceof SQLName && SQLUtils.nameEquals((SQLName) expr, columnName)) { columns.remove(i); return true; } if (expr instanceof SQLMethodInvokeExpr && SQLUtils.nameEquals(((SQLMethodInvokeExpr) expr).getMethodName(), columnName.getSimpleName())) { columns.remove(i); return true; } } return false; } }
String method = x.getMethodName(); if ("md5".equalsIgnoreCase(method)) { String text = paramValue.toString();
if (!"decode".equalsIgnoreCase(x.getMethodName())) { throw new IllegalArgumentException(x.getMethodName()); if ("decode".equalsIgnoreCase(methodInvokeExpr.getMethodName())) { valueExpr = transformDecode(methodInvokeExpr); if ("decode".equalsIgnoreCase(methodInvokeExpr.getMethodName())) { defaultExpr = transformDecode(methodInvokeExpr);
/** * only for show columns */ public boolean isUNI(String columnName) { for (SQLTableElement element : this.tableElementList) { if (element instanceof MySqlUnique) { MySqlUnique unique = (MySqlUnique) element; if (unique.getColumns().size() == 0) { continue; } SQLExpr column = unique.getColumns().get(0).getExpr(); if (column instanceof SQLIdentifierExpr && SQLUtils.nameEquals(columnName, ((SQLIdentifierExpr) column).getName())) { return unique.columns.size() == 1; } else if (column instanceof SQLMethodInvokeExpr && SQLUtils.nameEquals(((SQLMethodInvokeExpr) column).getMethodName(), columnName)) { return true; } } } return false; }
if (paramMethodExpr.getMethodName().equalsIgnoreCase("hex")) { SQLExpr subParamExpr = paramMethodExpr.getParameters().get(0); subParamExpr.accept(visitor);
if (item instanceof SQLMethodInvokeExpr) { SQLMethodInvokeExpr methodExpr = (SQLMethodInvokeExpr) item; String methodName = methodExpr.getMethodName().toLowerCase(); if ("chr".equals(methodName) || "char".equals(methodName)) { if (methodExpr.getParameters().get(0) instanceof SQLLiteralExpr) {
public boolean tryParseFromMethodExpr(SQLMethodInvokeExpr expr) throws SqlParseException { if (!expr.getMethodName().toLowerCase().equals("script")) { return false;
/** * only for show columns */ public boolean isMUL(String columnName) { for (SQLTableElement element : this.tableElementList) { if (element instanceof MySqlUnique) { MySqlUnique unique = (MySqlUnique) element; SQLExpr column = unique.getColumns().get(0).getExpr(); if (column instanceof SQLIdentifierExpr && SQLUtils.nameEquals(columnName, ((SQLIdentifierExpr) column).getName())) { return unique.columns.size() > 1; } else if (column instanceof SQLMethodInvokeExpr && SQLUtils.nameEquals(((SQLMethodInvokeExpr) column).getMethodName(), columnName)) { return true; } } else if (element instanceof MySqlKey) { MySqlKey unique = (MySqlKey) element; SQLExpr column = unique.getColumns().get(0).getExpr(); if (column instanceof SQLIdentifierExpr && SQLUtils.nameEquals(columnName, ((SQLIdentifierExpr) column).getName())) { return true; } else if (column instanceof SQLMethodInvokeExpr && SQLUtils.nameEquals(((SQLMethodInvokeExpr) column).getMethodName(), columnName)) { return true; } } } return false; }
public static void checkFunctionInTableSource(WallVisitor visitor, SQLMethodInvokeExpr x) { final WallTopStatementContext topStatementContext = wallTopStatementContextLocal.get(); if (topStatementContext != null && (topStatementContext.fromSysSchema || topStatementContext.fromSysTable)) { return; } checkSchema(visitor, x.getOwner()); String methodName = x.getMethodName().toLowerCase(); if (!visitor.getProvider().checkDenyTable(methodName)) { if (isTopStatementWithTableSource(x) || isFirstSelectTableSource(x)) { if (topStatementContext != null) { topStatementContext.setFromSysSchema(Boolean.TRUE); clearViolation(visitor); } } } }
private MethodField parseSQLMethodInvokeExprWithFunctionInWhere(SQLMethodInvokeExpr soExpr) throws SqlParseException { MethodField methodField = FieldMaker.makeMethodField(soExpr.getMethodName(), soExpr.getParameters(), null, null, query != null ? query.getFrom().getAlias() : null, false); return methodField; }
private static Field makeFilterMethodField(SQLMethodInvokeExpr filterMethod, String alias) throws SqlParseException { List<SQLExpr> parameters = filterMethod.getParameters(); int parametersSize = parameters.size(); if (parametersSize != 1 && parametersSize != 2) { throw new SqlParseException("filter group by field should only have one or 2 parameters filter(Expr) or filter(name,Expr)"); } String filterAlias = filterMethod.getMethodName(); SQLExpr exprToCheck = null; if (parametersSize == 1) { exprToCheck = parameters.get(0); filterAlias = "filter(" + exprToCheck.toString().replaceAll("\n", " ") + ")"; } if (parametersSize == 2) { filterAlias = Util.extendedToString(parameters.get(0)); exprToCheck = parameters.get(1); } Where where = Where.newInstance(); new WhereParser(new SqlParser()).parseWhere(exprToCheck, where); if (where.getWheres().size() == 0) throw new SqlParseException("unable to parse filter where."); List<KVValue> methodParameters = new ArrayList<>(); methodParameters.add(new KVValue("where", where)); methodParameters.add(new KVValue("alias", filterAlias + "@FILTER")); return new MethodField("filter", methodParameters, null, alias); }
public boolean tryFillFromExpr(SQLExpr expr) throws SqlParseException { if (!(expr instanceof SQLMethodInvokeExpr)) return false; SQLMethodInvokeExpr method = (SQLMethodInvokeExpr) expr; String methodName = method.getMethodName(); if (!methodName.toLowerCase().equals("children")) return false; List<SQLExpr> parameters = method.getParameters(); if (parameters.size() != 2) throw new SqlParseException("on children object only allowed 2 parameters (type, field)/(type, conditions...) "); String type = Util.extendedToString(parameters.get(0)); this.childType = type; SQLExpr secondParameter = parameters.get(1); if(secondParameter instanceof SQLTextLiteralExpr || secondParameter instanceof SQLIdentifierExpr || secondParameter instanceof SQLPropertyExpr) { this.field = Util.extendedToString(secondParameter); this.simple = true; } else { Where where = Where.newInstance(); new WhereParser(new SqlParser()).parseWhere(secondParameter,where); if(where.getWheres().size() == 0) throw new SqlParseException("unable to parse filter where."); this.where = where; simple = false; } return true; }
SQLMethodInvokeExpr methodInvokeExpr = (SQLMethodInvokeExpr) expr; if ("NOW".equalsIgnoreCase(methodInvokeExpr.getMethodName())) { row[i] = new Timestamp(System.currentTimeMillis()); } else {
String methodName = x.getMethodName().toLowerCase();
String function = x.getMethodName(); List<SQLExpr> parameters = x.getParameters();
if ("table".equalsIgnoreCase(methodInvokeExpr.getMethodName()) && methodInvokeExpr.getParameters().size() == 1 && methodInvokeExpr.getParameters().get(0) instanceof SQLName) {
} else if (expr instanceof SQLMethodInvokeExpr) { SQLMethodInvokeExpr methodInvokeExpr = (SQLMethodInvokeExpr) expr; if ("table".equalsIgnoreCase(methodInvokeExpr.getMethodName()) && methodInvokeExpr.getParameters().size() == 1 && methodInvokeExpr.getParameters().get(0) instanceof SQLName) {
if ("table".equalsIgnoreCase(methodInvokeExpr.getMethodName()) && methodInvokeExpr.getParameters().size() == 1 && methodInvokeExpr.getParameters().get(0) instanceof SQLName) {