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 1653e21  [CALCITE-3821] RelOptUtil::containsMultisetOrWindowedAgg 
doesn't really check multiset (Xiening Dai)
1653e21 is described below

commit 1653e21f4fa552f160d49a33a659da618c6f0920
Author: Xiening Dai <[email protected]>
AuthorDate: Tue Feb 25 11:45:42 2020 -0800

    [CALCITE-3821] RelOptUtil::containsMultisetOrWindowedAgg doesn't really 
check multiset (Xiening Dai)
    
    The check of containsMultiset() is shortcut by a "false" constant. Also what
    the function really does is to check rel node does not contain window aggs.
    
    Close #1827
---
 .../adapter/enumerable/EnumerableCalcRule.java     |  2 +-
 .../adapter/enumerable/EnumerableFilterRule.java   |  2 +-
 .../adapter/enumerable/EnumerableProjectRule.java  |  2 +-
 .../org/apache/calcite/interpreter/Bindables.java  |  4 +--
 .../java/org/apache/calcite/plan/RelOptUtil.java   | 36 ++++++++--------------
 5 files changed, 17 insertions(+), 29 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCalcRule.java
 
b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCalcRule.java
index 9c4c1c4..07bbfdc 100644
--- 
a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCalcRule.java
+++ 
b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCalcRule.java
@@ -35,7 +35,7 @@ class EnumerableCalcRule extends ConverterRule {
     // The predicate ensures that if there's a multiset, 
FarragoMultisetSplitter
     // will work on it first.
     super(LogicalCalc.class,
-        (Predicate<Calc>) RelOptUtil::containsMultisetOrWindowedAgg,
+        (Predicate<Calc>) RelOptUtil::notContainsWindowedAgg,
         Convention.NONE, EnumerableConvention.INSTANCE,
         RelFactories.LOGICAL_BUILDER, "EnumerableCalcRule");
   }
diff --git 
a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterRule.java
 
