You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2022/06/08 12:31:50 UTC

[shardingsphere] branch master updated: Refactor ShardingSphereOptimizer (#18246)

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

menghaoran 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 8c2d591dc8d Refactor ShardingSphereOptimizer (#18246)
8c2d591dc8d is described below

commit 8c2d591dc8dc41084f8bf47bbe27405d7af1b148
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Jun 8 20:31:43 2022 +0800

    Refactor ShardingSphereOptimizer (#18246)
    
    * Refactor ShardingSphereOptimizer
    
    * Refactor ShardingSphereOptimizer
    
    * Refactor ShardingSphereOptimizer
    
    * Refactor ShardingSphereOptimizer
    
    * Refactor ShardingSphereOptimizer
---
 .../federation/optimizer/ShardingSphereOptimizer.java   | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
index fb4af524b84..d5fef58e66e 100644
--- a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
+++ b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizer.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.federation.optimizer;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.calcite.adapter.enumerable.EnumerableConvention;
+import org.apache.calcite.plan.Convention;
 import org.apache.calcite.plan.RelOptPlanner;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelCollation;
@@ -73,18 +74,20 @@ public final class ShardingSphereOptimizer {
     
     private RelNode optimize(final SqlToRelConverter converter, final RelRoot relRoot) {
         RelOptPlanner planner = converter.getCluster().getPlanner();
-        RelRoot optimizedRelRoot = createRelRoot(planner.changeTraits(relRoot.rel, converter.getCluster().traitSet().replace(EnumerableConvention.INSTANCE)), relRoot.validatedRowType);
-        return Programs.standard().run(planner, optimizedRelRoot.rel, getDesireRootTraitSet(optimizedRelRoot), Collections.emptyList(), Collections.emptyList());
+        RelNode optimizedRelNode = planner.changeTraits(relRoot.rel, getDesiredTraitSet(converter.getCluster().traitSet(), EnumerableConvention.INSTANCE));
+        RelRoot optimizedRelRoot = createOptimizedRelRoot(optimizedRelNode, relRoot.validatedRowType);
+        return Programs.standard().run(planner, optimizedRelRoot.rel, optimizedRelRoot.rel.getTraitSet(), Collections.emptyList(), Collections.emptyList());
     }
     
-    private RelRoot createRelRoot(final RelNode relNode, final RelDataType resultType) {
+    // TODO replace to related convention
+    private RelTraitSet getDesiredTraitSet(final RelTraitSet relTraitSet, final Convention convention) {
+        return relTraitSet.replace(convention).simplify();
+    }
+    
+    private RelRoot createOptimizedRelRoot(final RelNode relNode, final RelDataType resultType) {
         RelDataType rowType = relNode.getRowType();
         List<Pair<Integer, String>> fields = Pair.zip(ImmutableIntList.identity(rowType.getFieldCount()), rowType.getFieldNames());
         RelCollation collation = relNode instanceof Sort ? ((Sort) relNode).collation : RelCollations.EMPTY;
         return new RelRoot(relNode, resultType, SqlKind.SELECT, fields, collation, new ArrayList<>());
     }
-    
-    private RelTraitSet getDesireRootTraitSet(final RelRoot relRoot) {
-        return relRoot.rel.getTraitSet().replace(EnumerableConvention.INSTANCE).replace(relRoot.collation).simplify();
-    }
 }