mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved wall filter. for issue #2371
This commit is contained in:
@@ -288,4 +288,9 @@ public class DB2WallVisitor extends DB2ASTVisitorAdapter implements WallVisitor
|
||||
public List<WallUpdateCheckItem> getUpdateCheckItems() {
|
||||
return updateCheckItems;
|
||||
}
|
||||
|
||||
public boolean visit(SQLJoinTableSource x) {
|
||||
WallVisitorUtils.check(this, x);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,9 +20,7 @@ import java.util.List;
|
||||
|
||||
import com.alibaba.druid.sql.PagerUtils;
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLCommentHint;
|
||||
import com.alibaba.druid.sql.ast.SQLName;
|
||||
import com.alibaba.druid.sql.ast.SQLObject;
|
||||
import com.alibaba.druid.sql.ast.*;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLInListExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
|
||||
@@ -35,7 +33,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStateme
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock;
|
||||
import com.alibaba.druid.sql.ast.SQLLimit;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateTableStatement;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement;
|
||||
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
|
||||
@@ -450,4 +447,9 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi
|
||||
public List<WallUpdateCheckItem> getUpdateCheckItems() {
|
||||
return updateCheckItems;
|
||||
}
|
||||
|
||||
public boolean visit(SQLJoinTableSource x) {
|
||||
WallVisitorUtils.check(this, x);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -354,4 +354,9 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi
|
||||
public List<WallUpdateCheckItem> getUpdateCheckItems() {
|
||||
return updateCheckItems;
|
||||
}
|
||||
|
||||
public boolean visit(SQLJoinTableSource x) {
|
||||
WallVisitorUtils.check(this, x);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -311,4 +311,9 @@ public class PGWallVisitor extends PGASTVisitorAdapter implements WallVisitor {
|
||||
public List<WallUpdateCheckItem> getUpdateCheckItems() {
|
||||
return updateCheckItems;
|
||||
}
|
||||
|
||||
public boolean visit(SQLJoinTableSource x) {
|
||||
WallVisitorUtils.check(this, x);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -347,4 +347,9 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements
|
||||
public List<WallUpdateCheckItem> getUpdateCheckItems() {
|
||||
return updateCheckItems;
|
||||
}
|
||||
|
||||
public boolean visit(SQLJoinTableSource x) {
|
||||
WallVisitorUtils.check(this, x);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2644,4 +2644,11 @@ public class WallVisitorUtils {
|
||||
addViolation(visitor, ErrorCode.EVIL_HINTS, "hint not allow", x);
|
||||
}
|
||||
}
|
||||
|
||||
public static void check(WallVisitor visitor, SQLJoinTableSource x) {
|
||||
SQLExpr condition = x.getCondition();
|
||||
if (condition instanceof SQLName) {
|
||||
addViolation(visitor, ErrorCode.INVALID_JOIN_CONDITION, "invalid join condition", x);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,6 +82,7 @@ public interface ErrorCode {
|
||||
|
||||
public final static int READ_ONLY = 4000;
|
||||
public final static int UNION = 5000;
|
||||
public final static int INVALID_JOIN_CONDITION = 6000;
|
||||
|
||||
public final static int COMPOUND = 8000;
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.alibaba.druid.bvt.filter.wall.mysql;
|
||||
|
||||
import com.alibaba.druid.wall.WallProvider;
|
||||
import com.alibaba.druid.wall.spi.MySqlWallProvider;
|
||||
import junit.framework.TestCase;
|
||||
import org.junit.Assert;
|
||||
|
||||
public class MySqlWallTest149 extends TestCase {
|
||||
|
||||
public void test_false() throws Exception {
|
||||
WallProvider provider = new MySqlWallProvider();
|
||||
|
||||
String sql = "select t1.teacher_id from teacher_1 t1 left join teacher_2 t2 on t1.teacher_id";
|
||||
|
||||
assertFalse(
|
||||
provider.checkValid(sql)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -92,7 +92,7 @@ public class StringComparisonFunctionsTest extends TestCase {
|
||||
|
||||
String text = output(stmtList);
|
||||
|
||||
Assert.assertEquals("SELECT 'David!' LIKE 'David_';", text);
|
||||
Assert.assertEquals("SELECT 'David!' LIKE 'David\\\\_';", text);
|
||||
}
|
||||
|
||||
public void test_6() throws Exception {
|
||||
|
||||
+152
@@ -0,0 +1,152 @@
|
||||
package com.alibaba.druid.bvt.sql.mysql.createTable;
|
||||
|
||||
import com.alibaba.druid.sql.MysqlTest;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement;
|
||||
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class MySqlCreateTableTest102 extends MysqlTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = "CREATE TABLE `xktv_perf_6519` (\n" +
|
||||
" `kd` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',\n" +
|
||||
" `gmt_create` datetime NOT NULL COMMENT '创建时间',\n" +
|
||||
" `time` datetime NOT NULL COMMENT '统计的时间',\n" +
|
||||
" `scope` int(11) NOT NULL COMMENT '时间粒度',\n" +
|
||||
" `knstance_id` varchar(128) DEFAULT NULL COMMENT '实例id',\n" +
|
||||
" `kp` varchar(16) NOT NULL COMMENT 'ip',\n" +
|
||||
" `port` int(11) NOT NULL COMMENT 'port',\n" +
|
||||
" `db` varchar(42) NOT NULL COMMENT 'db',\n" +
|
||||
" `hashcode` varchar(32) NOT NULL COMMENT 'hashcode',\n" +
|
||||
" `sql_type` varchar(6) NOT NULL COMMENT 'sql_type',\n" +
|
||||
" `logical_table` varchar(128) DEFAULT NULL COMMENT '逻辑表名',\n" +
|
||||
" `physical_table` varchar(128) DEFAULT NULL COMMENT '物理表名',\n" +
|
||||
" `request_count` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT '执行次数',\n" +
|
||||
" `rows_examined` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rows_examined',\n" +
|
||||
" `rows_sent` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rows_sent',\n" +
|
||||
" `rows_affected` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rows_affected',\n" +
|
||||
" `knnodb_pages_read` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'innodb_pages_read',\n" +
|
||||
" `knnodb_pages_io_read` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'innodb_pages_io_read',\n" +
|
||||
" `rt_count` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rt_count',\n" +
|
||||
" `query_time` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'query_time',\n" +
|
||||
" `wait_time` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'wait_time',\n" +
|
||||
" `lock_time` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'lock_time',\n" +
|
||||
" `rt_1ms_count` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rt_1ms_count',\n" +
|
||||
" `rt_2ms_count` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rt_2ms_count',\n" +
|
||||
" `rt_3ms_count` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rt_3ms_count',\n" +
|
||||
" `rt_10ms_count` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rt_10ms_count',\n" +
|
||||
" `rt_100ms_count` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rt_100ms_count',\n" +
|
||||
" `rt_1s_count` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rt_1s_count',\n" +
|
||||
" `rt_gt1s_count` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'rt_gt1s_count',\n" +
|
||||
" `avg_90_rt` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'avg_90_rt',\n" +
|
||||
" `avg_95_rt` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'avg_95_rt',\n" +
|
||||
" `avg_99_rt` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'avg_99_rt',\n" +
|
||||
" `avg_rt` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'avg_rt',\n" +
|
||||
" `val_ext_c0` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c0',\n" +
|
||||
" `val_ext_c1` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c1',\n" +
|
||||
" `val_ext_c2` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c2',\n" +
|
||||
" `val_ext_c3` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c3',\n" +
|
||||
" `val_ext_c4` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c4',\n" +
|
||||
" `val_ext_c5` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c5',\n" +
|
||||
" `val_ext_c6` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c6',\n" +
|
||||
" `val_ext_c7` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c7',\n" +
|
||||
" `val_ext_c8` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c8',\n" +
|
||||
" `val_ext_c9` decimal(42,20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c9',\n" +
|
||||
" `str_ext_c0` varchar(128) DEFAULT NULL COMMENT 'str_ext_c0',\n" +
|
||||
" `str_ext_c1` varchar(128) DEFAULT NULL COMMENT 'str_ext_c1',\n" +
|
||||
" `str_ext_c2` varchar(128) DEFAULT NULL COMMENT 'str_ext_c2',\n" +
|
||||
" `str_ext_c3` varchar(128) DEFAULT NULL COMMENT 'str_ext_c3',\n" +
|
||||
" `str_ext_c4` varchar(128) DEFAULT NULL COMMENT 'str_ext_c4',\n" +
|
||||
" `str_ext_c5` varchar(128) DEFAULT NULL COMMENT 'str_ext_c5',\n" +
|
||||
" `str_ext_c6` varchar(128) DEFAULT NULL COMMENT 'str_ext_c6',\n" +
|
||||
" `str_ext_c7` varchar(128) DEFAULT NULL COMMENT 'str_ext_c7',\n" +
|
||||
" `str_ext_c8` varchar(128) DEFAULT NULL COMMENT 'str_ext_c8',\n" +
|
||||
" `str_ext_c9` varchar(128) DEFAULT NULL COMMENT 'str_ext_c9',\n" +
|
||||
" `str_ext_c10` varchar(128) DEFAULT NULL COMMENT 'str_ext_c10',\n" +
|
||||
" `str_ext_c11` varchar(128) DEFAULT NULL COMMENT 'str_ext_c11',\n" +
|
||||
" `str_ext_c12` varchar(128) DEFAULT NULL COMMENT 'str_ext_c12',\n" +
|
||||
" `str_ext_c13` varchar(128) DEFAULT NULL COMMENT 'str_ext_c13',\n" +
|
||||
" `str_ext_c14` varchar(128) DEFAULT NULL COMMENT 'str_ext_c14',\n" +
|
||||
" PRIMARY KEY (`kd`) COMMENT 'index_key_ins_perf_6519',\n" +
|
||||
" KEY `kdx_time` (`time`) COMMENT 'index_perf_time_6519',\n" +
|
||||
" KEY `kdx_instance_time` (`kp`,`port`,`scope`,`time`) COMMENT 'index_ins_perf_inst_time_6519',\n" +
|
||||
" KEY `kdx_instance_hash` (`kp`,`port`,`hashcode`,`scope`,`time`) COMMENT 'index_ins_perf_hash_6519',\n" +
|
||||
" KEY `kdx_instance_all_dim` (`kp`,`port`,`db`,`logical_table`,`physical_table`,`sql_type`,`hashcode`,`scope`,`time`) COMMENT 'index_ins_perf_all_6519'\n" +
|
||||
") ENGINE=XENGINE AUTO_INCREMENT=339181584 DEFAULT CHARSET=utf8mb4 COMMENT='sql_ins_perf'";
|
||||
|
||||
MySqlStatementParser parser = new MySqlStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
MySqlCreateTableStatement stmt = (MySqlCreateTableStatement)statementList.get(0);
|
||||
|
||||
assertEquals(1, statementList.size());
|
||||
assertEquals(63, stmt.getTableElementList().size());
|
||||
|
||||
assertEquals("CREATE TABLE `xktv_perf_6519` (\n" +
|
||||
"\t`kd` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',\n" +
|
||||
"\t`gmt_create` datetime NOT NULL COMMENT '创建时间',\n" +
|
||||
"\t`time` datetime NOT NULL COMMENT '统计的时间',\n" +
|
||||
"\t`scope` int(11) NOT NULL COMMENT '时间粒度',\n" +
|
||||
"\t`knstance_id` varchar(128) DEFAULT NULL COMMENT '实例id',\n" +
|
||||
"\t`kp` varchar(16) NOT NULL COMMENT 'ip',\n" +
|
||||
"\t`port` int(11) NOT NULL COMMENT 'port',\n" +
|
||||
"\t`db` varchar(42) NOT NULL COMMENT 'db',\n" +
|
||||
"\t`hashcode` varchar(32) NOT NULL COMMENT 'hashcode',\n" +
|
||||
"\t`sql_type` varchar(6) NOT NULL COMMENT 'sql_type',\n" +
|
||||
"\t`logical_table` varchar(128) DEFAULT NULL COMMENT '逻辑表名',\n" +
|
||||
"\t`physical_table` varchar(128) DEFAULT NULL COMMENT '物理表名',\n" +
|
||||
"\t`request_count` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT '执行次数',\n" +
|
||||
"\t`rows_examined` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rows_examined',\n" +
|
||||
"\t`rows_sent` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rows_sent',\n" +
|
||||
"\t`rows_affected` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rows_affected',\n" +
|
||||
"\t`knnodb_pages_read` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'innodb_pages_read',\n" +
|
||||
"\t`knnodb_pages_io_read` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'innodb_pages_io_read',\n" +
|
||||
"\t`rt_count` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rt_count',\n" +
|
||||
"\t`query_time` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'query_time',\n" +
|
||||
"\t`wait_time` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'wait_time',\n" +
|
||||
"\t`lock_time` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'lock_time',\n" +
|
||||
"\t`rt_1ms_count` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rt_1ms_count',\n" +
|
||||
"\t`rt_2ms_count` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rt_2ms_count',\n" +
|
||||
"\t`rt_3ms_count` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rt_3ms_count',\n" +
|
||||
"\t`rt_10ms_count` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rt_10ms_count',\n" +
|
||||
"\t`rt_100ms_count` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rt_100ms_count',\n" +
|
||||
"\t`rt_1s_count` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rt_1s_count',\n" +
|
||||
"\t`rt_gt1s_count` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'rt_gt1s_count',\n" +
|
||||
"\t`avg_90_rt` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'avg_90_rt',\n" +
|
||||
"\t`avg_95_rt` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'avg_95_rt',\n" +
|
||||
"\t`avg_99_rt` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'avg_99_rt',\n" +
|
||||
"\t`avg_rt` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'avg_rt',\n" +
|
||||
"\t`val_ext_c0` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c0',\n" +
|
||||
"\t`val_ext_c1` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c1',\n" +
|
||||
"\t`val_ext_c2` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c2',\n" +
|
||||
"\t`val_ext_c3` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c3',\n" +
|
||||
"\t`val_ext_c4` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c4',\n" +
|
||||
"\t`val_ext_c5` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c5',\n" +
|
||||
"\t`val_ext_c6` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c6',\n" +
|
||||
"\t`val_ext_c7` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c7',\n" +
|
||||
"\t`val_ext_c8` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c8',\n" +
|
||||
"\t`val_ext_c9` decimal(42, 20) DEFAULT '0.00000000000000000000' COMMENT 'val_ext_c9',\n" +
|
||||
"\t`str_ext_c0` varchar(128) DEFAULT NULL COMMENT 'str_ext_c0',\n" +
|
||||
"\t`str_ext_c1` varchar(128) DEFAULT NULL COMMENT 'str_ext_c1',\n" +
|
||||
"\t`str_ext_c2` varchar(128) DEFAULT NULL COMMENT 'str_ext_c2',\n" +
|
||||
"\t`str_ext_c3` varchar(128) DEFAULT NULL COMMENT 'str_ext_c3',\n" +
|
||||
"\t`str_ext_c4` varchar(128) DEFAULT NULL COMMENT 'str_ext_c4',\n" +
|
||||
"\t`str_ext_c5` varchar(128) DEFAULT NULL COMMENT 'str_ext_c5',\n" +
|
||||
"\t`str_ext_c6` varchar(128) DEFAULT NULL COMMENT 'str_ext_c6',\n" +
|
||||
"\t`str_ext_c7` varchar(128) DEFAULT NULL COMMENT 'str_ext_c7',\n" +
|
||||
"\t`str_ext_c8` varchar(128) DEFAULT NULL COMMENT 'str_ext_c8',\n" +
|
||||
"\t`str_ext_c9` varchar(128) DEFAULT NULL COMMENT 'str_ext_c9',\n" +
|
||||
"\t`str_ext_c10` varchar(128) DEFAULT NULL COMMENT 'str_ext_c10',\n" +
|
||||
"\t`str_ext_c11` varchar(128) DEFAULT NULL COMMENT 'str_ext_c11',\n" +
|
||||
"\t`str_ext_c12` varchar(128) DEFAULT NULL COMMENT 'str_ext_c12',\n" +
|
||||
"\t`str_ext_c13` varchar(128) DEFAULT NULL COMMENT 'str_ext_c13',\n" +
|
||||
"\t`str_ext_c14` varchar(128) DEFAULT NULL COMMENT 'str_ext_c14',\n" +
|
||||
"\tPRIMARY KEY (`kd`),\n" +
|
||||
"\tKEY `kdx_time` (`time`),\n" +
|
||||
"\tKEY `kdx_instance_time` (`kp`, `port`, `scope`, `time`),\n" +
|
||||
"\tKEY `kdx_instance_hash` (`kp`, `port`, `hashcode`, `scope`, `time`),\n" +
|
||||
"\tKEY `kdx_instance_all_dim` (`kp`, `port`, `db`, `logical_table`, `physical_table`, `sql_type`, `hashcode`, `scope`, `time`)\n" +
|
||||
") ENGINE = XENGINE AUTO_INCREMENT = 339181584 CHARSET = utf8mb4 COMMENT 'sql_ins_perf'", stmt.toString());
|
||||
}
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.alibaba.druid.bvt.sql.mysql.param;
|
||||
|
||||
import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by wenshao on 16/9/23.
|
||||
*/
|
||||
public class MySqlParameterizedOutputVisitorTest_61 extends TestCase {
|
||||
public void test_for_parameterize() throws Exception {
|
||||
|
||||
String sql = "insert ignore into ktv_ibx_1690 (id, msg_id, cid, openid, gmt_create, gmt_modified, read_status, reach_status, create_at, type, tag, sender_id, extension, domain, at_me) VALUES (399644333, 49099001633, \"543351210\", 306202, now(), now(), 2, 2, 1515051603113, 51, 0, 26659032, '', 'dingding', 0), (399644599334, 49399311994, \"543351210\", 306202, now(), now(), 2, 2, 1515045263923, 51, 0, 55235569, '', 'dingding', 0), (399644599335, 49352513493, \"543351210\", 306202, now(), now(), 2, 2, 1515032652532, 51, 0, 91605449, '', 'dingding', 0), (399644599336, 49333315435, \"543351210\", 306202, now(), now(), 2, 2, 1515029099196, 51, 0, 159661969, '', 'dingding', 0), (399644599333, 49253992490, \"543351210\", 306202, now(), now(), 2, 2, 1514969992945, 51, 0, 26659032, '', 'dingding', 0), (399644599339, 49553143033, \"543351210\", 306202, now(), now(), 2, 2, 1514969920339, 51, 0, 26659032, '', 'dingding', 0), (399644599339, 49191512129, \"543351210\", 306202, now(), now(), 2, 2, 1514943655456, 51, 0, 104293319, '', 'dingding', 0), (399644599340, 49465261219, \"543351210\", 306202, now(), now(), 2, 2, 1514943290229, 51, 0, 26659032, '', 'dingding', 0), (399644599341, 49169690919, \"543351210\", 306202, now(), now(), 2, 2, 1514946945243, 51, 0, 104293319, '', 'dingding', 0), (399644599342, 43096553593, \"543351210\", 306202, now(), now(), 2, 2, 1514343951224, 51, 0, 26659032, '', 'dingding', 0), (399644599343, 46939394349, \"543351210\", 306202, now(), now(), 2, 2, 1514230399590, 51, 0, 26659032, '', 'dingding', 0), (399644599344, 43121249113, \"543351210\", 306202, now(), now(), 2, 2, 1514256154905, 51, 0, 26659032, '', 'dingding', 0), (399644599345, 46996923949, \"543351210\", 306202, now(), now(), 2, 2, 1514256015609, 51, 0, 26659032, '', 'dingding', 0), (399644599346, 43506239192, \"543351210\", 306202, now(), now(), 2, 2, 1514253595163, 51, 0, 26659032, '', 'dingding', 0), (399644599343, 46914302251, \"543351210\", 306202, now(), now(), 2, 2, 1514193122944, 51, 0, 26659032, '', 'dingding', 0), (399644599349, 46901562353, \"543351210\", 306202, now(), now(), 2, 2, 1514193003304, 51, 0, 26659032, '', 'dingding', 0), (399644599349, 46993995514, \"543351210\", 306202, now(), now(), 2, 2, 1514192994193, 51, 0, 26659032, '', 'dingding', 0), (399644599350, 46906923503, \"543351210\", 306202, now(), now(), 2, 2, 1514191365460, 51, 0, 159661969, '', 'dingding', 0), (399644599351, 43015354139, \"543351210\", 306202, now(), now(), 2, 2, 1514191433515, 51, 0, 26659032, '', 'dingding', 0), (399644599352, 43410063334, \"543351210\", 306202, now(), now(), 2, 2, 1514191049930, 51, 0, 26659032, '', 'dingding', 0), (399644599353, 43410045959, \"543351210\", 306202, now(), now(), 2, 2, 1514190943523, 51, 0, 26659032, '', 'dingding', 0), (399644599354, 46919625433, \"543351210\", 306202, now(), now(), 2, 2, 1514130390293, 51, 0, 26659032, '', 'dingding', 0), (399644599355, 46336694953, \"543351210\", 306202, now(), now(), 2, 2, 1514130332624, 51, 0, 26659032, '', 'dingding', 0)";
|
||||
|
||||
List<Object> params = new ArrayList<Object>();
|
||||
String psql = ParameterizedOutputVisitorUtils.parameterize(sql, JdbcConstants.MYSQL, params);
|
||||
assertEquals("INSERT IGNORE INTO ktv_ibx (id, msg_id, cid, openid, gmt_create\n" +
|
||||
"\t, gmt_modified, read_status, reach_status, create_at, type\n" +
|
||||
"\t, tag, sender_id, extension, domain, at_me)\n" +
|
||||
"VALUES (?, ?, ?, ?, now()\n" +
|
||||
"\t\t, now(), ?, ?, ?, ?\n" +
|
||||
"\t\t, ?, ?, ?, ?, ?)", psql);
|
||||
assertEquals(13, params.size());
|
||||
assertEquals(399644333, params.get(0));
|
||||
assertEquals(49099001633L, params.get(1));
|
||||
assertEquals("543351210", params.get(2));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user