mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser.
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
package com.alibaba.druid.bvt.sql;
|
||||
|
||||
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* Created by wenshao on 13/08/2017.
|
||||
*/
|
||||
public class ShardingUnwrapTest extends TestCase {
|
||||
SQLASTOutputVisitor visitor = new SQLASTOutputVisitor(new StringBuffer());
|
||||
|
||||
public void test_sharding_unwrap() throws Exception {
|
||||
|
||||
assertEquals("t_like_count", visitor.unwrapShardingTable("t_like_count0057"));
|
||||
assertEquals("t_like_count", visitor.unwrapShardingTable("`t_like_count0057`"));
|
||||
assertEquals("t_like_count", visitor.unwrapShardingTable("\"t_like_count0057\""));
|
||||
}
|
||||
|
||||
public void test_sharding_unwrap_2() throws Exception {
|
||||
assertEquals("t_like_count", visitor.unwrapShardingTable("t_like_count_0057"));
|
||||
assertEquals("t_like_count", visitor.unwrapShardingTable("`t_like_count_0057`"));
|
||||
assertEquals("t_like_count", visitor.unwrapShardingTable("\"t_like_count_0057\""));
|
||||
}
|
||||
|
||||
public void test_sharding_unwrap_3() throws Exception {
|
||||
assertEquals("fc_sms", visitor.unwrapShardingTable("fc_sms_0011_201704"));
|
||||
}
|
||||
|
||||
public void test_sharding_unwrap_4() throws Exception {
|
||||
assertEquals("ads_tb_sycm_eff_slr_itm_1d_s015_p", visitor.unwrapShardingTable("ads_tb_sycm_eff_slr_itm_1d_s015_p033"));
|
||||
}
|
||||
|
||||
public void test_sharding_unwrap_5() throws Exception {
|
||||
assertEquals("t", visitor.unwrapShardingTable("t_00"));
|
||||
assertEquals("t", visitor.unwrapShardingTable("t_1"));
|
||||
}
|
||||
//
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package com.alibaba.druid.bvt.sql.mysql.param;
|
||||
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.parser.SQLParserUtils;
|
||||
import com.alibaba.druid.sql.parser.SQLStatementParser;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by wenshao on 16/8/23.
|
||||
*/
|
||||
public class MySqlParameterizedOutputVisitorTest_45 extends TestCase {
|
||||
public void test_for_parameterize() throws Exception {
|
||||
final String dbType = JdbcConstants.MYSQL;
|
||||
String sql = "(SELECT `t_like_count`.`id`, `t_like_count`.`target_id`, `t_like_count`.`target_type`, `t_like_count`.`like_type`, `t_like_count`.`like_count` , `t_like_count`.`like_optimalize_count`, `t_like_count`.`create_time`, `t_like_count`.`update_time` FROM `t_like_count0062` `t_like_count` WHERE `t_like_count`.`target_type` = ? AND `t_like_count`.`target_id` IN (?)) UNION ALL (SELECT `t_like_count`.`id`, `t_like_count`.`target_id`, `t_like_count`.`target_type`, `t_like_count`.`like_type`, `t_like_count`.`like_count` , `t_like_count`.`like_optimalize_count`, `t_like_count`.`create_time`, `t_like_count`.`update_time` FROM `t_like_count0057` `t_like_count` WHERE `t_like_count`.`target_type` = ? AND `t_like_count`.`target_id` IN (?)) UNION ALL (SELECT `t_like_count`.`id`, `t_like_count`.`target_id`, `t_like_count`.`target_type`, `t_like_count`.`like_type`, `t_like_count`.`like_count` , `t_like_count`.`like_optimalize_count`, `t_like_count`.`create_time`, `t_like_count`.`update_time` FROM `t_like_count0050` `t_like_count` WHERE `t_like_count`.`target_type` = ? AND `t_like_count`.`target_id` IN (?)) UNION ALL (SELECT `t_like_count`.`id`, `t_like_count`.`target_id`, `t_like_count`.`target_type`, `t_like_count`.`like_type`, `t_like_count`.`like_count` , `t_like_count`.`like_optimalize_count`, `t_like_count`.`create_time`, `t_like_count`.`update_time` FROM `t_like_count0048` `t_like_count` WHERE `t_like_count`.`target_type` = ? AND `t_like_count`.`target_id` IN (?))";
|
||||
|
||||
SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType);
|
||||
List<SQLStatement> stmtList = parser.parseStatementList();
|
||||
SQLStatement statement = stmtList.get(0);
|
||||
|
||||
StringBuilder out = new StringBuilder();
|
||||
SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL);
|
||||
List<Object> parameters = new ArrayList<Object>();
|
||||
visitor.setParameterized(true);
|
||||
visitor.setParameterizedMergeInList(true);
|
||||
visitor.setParameters(parameters);
|
||||
/*visitor.setPrettyFormat(false);*/
|
||||
statement.accept(visitor);
|
||||
/* JSONArray array = new JSONArray();
|
||||
for(String table : visitor.getTables()){
|
||||
array.add(table.replaceAll("`",""));
|
||||
}*/
|
||||
|
||||
String psql = out.toString();
|
||||
|
||||
System.out.println(psql);
|
||||
|
||||
|
||||
assertEquals("(SELECT `t_like_count`.`id`, `t_like_count`.`target_id`, `t_like_count`.`target_type`, `t_like_count`.`like_type`, `t_like_count`.`like_count`\n" +
|
||||
"\t, `t_like_count`.`like_optimalize_count`, `t_like_count`.`create_time`, `t_like_count`.`update_time`\n" +
|
||||
"FROM t_like_count `t_like_count`\n" +
|
||||
"WHERE `t_like_count`.`target_type` = ?\n" +
|
||||
"\tAND `t_like_count`.`target_id` IN (?))\n" +
|
||||
"UNION ALL\n" +
|
||||
"(SELECT `t_like_count`.`id`, `t_like_count`.`target_id`, `t_like_count`.`target_type`, `t_like_count`.`like_type`, `t_like_count`.`like_count`\n" +
|
||||
"\t, `t_like_count`.`like_optimalize_count`, `t_like_count`.`create_time`, `t_like_count`.`update_time`\n" +
|
||||
"FROM t_like_count `t_like_count`\n" +
|
||||
"WHERE `t_like_count`.`target_type` = ?\n" +
|
||||
"\tAND `t_like_count`.`target_id` IN (?))\n" +
|
||||
"UNION ALL\n" +
|
||||
"(SELECT `t_like_count`.`id`, `t_like_count`.`target_id`, `t_like_count`.`target_type`, `t_like_count`.`like_type`, `t_like_count`.`like_count`\n" +
|
||||
"\t, `t_like_count`.`like_optimalize_count`, `t_like_count`.`create_time`, `t_like_count`.`update_time`\n" +
|
||||
"FROM t_like_count `t_like_count`\n" +
|
||||
"WHERE `t_like_count`.`target_type` = ?\n" +
|
||||
"\tAND `t_like_count`.`target_id` IN (?))\n" +
|
||||
"UNION ALL\n" +
|
||||
"(SELECT `t_like_count`.`id`, `t_like_count`.`target_id`, `t_like_count`.`target_type`, `t_like_count`.`like_type`, `t_like_count`.`like_count`\n" +
|
||||
"\t, `t_like_count`.`like_optimalize_count`, `t_like_count`.`create_time`, `t_like_count`.`update_time`\n" +
|
||||
"FROM t_like_count `t_like_count`\n" +
|
||||
"WHERE `t_like_count`.`target_type` = ?\n" +
|
||||
"\tAND `t_like_count`.`target_id` IN (?))", psql);
|
||||
}
|
||||
}
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
package com.alibaba.druid.bvt.sql.mysql.param;
|
||||
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.parser.SQLParserUtils;
|
||||
import com.alibaba.druid.sql.parser.SQLStatementParser;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by wenshao on 16/8/23.
|
||||
*/
|
||||
public class MySqlParameterizedOutputVisitorTest_46 extends TestCase {
|
||||
public void test_for_parameterize() throws Exception {
|
||||
final String dbType = JdbcConstants.MYSQL;
|
||||
String sql = "SELECT COUNT(*) AS count, `ipv_uv_1d_001` AS col FROM ( (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) UNION ALL (SELECT ipv_uv_1d_001 FROM `cbu_da_dihu_16`.`ads_tb_sycm_eff_slr_itm_1d_s015_p033` WHERE `auto_seq_id` > ? LIMIT ?) ) ads_tb_sycm_eff_slr_itm_1d_s015_p033 GROUP BY col ORDER BY col DESC";
|
||||
|
||||
SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType);
|
||||
List<SQLStatement> stmtList = parser.parseStatementList();
|
||||
SQLStatement statement = stmtList.get(0);
|
||||
|
||||
StringBuilder out = new StringBuilder();
|
||||
SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL);
|
||||
List<Object> parameters = new ArrayList<Object>();
|
||||
visitor.setParameterized(true);
|
||||
visitor.setParameterizedMergeInList(true);
|
||||
visitor.setParameters(parameters);
|
||||
/*visitor.setPrettyFormat(false);*/
|
||||
statement.accept(visitor);
|
||||
/* JSONArray array = new JSONArray();
|
||||
for(String table : visitor.getTables()){
|
||||
array.add(table.replaceAll("`",""));
|
||||
}*/
|
||||
|
||||
String psql = out.toString();
|
||||
|
||||
System.out.println(psql);
|
||||
|
||||
|
||||
assertEquals("SELECT COUNT(*) AS count, `ipv_uv_1d_001` AS col\n" +
|
||||
"FROM (\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
"\tUNION ALL\n" +
|
||||
"\t(SELECT ipv_uv_1d_001\n" +
|
||||
"\tFROM `cbu_da_dihu_16`.ads_tb_sycm_eff_slr_itm_1d_s015_p\n" +
|
||||
"\tWHERE `auto_seq_id` > ?\n" +
|
||||
"\tLIMIT ?)\n" +
|
||||
") ads_tb_sycm_eff_slr_itm_1d_s015_p033\n" +
|
||||
"GROUP BY col\n" +
|
||||
"ORDER BY col DESC", psql);
|
||||
}
|
||||
}
|
||||
@@ -69,7 +69,7 @@ public class MySqlSelectTest_48_union extends MysqlTest {
|
||||
String output = SQLUtils.toMySqlString(stmt);
|
||||
assertEquals("SELECT SUM(hd.paid_amount)\n" +
|
||||
"FROM (\n" +
|
||||
"\t(SELECT 'fl', CAST(a.hosted_ymd AS date) AS hosted_ymd, a.user_id, 'boss1', a.paid_amount\n" +
|
||||
"\tSELECT 'fl', CAST(a.hosted_ymd AS date) AS hosted_ymd, a.user_id, 'boss1', a.paid_amount\n" +
|
||||
"\t\t, m.user_id, m.create_date, m.pmcode, n.type_name, n.product_name\n" +
|
||||
"\t\t, n.acctype_id, n.acctype_name, n.account_name, n.plan\n" +
|
||||
"\tFROM hive.bdc_dwd.dw_mk_copyright_order a\n" +
|
||||
@@ -104,7 +104,7 @@ public class MySqlSelectTest_48_union extends MysqlTest {
|
||||
"\t\tAND CAST(b.paid_date AS varchar(10)) >= '2016-01-01'\n" +
|
||||
"\t\tAND CAST(b.paid_date AS varchar(10)) <= '2017-06-30'\n" +
|
||||
"\t\tAND b.state = 1\n" +
|
||||
"\t\tAND a.acct_day = '03')\n" +
|
||||
"\t\tAND a.acct_day = '03'\n" +
|
||||
") hd", //
|
||||
output);
|
||||
}
|
||||
@@ -112,7 +112,7 @@ public class MySqlSelectTest_48_union extends MysqlTest {
|
||||
String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION);
|
||||
assertEquals("select sum(hd.paid_amount)\n" +
|
||||
"from (\n" +
|
||||
"\t(select 'fl', cast(a.hosted_ymd as date) as hosted_ymd, a.user_id, 'boss1', a.paid_amount\n" +
|
||||
"\tselect 'fl', cast(a.hosted_ymd as date) as hosted_ymd, a.user_id, 'boss1', a.paid_amount\n" +
|
||||
"\t\t, m.user_id, m.create_date, m.pmcode, n.type_name, n.product_name\n" +
|
||||
"\t\t, n.acctype_id, n.acctype_name, n.account_name, n.plan\n" +
|
||||
"\tfrom hive.bdc_dwd.dw_mk_copyright_order a\n" +
|
||||
@@ -147,7 +147,7 @@ public class MySqlSelectTest_48_union extends MysqlTest {
|
||||
"\t\tand cast(b.paid_date as varchar(10)) >= '2016-01-01'\n" +
|
||||
"\t\tand cast(b.paid_date as varchar(10)) <= '2017-06-30'\n" +
|
||||
"\t\tand b.state = 1\n" +
|
||||
"\t\tand a.acct_day = '03')\n" +
|
||||
"\t\tand a.acct_day = '03'\n" +
|
||||
") hd", //
|
||||
output);
|
||||
}
|
||||
@@ -156,7 +156,7 @@ public class MySqlSelectTest_48_union extends MysqlTest {
|
||||
String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true));
|
||||
assertEquals("SELECT SUM(hd.paid_amount)\n" +
|
||||
"FROM (\n" +
|
||||
"\t(SELECT ?, CAST(a.hosted_ymd AS date) AS hosted_ymd, a.user_id, ?, a.paid_amount\n" +
|
||||
"\tSELECT ?, CAST(a.hosted_ymd AS date) AS hosted_ymd, a.user_id, ?, a.paid_amount\n" +
|
||||
"\t\t, m.user_id, m.create_date, m.pmcode, n.type_name, n.product_name\n" +
|
||||
"\t\t, n.acctype_id, n.acctype_name, n.account_name, n.plan\n" +
|
||||
"\tFROM hive.bdc_dwd.dw_mk_copyright_order a\n" +
|
||||
@@ -191,7 +191,7 @@ public class MySqlSelectTest_48_union extends MysqlTest {
|
||||
"\t\tAND CAST(b.paid_date AS varchar(10)) >= ?\n" +
|
||||
"\t\tAND CAST(b.paid_date AS varchar(10)) <= ?\n" +
|
||||
"\t\tAND b.state = ?\n" +
|
||||
"\t\tAND a.acct_day = ?)\n" +
|
||||
"\t\tAND a.acct_day = ?\n" +
|
||||
") hd", //
|
||||
output);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright 1999-2017 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.bvt.sql.mysql.select;
|
||||
|
||||
import com.alibaba.druid.sql.MysqlTest;
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class MySqlSelectTest_50_union extends MysqlTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = "select * from (\n" +
|
||||
"select seller_name from a where id < 100\n" +
|
||||
"UNION\n" +
|
||||
"select seller_name from a where id < 100\n" +
|
||||
") as temp limit 10";
|
||||
|
||||
|
||||
List<SQLStatement> statementList = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL, true);
|
||||
SQLStatement stmt = statementList.get(0);
|
||||
|
||||
assertEquals(1, statementList.size());
|
||||
|
||||
SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL);
|
||||
stmt.accept(visitor);
|
||||
|
||||
// System.out.println("Tables : " + visitor.getTables());
|
||||
System.out.println("fields : " + visitor.getColumns());
|
||||
// System.out.println("coditions : " + visitor.getConditions());
|
||||
// System.out.println("orderBy : " + visitor.getOrderByColumns());
|
||||
|
||||
// assertEquals(1, visitor.getTables().size());
|
||||
// assertEquals(1, visitor.getColumns().size());
|
||||
// assertEquals(0, visitor.getConditions().size());
|
||||
// assertEquals(0, visitor.getOrderByColumns().size());
|
||||
|
||||
{
|
||||
String output = SQLUtils.toMySqlString(stmt);
|
||||
assertEquals("SELECT *\n" +
|
||||
"FROM (\n" +
|
||||
"\tSELECT seller_name\n" +
|
||||
"\tFROM a\n" +
|
||||
"\tWHERE id < 100\n" +
|
||||
"\tUNION\n" +
|
||||
"\tSELECT seller_name\n" +
|
||||
"\tFROM a\n" +
|
||||
"\tWHERE id < 100\n" +
|
||||
") temp\n" +
|
||||
"LIMIT 10", //
|
||||
output);
|
||||
}
|
||||
{
|
||||
String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION);
|
||||
assertEquals("select *\n" +
|
||||
"from (\n" +
|
||||
"\tselect seller_name\n" +
|
||||
"\tfrom a\n" +
|
||||
"\twhere id < 100\n" +
|
||||
"\tunion\n" +
|
||||
"\tselect seller_name\n" +
|
||||
"\tfrom a\n" +
|
||||
"\twhere id < 100\n" +
|
||||
") temp\n" +
|
||||
"limit 10", //
|
||||
output);
|
||||
}
|
||||
|
||||
{
|
||||
String output = SQLUtils.toMySqlString(stmt, new SQLUtils.FormatOption(true, true, true));
|
||||
assertEquals("SELECT *\n" +
|
||||
"FROM (\n" +
|
||||
"\tSELECT seller_name\n" +
|
||||
"\tFROM a\n" +
|
||||
"\tWHERE id < ?\n" +
|
||||
"\tUNION\n" +
|
||||
"\tSELECT seller_name\n" +
|
||||
"\tFROM a\n" +
|
||||
"\tWHERE id < ?\n" +
|
||||
") temp\n" +
|
||||
"LIMIT ?", //
|
||||
output);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 1999-2017 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.bvt.sql.sqlserver;
|
||||
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser;
|
||||
import junit.framework.TestCase;
|
||||
import org.junit.Assert;
|
||||
|
||||
public class SQLServerSelectTest25 extends TestCase {
|
||||
|
||||
public void test_simple() throws Exception {
|
||||
String sql = //
|
||||
"SELECT A.value FROM A oost LEFT JOIN B oo WITH (NOLOCK) ON oost.order_id = oo.id"; //
|
||||
|
||||
SQLServerStatementParser parser = new SQLServerStatementParser(sql);
|
||||
SQLStatement stmt = parser.parseStatementList().get(0);
|
||||
|
||||
{
|
||||
String text = SQLUtils.toSQLServerString(stmt);
|
||||
|
||||
Assert.assertEquals("SELECT A.value\n" +
|
||||
"FROM A oost\n" +
|
||||
"\tLEFT JOIN B oo WITH (NOLOCK) ON oost.order_id = oo.id", text);
|
||||
}
|
||||
{
|
||||
String text = SQLUtils.toSQLServerString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION);
|
||||
|
||||
Assert.assertEquals("select A.value\n" +
|
||||
"from A oost\n" +
|
||||
"\tleft join B oo with (NOLOCK) on oost.order_id = oo.id", text);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,33 +218,33 @@ public class DruidStatServiceTest extends TestCase {
|
||||
conn.close();
|
||||
}
|
||||
|
||||
public void test_statService_getActiveConnectionStackTraceId() throws Exception {
|
||||
String sql = "select 1";
|
||||
dataSource.setRemoveAbandoned(true);
|
||||
dataSource.setRemoveAbandonedTimeout(Integer.MAX_VALUE);
|
||||
Connection conn = dataSource.getConnection();
|
||||
|
||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
rs.next();
|
||||
rs.close();
|
||||
// get data source.
|
||||
String dsResult = DruidStatService.getInstance().service("/datasource.json");
|
||||
Map<String, Object> dsResultMap = (Map<String, Object>) JSONUtils.parse(dsResult);
|
||||
List<Map<String, Object>> dataSourceList = (List<Map<String, Object>>) dsResultMap.get("Content");
|
||||
Map<String, Object> dataSourceStat = dataSourceList.get(0);
|
||||
assertThat(dataSourceStat, is(not(nullValue())));
|
||||
// get data source id.
|
||||
int id = (Integer) dataSourceStat.get("Identity");
|
||||
|
||||
String result = DruidStatService.getInstance().service("/activeConnectionStackTrace-" + id + ".json");
|
||||
Map<String, Object> resultMap = (Map<String, Object>) JSONUtils.parse(result);
|
||||
List<String> contentList = (List<String>) resultMap.get("Content");
|
||||
|
||||
assertThat(contentList.get(0), is(not(nullValue())));
|
||||
stmt.close();
|
||||
conn.close();
|
||||
}
|
||||
// public void test_statService_getActiveConnectionStackTraceId() throws Exception {
|
||||
// String sql = "select 1";
|
||||
// dataSource.setRemoveAbandoned(true);
|
||||
// dataSource.setRemoveAbandonedTimeout(Integer.MAX_VALUE);
|
||||
// Connection conn = dataSource.getConnection();
|
||||
//
|
||||
// PreparedStatement stmt = conn.prepareStatement(sql);
|
||||
// ResultSet rs = stmt.executeQuery();
|
||||
// rs.next();
|
||||
// rs.close();
|
||||
// // get data source.
|
||||
// String dsResult = DruidStatService.getInstance().service("/datasource.json");
|
||||
// Map<String, Object> dsResultMap = (Map<String, Object>) JSONUtils.parse(dsResult);
|
||||
// List<Map<String, Object>> dataSourceList = (List<Map<String, Object>>) dsResultMap.get("Content");
|
||||
// Map<String, Object> dataSourceStat = dataSourceList.get(0);
|
||||
// assertThat(dataSourceStat, is(not(nullValue())));
|
||||
// // get data source id.
|
||||
// int id = (Integer) dataSourceStat.get("Identity");
|
||||
//
|
||||
// String result = DruidStatService.getInstance().service("/activeConnectionStackTrace-" + id + ".json");
|
||||
// Map<String, Object> resultMap = (Map<String, Object>) JSONUtils.parse(result);
|
||||
// List<String> contentList = (List<String>) resultMap.get("Content");
|
||||
//
|
||||
// assertThat(contentList.get(0), is(not(nullValue())));
|
||||
// stmt.close();
|
||||
// conn.close();
|
||||
// }
|
||||
|
||||
public void test_statService_returnJSONActiveConnectionStackTrace() throws Exception {
|
||||
String result = DruidStatService.getInstance().service("/activeConnectionStackTrace-1.json");
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.alibaba.druid.mysql;
|
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* Created by wenshao on 10/08/2017.
|
||||
*/
|
||||
public class MySqlConnectFailTest extends TestCase {
|
||||
DruidDataSource dataSource;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
dataSource = new DruidDataSource();
|
||||
dataSource.setUrl("jdbc:mysql://rm-bp1n325y4m6h78xt3.mysql.rds.aliyuncs.com:3306/oracle_info?allowMultiQueries=true&characterEncoding=UTF8");
|
||||
dataSource.setUsername("xx");
|
||||
dataSource.setPassword("xxx");
|
||||
dataSource.setCreateScheduler(Executors.newScheduledThreadPool(10));
|
||||
}
|
||||
public void test_0() throws Exception {
|
||||
Connection conn = dataSource.getConnection();
|
||||
conn.close();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.alibaba.druid.postgresql;
|
||||
|
||||
import com.alibaba.druid.DbTestCase;
|
||||
import com.alibaba.druid.benckmark.proxy.BenchmarkExecutor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
import com.alibaba.druid.util.JdbcUtils;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.Statement;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by wenshao on 23/07/2017.
|
||||
*/
|
||||
public class PG_getCreateTableScriptTest extends DbTestCase {
|
||||
public PG_getCreateTableScriptTest() {
|
||||
super("pool_config/pg_db.properties");
|
||||
}
|
||||
|
||||
public void test_oracle() throws Exception {
|
||||
Connection conn = getConnection();
|
||||
|
||||
// 从Oracle通过DBMS_METADATA.GET_DDL获取CreateTable语句列表
|
||||
//String createTableScript = JdbcUtils.getCreateTableScript(conn, JdbcConstants.ORACLE);
|
||||
//System.out.println(createTableScript);
|
||||
|
||||
Statement stmt = conn.createStatement();;
|
||||
ResultSet rs = stmt.executeQuery("SELECT * FROM pg_catalog.pg_tables " +
|
||||
"where schemaname not in ('pg_catalog', 'information_schema', 'sys')");
|
||||
JdbcUtils.printResultSet(rs);
|
||||
|
||||
List<String> tables = JdbcUtils.showTables(conn, JdbcConstants.POSTGRESQL);
|
||||
for (String table : tables) {
|
||||
// Object cnt = JdbcUtils.executeQuery(conn, "select count(*) CNT from " + table, Collections.emptyList())
|
||||
// .get(0)
|
||||
// .get("CNT");
|
||||
System.out.println(table);
|
||||
}
|
||||
|
||||
conn.close();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user