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 0ce169ac97e feat: remove useless rules for push down filter and 
project. remove useless subquery rules temporarily, and subquery optimization 
will be considered carefully in the next step. (#20721)
0ce169ac97e is described below

commit 0ce169ac97e780b92d12211e17a52c7110b5f61a
Author: boyjoy1127 <[email protected]>
AuthorDate: Fri Sep 2 13:57:30 2022 +0800

    feat: remove useless rules for push down filter and project. remove useless 
subquery rules temporarily, and subquery optimization will be considered 
carefully in the next step. (#20721)
---
 .../planner/QueryOptimizePlannerFactory.java       |  9 +++----
 .../optimizer/ShardingSphereOptimizerTest.java     | 30 +++++++++++-----------
 2 files changed, 19 insertions(+), 20 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/planner/QueryOptimizePlannerFactory.java
 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/planner/QueryOptimizePlannerFactory.java
index 2d45847133a..d6b7c15f3c7 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/planner/QueryOptimizePlannerFactory.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/planner/QueryOptimizePlannerFactory.java
@@ -64,9 +64,9 @@ public final class QueryOptimizePlannerFactory {
      */
     public static RelOptPlanner createHepPlannerWithoutCalc() {
         HepProgramBuilder builder = new HepProgramBuilder();
-        
builder.addGroupBegin().addRuleCollection(getSubQueryRules()).addGroupEnd().addMatchOrder(HepMatchOrder.DEPTH_FIRST);
         
builder.addGroupBegin().addRuleCollection(getFilterRules()).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
         
builder.addGroupBegin().addRuleCollection(getProjectRules()).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
+        
builder.addGroupBegin().addRuleInstance(CoreRules.PROJECT_MERGE).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
         builder.addMatchLimit(DEFAULT_MATCH_LIMIT);
         return new HepPlanner(builder.build());
     }
@@ -91,8 +91,8 @@ public final class QueryOptimizePlannerFactory {
     public static RelOptPlanner createHepPlanner() {
         HepProgramBuilder builder = new HepProgramBuilder();
         
builder.addGroupBegin().addRuleCollection(getSubQueryRules()).addGroupEnd().addMatchOrder(HepMatchOrder.DEPTH_FIRST);
-        
builder.addGroupBegin().addRuleCollection(getFilterRules()).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
         
builder.addGroupBegin().addRuleCollection(getProjectRules()).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
+        
builder.addGroupBegin().addRuleCollection(getFilterRules()).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
         
builder.addGroupBegin().addRuleCollection(getCalcRules()).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
         builder.addMatchLimit(DEFAULT_MATCH_LIMIT);
         return new HepPlanner(builder.build());
@@ -137,12 +137,10 @@ public final class QueryOptimizePlannerFactory {
     
     private static Collection<RelOptRule> getProjectRules() {
         Collection<RelOptRule> result = new LinkedList<>();
-        
result.add(AggregateExpandDistinctAggregatesRule.Config.DEFAULT.toRule());
+        result.add(CoreRules.PROJECT_MERGE);
         result.add(CoreRules.PROJECT_CORRELATE_TRANSPOSE);
         result.add(CoreRules.PROJECT_SET_OP_TRANSPOSE);
         result.add(CoreRules.PROJECT_JOIN_TRANSPOSE);
-        result.add(CoreRules.PROJECT_WINDOW_TRANSPOSE);
-        result.add(CoreRules.PROJECT_FILTER_TRANSPOSE);
         result.add(CoreRules.PROJECT_REDUCE_EXPRESSIONS);
         result.add(ProjectRemoveRule.Config.DEFAULT.toRule());
         result.add(TranslatableProjectRule.INSTANCE);
@@ -158,6 +156,7 @@ public final class QueryOptimizePlannerFactory {
         result.add(CoreRules.FILTER_PROJECT_TRANSPOSE);
         result.add(CoreRules.FILTER_SET_OP_TRANSPOSE);
         result.add(CoreRules.FILTER_REDUCE_EXPRESSIONS);
+        result.add(CoreRules.FILTER_MERGE);
         result.add(CoreRules.JOIN_PUSH_EXPRESSIONS);
         result.add(CoreRules.JOIN_PUSH_TRANSITIVE_PREDICATES);
         result.add(TranslatableFilterRule.INSTANCE);
diff --git 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
index 930b0c15d1e..f5f5e31e421 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
@@ -130,11 +130,11 @@ public final class ShardingSphereOptimizerTest {
         ShardingSphereSQLParserEngine sqlParserEngine = 
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
 H2DatabaseType()));
         SQLStatement sqlStatement = 
sqlParserEngine.parse(SELECT_CROSS_JOIN_CONDITION, false);
         String actual = optimizer.optimize(sqlStatement).explain();
-        String expected = "EnumerableCalc(expr#0..6=[{inputs}], 
proj#0..1=[{exprs}], user_id0=[$t4])" + LINE_SEPARATOR
-                + "  EnumerableHashJoin(condition=[=($3, $6)], 
joinType=[inner])" + LINE_SEPARATOR
-                + "    EnumerableCalc(expr#0..2=[{inputs}], 
expr#3=[CAST($t1):VARCHAR], proj#0..3=[{exprs}])" + LINE_SEPARATOR
+        String expected = "EnumerableCalc(expr#0..4=[{inputs}], 
proj#0..1=[{exprs}], user_id0=[$t3])" + LINE_SEPARATOR
+                + "  EnumerableHashJoin(condition=[=($2, $4)], 
joinType=[inner])" + LINE_SEPARATOR
+                + "    EnumerableCalc(expr#0..2=[{inputs}], 
expr#3=[CAST($t1):VARCHAR], proj#0..1=[{exprs}], user_id0=[$t3])" + 
LINE_SEPARATOR
                 + "      TranslatableTableScan(table=[[federate_jdbc, 
t_order_federate]], fields=[[0, 1, 2]])" + LINE_SEPARATOR
-                + "    EnumerableCalc(expr#0..1=[{inputs}], 
expr#2=[CAST($t0):VARCHAR], proj#0..2=[{exprs}])" + LINE_SEPARATOR
+                + "    EnumerableCalc(expr#0..1=[{inputs}], 
expr#2=[CAST($t0):VARCHAR], user_id=[$t0], user_id0=[$t2])" + LINE_SEPARATOR
                 + "      TranslatableTableScan(table=[[federate_jdbc, 
t_user_info]], fields=[[0, 1]], filters=[[13, null]])" + LINE_SEPARATOR;
         assertThat(actual, is(expected));
     }
