From 6fb3248603c493c4fc6f28af91bfbf05895abab2 Mon Sep 17 00:00:00 2001 From: yakolee Date: Thu, 15 May 2014 20:49:19 +0800 Subject: [PATCH] improve output visitor --- .../visitor/SQLServerParameterizedOutputVisitor.java | 9 +++++++++ .../sql/visitor/ParameterizedOutputVisitorUtils.java | 6 ++++++ .../alibaba/druid/sql/visitor/SQLASTOutputVisitor.java | 2 ++ 3 files changed, 17 insertions(+) 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 2653ce3384..74a75774bc 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 @@ -22,6 +22,7 @@ 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.SQLVariantRefExpr; import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils; import com.alibaba.druid.sql.visitor.ParameterizedVisitor; @@ -90,5 +91,13 @@ public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor return ParameterizedOutputVisitorUtils.visit(this, x); } + + public boolean visit(SQLVariantRefExpr x) { + if (!ParameterizedOutputVisitorUtils.checkParameterize(x) || x.getName().equalsIgnoreCase("?")) { + return super.visit(x); + } + + 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 4a329c2a74..1c5560db36 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java @@ -189,6 +189,12 @@ public class ParameterizedOutputVisitorUtils { v.incrementReplaceCunt(); return false; } + + public static boolean visit(ParameterizedVisitor v, SQLVariantRefExpr x) { + v.print('?'); + v.incrementReplaceCunt(); + return false; + } public static SQLBinaryOpExpr merge(ParameterizedVisitor v, SQLBinaryOpExpr x) { SQLExpr left = x.getLeft(); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index cae14c8ca4..d4dac9fd87 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -601,7 +601,9 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab decrementIndent(); } else if (parent instanceof ValuesClause) { println(); + print("("); x.getSubQuery().accept(this); + print(")"); println(); } else { print("(");