diff --git a/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2ExportParameterVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2ExportParameterVisitor.java index 73b310c953..3833ed2d8c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2ExportParameterVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2ExportParameterVisitor.java @@ -28,7 +28,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectItem; import com.alibaba.druid.sql.visitor.ExportParameterVisitor; import com.alibaba.druid.sql.visitor.ExportParameterVisitorUtils; -public class DB2ExportParameterVisitor extends DB2ParameterizedOutputVisitor implements ExportParameterVisitor { +public class DB2ExportParameterVisitor extends DB2OutputVisitor implements ExportParameterVisitor { /** @@ -37,7 +37,7 @@ public class DB2ExportParameterVisitor extends DB2ParameterizedOutputVisitor imp private final boolean requireParameterizedOutput; public DB2ExportParameterVisitor(final List parameters,final Appendable appender,final boolean wantParameterizedOutput){ - super(appender); + super(appender, true); this.parameters = parameters; this.requireParameterizedOutput = wantParameterizedOutput; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2OutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2OutputVisitor.java index a44f25933f..fc58862730 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2OutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2OutputVisitor.java @@ -30,6 +30,10 @@ public class DB2OutputVisitor extends SQLASTOutputVisitor implements DB2ASTVisit super(appender); } + public DB2OutputVisitor(Appendable appender, boolean parameterized){ + super(appender, parameterized); + } + @Override public boolean visit(DB2SelectQueryBlock x) { this.visit((SQLSelectQueryBlock) x); 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 deleted file mode 100644 index 23b0c6b0ea..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/db2/visitor/DB2ParameterizedOutputVisitor.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.db2.visitor; - -import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; -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; - -public class DB2ParameterizedOutputVisitor extends DB2OutputVisitor implements ParameterizedVisitor { - - private int replaceCount; - - public DB2ParameterizedOutputVisitor(){ - this(new StringBuilder()); - } - - public DB2ParameterizedOutputVisitor(Appendable appender){ - super(appender); - } - - public int getReplaceCount() { - return this.replaceCount; - } - - public void incrementReplaceCunt() { - replaceCount++; - } - - public boolean visit(SQLInListExpr x) { - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLBinaryOpExpr x) { - x = ParameterizedOutputVisitorUtils.merge(this, x); - - return super.visit(x); - } - - public boolean visit(SQLIntegerExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNumberExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNullExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlExportParameterVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlExportParameterVisitor.java index e99c9193d2..0a2216b7b9 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlExportParameterVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlExportParameterVisitor.java @@ -29,7 +29,7 @@ import com.alibaba.druid.sql.ast.SQLLimit; import com.alibaba.druid.sql.visitor.ExportParameterVisitor; import com.alibaba.druid.sql.visitor.ExportParameterVisitorUtils; -public class MySqlExportParameterVisitor extends MySqlParameterizedOutputVisitor implements ExportParameterVisitor { +public class MySqlExportParameterVisitor extends MySqlOutputVisitor implements ExportParameterVisitor { /** * true= if require parameterized sql output @@ -38,7 +38,7 @@ public class MySqlExportParameterVisitor extends MySqlParameterizedOutputVisitor public MySqlExportParameterVisitor(List parameters, Appendable appender, boolean wantParameterizedOutput){ - super(appender); + super(appender, true); this.parameters = parameters; this.requireParameterizedOutput = wantParameterizedOutput; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index 4eed2117f6..1701b9016c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -15,8 +15,10 @@ */ package com.alibaba.druid.sql.dialect.mysql.visitor; +import java.security.AccessControlException; import java.util.List; import java.util.Map; +import java.util.Properties; import com.alibaba.druid.sql.ast.SQLCommentHint; import com.alibaba.druid.sql.ast.SQLDataType; @@ -27,25 +29,8 @@ import com.alibaba.druid.sql.ast.SQLParameter; import com.alibaba.druid.sql.ast.SQLSetQuantifier; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.SQLSubPartitionBy; -import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; -import com.alibaba.druid.sql.ast.expr.SQLCharExpr; -import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; -import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLAssignItem; -import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; -import com.alibaba.druid.sql.ast.statement.SQLCharacterDataType; -import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint; -import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; -import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; -import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; -import com.alibaba.druid.sql.ast.statement.SQLIfStatement; -import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; -import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; -import com.alibaba.druid.sql.ast.statement.SQLShowTablesStatement; +import com.alibaba.druid.sql.ast.expr.*; +import com.alibaba.druid.sql.ast.statement.*; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlIgnoreIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; @@ -163,6 +148,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUnlockTablesStatem import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateTableSource; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MysqlDeallocatePrepareStatement; +import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; import com.alibaba.druid.util.JdbcConstants; @@ -172,10 +158,94 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV this.dbType = JdbcConstants.MYSQL; } + private boolean shardingSupport = true; + public MySqlOutputVisitor(Appendable appender){ super(appender); } + public MySqlOutputVisitor(Appendable appender, boolean parameterized){ + super(appender, parameterized); + + try { + configFromProperty(System.getProperties()); + } catch (AccessControlException e) { + // skip + } + } + + public void configFromProperty(Properties properties) { + if (parameterized) { + String property = properties.getProperty("druid.parameterized.shardingSupport"); + if ("true".equals(property)) { + this.setShardingSupport(true); + } else if ("false".equals(property)) { + this.setShardingSupport(false); + } + } + } + + public boolean isShardingSupport() { + return shardingSupport; + } + + public void setShardingSupport(boolean shardingSupport) { + this.shardingSupport = shardingSupport; + } + + public boolean visit(SQLIdentifierExpr x) { + if (!parameterized) { + return super.visit(x); + } + + final String name = x.getName(); + boolean computeSharding = isShardingSupport(); + if (computeSharding) { + SQLObject parent = x.getParent(); + computeSharding = parent instanceof SQLExprTableSource || parent instanceof SQLPropertyExpr; + } + + if (computeSharding) { + int pos = name.lastIndexOf('_'); + if (pos != -1 && pos != name.length() - 1) { + boolean isNumber = true; + for (int i = pos + 1; i < name.length(); ++i) { + char ch = name.charAt(i); + if (ch < '0' || ch > '9') { + isNumber = false; + break; + } + } + if (isNumber) { + String realName = name.substring(0, pos); + print0(realName); + incrementReplaceCunt(); + return false; + } + } + + int numberCount = 0; + for (int i = name.length() - 1; i >= 0; --i) { + char ch = name.charAt(i); + if (ch < '0' || ch > '9') { + break; + } else { + numberCount++; + } + } + + if (numberCount > 1) { + int numPos = name.length() - numberCount; + String realName = name.substring(0, numPos); + print0(realName); + incrementReplaceCunt(); + return false; + } + } + print0(name); + return false; + } + @Override public boolean visit(SQLSelectQueryBlock select) { if (select instanceof MySqlSelectQueryBlock) { @@ -617,6 +687,11 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } public boolean visit(SQLCharExpr x) { + if (this.parameterized + && ParameterizedOutputVisitorUtils.checkParameterize(x)) { + return ParameterizedOutputVisitorUtils.visit(this, x); + } + print('\''); String text = x.getText(); @@ -1014,18 +1089,31 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } protected void printValuesList(MySqlInsertStatement x) { + List valuesList = x.getValuesList(); + + if (parameterized) { + print0(ucase ? "VALUES " : "values "); + incrementIndent(); + valuesList.get(0).accept(this); + decrementIndent(); + if (valuesList.size() > 1) { + this.incrementReplaceCunt(); + } + return; + } + print0(ucase ? "VALUES " : "values "); if (x.getValuesList().size() > 1) { incrementIndent(); } - for (int i = 0, size = x.getValuesList().size(); i < size; ++i) { + for (int i = 0, size = valuesList.size(); i < size; ++i) { if (i != 0) { print(','); println(); } - x.getValuesList().get(i).accept(this); + valuesList.get(i).accept(this); } - if (x.getValuesList().size() > 1) { + if (valuesList.size() > 1) { decrementIndent(); } } @@ -2457,7 +2545,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } else { print0(ucase ? "ALTER TABLE " : "alter table "); } - x.getName().accept(this); + printTableSourceExpr(x.getName()); incrementIndent(); for (int i = 0; i < x.getItems().size(); ++i) { SQLAlterTableItem item = x.getItems().get(i); @@ -2827,6 +2915,10 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV @Override public boolean visit(MySqlCharExpr x) { + if (parameterized && ParameterizedOutputVisitorUtils.checkParameterize(x)) { + return ParameterizedOutputVisitorUtils.visit(this, x); + } + print0(x.toString()); return false; } 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 deleted file mode 100644 index 5518c6d792..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlParameterizedOutputVisitor.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.mysql.visitor; - -import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.ast.SQLName; -import com.alibaba.druid.sql.ast.SQLObject; -import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; -import com.alibaba.druid.sql.ast.expr.SQLCharExpr; -import com.alibaba.druid.sql.ast.expr.SQLHexExpr; -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; -import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; -import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils; -import com.alibaba.druid.sql.visitor.ParameterizedVisitor; - -import java.security.AccessControlException; -import java.util.List; -import java.util.Properties; - -public class MySqlParameterizedOutputVisitor extends MySqlOutputVisitor implements ParameterizedVisitor { - - private boolean shardingSupport = true; - - private int replaceCount; - - public MySqlParameterizedOutputVisitor(){ - this(new StringBuilder()); - } - - public MySqlParameterizedOutputVisitor(Appendable appender){ - super(appender); - - try { - configFromProperty(System.getProperties()); - } catch (AccessControlException e) { - } - } - - public void configFromProperty(Properties properties) { - { - String property = properties.getProperty("druid.parameterized.shardingSupport"); - if ("true".equals(property)) { - this.setShardingSupport(true); - } else if ("false".equals(property)) { - this.setShardingSupport(false); - } - } - } - - public boolean isShardingSupport() { - return shardingSupport; - } - - public void setShardingSupport(boolean shardingSupport) { - this.shardingSupport = shardingSupport; - } - - public int getReplaceCount() { - return this.replaceCount; - } - - public void incrementReplaceCunt() { - replaceCount++; - } - - public boolean visit(SQLInListExpr x) { - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLIdentifierExpr x) { - final String name = x.getName(); - boolean computeSharding = isShardingSupport(); - if (computeSharding) { - SQLObject parent = x.getParent(); - computeSharding = parent instanceof SQLExprTableSource || parent instanceof SQLPropertyExpr; - } - - if (computeSharding) { - int pos = name.lastIndexOf('_'); - if (pos != -1 && pos != name.length() - 1) { - boolean isNumber = true; - for (int i = pos + 1; i < name.length(); ++i) { - char ch = name.charAt(i); - if (ch < '0' || ch > '9') { - isNumber = false; - break; - } - } - if (isNumber) { - String realName = name.substring(0, pos); - print0(realName); - incrementReplaceCunt(); - return false; - } - } - - int numberCount = 0; - for (int i = name.length() - 1; i >= 0; --i) { - char ch = name.charAt(i); - if (ch < '0' || ch > '9') { - break; - } else { - numberCount++; - } - } - - if (numberCount > 1) { - int numPos = name.length() - numberCount; - String realName = name.substring(0, numPos); - print0(realName); - incrementReplaceCunt(); - return false; - } - } - print0(name); - return false; - } - - public boolean visit(SQLBinaryOpExpr x) { - x = ParameterizedOutputVisitorUtils.merge(this, x); - - return super.visit(x); - } - - public boolean visit(SQLIntegerExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNumberExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNullExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLHexExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(MySqlCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - protected void printValuesList(MySqlInsertStatement x) { - List valuesList = x.getValuesList(); - print0(ucase ? "VALUES " : "values "); - incrementIndent(); - valuesList.get(0).accept(this); - decrementIndent(); - if (valuesList.size() > 1) { - this.incrementReplaceCunt(); - } - } -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index 3c3919f076..f52544a7c1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java @@ -901,6 +901,12 @@ public class OracleStatementParser extends SQLStatementParser { OracleAlterTableDropPartition item = new OracleAlterTableDropPartition(); item.setName(this.exprParser.name()); stmt.addItem(item); + } else if (lexer.token() == Token.INDEX) { + lexer.nextToken(); + SQLName indexName = this.exprParser.name(); + SQLAlterTableDropIndex item = new SQLAlterTableDropIndex(); + item.setIndexName(indexName); + stmt.addItem(item); } else { throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index 19608221a0..b44d4b8792 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -1695,7 +1695,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS @Override public boolean visit(SQLAlterTableStatement x) { print0(ucase ? "ALTER TABLE " : "alter table "); - x.getName().accept(this); + printTableSourceExpr(x.getName()); incrementIndent(); for (SQLAlterTableItem item : x.getItems()) { println(); 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 76817e05b7..458796567e 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 @@ -27,28 +27,20 @@ import com.alibaba.druid.sql.visitor.ParameterizedVisitor; public class OracleParameterizedOutputVisitor extends OracleOutputVisitor implements ParameterizedVisitor { - private int replaceCount; - public OracleParameterizedOutputVisitor(){ this(new StringBuilder()); + this.parameterized = true; } public OracleParameterizedOutputVisitor(Appendable appender){ super(appender); + this.parameterized = true; } public OracleParameterizedOutputVisitor(Appendable appender, boolean printPostSemi){ super(appender, printPostSemi); } - public int getReplaceCount() { - return this.replaceCount; - } - - public void incrementReplaceCunt() { - replaceCount++; - } - public boolean visit(SQLInListExpr x) { return ParameterizedOutputVisitorUtils.visit(this, x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/phoenix/visitor/PhoenixOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/phoenix/visitor/PhoenixOutputVisitor.java index 834ff315de..63923da167 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/phoenix/visitor/PhoenixOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/phoenix/visitor/PhoenixOutputVisitor.java @@ -24,4 +24,8 @@ public class PhoenixOutputVisitor extends SQLASTOutputVisitor implements Phoenix public PhoenixOutputVisitor(Appendable appender){ super(appender); } + + public PhoenixOutputVisitor(Appendable appender, boolean parameterized){ + super(appender, parameterized); + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/phoenix/visitor/PhoenixParameterizedOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/phoenix/visitor/PhoenixParameterizedOutputVisitor.java deleted file mode 100644 index 77157bc708..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/phoenix/visitor/PhoenixParameterizedOutputVisitor.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.phoenix.visitor; - -import com.alibaba.druid.sql.visitor.ParameterizedVisitor; - -/** - * Created by wenshao on 16/9/13. - */ -public class PhoenixParameterizedOutputVisitor extends PhoenixOutputVisitor implements ParameterizedVisitor { - private int replaceCount; - - public PhoenixParameterizedOutputVisitor(){ - this(new StringBuilder()); - } - - public PhoenixParameterizedOutputVisitor(Appendable appender){ - super(appender); - } - - public int getReplaceCount() { - return this.replaceCount; - } - - public void incrementReplaceCunt() { - replaceCount++; - } -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGExportParameterVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGExportParameterVisitor.java index 50d820d1ee..c02fb5929a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGExportParameterVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGExportParameterVisitor.java @@ -28,7 +28,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectItem; import com.alibaba.druid.sql.visitor.ExportParameterVisitor; import com.alibaba.druid.sql.visitor.ExportParameterVisitorUtils; -public class PGExportParameterVisitor extends PGParameterizedOutputVisitor implements ExportParameterVisitor { +public class PGExportParameterVisitor extends PGOutputVisitor implements ExportParameterVisitor { /** * true= if require parameterized sql output @@ -36,7 +36,7 @@ public class PGExportParameterVisitor extends PGParameterizedOutputVisitor imple private final boolean requireParameterizedOutput; public PGExportParameterVisitor(final List parameters,final Appendable appender,final boolean wantParameterizedOutput){ - super(appender); + super(appender, true); this.parameters = parameters; this.requireParameterizedOutput = wantParameterizedOutput; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java index 7ccd24664c..f04fdcb657 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java @@ -52,6 +52,10 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor super(appender); } + public PGOutputVisitor(Appendable appender, boolean parameterized){ + super(appender, parameterized); + } + @Override public void endVisit(WindowClause 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 deleted file mode 100644 index d81490d527..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGParameterizedOutputVisitor.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.postgresql.visitor; - -import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; -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; - -public class PGParameterizedOutputVisitor extends PGOutputVisitor implements ParameterizedVisitor { - - private int replaceCount; - - public PGParameterizedOutputVisitor(){ - this(new StringBuilder()); - } - - public PGParameterizedOutputVisitor(Appendable appender){ - super(appender); - } - - public int getReplaceCount() { - return this.replaceCount; - } - - public void incrementReplaceCunt() { - replaceCount++; - } - - public boolean visit(SQLInListExpr x) { - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLBinaryOpExpr x) { - x = ParameterizedOutputVisitorUtils.merge(this, x); - - return super.visit(x); - } - - public boolean visit(SQLIntegerExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNumberExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNullExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/MSSQLServerExportParameterVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/MSSQLServerExportParameterVisitor.java index 3cd037f080..aa3efc8f7c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/MSSQLServerExportParameterVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/MSSQLServerExportParameterVisitor.java @@ -28,7 +28,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectItem; import com.alibaba.druid.sql.visitor.ExportParameterVisitor; import com.alibaba.druid.sql.visitor.ExportParameterVisitorUtils; -public class MSSQLServerExportParameterVisitor extends SQLServerParameterizedOutputVisitor implements ExportParameterVisitor { +public class MSSQLServerExportParameterVisitor extends SQLServerOutputVisitor implements ExportParameterVisitor { /** * true= if require parameterized sql output @@ -36,7 +36,7 @@ public class MSSQLServerExportParameterVisitor extends SQLServerParameterizedOut private final boolean requireParameterizedOutput; public MSSQLServerExportParameterVisitor(final List parameters,final Appendable appender,final boolean wantParameterizedOutput){ - super(appender); + super(appender, true); this.parameters = parameters; this.requireParameterizedOutput = wantParameterizedOutput; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java index a63e456597..a43ff32e68 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java @@ -47,6 +47,10 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe super(appender); } + public SQLServerOutputVisitor(Appendable appender, boolean parameterized){ + super(appender, parameterized); + } + public boolean visit(SQLServerSelectQueryBlock x) { print0(ucase ? "SELECT " : "select "); 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 deleted file mode 100644 index 695e009a40..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerParameterizedOutputVisitor.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.sqlserver.visitor; - -import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; -import com.alibaba.druid.sql.ast.expr.SQLCharExpr; -import com.alibaba.druid.sql.ast.expr.SQLHexExpr; -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.SQLVariantRefExpr; -import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils; -import com.alibaba.druid.sql.visitor.ParameterizedVisitor; - -public class SQLServerParameterizedOutputVisitor extends SQLServerOutputVisitor implements ParameterizedVisitor { - - private int replaceCount; - - public SQLServerParameterizedOutputVisitor(Appendable appender){ - super(appender); - } - - public int getReplaceCount() { - return this.replaceCount; - } - - public void incrementReplaceCunt() { - replaceCount++; - } - - public boolean visit(SQLInListExpr x) { - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLBinaryOpExpr x) { - x = ParameterizedOutputVisitorUtils.merge(this, x); - - return super.visit(x); - } - - public boolean visit(SQLIntegerExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNumberExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNullExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - 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); - } - - public boolean visit(SQLHexExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index 8d53cd3217..363e8fe866 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -26,79 +26,9 @@ import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddConstraint; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddIndex; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddPartition; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAlterColumn; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableLifecycle; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropColumnItem; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropConstraint; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPartition; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableLifecycle; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableRename; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableRenameColumn; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableRenamePartition; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableSetComment; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableSetLifecycle; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableTouch; -import com.alibaba.druid.sql.ast.statement.SQLAlterViewRenameStatement; -import com.alibaba.druid.sql.ast.statement.SQLAssignItem; -import com.alibaba.druid.sql.ast.statement.SQLCallStatement; -import com.alibaba.druid.sql.ast.statement.SQLCheck; -import com.alibaba.druid.sql.ast.statement.SQLCloseStatement; -import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; -import com.alibaba.druid.sql.ast.statement.SQLCommentStatement; -import com.alibaba.druid.sql.ast.statement.SQLConstraint; -import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement; -import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; -import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLCreateTriggerStatement; +import com.alibaba.druid.sql.ast.statement.*; import com.alibaba.druid.sql.ast.statement.SQLCreateTriggerStatement.TriggerEvent; import com.alibaba.druid.sql.ast.statement.SQLCreateTriggerStatement.TriggerType; -import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; -import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropDatabaseStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropFunctionStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropIndexStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropProcedureStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropTableSpaceStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropTriggerStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropUserStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; -import com.alibaba.druid.sql.ast.statement.SQLErrorLoggingClause; -import com.alibaba.druid.sql.ast.statement.SQLExplainStatement; -import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; -import com.alibaba.druid.sql.ast.statement.SQLFetchStatement; -import com.alibaba.druid.sql.ast.statement.SQLGrantStatement; -import com.alibaba.druid.sql.ast.statement.SQLInsertInto; -import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; -import com.alibaba.druid.sql.ast.statement.SQLMergeStatement; -import com.alibaba.druid.sql.ast.statement.SQLObjectType; -import com.alibaba.druid.sql.ast.statement.SQLOpenStatement; -import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; -import com.alibaba.druid.sql.ast.statement.SQLReleaseSavePointStatement; -import com.alibaba.druid.sql.ast.statement.SQLRevokeStatement; -import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement; -import com.alibaba.druid.sql.ast.statement.SQLSavePointStatement; -import com.alibaba.druid.sql.ast.statement.SQLSelect; -import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; -import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; -import com.alibaba.druid.sql.ast.statement.SQLSetStatement; -import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; -import com.alibaba.druid.sql.ast.statement.SQLTableSource; -import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement; -import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; -import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; -import com.alibaba.druid.sql.ast.statement.SQLUseStatement; import org.apache.ibatis.jdbc.SQL; public class SQLStatementParser extends SQLParser { @@ -1146,6 +1076,12 @@ public class SQLStatementParser extends SQLParser { SQLAlterTableDropPartition dropPartition = parseAlterTableDropPartition(ifNotExists); stmt.addItem(dropPartition); + } else if (lexer.token() == Token.INDEX) { + lexer.nextToken(); + SQLName indexName = this.exprParser.name(); + SQLAlterTableDropIndex item = new SQLAlterTableDropIndex(); + item.setIndexName(indexName); + stmt.addItem(item); } else { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/ExportParameterizedOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/ExportParameterizedOutputVisitor.java index 1b8fb381af..e4eedebf63 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/ExportParameterizedOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/ExportParameterizedOutputVisitor.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.visitor; import java.util.ArrayList; import java.util.List; -public class ExportParameterizedOutputVisitor extends ParameterizedOutputVisitor implements ExportParameterVisitor { +public class ExportParameterizedOutputVisitor extends SQLASTOutputVisitor implements ExportParameterVisitor { /** * true= if require parameterized sql output @@ -26,7 +26,7 @@ public class ExportParameterizedOutputVisitor extends ParameterizedOutputVisitor private final boolean requireParameterizedOutput; public ExportParameterizedOutputVisitor(final List parameters,final Appendable appender,final boolean wantParameterizedOutput){ - super(appender); + super(appender, true); this.parameters = parameters; this.requireParameterizedOutput = wantParameterizedOutput; } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitor.java deleted file mode 100644 index 6657c1b772..0000000000 --- a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitor.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 1999-2101 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.visitor; - -import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; -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(Appendable appender){ - super(appender); - } - - public int getReplaceCount() { - return this.replaceCount; - } - - public void incrementReplaceCunt() { - replaceCount++; - } - - public boolean visit(SQLInListExpr x) { - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLBinaryOpExpr x) { - x = ParameterizedOutputVisitorUtils.merge(this, x); - - return super.visit(x); - } - - public boolean visit(SQLIntegerExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNumberExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNCharExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - return super.visit(x); - } - - return ParameterizedOutputVisitorUtils.visit(this, x); - } - - public boolean visit(SQLNullExpr x) { - if (!ParameterizedOutputVisitorUtils.checkParameterize(x)) { - 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 7e86dcbf14..4873e544cc 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java @@ -34,13 +34,13 @@ import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; -import com.alibaba.druid.sql.dialect.db2.visitor.DB2ParameterizedOutputVisitor; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; +import com.alibaba.druid.sql.dialect.db2.visitor.DB2OutputVisitor; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleParameterizedOutputVisitor; -import com.alibaba.druid.sql.dialect.phoenix.visitor.PhoenixParameterizedOutputVisitor; -import com.alibaba.druid.sql.dialect.postgresql.visitor.PGParameterizedOutputVisitor; +import com.alibaba.druid.sql.dialect.phoenix.visitor.PhoenixOutputVisitor; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerTop; -import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerParameterizedOutputVisitor; +import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerOutputVisitor; import com.alibaba.druid.sql.parser.SQLParserUtils; import com.alibaba.druid.sql.parser.SQLStatementParser; import com.alibaba.druid.util.JdbcUtils; @@ -79,35 +79,29 @@ public class ParameterizedOutputVisitorUtils { return new OracleParameterizedOutputVisitor(out); } - if (JdbcUtils.MYSQL.equals(dbType)) { - return new MySqlParameterizedOutputVisitor(out); - } - - if (JdbcUtils.MARIADB.equals(dbType)) { - return new MySqlParameterizedOutputVisitor(out); - } - - if (JdbcUtils.H2.equals(dbType)) { - return new MySqlParameterizedOutputVisitor(out); + if (JdbcUtils.MYSQL.equals(dbType) + || JdbcUtils.MARIADB.equals(dbType) + || JdbcUtils.H2.equals(dbType)) { + return new MySqlOutputVisitor(out, true); } if (JdbcUtils.POSTGRESQL.equals(dbType)) { - return new PGParameterizedOutputVisitor(out); + return new PGOutputVisitor(out, true); } if (JdbcUtils.SQL_SERVER.equals(dbType) || JdbcUtils.JTDS.equals(dbType)) { - return new SQLServerParameterizedOutputVisitor(out); + return new SQLServerOutputVisitor(out, true); } if (JdbcUtils.DB2.equals(dbType)) { - return new DB2ParameterizedOutputVisitor(out); + return new DB2OutputVisitor(out, true); } if (JdbcUtils.PHOENIX.equals(dbType)) { - return new PhoenixParameterizedOutputVisitor(out); + return new PhoenixOutputVisitor(out, true); } - return new ParameterizedOutputVisitor(out); + return new SQLASTOutputVisitor(out, true); } public static boolean visit(ParameterizedVisitor v, SQLInListExpr x) { 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 3509a218e0..d05294cf3f 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -35,7 +35,7 @@ import com.alibaba.druid.sql.ast.statement.SQLMergeStatement.MergeInsertClause; import com.alibaba.druid.sql.ast.statement.SQLMergeStatement.MergeUpdateClause; import com.alibaba.druid.util.JdbcConstants; -public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements PrintableVisitor { +public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements ParameterizedVisitor, PrintableVisitor { protected final Appendable appender; private String indent = "\t"; @@ -52,10 +52,19 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab protected Map tableMapping; + protected int replaceCount; + + protected boolean parameterized = false; + public SQLASTOutputVisitor(Appendable appender){ this.appender = appender; } + public SQLASTOutputVisitor(Appendable appender, boolean parameterized){ + this.appender = appender; + this.parameterized = parameterized; + } + public int getParametersSize() { if (parameters == null) { return 0; @@ -64,6 +73,14 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab return this.parameters.size(); } + public int getReplaceCount() { + return this.replaceCount; + } + + public void incrementReplaceCunt() { + replaceCount++; + } + public void addTableMapping(String srcTable, String destTable) { if (tableMapping != null) { tableMapping = new HashMap(); @@ -236,6 +253,10 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab } public boolean visit(SQLBinaryOpExpr x) { + if (this.parameterized) { + x = ParameterizedOutputVisitorUtils.merge(this, x); + } + SQLObject parent = x.getParent(); boolean isRoot = parent instanceof SQLSelectQueryBlock; boolean relational = x.getOperator() == SQLBinaryOperator.BooleanAnd @@ -402,6 +423,11 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab } public boolean visit(SQLCharExpr x) { + if (this.parameterized + && ParameterizedOutputVisitorUtils.checkParameterize(x)) { + return ParameterizedOutputVisitorUtils.visit(this, x); + } + if (x.getText() == null) { print0(ucase ? "NULL" : "null"); } else { @@ -450,6 +476,10 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab } public boolean visit(SQLInListExpr x) { + if (this.parameterized) { + return ParameterizedOutputVisitorUtils.visit(this, x); + } + x.getExpr().accept(this); if (x.isNot()) { @@ -492,6 +522,11 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab } public boolean visit(SQLIntegerExpr x) { + if (this.parameterized + && ParameterizedOutputVisitorUtils.checkParameterize(x)) { + return ParameterizedOutputVisitorUtils.visit(this, x); + } + return SQLASTOutputVisitorUtils.visit(this, x); } @@ -554,6 +589,11 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab } public boolean visit(SQLNCharExpr x) { + if (this.parameterized + && ParameterizedOutputVisitorUtils.checkParameterize(x)) { + return ParameterizedOutputVisitorUtils.visit(this, x); + } + if ((x.getText() == null) || (x.getText().length() == 0)) { print0(ucase ? "NULL" : "null"); } else { @@ -587,11 +627,21 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab } public boolean visit(SQLNullExpr x) { + if (this.parameterized + && ParameterizedOutputVisitorUtils.checkParameterize(x)) { + return ParameterizedOutputVisitorUtils.visit(this, x); + } + print0(ucase ? "NULL" : "null"); return false; } public boolean visit(SQLNumberExpr x) { + if (this.parameterized + && ParameterizedOutputVisitorUtils.checkParameterize(x)) { + return ParameterizedOutputVisitorUtils.visit(this, x); + } + return SQLASTOutputVisitorUtils.visit(this, x); } @@ -1265,6 +1315,10 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab @Override public boolean visit(SQLHexExpr x) { + if (this.parameterized && ParameterizedOutputVisitorUtils.checkParameterize(x)) { + return ParameterizedOutputVisitorUtils.visit(this, x); + } + print0("0x"); print0(x.getHex()); @@ -1881,7 +1935,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab @Override public boolean visit(SQLAlterTableStatement x) { print0(ucase ? "ALTER TABLE " : "alter table "); - x.getName().accept(this); + printTableSourceExpr(x.getName()); incrementIndent(); for (int i = 0; i < x.getItems().size(); ++i) { SQLAlterTableItem item = x.getItems().get(i); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/MappingTest_alterTable.java b/src/test/java/com/alibaba/druid/bvt/sql/MappingTest_alterTable.java new file mode 100644 index 0000000000..c60b0dcfc7 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/MappingTest_alterTable.java @@ -0,0 +1,53 @@ +package com.alibaba.druid.bvt.sql; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.Collections; +import java.util.Map; + +/** + * Created by wenshao on 16/9/25. + */ +public class MappingTest_alterTable extends TestCase { + String sql = "ALTER TABLE user DROP INDEX pk_user;"; + + Map mapping = Collections.singletonMap("user", "user_01"); + + public void test_mapping_createTable() throws Exception { + String result = SQLUtils.refactor(sql, null, mapping); + assertEquals("ALTER TABLE user_01\n" + + "\tDROP INDEX pk_user", result); + } + + public void test_mapping_createTable_mysql() throws Exception { + String result = SQLUtils.refactor(sql, JdbcConstants.MYSQL, mapping); + assertEquals("ALTER TABLE user_01\n" + + "\tDROP INDEX pk_user", result); + } + + public void test_mapping_createTable_oracle() throws Exception { + String result = SQLUtils.refactor(sql, JdbcConstants.ORACLE, mapping); + assertEquals("ALTER TABLE user_01\n" + + "\tDROP INDEX pk_user", result); + } + + public void test_mapping_createTable_pg() throws Exception { + String result = SQLUtils.refactor(sql, JdbcConstants.POSTGRESQL, mapping); + assertEquals("ALTER TABLE user_01\n" + + "\tDROP INDEX pk_user", result); + } + + public void test_mapping_createTable_sqlserver() throws Exception { + String result = SQLUtils.refactor(sql, JdbcConstants.SQL_SERVER, mapping); + assertEquals("ALTER TABLE user_01\n" + + "\tDROP INDEX pk_user", result); + } + + public void test_mapping_createTable_db2() throws Exception { + String result = SQLUtils.refactor(sql, JdbcConstants.DB2, mapping); + assertEquals("ALTER TABLE user_01\n" + + "\tDROP INDEX pk_user", result); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/MappingTest_truncate.java b/src/test/java/com/alibaba/druid/bvt/sql/MappingTest_truncate.java new file mode 100644 index 0000000000..cb655a308e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/MappingTest_truncate.java @@ -0,0 +1,46 @@ +package com.alibaba.druid.bvt.sql; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.Collections; +import java.util.Map; + +/** + * Created by wenshao on 16/9/25. + */ +public class MappingTest_truncate extends TestCase { + private String sql = "truncate table user"; + Map mapping = Collections.singletonMap("user", "user_01"); + + public void test_mapping() throws Exception { + String result = SQLUtils.refactor(sql, null, mapping); + assertEquals("TRUNCATE TABLE user_01", result); + } + + public void test_mapping_mysql() throws Exception { + String result = SQLUtils.refactor(sql, JdbcConstants.MYSQL, mapping); + assertEquals("TRUNCATE TABLE user_01", result); + } + + public void test_mapping_pg() throws Exception { + String result = SQLUtils.refactor(sql, JdbcConstants.POSTGRESQL, mapping); + assertEquals("TRUNCATE TABLE user_01", result); + } + + public void test_mapping_oracle() throws Exception { + String result = SQLUtils.refactor(sql, JdbcConstants.ORACLE, mapping); + assertEquals("TRUNCATE TABLE user_01", result); + } + + public void test_mapping_sqlserver() throws Exception { + String result = SQLUtils.refactor(sql, JdbcConstants.SQL_SERVER, mapping); + assertEquals("TRUNCATE TABLE user_01", result); + } + + public void test_mapping_db2() throws Exception { + String result = SQLUtils.refactor(sql, JdbcConstants.DB2, mapping); + assertEquals("TRUNCATE TABLE user_01", result); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest.java index ea49a9fe6e..1370e64d1b 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest.java @@ -17,22 +17,30 @@ package com.alibaba.druid.bvt.sql.mysql; import java.util.List; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import junit.framework.TestCase; import org.junit.Assert; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleParameterizedOutputVisitor; public class MySqlParameterizedOutputVisitorTest extends TestCase { - public void test_0() throws Exception { validate("SELECT * FROM T WHERE ID IN (?, ?, ?)", "SELECT *\nFROM T\nWHERE ID IN (?)"); + } + + public void test_1() throws Exception { validate("SELECT * FROM T WHERE ID = 5", "SELECT *\nFROM T\nWHERE ID = ?"); + } + + public void test_2() throws Exception { validate("SELECT * FROM T WHERE 1 = 0 AND ID = 5", "SELECT *\nFROM T\nWHERE 1 = 0\n\tAND ID = ?"); + } + + public void test_3() throws Exception { validate("SELECT * FROM T WHERE ID = ? OR ID = ?", "SELECT *\nFROM T\nWHERE ID = ?"); validate("SELECT * FROM T WHERE A.ID = ? OR A.ID = ?", "SELECT *\nFROM T\nWHERE A.ID = ?"); validate("SELECT * FROM T WHERE 1 = 0 OR a.id = ? OR a.id = ? OR a.id = ? OR a.id = ?", @@ -56,7 +64,7 @@ public class MySqlParameterizedOutputVisitorTest extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); stmt.accept(visitor); Assert.assertTrue(visitor.getReplaceCount() > 0); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest2.java index a9892890e5..75046765cb 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest2.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest2.java @@ -17,12 +17,12 @@ package com.alibaba.druid.bvt.sql.mysql; import java.util.List; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import org.junit.Assert; import junit.framework.TestCase; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleParameterizedOutputVisitor; @@ -47,7 +47,7 @@ public class MySqlParameterizedOutputVisitorTest2 extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); stmt.accept(visitor); Assert.assertEquals(expect, out.toString()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/parser/MySqlParserResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/parser/MySqlParserResourceTest.java index b5126417d4..8179c9cd94 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/parser/MySqlParserResourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/parser/MySqlParserResourceTest.java @@ -26,7 +26,6 @@ import junit.framework.TestCase; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.util.Utils; import com.alibaba.druid.util.JdbcUtils; @@ -92,7 +91,7 @@ public class MySqlParserResourceTest extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); statemen.accept(visitor); out.toString(); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java index ca8b613c10..0a38ee4608 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/visitor/MySqlResourceTest.java @@ -26,7 +26,6 @@ import junit.framework.TestCase; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; import com.alibaba.druid.util.Utils; import com.alibaba.druid.util.JdbcUtils; @@ -89,7 +88,7 @@ public class MySqlResourceTest extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); statemen.accept(visitor); System.out.println(out.toString()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsInsertTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsInsertTest.java index 58a17d18e7..b63c8c9576 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsInsertTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsInsertTest.java @@ -20,14 +20,13 @@ import java.io.InputStreamReader; import java.io.Reader; import java.util.List; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import junit.framework.TestCase; import org.junit.Assert; -import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; @@ -79,7 +78,7 @@ public class OdpsInsertTest extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); statemen.accept(visitor); System.out.println(out.toString()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsListResourcesTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsListResourcesTest.java index 49a8d81d04..7108ae5716 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsListResourcesTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsListResourcesTest.java @@ -20,14 +20,13 @@ import java.io.InputStreamReader; import java.io.Reader; import java.util.List; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import junit.framework.TestCase; import org.junit.Assert; -import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; @@ -79,7 +78,7 @@ public class OdpsListResourcesTest extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); statemen.accept(visitor); System.out.println(out.toString()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsMultiInsertTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsMultiInsertTest.java index 47f5a9012c..e2ca3959a5 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsMultiInsertTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsMultiInsertTest.java @@ -20,14 +20,13 @@ import java.io.InputStreamReader; import java.io.Reader; import java.util.List; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import junit.framework.TestCase; import org.junit.Assert; -import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; @@ -79,7 +78,7 @@ public class OdpsMultiInsertTest extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); statemen.accept(visitor); // System.out.println(out.toString()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsResourceTest.java index 0b1019fc40..7397480be5 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsResourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsResourceTest.java @@ -20,14 +20,13 @@ import java.io.InputStreamReader; import java.io.Reader; import java.util.List; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import junit.framework.TestCase; import org.junit.Assert; -import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; @@ -83,7 +82,7 @@ public class OdpsResourceTest extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); statemen.accept(visitor); System.out.println(out.toString()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsSelect_distribute_by_Test.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsSelect_distribute_by_Test.java index 830a4d49fd..699097b09b 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsSelect_distribute_by_Test.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsSelect_distribute_by_Test.java @@ -20,14 +20,13 @@ import java.io.InputStreamReader; import java.io.Reader; import java.util.List; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import junit.framework.TestCase; import org.junit.Assert; -import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; @@ -81,7 +80,7 @@ public class OdpsSelect_distribute_by_Test extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); statemen.accept(visitor); System.out.println(out.toString()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java index e826a33e74..fc98628301 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java @@ -20,12 +20,12 @@ import java.io.InputStreamReader; import java.io.Reader; import java.util.List; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import org.junit.Assert; import com.alibaba.druid.sql.OracleTest; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; import com.alibaba.druid.util.Utils; @@ -85,7 +85,7 @@ public class OracleResourceTest extends OracleTest { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); statemen.accept(visitor); System.out.println(out.toString()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerParameterizedOutputVisitorTest.java b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerParameterizedOutputVisitorTest.java index 7db968e4be..8c7d93c081 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerParameterizedOutputVisitorTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/sqlserver/SQLServerParameterizedOutputVisitorTest.java @@ -24,7 +24,6 @@ import org.junit.Assert; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser; import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerOutputVisitor; -import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerParameterizedOutputVisitor; public class SQLServerParameterizedOutputVisitorTest extends TestCase { @@ -49,7 +48,7 @@ public class SQLServerParameterizedOutputVisitorTest extends TestCase { public static String outputSqlServer(List stmtList) { StringBuilder out = new StringBuilder(); - SQLServerOutputVisitor visitor = new SQLServerParameterizedOutputVisitor(out); + SQLServerOutputVisitor visitor = new SQLServerOutputVisitor(out, true); for (SQLStatement stmt : stmtList) { stmt.accept(visitor); diff --git a/src/test/java/com/alibaba/druid/sql/OnlineSQLTest.java b/src/test/java/com/alibaba/druid/sql/OnlineSQLTest.java index 5b6a2f52ce..947bcf2727 100644 --- a/src/test/java/com/alibaba/druid/sql/OnlineSQLTest.java +++ b/src/test/java/com/alibaba/druid/sql/OnlineSQLTest.java @@ -23,12 +23,12 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.List; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import org.junit.Assert; import junit.framework.TestCase; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleParameterizedOutputVisitor; @@ -141,7 +141,7 @@ public class OnlineSQLTest extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); statemen.accept(visitor); update(id, out.toString(), 1); diff --git a/src/test/java/com/alibaba/druid/sql/odps/OdpsFileTest.java b/src/test/java/com/alibaba/druid/sql/odps/OdpsFileTest.java index 7d4b4b91f9..7f0d1611b7 100644 --- a/src/test/java/com/alibaba/druid/sql/odps/OdpsFileTest.java +++ b/src/test/java/com/alibaba/druid/sql/odps/OdpsFileTest.java @@ -20,14 +20,13 @@ import java.io.InputStreamReader; import java.io.Reader; import java.util.List; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import junit.framework.TestCase; import org.junit.Assert; -import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser; import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; @@ -79,7 +78,7 @@ public class OdpsFileTest extends TestCase { Assert.assertEquals(1, statementList.size()); StringBuilder out = new StringBuilder(); - MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true); statemen.accept(visitor); System.out.println(out.toString());