Commit 370f8922 authored by haocao's avatar haocao
Browse files

Add subquery relative test cases.

parent be7d9acc
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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

+1 −1
Original line number Diff line number Diff line
@@ -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 > ?";
    
+7 −3
Original line number Diff line number Diff line
@@ -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);
        }
    }
    
+2 −3
Original line number Diff line number Diff line
<?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" />
+4 −0
Original line number Diff line number Diff line
<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>