improved sql parser.

This commit is contained in:
wenshao
2017-08-13 21:05:08 +08:00
parent e693b08304
commit e1a6d99c1c
13 changed files with 566 additions and 123 deletions
@@ -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"));
}
//
}
@@ -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);
}
}
@@ -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();
}
}