@@ -162,11 +162,11 @@ public final class ShardingSphereOptimizerTest {
         ShardingSphereSQLParserEngine sqlParserEngine = 
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
 H2DatabaseType()));
         SQLStatement sqlStatement = sqlParserEngine.parse(SELECT_CROSS_WHERE, 
false);
         String actual = optimizer.optimize(sqlStatement).explain();
-        String expected = "EnumerableCalc(expr#0..6=[{inputs}], 
proj#0..1=[{exprs}], user_id0=[$t4])" + LINE_SEPARATOR
-                + "  EnumerableHashJoin(condition=[=($3, $6)], 
joinType=[inner])" + LINE_SEPARATOR
-                + "    EnumerableCalc(expr#0..2=[{inputs}], 
expr#3=[CAST($t1):VARCHAR], proj#0..3=[{exprs}])" + LINE_SEPARATOR
+        String expected = "EnumerableCalc(expr#0..4=[{inputs}], 
proj#0..1=[{exprs}], user_id0=[$t3])" + LINE_SEPARATOR
+                + "  EnumerableHashJoin(condition=[=($2, $4)], 
joinType=[inner])" + LINE_SEPARATOR
+                + "    EnumerableCalc(expr#0..2=[{inputs}], 
expr#3=[CAST($t1):VARCHAR], proj#0..1=[{exprs}], user_id0=[$t3])" + 
LINE_SEPARATOR
                 + "      TranslatableTableScan(table=[[federate_jdbc, 
t_order_federate]], fields=[[0, 1, 2]])" + LINE_SEPARATOR
-                + "    EnumerableCalc(expr#0..1=[{inputs}], 
expr#2=[CAST($t0):VARCHAR], proj#0..2=[{exprs}])" + LINE_SEPARATOR
+                + "    EnumerableCalc(expr#0..1=[{inputs}], 
expr#2=[CAST($t0):VARCHAR], user_id=[$t0], user_id0=[$t2])" + LINE_SEPARATOR
                 + "      TranslatableTableScan(table=[[federate_jdbc, 
