diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest_8.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest_8.java new file mode 100644 index 0000000000..23dd605a20 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest_8.java @@ -0,0 +1,48 @@ +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.sql.visitor.ParameterizedVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; +import org.junit.Assert; + +import java.util.List; + +/** + * Created by wenshao on 16/8/22. + */ +public class MySqlParameterizedOutputVisitorTest_8 extends TestCase { + + public void test_parameterize() throws Exception { + final String dbType = JdbcConstants.MYSQL; + + String sql = "insert into test values(2,1) on duplicate key update ts=ts % 10000 +1"; + String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType); + Assert.assertEquals("INSERT INTO test\n" + + "VALUES (?, ?)\n" + + "ON DUPLICATE KEY UPDATE ts = ts % ? + ?", 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); + } + + Assert.assertEquals(4, visitor.getParameters().size()); + Assert.assertEquals(2, visitor.getParameters().get(0)); + Assert.assertEquals(1, visitor.getParameters().get(1)); + Assert.assertEquals(10000, visitor.getParameters().get(2)); + Assert.assertEquals(1, visitor.getParameters().get(3)); + } +} + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest_9.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest_9.java new file mode 100644 index 0000000000..0ced15ce9b --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlParameterizedOutputVisitorTest_9.java @@ -0,0 +1,46 @@ +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.sql.visitor.ParameterizedVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; +import org.junit.Assert; + +import java.util.List; + +/** + * Created by wenshao on 16/8/22. + */ +public class MySqlParameterizedOutputVisitorTest_9 extends TestCase { + + public void test_parameterize() throws Exception { + final String dbType = JdbcConstants.MYSQL; + + String sql = "select * from t limit 3, 4"; + String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType); + Assert.assertEquals("SELECT *\n" + + "FROM t\n" + + "LIMIT ?, ?", 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); + } + + Assert.assertEquals(2, visitor.getParameters().size()); + Assert.assertEquals(3, visitor.getParameters().get(0)); + Assert.assertEquals(4, visitor.getParameters().get(1)); + } +} +