From d14fde6f91ee05396775894d96bfc5d8450270b4 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 30 Jul 2013 23:44:01 +0800 Subject: [PATCH] refactor --- .../DB2ParameterizedOutputVisitor.java | 25 +++-------- .../MySqlParameterizedOutputVisitor.java | 25 +++-------- .../OracleParameterizedOutputVisitor.java | 21 ++------- .../visitor/PGParameterizedOutputVisitor.java | 25 +++-------- .../SQLServerParameterizedOutputVisitor.java | 25 +++-------- .../visitor/ParameterizedOutputVisitor.java | 34 +++++--------- .../ParameterizedOutputVisitorUtils.java | 44 ++++++++++++++++--- .../sql/visitor/ParameterizedVisitor.java | 4 ++ 8 files changed, 75 insertions(+), 128 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2ParameterizedOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2ParameterizedOutputVisitor.java index c1bc7c7036..7f3d9d0970 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2ParameterizedOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2ParameterizedOutputVisitor.java @@ -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); } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlParameterizedOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlParameterizedOutputVisitor.java index e3698f6e37..3826f4d0cb 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlParameterizedOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlParameterizedOutputVisitor.java @@ -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) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleParameterizedOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleParameterizedOutputVisitor.java index 355134ef98..a13b77c4de 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleParameterizedOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleParameterizedOutputVisitor.java @@ -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); } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGParameterizedOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGParameterizedOutputVisitor.java index e99d27de5e..6baabdb793 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGParameterizedOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGParameterizedOutputVisitor.java @@ -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); } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerParameterizedOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerParameterizedOutputVisitor.java index 3a9a9a8578..2e5047daa5 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerParameterizedOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerParameterizedOutputVisitor.java @@ -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); } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitor.java index 15c687f6a8..98ccdfcf89 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitor.java @@ -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); } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java index d75ebb4162..3093ffc6e4 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java @@ -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; } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedVisitor.java index 19473b0b1b..0e60f3bb93 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedVisitor.java @@ -5,4 +5,8 @@ public interface ParameterizedVisitor extends SQLASTVisitor { int getReplaceCount(); void incrementReplaceCunt(); + + void print(char value); + + void print(String text); }