t_user_info]], fields=[[0, 1]])" + LINE_SEPARATOR;
         assertThat(actual, is(expected));
     }
@@ -190,11 +190,11 @@ public final class ShardingSphereOptimizerTest {
         ShardingSphereSQLParserEngine sqlParserEngine = 
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
 H2DatabaseType()));
         SQLStatement sqlStatement = 
sqlParserEngine.parse(SELECT_CROSS_WHERE_CONDITION, false);
         String actual = optimizer.optimize(sqlStatement).explain();
-        String expected = "EnumerableCalc(expr#0..6=[{inputs}], 
proj#0..1=[{exprs}], user_id0=[$t4])" + LINE_SEPARATOR
-                + "  EnumerableHashJoin(condition=[=($3, $6)], 
joinType=[inner])" + LINE_SEPARATOR
-                + "    EnumerableCalc(expr#0..2=[{inputs}], 
expr#3=[CAST($t1):VARCHAR], proj#0..3=[{exprs}])" + LINE_SEPARATOR
+        String expected = "EnumerableCalc(expr#0..4=[{inputs}], 
proj#0..1=[{exprs}], user_id0=[$t3])" + LINE_SEPARATOR
+                + "  EnumerableHashJoin(condition=[=($2, $4)], 
joinType=[inner])" + LINE_SEPARATOR
+                + "    EnumerableCalc(expr#0..2=[{inputs}], 
expr#3=[CAST($t1):VARCHAR], proj#0..1=[{exprs}], user_id0=[$t3])" + 
LINE_SEPARATOR
                 + "      TranslatableTableScan(table=[[federate_jdbc, 
t_order_federate]], fields=[[0, 1, 2]])" + LINE_SEPARATOR
-                + "    EnumerableCalc(expr#0..1=[{inputs}], 
expr#2=[CAST($t0):VARCHAR], proj#0..2=[{exprs}])" + LINE_SEPARATOR
+                + "    EnumerableCalc(expr#0..1=[{inputs}], 
expr#2=[CAST($t0):VARCHAR], user_id=[$t0], user_id0=[$t2])" + LINE_SEPARATOR
                 + "      TranslatableTableScan(table=[[federate_jdbc, 
t_user_info]], fields=[[0, 1]], filters=[[13, null]])" + LINE_SEPARATOR;
         assertThat(actual, is(expected));
     }
@@ -213,9 +213,9 @@ public final class ShardingSphereOptimizerTest {
         ShardingSphereSQLParserEngine sqlParserEngine = 
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
 H2DatabaseType()));
         SQLStatement sqlStatement = 
sqlParserEngine.parse(SELECT_SUBQUERY_WHERE_EXIST, false);
         String actual = optimizer.optimize(sqlStatement).explain();
-        String expected = "EnumerableCalc(expr#0..2=[{inputs}], expr#3=[IS NOT 
NULL($t2)], proj#0..1=[{exprs}], $condition=[$t3])" + LINE_SEPARATOR
-                + "  EnumerableCorrelate(correlation=[$cor1], joinType=[left], 
requiredColumns=[{1}])" + LINE_SEPARATOR
-                + "    TranslatableTableScan(table=[[federate_jdbc, 
t_order_federate]], fields=[[0, 1]])" + LINE_SEPARATOR
+        String expected = "EnumerableCalc(expr#0..3=[{inputs}], expr#4=[IS NOT 
NULL($t3)], proj#0..1=[{exprs}], $condition=[$t4])" + LINE_SEPARATOR
+                + "  EnumerableCorrelate(correlation=[$cor0], joinType=[left], 
requiredColumns=[{1}])" + LINE_SEPARATOR
+                + "    TranslatableTableScan(table=[[federate_jdbc, 
t_order_federate]], fields=[[0, 1, 2]])" + LINE_SEPARATOR
                 + "    EnumerableAggregate(group=[{}], agg#0=[MIN($0)])" + 
LINE_SEPARATOR
                 + "      EnumerableCalc(expr#0..1=[{inputs}], expr#2=[true], 
$f0=[$t2])" + LINE_SEPARATOR
                 + "        TranslatableTableScan(table=[[federate_jdbc, 
t_user_info]], fields=[[0, 1]], filters=[[null, null]])" + LINE_SEPARATOR;

Reply via email to