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 7fbccf08f9..b615637618 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 @@ -36,7 +36,7 @@ public class MySqlExportParameterVisitor extends MySqlParameterizedOutputVisitor */ private final boolean requireParameterizedOutput; - public MySqlExportParameterVisitor(final List parameters,final Appendable appender,final boolean wantParameterizedOutput){ + public MySqlExportParameterVisitor(List parameters, Appendable appender, boolean wantParameterizedOutput){ super(appender); this.parameters = parameters; this.requireParameterizedOutput = wantParameterizedOutput; @@ -46,12 +46,12 @@ public class MySqlExportParameterVisitor extends MySqlParameterizedOutputVisitor this(new ArrayList()); } - public MySqlExportParameterVisitor(final List parameters){ - this(parameters,new StringBuilder(),false); + public MySqlExportParameterVisitor(List parameters) { + this(parameters, new StringBuilder(), false); } public MySqlExportParameterVisitor(final Appendable appender) { - this(new ArrayList(),appender,true); + this(new ArrayList(),appender, true); } public List getParameters() { @@ -64,7 +64,7 @@ public class MySqlExportParameterVisitor extends MySqlParameterizedOutputVisitor if(requireParameterizedOutput){ return super.visit(x); } - return false; + return true; } @Override @@ -72,7 +72,8 @@ public class MySqlExportParameterVisitor extends MySqlParameterizedOutputVisitor if(requireParameterizedOutput){ return super.visit(x); } - return false; + + return true; } @Override diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest_10.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest_10.java new file mode 100644 index 0000000000..761c257f16 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest_10.java @@ -0,0 +1,59 @@ +package com.alibaba.druid.bvt.sql.mysql; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlExportParameterVisitor; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.ExportParameterVisitor; +import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.List; + +/** + * Created by wenshao on 16/8/23. + */ +public class MySqlParameterizedOutputVisitorTest_10 extends TestCase { + public void test_for_parameterize() throws Exception { + /*String instance = "100.81.152.9"+"_"+3314; + int urlNum = Math.abs(instance.hashCode()) % 2; + System.out.println(urlNum);*/ + /* String formattedSql = SQLUtils.format("select * from ? where id = ?", JdbcConstants.MYSQL, + Arrays. asList("abc,a")); + System.out.println(formattedSql);*/ + + final String dbType = JdbcConstants.MYSQL; + + String sql = "SELECT `SURVEY_ANSWER`.`TIME_UPDATED`, `SURVEY_ANSWER`.`ANSWER_VALUE` FROM `S_ANSWER_P0115` `SURVEY_ANSWER` WHERE `SURVEY_ANSWER`.`SURVEY_ID` = 11 AND `SURVEY_ANSWER`.`QUESTION_CODE` = 'qq' ORDER BY `SURVEY_ANSWER`.`TIME_UPDATED` DESC LIMIT 1, 2"; + String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType); + /* Assert.assertEquals("SELECT *\n" + + "FROM t\n" + + "LIMIT ?, ?", psql);*/ + + System.out.println(psql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType); + List stmtList = parser.parseStatementList(); + + StringBuilder out = new StringBuilder(); + ExportParameterVisitor visitor = new MySqlExportParameterVisitor(out); + for (SQLStatement stmt : stmtList) { + stmt.accept(visitor); + } + + System.out.println(visitor.getParameters()); + + stmtList = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL); + + visitor = new MySqlExportParameterVisitor(); + for (SQLStatement stmt : stmtList) { + stmt.accept(visitor); + } + System.out.println(visitor.getParameters()); + /* Assert.assertEquals(2, visitor.getParameters().size()); + Assert.assertEquals(3, visitor.getParameters().get(0)); + Assert.assertEquals(4, visitor.getParameters().get(1));*/ + } +}