This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 50854e100ac test: add test case for federation optimization test. 
(#22545)
50854e100ac is described below

commit 50854e100ac4002e0e4cc25ff6925df2673a6ff4
Author: boyjoy1127 <[email protected]>
AuthorDate: Thu Dec 1 08:30:44 2022 +0800

    test: add test case for federation optimization test. (#22545)
    
    Co-authored-by: boyjoy1127 <[email protected]>
---
 .../optimizer/SQLOptimizeEngineTest.java           |  4 +-
 .../resources/cases/federation-query-sql-cases.xml | 47 ++++++++++++++++++++++
 2 files changed, 49 insertions(+), 2 deletions(-)

diff --git 
a/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/SQLOptimizeEngineTest.java
 
b/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/SQLOptimizeEngineTest.java
index 9ba52c19364..e94f88bff91 100644
--- 
a/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/SQLOptimizeEngineTest.java
+++ 
b/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/SQLOptimizeEngineTest.java
@@ -87,7 +87,7 @@ public final class SQLOptimizeEngineTest {
     @Before
     public void init() {
         Map<String, ShardingSphereTable> tables = new HashMap<>(2, 1);
-        tables.put("t_order_federate", createOrderTableMetaData());
+        tables.put("t_order_federate", createOrderFederationTableMetaData());
         tables.put("t_user_info", createUserInfoTableMetaData());
         tables.put("t_order", createTOrderTableMetaData());
         tables.put("t_order_item", createTOrderItemTableMetaData());
@@ -99,7 +99,7 @@ public final class SQLOptimizeEngineTest {
         optimizeEngine = new SQLOptimizeEngine(converter, 
SQLFederationPlannerUtil.createHepPlanner());
     }
     
-    private ShardingSphereTable createOrderTableMetaData() {
+    private ShardingSphereTable createOrderFederationTableMetaData() {
         ShardingSphereColumn orderIdColumn = new 
ShardingSphereColumn("order_id", Types.VARCHAR, true, false, false, true, 
false);
         ShardingSphereColumn userIdColumn = new 
ShardingSphereColumn("user_id", Types.VARCHAR, false, false, false, true, 
false);
         ShardingSphereColumn statusColumn = new ShardingSphereColumn("status", 
Types.VARCHAR, false, false, false, true, false);
diff --git 
a/kernel/sql-federation/optimizer/src/test/resources/cases/federation-query-sql-cases.xml
 
b/kernel/sql-federation/optimizer/src/test/resources/cases/federation-query-sql-cases.xml
index 4c26e2c9e14..92039547195 100644
--- 
a/kernel/sql-federation/optimizer/src/test/resources/cases/federation-query-sql-cases.xml
+++ 
b/kernel/sql-federation/optimizer/src/test/resources/cases/federation-query-sql-cases.xml
@@ -81,4 +81,51 @@
         <assertion expected-result="EnumerableCalc(expr#0..9=[{inputs}], 
proj#0..2=[{exprs}], item_id=[$t4], order_id1=[$t5], user_id0=[$t6], 
status0=[$t7], remarks=[$t8])  EnumerableHashJoin(condition=[=($3, $9)], 
joinType=[inner])    EnumerableCalc(expr#0..2=[{inputs}], 
expr#3=[CAST($t0):INTEGER], proj#0..3=[{exprs}])      
TranslatableTableScan(table=[[federate_jdbc, t_order_federate]], fields=[[0, 1, 
2]])    EnumerableCalc(expr#0..4=[{inputs}], expr#5=[CAST($t0):INTEGER], 
proj#0..5=[{ [...]
     </test-case>
     
+    <test-case sql="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id 
= i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (10, 11) AND 
o.order_id BETWEEN 1000 AND 1909 ORDER BY i.item_id">
+        <assertion expected-result="EnumerableSort(sort0=[$0], dir0=[ASC])  
EnumerableCalc(expr#0..7=[{inputs}], item_id=[$t2], order_id=[$t3], 
user_id=[$t4], product_id=[$t5], quantity=[$t6], creation_date=[$t7])    
EnumerableHashJoin(condition=[AND(=($1, $4), =($0, $3))], joinType=[inner])     
 TranslatableTableScan(table=[[federate_jdbc, t_order]], fields=[[0, 1]], 
filters=[[AND(SEARCH($1, Sarg[10, 11]), SEARCH($0, Sarg[[1000..1909]])), 
null]])      TranslatableTableScan(table=[[feder [...]
+    </test-case>
+    
+    <test-case sql="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id 
= i.user_id AND o.order_id = i.order_id ORDER BY i.item_id">
+        <assertion expected-result="EnumerableSort(sort0=[$0], dir0=[ASC])  
EnumerableCalc(expr#0..7=[{inputs}], item_id=[$t2], order_id=[$t3], 
user_id=[$t4], product_id=[$t5], quantity=[$t6], creation_date=[$t7])    
EnumerableHashJoin(condition=[AND(=($1, $4), =($0, $3))], joinType=[inner])     
 TranslatableTableScan(table=[[federate_jdbc, t_order]], fields=[[0, 1]])      
TranslatableTableScan(table=[[federate_jdbc, t_order_item]], fields=[[0, 1, 2, 
3, 4, 5]])" />
+    </test-case>
+    
+    <test-case sql="SELECT i.* FROM t_order o JOIN t_order_item i ON 
o.order_id=i.order_id AND o.user_id = i.user_id WHERE o.order_id = 1000">
+        <assertion expected-result="EnumerableCalc(expr#0..7=[{inputs}], 
item_id=[$t2], order_id=[$t3], user_id=[$t4], product_id=[$t5], quantity=[$t6], 
creation_date=[$t7])  EnumerableHashJoin(condition=[AND(=($0, $3), =($1, $4))], 
joinType=[inner])    TranslatableTableScan(table=[[federate_jdbc, t_order]], 
fields=[[0, 1]], filters=[[=(CAST($0):BIGINT, 1000), null]])    
TranslatableTableScan(table=[[federate_jdbc, t_order_item]], fields=[[0, 1, 2, 
3, 4, 5]], filters=[[=(CAST($1):BIGINT, [...]
+    </test-case>
+    
+    <test-case sql="SELECT i.* FROM t_order o FORCE INDEX(order_index) JOIN 
t_order_item i ON o.order_id=i.order_id AND o.user_id = i.user_id AND 
o.order_id = 1000">
+        <assertion expected-result="EnumerableCalc(expr#0..7=[{inputs}], 
item_id=[$t2], order_id=[$t3], user_id=[$t4], product_id=[$t5], quantity=[$t6], 
creation_date=[$t7])  EnumerableHashJoin(condition=[AND(=($0, $3), =($1, $4))], 
joinType=[inner])    TranslatableTableScan(table=[[federate_jdbc, t_order]], 
fields=[[0, 1]], filters=[[=(CAST($0):BIGINT, 1000), null]])    
TranslatableTableScan(table=[[federate_jdbc, t_order_item]], fields=[[0, 1, 2, 
3, 4, 5]], filters=[[=(CAST($1):BIGINT, [...]
+    </test-case>
+    
+    <test-case sql="SELECT i.* FROM t_order o FORCE INDEX(order_index) JOIN 
t_order_item i ON o.order_id=i.order_id AND o.user_id = i.user_id AND 
o.order_id in (1000,1001)">
+        <assertion expected-result="EnumerableCalc(expr#0..7=[{inputs}], 
item_id=[$t2], order_id=[$t3], user_id=[$t4], product_id=[$t5], quantity=[$t6], 
creation_date=[$t7])  EnumerableHashJoin(condition=[AND(=($0, $3), =($1, $4))], 
joinType=[inner])    TranslatableTableScan(table=[[federate_jdbc, t_order]], 
fields=[[0, 1]], filters=[[SEARCH($0, Sarg[1000L:JavaType(long), 
1001L:JavaType(long)]:JavaType(long)), null]])    
TranslatableTableScan(table=[[federate_jdbc, t_order_item]], fields [...]
+    </test-case>
+    
+    <test-case sql="SELECT i.* FROM t_order o FORCE INDEX(order_index) JOIN 
t_order_item i ON o.order_id=i.order_id AND o.user_id = i.user_id AND 
o.order_id in (1000,1001)">
+        <assertion expected-result="EnumerableCalc(expr#0..7=[{inputs}], 
item_id=[$t2], order_id=[$t3], user_id=[$t4], product_id=[$t5], quantity=[$t6], 
creation_date=[$t7])  EnumerableHashJoin(condition=[AND(=($0, $3), =($1, $4))], 
joinType=[inner])    TranslatableTableScan(table=[[federate_jdbc, t_order]], 
fields=[[0, 1]], filters=[[SEARCH($0, Sarg[1000L:JavaType(long), 
1001L:JavaType(long)]:JavaType(long)), null]])    
TranslatableTableScan(table=[[federate_jdbc, t_order_item]], fields [...]
+    </test-case>
+    
+    <test-case sql="SELECT COUNT(*) AS items_count FROM t_order o, 
t_order_item i WHERE o.user_id = i.user_id AND o.order_id = i.order_id AND 
o.user_id IN (10, 11) AND o.order_id BETWEEN 1000 AND 1909">
+        <assertion expected-result="EnumerableAggregate(group=[{}], 
items_count=[COUNT()])  EnumerableHashJoin(condition=[AND(=($1, $8), =($0, 
$7))], joinType=[inner])    TranslatableTableScan(table=[[federate_jdbc, 
t_order]], fields=[[0, 1, 2, 3, 4, 5]], filters=[[AND(SEARCH($1, Sarg[10, 11]), 
SEARCH($0, Sarg[[1000..1909]])), null, null, null, null, null]])    
TranslatableTableScan(table=[[federate_jdbc, t_order_item]], fields=[[0, 1, 2, 
3, 4, 5]], filters=[[AND(SEARCH($2, Sarg[10, 11]) [...]
+    </test-case>
+    
+    <test-case sql="SELECT COUNT(*) AS items_count FROM t_order o JOIN 
t_order_item i ON o.user_id = i.user_id AND o.order_id = i.order_id WHERE 
o.user_id IN (10, 11) AND o.order_id BETWEEN 1000 AND 1909">
+        <assertion expected-result="EnumerableAggregate(group=[{}], 
items_count=[COUNT()])  EnumerableHashJoin(condition=[AND(=($1, $8), =($0, 
$7))], joinType=[inner])    TranslatableTableScan(table=[[federate_jdbc, 
t_order]], fields=[[0, 1, 2, 3, 4, 5]], filters=[[AND(SEARCH($1, Sarg[10, 11]), 
SEARCH($0, Sarg[[1000..1909]])), null, null, null, null, null]])    
TranslatableTableScan(table=[[federate_jdbc, t_order_item]], fields=[[0, 1, 2, 
3, 4, 5]], filters=[[AND(SEARCH($2, Sarg[10, 11]) [...]
+    </test-case>
+    
+    <test-case sql="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id 
= i.user_id AND o.order_id = i.order_id WHERE (o.order_id = 1000 OR o.order_id 
= 1100) AND o.user_id = 11">
+        <assertion expected-result="EnumerableCalc(expr#0..7=[{inputs}], 
item_id=[$t2], order_id=[$t3], user_id=[$t4], product_id=[$t5], quantity=[$t6], 
creation_date=[$t7])  EnumerableHashJoin(condition=[AND(=($1, $4), =($0, $3))], 
joinType=[inner])    TranslatableTableScan(table=[[federate_jdbc, t_order]], 
fields=[[0, 1]], filters=[[AND(SEARCH(CAST($0):BIGINT, Sarg[1000L:BIGINT, 
1100L:BIGINT]:BIGINT), =(CAST($1):INTEGER, 11)), null]])    
TranslatableTableScan(table=[[federate_jdbc, t_o [...]
+    </test-case>
+    
+    <test-case sql="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id 
= i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (10, 19) AND 
o.order_id BETWEEN 1000 AND 1909 ORDER BY i.item_id DESC">
+        <assertion expected-result="EnumerableSort(sort0=[$0], dir0=[DESC])  
EnumerableCalc(expr#0..7=[{inputs}], item_id=[$t2], order_id=[$t3], 
user_id=[$t4], product_id=[$t5], quantity=[$t6], creation_date=[$t7])    
EnumerableHashJoin(condition=[AND(=($1, $4), =($0, $3))], joinType=[inner])     
 TranslatableTableScan(table=[[federate_jdbc, t_order]], fields=[[0, 1]], 
filters=[[AND(SEARCH($1, Sarg[10, 19]), SEARCH($0, Sarg[[1000..1909]])), 
null]])      TranslatableTableScan(table=[[fede [...]
+    </test-case>
+    
+    <test-case sql="SELECT i.*, o.* FROM t_order o JOIN t_order_item i ON 
o.user_id = i.user_id AND o.order_id = i.order_id ORDER BY item_id">
+        <assertion expected-result="EnumerableSort(sort0=[$0], dir0=[ASC])  
EnumerableCalc(expr#0..11=[{inputs}], item_id=[$t6], order_id=[$t7], 
user_id=[$t8], product_id=[$t9], quantity=[$t10], creation_date=[$t11], 
order_id0=[$t0], user_id0=[$t1], status=[$t2], merchant_id=[$t3], remark=[$t4], 
creation_date0=[$t5])    EnumerableHashJoin(condition=[AND(=($1, $8), =($0, 
$7))], joinType=[inner])      TranslatableTableScan(table=[[federate_jdbc, 
t_order]], fields=[[0, 1, 2, 3, 4, 5]])      [...]
+    </test-case>
+    
+    <test-case sql="SELECT i.* FROM t_order o JOIN t_order_item i ON o.user_id 
= i.user_id AND o.order_id = i.order_id WHERE o.user_id IN (10, 19) AND 
o.order_id BETWEEN 1000 AND 1909 ORDER BY i.item_id DESC LIMIT 2">
+        <assertion expected-result="EnumerableLimit(fetch=[2])  
EnumerableSort(sort0=[$0], dir0=[DESC])    EnumerableCalc(expr#0..7=[{inputs}], 
item_id=[$t2], order_id=[$t3], user_id=[$t4], product_id=[$t5], quantity=[$t6], 
creation_date=[$t7])      EnumerableHashJoin(condition=[AND(=($1, $4), =($0, 
$3))], joinType=[inner])        TranslatableTableScan(table=[[federate_jdbc, 
t_order]], fields=[[0, 1]], filters=[[AND(SEARCH($1, Sarg[10, 19]), SEARCH($0, 
Sarg[[1000..1909]])), null]])       [...]
+    </test-case>
 </test-cases>

Reply via email to