提交 370f8922 编写于 作者: H haocao

Add subquery relative test cases.

上级 be7d9acc
......@@ -14,7 +14,6 @@ next = "/00-overview/contribution/"
1. [ISSUE #239](https://github.com/dangdangdotcom/sharding-jdbc/issues/239) LIMIT路由至多查询结果集,若只有一个不为空的结果集,分页结果不正确
1. [ISSUE #263](https://github.com/dangdangdotcom/sharding-jdbc/issues/263) 分片列和逻辑表配置可忽略大小写
1. [ISSUE #274](https://github.com/dangdangdotcom/sharding-jdbc/issues/274) 去除pom文件中多余的依赖
## 1.5.0.M1
......
......@@ -22,7 +22,7 @@ import com.dangdang.ddframe.rdb.integrate.sql.AbstractDatabaseTestSQL;
public final class OracleSQLTestSQL extends AbstractDatabaseTestSQL {
private static final String SELECT_LIMIT_WITH_BINDING_TABLE_SQL = "SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT"
+ " order0_.order_id as order_id1_0_, order0_.status as status2_0_, order0_.user_id as user_id3_0_"
+ " order0_.order_id as order_id, order0_.status as status, order0_.user_id as user_id"
+ " FROM t_order order0_ JOIN t_order_item i ON order0_.user_id = i.user_id AND order0_.order_id = i.order_id"
+ " WHERE order0_.user_id IN (%s, %s) AND order0_.order_id BETWEEN %s AND %s ORDER BY i.item_id DESC) row_ WHERE rownum <= ?) WHERE rownum > ?";
......
......@@ -73,17 +73,21 @@ public final class ShardingTablesOnlyForPreparedStatementWithSelectTest extends
@Test
public void assertSelectLimitWithBindingTable() throws SQLException, DatabaseUnitException {
if (!SQLServer.name().equalsIgnoreCase(currentDbType())) {
String expectedDataSetFile = PostgreSQL.name().equalsIgnoreCase(currentDbType()) ? TABLE_ONLY_PREFIX + "/expect/select/postgresql/SelectLimitWithBindingTable.xml"
: TABLE_ONLY_PREFIX + "/expect/select/SelectLimitWithBindingTable.xml";
if (PostgreSQL.name().equalsIgnoreCase(currentDbType())) {
String expectedDataSetFile = TABLE_ONLY_PREFIX + "/expect/select/postgresql/SelectLimitWithBindingTable.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectLimitWithBindingTableSql()), 10, 19, 1000, 1909, 1.5, 2.4);
} else if (Oracle.name().equalsIgnoreCase(currentDbType())) {
String expectedDataSetFile = TABLE_ONLY_PREFIX + "/expect/select/oracle/SelectLimitWithBindingTable.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectLimitWithBindingTableSql()), 10, 19, 1000, 1909, 2, 2);
} else {
String expectedDataSetFile = TABLE_ONLY_PREFIX + "/expect/select/SelectLimitWithBindingTable.xml";
assertDataSet(expectedDataSetFile, getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectLimitWithBindingTableSql()), 10, 19, 1000, 1909, 2, 2);
}
assertDataSet("integrate/dataset/Empty.xml", getShardingDataSource().getConnection(),
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectLimitWithBindingTableSql()), 10, 19, 1000, 1909, 10000, 2);
"t_order_item", replacePreparedStatement(getDatabaseTestSQL().getSelectLimitWithBindingTableSql()), 10, 19, 1000, 1909, 1000, 2000);
}
}
......
<?xml version="1.0" encoding="UTF-8"?>
<asserts>
<!-- // TODO subquery
<!--
<assert id="assertSelectWithOrderByForAliasAndSubQuery" sql="SELECT price FROM (SELECT o.user_id,o.price FROM order o WHERE o.order_id = 1 ORDER BY o.order_id) order by user_id" expected-sql="SELECT price[sharding_auto_gen_0(, user_id AS sharding_gen_1)] FROM (SELECT [Token(o)].user_id, [Token(o)].price[sharding_auto_gen_1(, o.order_id AS sharding_gen_1)] FROM [Token(order)] o WHERE o.order_id = 1 ORDER BY o.order_id ) ORDER BY user_id">
<tables>
<table name="order" alias="o" />
......@@ -13,7 +13,7 @@
</condition-context>
</condition-contexts>
<order-by-columns>
<order-by-column name="user_id" alias="sharding_gen_1" order-by-type="ASC" />
<order-by-column owner="o" name="user_id" alias="sharding_gen_1" order-by-type="ASC" />
</order-by-columns>
</assert>
<assert id="assertSelectWithGroupByAndSubQuery" sql="SELECT AVG(i.SUM_PRICE) avg FROM (SELECT o.order_id,SUM(o.price) AS SUM_PRICE FROM order o WHERE o.order_id = 1 GROUP BY o.order_id) i" expected-sql="SELECT AVG(i.SUM_PRICE) AS avg[sharding_auto_gen_0(, COUNT(i.SUM_PRICE) AS sharding_gen_1, SUM(i.SUM_PRICE) AS sharding_gen_2)] FROM (SELECT [Token(o)].order_id, SUM(o.price) AS SUM_PRICE FROM [Token(order)] o WHERE o.order_id = 1 GROUP BY o.order_id ) i">
......@@ -48,7 +48,6 @@
</condition-context>
</condition-contexts>
</assert>
<assert id="assertJoinSubQuery" sql="SELECT detail_result.actual_goods_count as scan_goods_count, detail_result.goods_id, detail_result.goods_code, IFNULL(result.goods_count, 0) as scaned_goods_count, IFNULL(demege.demege_count, 0) as demege_count FROM ( select t1.order_code, t1.goods_id, t1.goods_code, sum(t1.actual_goods_count) as actual_goods_count from wms_order_checktask_result_detail t1 group by t1.order_code, t1.goods_id, t1.goods_code ) detail_result LEFT JOIN ( SELECT t3.order_code, t2.goods_id, sum(t2.goods_count) as goods_count FROM wms_order_package_details t2, wms_order_package t3 WHERE t2.pkg_code = t3.pkg_code AND t3.order_code = ? AND (t2.goods_id = ? OR t2.goods_code = ?) group by t3.order_code, t2.goods_id ) result ON detail_result.order_code = result.order_code and detail_result.goods_id = result.goods_id LEFT JOIN ( SELECT t4.order_code, t4.goods_id, t4.goods_code, sum(t4.goods_count) AS demege_count FROM wms_excess_demaged_record t4 WHERE t4.container_kind = '02' GROUP BY t4.order_code, t4.goods_id, t4.goods_code ) demege ON detail_result.order_code = demege.order_code WHERE detail_result.order_code = ? AND (detail_result.goods_id = ? or detail_result.goods_code = ?)" expected-sql="SELECT [Token(detail_result)].actual_goods_count AS scan_goods_count, [Token(detail_result)].goods_id, [Token(detail_result)].goods_code, IFNULL(result.goods_count, 0) AS scaned_goods_count, IFNULL(demege.demege_count, 0) AS demege_count FROM (SELECT [Token(t1)].order_code, [Token(t1)].goods_id, [Token(t1)].goods_code, SUM(t1.actual_goods_count) AS actual_goods_count FROM [Token(wms_order_checktask_result_detail)] t1 GROUP BY t1.order_code, t1.goods_id, t1.goods_code ) detail_result LEFT JOIN (SELECT [Token(t3)].order_code, [Token(t2)].goods_id, SUM(t2.goods_count) AS goods_count FROM [Token(wms_order_package_details)] t2, [Token(wms_order_package)] t3 WHERE t2.pkg_code = t3.pkg_code AND t3.order_code = ? AND (t2.goods_id = ? OR t2.goods_code = ?) GROUP BY t3.order_code, t2.goods_id ) result ON [Token(detail_result)].order_code = [Token(result)].order_code AND [Token(detail_result)].goods_id = [Token(result)].goods_id LEFT JOIN (SELECT [Token(t4)].order_code, [Token(t4)].goods_id, [Token(t4)].goods_code, SUM(t4.goods_count) AS demege_count FROM [Token(wms_excess_demaged_record)] t4 WHERE t4.container_kind = '02' GROUP BY t4.order_code, t4.goods_id, t4.goods_code ) demege ON [Token(detail_result)].order_code = [Token(demege)].order_code WHERE [Token(detail_result)].order_code = ? AND ([Token(detail_result)].goods_id = ? OR [Token(detail_result)].goods_code = ?)">
<tables>
<table name="wms_order_checktask_result_detail" alias="t1" />
......
<dataset>
<t_order_item order_by_derived_0="100801" order_id="1008" rownum_="1" user_id="10" status="init" />
<t_order_item order_by_derived_0="100800" order_id="1008" rownum_="2" user_id="10" status="init" />
</dataset>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册