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. */