public static SQLBinaryOpExpr merge(ParameterizedVisitor v, SQLBinaryOpExpr x) { SQLExpr left = x.getLeft(); SQLExpr right = x.getRight(); SQLObject parent = x.getParent(); if (left instanceof SQLLiteralExpr && right instanceof SQLLiteralExpr) { if (x.getOperator() == SQLBinaryOperator.Equality // || x.getOperator() == SQLBinaryOperator.NotEqual) { if ((left instanceof SQLIntegerExpr) && (right instanceof SQLIntegerExpr)) { if (((SQLIntegerExpr) left).getNumber().intValue() < 100) { left.putAttribute(ATTR_PARAMS_SKIP, true); } if (((SQLIntegerExpr) right).getNumber().intValue() < 100) { right.putAttribute(ATTR_PARAMS_SKIP, true); } } else { left.putAttribute(ATTR_PARAMS_SKIP, true); right.putAttribute(ATTR_PARAMS_SKIP, true); } } return x; } for (; ; ) { if (x.getRight() instanceof SQLBinaryOpExpr) { if (x.getLeft() instanceof SQLBinaryOpExpr) { SQLBinaryOpExpr leftBinaryExpr = (SQLBinaryOpExpr) x.getLeft(); if (leftBinaryExpr.getRight().equals(x.getRight())) { x = leftBinaryExpr; v.incrementReplaceCunt(); continue; } } SQLExpr mergedRight = merge(v, (SQLBinaryOpExpr) x.getRight()); if (mergedRight != x.getRight()) { x = new SQLBinaryOpExpr(x.getLeft(), x.getOperator(), mergedRight); v.incrementReplaceCunt(); } x.setParent(parent); } break; } if (x.getLeft() instanceof SQLBinaryOpExpr) { SQLExpr mergedLeft = merge(v, (SQLBinaryOpExpr) x.getLeft()); if (mergedLeft != x.getLeft()) { x = new SQLBinaryOpExpr(mergedLeft, x.getOperator(), x.getRight()); v.incrementReplaceCunt(); } x.setParent(parent); } // ID = ? OR ID = ? => ID = ? if (x.getOperator() == SQLBinaryOperator.BooleanOr) { if ((left instanceof SQLBinaryOpExpr) && (right instanceof SQLBinaryOpExpr)) { SQLBinaryOpExpr leftBinary = (SQLBinaryOpExpr) x.getLeft(); SQLBinaryOpExpr rightBinary = (SQLBinaryOpExpr) x.getRight(); if (mergeEqual(leftBinary, rightBinary)) { v.incrementReplaceCunt(); return leftBinary; } if (isLiteralExpr(leftBinary.getLeft()) // && leftBinary.getOperator() == SQLBinaryOperator.BooleanOr) { if (mergeEqual(leftBinary.getRight(), right)) { v.incrementReplaceCunt(); return leftBinary; } } } } return x; }