b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterRule.java
index 98df892..df73609 100644
--- 
a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterRule.java
+++ 
b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterRule.java
@@ -32,7 +32,7 @@ import java.util.function.Predicate;
 class EnumerableFilterRule extends ConverterRule {
   EnumerableFilterRule() {
     super(LogicalFilter.class,
-        (Predicate<LogicalFilter>) RelOptUtil::containsMultisetOrWindowedAgg,
+        (Predicate<LogicalFilter>) RelOptUtil::notContainsWindowedAgg,
         Convention.NONE, EnumerableConvention.INSTANCE,
         RelFactories.LOGICAL_BUILDER, "EnumerableFilterRule");
   }
diff --git 
a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java
 
b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java
index 2b88d2e..6ab1a6e 100644
--- 
a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java
+++ 
b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java
@@ -32,7 +32,7 @@ import java.util.function.Predicate;
 class EnumerableProjectRule extends ConverterRule {
   EnumerableProjectRule() {
     super(LogicalProject.class,
-        (Predicate<LogicalProject>) RelOptUtil::containsMultisetOrWindowedAgg,
+        (Predicate<LogicalProject>) RelOptUtil::notContainsWindowedAgg,
         Convention.NONE, EnumerableConvention.INSTANCE,
         RelFactories.LOGICAL_BUILDER, "EnumerableProjectRule");
   }
diff --git a/core/src/main/java/org/apache/calcite/interpreter/Bindables.java 
b/core/src/main/java/org/apache/calcite/interpreter/Bindables.java
index 61d2f08..95ad126 100644
--- a/core/src/main/java/org/apache/calcite/interpreter/Bindables.java
+++ b/core/src/main/java/org/apache/calcite/interpreter/Bindables.java
@@ -285,7 +285,7 @@ public class Bindables {
      */
     public BindableFilterRule(RelBuilderFactory relBuilderFactory) {
       super(LogicalFilter.class,
-          (Predicate<LogicalFilter>) RelOptUtil::containsMultisetOrWindowedAgg,
+          (Predicate<LogicalFilter>) RelOptUtil::notContainsWindowedAgg,
           Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory,
           "BindableFilterRule");
     }
@@ -352,7 +352,7 @@ public class Bindables {
      */
     public BindableProjectRule(RelBuilderFactory relBuilderFactory) {
       super(LogicalProject.class,
-          (Predicate<LogicalProject>) 
RelOptUtil::containsMultisetOrWindowedAgg,
+          (Predicate<LogicalProject>) RelOptUtil::notContainsWindowedAgg,
           Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory,
           "BindableProjectRule");
     }
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java 
b/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
index 1abd0b7..c0ba7aa 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
@@ -73,7 +73,6 @@ import org.apache.calcite.rex.RexFieldAccess;
 import org.apache.calcite.rex.RexInputRef;
 import org.apache.calcite.rex.RexLiteral;
 import org.apache.calcite.rex.RexLocalRef;
-import org.apache.calcite.rex.RexMultisetUtil;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexOver;
 import org.apache.calcite.rex.RexProgram;
@@ -144,26 +143,24 @@ import javax.annotation.Nullable;
 public abstract class RelOptUtil {
   //~ Static fields/initializers ---------------------------------------------
 
-  static final boolean B = false;
-
   public static final double EPSILON = 1.0e-5;
 
   @SuppressWarnings("Guava")
   @Deprecated // to be removed before 2.0
   public static final com.google.common.base.Predicate<Filter>
       FILTER_PREDICATE =
-      RelOptUtil::containsMultisetOrWindowedAgg;
+      RelOptUtil::notContainsWindowedAgg;
 
   @SuppressWarnings("Guava")
   @Deprecated // to be removed before 2.0
   public static final com.google.common.base.Predicate<Project>
       PROJECT_PREDICATE =
-      RelOptUtil::containsMultisetOrWindowedAgg;
+      RelOptUtil::notContainsWindowedAgg;
 
   @SuppressWarnings("Guava")
   @Deprecated // to be removed before 2.0
   public static final com.google.common.base.Predicate<Calc> CALC_PREDICATE =
-      RelOptUtil::containsMultisetOrWindowedAgg;
+      RelOptUtil::notContainsWindowedAgg;
 
   //~ Methods ----------------------------------------------------------------
 
@@ -3433,28 +3430,19 @@ public abstract class RelOptUtil {
     return projectFactory.createProject(rel, ImmutableList.of(), exprList, 
outputNameList);
   }
 
-  /** Predicate for whether a {@link Calc} contains multisets or windowed
-   * aggregates. */
-  public static boolean containsMultisetOrWindowedAgg(Calc calc) {
-    return !(B
-        && RexMultisetUtil.containsMultiset(calc.getProgram())
-        || calc.getProgram().containsAggs());
+  /** Predicate for if a {@link Calc} does not contain windowed aggregates. */
+  public static boolean notContainsWindowedAgg(Calc calc) {
+    return !calc.getProgram().containsAggs();
   }
 
-  /** Predicate for whether a {@link Filter} contains multisets or windowed
-   * aggregates. */
-  public static boolean containsMultisetOrWindowedAgg(Filter filter) {
-    return !(B
-        && RexMultisetUtil.containsMultiset(filter.getCondition(), true)
-        || RexOver.containsOver(filter.getCondition()));
+  /** Predicate for if a {@link Filter} does not windowed aggregates. */
+  public static boolean notContainsWindowedAgg(Filter filter) {
+    return !RexOver.containsOver(filter.getCondition());
   }
 
-  /** Predicate for whether a {@link Project} contains multisets or windowed
-   * aggregates. */
-  public static boolean containsMultisetOrWindowedAgg(Project project) {
-    return !(B
-        && RexMultisetUtil.containsMultiset(project.getProjects(), true)
-        || RexOver.containsOver(project.getProjects(), null));
+  /** Predicate for if a {@link Project} does not contain windowed aggregates. 
*/
+  public static boolean notContainsWindowedAgg(Project project) {
+    return !RexOver.containsOver(project.getProjects(), null);
   }
 
   /** Policies for handling two- and three-valued boolean logic. */

Reply via email to