public static List<SQLExpr> partExpr(List<SQLExpr> exprs) { List<SQLExpr> partList = new ArrayList<SQLExpr>(); for (SQLExpr x : exprs) { if (x instanceof SQLBinaryOpExpr) { SQLBinaryOpExpr binary = (SQLBinaryOpExpr) x; if (binary.getOperator() == SQLBinaryOperator.BooleanAnd || binary.getOperator() == SQLBinaryOperator.BooleanOr) { partList.add(((SQLBinaryOpExpr) x).getLeft()); partList.add(((SQLBinaryOpExpr) x).getRight()); continue; } } partList.add(x); } return partList; }
public static boolean isFirst(SQLObject x) { if (x == null) { return true; } for (;;) { SQLObject parent = x.getParent(); if (!(parent instanceof SQLExpr)) { return true; } if (parent instanceof SQLBinaryOpExprGroup) { if (x != ((SQLBinaryOpExprGroup) parent).getItems().get(0)) { return false; } } if (parent instanceof SQLBinaryOpExpr) { SQLBinaryOpExpr binaryExpr = (SQLBinaryOpExpr) parent; if (x == binaryExpr.getRight()) { return false; } } x = parent; } }
public static void exportParameter(final List<Object> parameters, SQLBinaryOpExpr x) { if (x.getLeft() instanceof SQLLiteralExpr && x.getRight() instanceof SQLLiteralExpr && x.getOperator().isRelational()) { return; } { SQLExpr leftResult = ExportParameterVisitorUtils.exportParameter(parameters, x.getLeft()); if (leftResult != x.getLeft()) { x.setLeft(leftResult); } } { SQLExpr rightResult = exportParameter(parameters, x.getRight()); if (rightResult != x.getRight()) { x.setRight(rightResult); } } }
public static Object getScriptValueWithQuote(SQLExpr expr, String quote) throws SqlParseException { if (expr instanceof SQLIdentifierExpr || expr instanceof SQLPropertyExpr || expr instanceof SQLVariantRefExpr) { return "doc['" + expr.toString() + "'].value"; } else if (expr instanceof SQLCharExpr) { return quote + ((SQLCharExpr) expr).getValue() + quote; } else if (expr instanceof SQLIntegerExpr) { return ((SQLIntegerExpr) expr).getValue(); } else if (expr instanceof SQLNumericLiteralExpr) { return ((SQLNumericLiteralExpr) expr).getNumber(); } else if (expr instanceof SQLNullExpr) { return ((SQLNullExpr) expr).toString().toLowerCase(); } else if (expr instanceof SQLBinaryOpExpr) { //zhongshu-comment 该分支由忠树添加 String left = "doc['" + ((SQLBinaryOpExpr) expr).getLeft().toString() + "'].value"; String operator = ((SQLBinaryOpExpr) expr).getOperator().getName(); String right = "doc['" + ((SQLBinaryOpExpr) expr).getRight().toString() + "'].value"; return left + operator + right; } throw new SqlParseException("could not parse sqlBinaryOpExpr need to be identifier/valuable got " + expr.getClass().toString() + " with value:" + expr.toString()); }
private void visitorBinaryRight(SQLBinaryOpExpr x) { if (isPrettyFormat() && x.getRight().hasBeforeComment()) { printlnComments(x.getRight().getBeforeCommentsDirect()); if (x.getRight() instanceof SQLBinaryOpExpr) { SQLBinaryOpExpr right = (SQLBinaryOpExpr) x.getRight(); SQLBinaryOperator rightOp = right.getOperator(); SQLBinaryOperator op = x.getOperator(); printExpr(x.getRight()); if (x.getRight().hasAfterComment() && isPrettyFormat()) { print(' '); printlnComment(x.getRight().getAfterCommentsDirect());
private static Field makeScriptMethodField(SQLBinaryOpExpr binaryExpr, String alias, String tableAlias) throws SqlParseException { List<SQLExpr> params = new ArrayList<>(); String scriptFieldAlias; if (alias == null || alias.equals("")) scriptFieldAlias = binaryExpr.toString(); else scriptFieldAlias = alias; params.add(new SQLCharExpr(scriptFieldAlias)); Object left = getScriptValue(binaryExpr.getLeft()); Object right = getScriptValue(binaryExpr.getRight()); String script = String.format("%s %s %s", left, binaryExpr.getOperator().getName(), right); params.add(new SQLCharExpr(script)); return makeMethodField("script", params, null, null, tableAlias, false); }
public static boolean isValue(SQLExpr expr) { if (expr instanceof SQLLiteralExpr) { return true; } if (expr instanceof SQLVariantRefExpr) { return true; } if (expr instanceof SQLBinaryOpExpr) { SQLBinaryOpExpr binaryOpExpr = (SQLBinaryOpExpr) expr; SQLBinaryOperator op = binaryOpExpr.getOperator(); if (op == SQLBinaryOperator.Add || op == SQLBinaryOperator.Subtract || op == SQLBinaryOperator.Multiply) { return isValue(binaryOpExpr.getLeft()) && isValue(binaryOpExpr.getRight()); } } return false; }
private static SQLMethodInvokeExpr convertBinaryOperatorToMethod(String operator, SQLBinaryOpExpr expr) { SQLMethodInvokeExpr methodInvokeExpr = new SQLMethodInvokeExpr(operator, null); methodInvokeExpr.addParameter(expr.getLeft()); methodInvokeExpr.addParameter(expr.getRight()); return methodInvokeExpr; }
if (item instanceof SQLBinaryOpExpr) { SQLBinaryOpExpr binaryOpItem = (SQLBinaryOpExpr) item; exportParameter(mergedListParams, binaryOpItem.getRight());
private boolean explanSpecialCondWithBothSidesAreLiterals(SQLBinaryOpExpr bExpr, Where where) throws SqlParseException { if ((bExpr.getLeft() instanceof SQLNumericLiteralExpr || bExpr.getLeft() instanceof SQLCharExpr) && (bExpr.getRight() instanceof SQLNumericLiteralExpr || bExpr.getRight() instanceof SQLCharExpr) ) { SQLMethodInvokeExpr sqlMethodInvokeExpr = new SQLMethodInvokeExpr("script", null); String operator = bExpr.getOperator().getName(); if (operator.equals("=")) { operator = "=="; } sqlMethodInvokeExpr.addParameter( new SQLCharExpr(Util.expr2Object(bExpr.getLeft(), "'") + " " + operator + " " + Util.expr2Object(bExpr.getRight(), "'")) ); explanCond("AND", sqlMethodInvokeExpr, where); return true; } return false; }
private static int paramCount(SQLExpr x) { if (x instanceof SQLName) { return 1; } if (x instanceof SQLMethodInvokeExpr) { List<SQLExpr> params = ((SQLMethodInvokeExpr) x).getParameters(); int paramCount = 1; for (SQLExpr param : params) { paramCount += paramCount(param); } return paramCount; } if (x instanceof SQLAggregateExpr) { List<SQLExpr> params = ((SQLAggregateExpr) x).getArguments(); int paramCount = 1; for (SQLExpr param : params) { paramCount += paramCount(param); } return paramCount; } if (x instanceof SQLBinaryOpExpr) { return paramCount(((SQLBinaryOpExpr) x).getLeft()) + paramCount(((SQLBinaryOpExpr) x).getRight()); } return 1; }
public boolean visit(SQLBinaryOpExpr x) { SQLExpr left = x.getLeft(); SQLExpr right = x.getRight();
return new SQLBinaryOpExpr(binaryOpExpr.getLeft(), notOp, binaryOpExpr.getRight());
SQLBinaryOpExpr on_ab_binaryOpExpr = (SQLBinaryOpExpr) on_ab; if (on_ab_binaryOpExpr.getLeft() instanceof SQLPropertyExpr && on_ab_binaryOpExpr.getRight() instanceof SQLPropertyExpr) { String leftOwnerName = ((SQLPropertyExpr) on_ab_binaryOpExpr.getLeft()).getOwnernName(); String rightOwnerName = ((SQLPropertyExpr) on_ab_binaryOpExpr.getRight()).getOwnernName();
|| binaryOpExpr.getOperator() == SQLBinaryOperator.GreaterThan) { if (binaryOpExpr.getLeft() instanceof SQLIntegerExpr && binaryOpExpr.getRight() instanceof SQLIntegerExpr) { isSimpleConstExpr = true;
SQLBinaryOpExpr binaryOpExpr = (SQLBinaryOpExpr) parent; boolean isJoinCondition = binaryOpExpr.getLeft() instanceof SQLName && binaryOpExpr.getRight() instanceof SQLName; if (isJoinCondition) { return false;
public void parseWhere(SQLExpr expr, Where where) throws SqlParseException { /* zhongshu-comment SQLBinaryOpExpr举例: eg1:a = 1 eg2:a = 1 AND b = 2 OR c = 3 */ if (expr instanceof SQLBinaryOpExpr) { SQLBinaryOpExpr bExpr = (SQLBinaryOpExpr) expr; if (explanSpecialCondWithBothSidesAreLiterals(bExpr, where)) { return; } if (explanSpecialCondWithBothSidesAreProperty(bExpr, where)) { return; } } if (expr instanceof SQLBinaryOpExpr && !isCond((SQLBinaryOpExpr) expr)) { SQLBinaryOpExpr bExpr = (SQLBinaryOpExpr) expr; routeCond(bExpr, bExpr.getLeft(), where); routeCond(bExpr, bExpr.getRight(), where); } else if (expr instanceof SQLNotExpr) { parseWhere(((SQLNotExpr) expr).getExpr(), where); negateWhere(where); } else { explanCond("AND", expr, where); } }
final SQLExpr right = x.getRight();
if (binaryOpWhere.getOperator() == SQLBinaryOperator.LessThanOrEqual) { SQLExpr left = binaryOpWhere.getLeft(); SQLExpr right = binaryOpWhere.getRight(); if (left instanceof SQLIdentifierExpr && ((SQLIdentifierExpr) left).getName().equalsIgnoreCase("ROWNUM")