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

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


The following commit(s) were added to refs/heads/master by this push:
     new 40baa00  [CALCITE-4638] VolcanoPlanner fails to recognize 
transformation rule correctly in the top-down mode (Vladimir Ozerov)
40baa00 is described below

commit 40baa0056980ddbd4fcd4e957f59d3b12d86e739
Author: Vladimir Ozerov <[email protected]>
AuthorDate: Sun Jun 13 20:18:32 2021 +0300

    [CALCITE-4638] VolcanoPlanner fails to recognize transformation rule 
correctly in the top-down mode (Vladimir Ozerov)
---
 .../org/apache/calcite/plan/volcano/VolcanoPlanner.java  | 10 +---------
 .../resources/org/apache/calcite/test/TopDownOptTest.xml | 16 ++++++++--------
 2 files changed, 9 insertions(+), 17 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java 
b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
index 14caf5a..3648cd0 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
@@ -1553,15 +1553,7 @@ public class VolcanoPlanner extends 
AbstractRelOptPlanner {
    */
   @API(since = "1.24", status = API.Status.EXPERIMENTAL)
   protected boolean isTransformationRule(VolcanoRuleCall match) {
-    if (match.getRule() instanceof SubstitutionRule) {
-      return true;
-    }
-    if (match.getRule() instanceof ConverterRule
-        && match.getRule().getOutTrait() == rootConvention) {
-      return false;
-    }
-    return match.getRule().getOperand().trait == Convention.NONE
-        || match.getRule().getOperand().trait == null;
+    return match.getRule() instanceof TransformationRule;
   }
 
 
diff --git a/core/src/test/resources/org/apache/calcite/test/TopDownOptTest.xml 
b/core/src/test/resources/org/apache/calcite/test/TopDownOptTest.xml
index a8315af..a2eba17 100644
--- a/core/src/test/resources/org/apache/calcite/test/TopDownOptTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/TopDownOptTest.xml
@@ -896,8 +896,8 @@ LogicalProject(ENAME=[$0], JOB=[$1], EXPR$2=[$2], 
ENAME0=[$3], JOB0=[$4], SAL=[$
       <![CDATA[
 EnumerableCalc(expr#0..7=[{inputs}], proj#0..6=[{exprs}])
   EnumerableMergeJoin(condition=[AND(=($1, $7), =($0, $3))], joinType=[inner])
-    EnumerableCalc(expr#0..2=[{inputs}], expr#3=[CAST($t1):VARCHAR NOT NULL], 
expr#4=[1], expr#5=[+($t2, $t4)], ENAME=[$t0], JOB=[$t3], EXPR$2=[$t5])
-      EnumerableSort(sort0=[$1], sort1=[$0], dir0=[ASC], dir1=[ASC])
+    EnumerableSort(sort0=[$1], sort1=[$0], dir0=[ASC], dir1=[ASC])
+      EnumerableCalc(expr#0..2=[{inputs}], expr#3=[CAST($t1):VARCHAR NOT 
NULL], expr#4=[1], expr#5=[+($t2, $t4)], ENAME=[$t0], JOB=[$t3], EXPR$2=[$t5])
         EnumerableLimit(fetch=[100])
           EnumerableCalc(expr#0..8=[{inputs}], ENAME=[$t1], JOB=[$t2], 
SAL=[$t5])
             EnumerableTableScan(table=[[CATALOG, SALES, EMP]])
@@ -1346,8 +1346,8 @@ LogicalProject(ENAME=[$0], JOB=[$1], EXPR$2=[$2], 
ENAME0=[$3], JOB0=[$4], SAL=[$
       <![CDATA[
 EnumerableProject(ENAME=[$0], JOB=[$1], EXPR$2=[$2], ENAME0=[$3], JOB0=[$4], 
SAL=[$5], COMM=[$6])
   EnumerableMergeJoin(condition=[AND(=($1, $7), =($0, $3))], joinType=[inner])
-    EnumerableProject(ENAME=[$0], JOB=[CAST($1):VARCHAR NOT NULL], 
EXPR$2=[+($2, 1)])
-      EnumerableSort(sort0=[$1], sort1=[$0], dir0=[ASC], dir1=[ASC])
+    EnumerableSort(sort0=[$1], sort1=[$0], dir0=[ASC], dir1=[ASC])
+      EnumerableProject(ENAME=[$0], JOB=[CAST($1):VARCHAR NOT NULL], 
EXPR$2=[+($2, 1)])
         EnumerableLimit(fetch=[100])
           EnumerableProject(ENAME=[$1], JOB=[$2], SAL=[$5])
             EnumerableTableScan(table=[[CATALOG, SALES, EMP]])
@@ -1407,8 +1407,8 @@ LogicalSort(sort0=[$0], sort1=[$2], dir0=[ASC], 
dir1=[ASC])
     </Resource>
     <Resource name="planAfter">
       <![CDATA[
-EnumerableProject(ENAME=[$1], EXPR$1=[*($0, -1)], JOB=[$2])
-  EnumerableSort(sort0=[$1], sort1=[$2], dir0=[ASC], dir1=[ASC])
+EnumerableSort(sort0=[$0], sort1=[$2], dir0=[ASC], dir1=[ASC])
+  EnumerableProject(ENAME=[$1], EXPR$1=[*($0, -1)], JOB=[$2])
     EnumerableLimit(fetch=[10])
       EnumerableSort(sort0=[$1], sort1=[$0], sort2=[$2], dir0=[ASC], 
dir1=[ASC], dir2=[ASC])
         EnumerableTableScan(table=[[CATALOG, SALES, EMP]])
@@ -1432,8 +1432,8 @@ LogicalSort(sort0=[$0], sort1=[$2], dir0=[ASC], 
dir1=[ASC])
     </Resource>
     <Resource name="planAfter">
       <![CDATA[
-EnumerableProject(COMM=[$6], DEPTNO=[$7], SLACKER=[$8])
-  EnumerableSort(sort0=[$6], sort1=[$8], dir0=[ASC], dir1=[ASC])
+EnumerableSort(sort0=[$0], sort1=[$2], dir0=[ASC], dir1=[ASC])
+  EnumerableProject(COMM=[$6], DEPTNO=[$7], SLACKER=[$8])
     EnumerableLimit(fetch=[10])
       EnumerableSort(sort0=[$6], sort1=[$7], sort2=[$8], dir0=[ASC], 
dir1=[ASC], dir2=[ASC])
         EnumerableTableScan(table=[[CATALOG, SALES, EMP]])

Reply via email to