This commit is contained in:
wenshao
2013-07-30 23:44:01 +08:00
parent 21c681dd0f
commit d14fde6f91
8 changed files with 75 additions and 128 deletions
@@ -20,7 +20,6 @@ import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
import com.alibaba.druid.sql.visitor.ParameterizedVisitor;
@@ -50,25 +49,17 @@ public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor implements P
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);
x = ParameterizedOutputVisitorUtils.merge(this, x);
return super.visit(x);
}
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLIntegerExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNumberExpr x) {
@@ -76,9 +67,7 @@ public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor implements P
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLCharExpr x) {
@@ -86,9 +75,7 @@ public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor implements P
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNCharExpr x) {
@@ -96,9 +83,7 @@ public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor implements P
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
}
@@ -21,7 +21,6 @@ import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
@@ -97,25 +96,17 @@ public class MySqlParameterizedOutputVisitor extends MySqlOutputVisitor implemen
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);
x = ParameterizedOutputVisitorUtils.merge(this, x);
return super.visit(x);
}
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLIntegerExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNumberExpr x) {
@@ -123,9 +114,7 @@ public class MySqlParameterizedOutputVisitor extends MySqlOutputVisitor implemen
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLCharExpr x) {
@@ -133,9 +122,7 @@ public class MySqlParameterizedOutputVisitor extends MySqlOutputVisitor implemen
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNCharExpr x) {
@@ -143,9 +130,7 @@ public class MySqlParameterizedOutputVisitor extends MySqlOutputVisitor implemen
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
protected void printValuesList(MySqlInsertStatement x) {
@@ -20,7 +20,6 @@ import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
import com.alibaba.druid.sql.visitor.ParameterizedVisitor;
@@ -54,25 +53,17 @@ public class OracleParameterizedOutputVisitor extends OracleOutputVisitor implem
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);
x = ParameterizedOutputVisitorUtils.merge(this, x);
return super.visit(x);
}
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLIntegerExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNumberExpr x) {
@@ -90,9 +81,7 @@ public class OracleParameterizedOutputVisitor extends OracleOutputVisitor implem
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNCharExpr x) {
@@ -100,9 +89,7 @@ public class OracleParameterizedOutputVisitor extends OracleOutputVisitor implem
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
}
@@ -20,7 +20,6 @@ import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
import com.alibaba.druid.sql.visitor.ParameterizedVisitor;
@@ -50,25 +49,17 @@ public class PGParameterizedOutputVisitor extends PGOutputVisitor implements Par
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);
x = ParameterizedOutputVisitorUtils.merge(this, x);
return super.visit(x);
}
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLIntegerExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNumberExpr x) {
@@ -76,9 +67,7 @@ public class PGParameterizedOutputVisitor extends PGOutputVisitor implements Par
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLCharExpr x) {
@@ -86,9 +75,7 @@ public class PGParameterizedOutputVisitor extends PGOutputVisitor implements Par
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNCharExpr x) {
@@ -96,9 +83,7 @@ public class PGParameterizedOutputVisitor extends PGOutputVisitor implements Par
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
}
@@ -20,7 +20,6 @@ import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
import com.alibaba.druid.sql.visitor.ParameterizedVisitor;
@@ -46,25 +45,17 @@ public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);
x = ParameterizedOutputVisitorUtils.merge(this, x);
return super.visit(x);
}
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLIntegerExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNumberExpr x) {
@@ -72,9 +63,7 @@ public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLCharExpr x) {
@@ -82,9 +71,7 @@ public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNCharExpr x) {
@@ -92,8 +79,6 @@ public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
}
@@ -20,20 +20,20 @@ import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
public class ParameterizedOutputVisitor extends SQLASTOutputVisitor implements ParameterizedVisitor {
private int replaceCount;
public ParameterizedOutputVisitor() {
this (new StringBuilder());
public ParameterizedOutputVisitor(){
this(new StringBuilder());
}
public ParameterizedOutputVisitor(Appendable appender){
super(appender);
}
public int getReplaceCount() {
return this.replaceCount;
}
@@ -47,25 +47,17 @@ public class ParameterizedOutputVisitor extends SQLASTOutputVisitor implements P
}
public boolean visit(SQLBinaryOpExpr x) {
x = ParameterizedOutputVisitorUtils.merge(x);
x = ParameterizedOutputVisitorUtils.merge(this, x);
return super.visit(x);
}
public boolean visit(SQLNullExpr x) {
print('?');
incrementReplaceCunt();
return false;
}
public boolean visit(SQLIntegerExpr x) {
if (Boolean.TRUE.equals(x.getAttribute(ParameterizedOutputVisitorUtils.ATTR_PARAMS_SKIP))) {
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNumberExpr x) {
@@ -73,9 +65,7 @@ public class ParameterizedOutputVisitor extends SQLASTOutputVisitor implements P
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLCharExpr x) {
@@ -83,9 +73,7 @@ public class ParameterizedOutputVisitor extends SQLASTOutputVisitor implements P
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
public boolean visit(SQLNCharExpr x) {
@@ -93,8 +81,6 @@ public class ParameterizedOutputVisitor extends SQLASTOutputVisitor implements P
return super.visit(x);
}
print('?');
incrementReplaceCunt();
return false;
return ParameterizedOutputVisitorUtils.visit(this, x);
}
}
@@ -22,8 +22,12 @@ import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr;
import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr;
import com.alibaba.druid.sql.ast.expr.SQLNCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNumberExpr;
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
import com.alibaba.druid.sql.dialect.db2.visitor.DB2ParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor;
@@ -86,7 +90,7 @@ public class ParameterizedOutputVisitorUtils {
return new ParameterizedOutputVisitor(out);
}
public static boolean visit(SQLASTOutputVisitor v, SQLInListExpr x) {
public static boolean visit(ParameterizedVisitor v, SQLInListExpr x) {
x.getExpr().accept(v);
if (x.isNot()) {
@@ -98,13 +102,38 @@ public class ParameterizedOutputVisitorUtils {
return false;
}
public static SQLBinaryOpExpr merge(SQLBinaryOpExpr x) {
public static boolean visit(ParameterizedVisitor v, SQLIntegerExpr x) {
v.print('?');
v.incrementReplaceCunt();
return false;
}
public static boolean visit(ParameterizedVisitor v, SQLNumberExpr x) {
v.print('?');
v.incrementReplaceCunt();
return false;
}
public static boolean visit(ParameterizedVisitor v, SQLCharExpr x) {
v.print('?');
v.incrementReplaceCunt();
return false;
}
public static boolean visit(ParameterizedVisitor v, SQLNCharExpr x) {
v.print('?');
v.incrementReplaceCunt();
return false;
}
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 (x.getOperator() == SQLBinaryOperator.Equality //
|| x.getOperator() == SQLBinaryOperator.NotEqual) {
left.putAttribute(ATTR_PARAMS_SKIP, true);
right.putAttribute(ATTR_PARAMS_SKIP, true);
}
@@ -130,7 +159,7 @@ public class ParameterizedOutputVisitorUtils {
continue;
}
}
x = new SQLBinaryOpExpr(x.getLeft(), x.getOperator(), merge((SQLBinaryOpExpr) x.getRight()));
x = new SQLBinaryOpExpr(x.getLeft(), x.getOperator(), merge(v, (SQLBinaryOpExpr) x.getRight()));
x.setParent(parent);
}
@@ -138,7 +167,7 @@ public class ParameterizedOutputVisitorUtils {
}
if (x.getLeft() instanceof SQLBinaryOpExpr) {
x = new SQLBinaryOpExpr(merge((SQLBinaryOpExpr) x.getLeft()), x.getOperator(), x.getRight());
x = new SQLBinaryOpExpr(merge(v, (SQLBinaryOpExpr) x.getLeft()), x.getOperator(), x.getRight());
x.setParent(parent);
}
@@ -152,7 +181,8 @@ public class ParameterizedOutputVisitorUtils {
return leftBinary;
}
if (isLiteralExpr(leftBinary.getLeft()) && leftBinary.getOperator() == SQLBinaryOperator.BooleanOr) {
if (isLiteralExpr(leftBinary.getLeft()) //
&& leftBinary.getOperator() == SQLBinaryOperator.BooleanOr) {
if (mergeEqual(leftBinary.getRight(), right)) {
return leftBinary;
}
@@ -5,4 +5,8 @@ public interface ParameterizedVisitor extends SQLASTVisitor {
int getReplaceCount();
void incrementReplaceCunt();
void print(char value);
void print(String text);
}