You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2017/11/15 19:49:31 UTC
[3/4] calcite git commit: [CALCITE-2043] Use custom RelBuilder
implementation in some rules (Volodymyr Vysotskyi)
[CALCITE-2043] Use custom RelBuilder implementation in some rules (Volodymyr Vysotskyi)
Close apache/calcite#564
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/d407395e
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/d407395e
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/d407395e
Branch: refs/heads/master
Commit: d407395e05b5b37e019a44f812aae04540e6f398
Parents: a8505d2
Author: Volodymyr Vysotskyi <vv...@gmail.com>
Authored: Wed Nov 8 11:12:51 2017 +0000
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Nov 15 11:48:57 2017 -0800
----------------------------------------------------------------------
.../adapter/cassandra/CassandraRules.java | 4 +-
.../CassandraToEnumerableConverterRule.java | 19 +-
.../ElasticsearchToEnumerableConverterRule.java | 20 +-
.../adapter/enumerable/EnumerableBindable.java | 18 +-
.../adapter/enumerable/EnumerableCalcRule.java | 4 +-
.../enumerable/EnumerableCorrelateRule.java | 15 +-
.../enumerable/EnumerableFilterRule.java | 4 +-
.../enumerable/EnumerableFilterToCalcRule.java | 10 +-
.../enumerable/EnumerableInterpreterRule.java | 18 +-
.../enumerable/EnumerableProjectRule.java | 4 +-
.../enumerable/EnumerableProjectToCalcRule.java | 10 +-
.../adapter/enumerable/EnumerableRules.java | 15 +-
.../EnumerableTableFunctionScanRule.java | 19 +-
.../enumerable/EnumerableTableModifyRule.java | 15 +-
.../enumerable/EnumerableTableScanRule.java | 20 +-
.../enumerable/EnumerableValuesRule.java | 13 +-
.../apache/calcite/adapter/jdbc/JdbcRules.java | 3 +-
.../jdbc/JdbcToEnumerableConverterRule.java | 10 +-
.../apache/calcite/interpreter/Bindables.java | 139 ++++++++++----
.../NoneToBindableConverterRule.java | 16 +-
.../calcite/plan/SubstitutionVisitor.java | 12 +-
.../org/apache/calcite/plan/hep/HepPlanner.java | 4 +-
.../calcite/plan/volcano/AbstractConverter.java | 10 +-
.../calcite/rel/convert/ConverterRule.java | 16 +-
.../calcite/rel/convert/TraitMatchingRule.java | 21 ++-
.../rel/rules/AggregateFilterTransposeRule.java | 3 +-
.../rel/rules/AggregateReduceFunctionsRule.java | 3 +-
.../calcite/rel/rules/AggregateRemoveRule.java | 18 +-
.../rel/rules/AggregateStarTableRule.java | 17 +-
.../calcite/rel/rules/AggregateValuesRule.java | 15 +-
.../apache/calcite/rel/rules/CalcMergeRule.java | 15 +-
.../calcite/rel/rules/CalcRemoveRule.java | 13 +-
.../apache/calcite/rel/rules/CalcSplitRule.java | 7 +-
.../calcite/rel/rules/CoerceInputsRule.java | 32 ++--
.../calcite/rel/rules/FilterCalcMergeRule.java | 14 +-
.../rel/rules/FilterMultiJoinMergeRule.java | 9 +-
.../FilterRemoveIsNotDistinctFromRule.java | 13 +-
.../rules/FilterTableFunctionTransposeRule.java | 9 +-
.../calcite/rel/rules/FilterTableScanRule.java | 18 +-
.../calcite/rel/rules/FilterToCalcRule.java | 14 +-
.../rel/rules/JoinAddRedundantSemiJoinRule.java | 10 +-
.../calcite/rel/rules/JoinAssociateRule.java | 10 +-
.../rel/rules/JoinExtractFilterRule.java | 15 +-
.../calcite/rel/rules/JoinToCorrelateRule.java | 4 +-
.../calcite/rel/rules/JoinToMultiJoinRule.java | 15 +-
.../rel/rules/JoinUnionTransposeRule.java | 17 +-
.../rules/MaterializedViewFilterScanRule.java | 2 +-
.../rules/MultiJoinProjectTransposeRule.java | 16 +-
.../calcite/rel/rules/ProjectCalcMergeRule.java | 14 +-
.../rel/rules/ProjectMultiJoinMergeRule.java | 2 +-
.../calcite/rel/rules/ProjectRemoveRule.java | 16 +-
.../rel/rules/ProjectSortTransposeRule.java | 28 ++-
.../calcite/rel/rules/ProjectTableScanRule.java | 11 +-
.../calcite/rel/rules/ProjectToCalcRule.java | 14 +-
.../calcite/rel/rules/ProjectToWindowRule.java | 165 +++++++++-------
.../rel/rules/ProjectWindowTransposeRule.java | 16 +-
.../calcite/rel/rules/ReduceDecimalsRule.java | 9 +-
.../rel/rules/SemiJoinFilterTransposeRule.java | 8 +-
.../rel/rules/SemiJoinJoinTransposeRule.java | 9 +-
.../calcite/rel/rules/SemiJoinRemoveRule.java | 8 +-
.../rel/rules/SortJoinTransposeRule.java | 14 +-
.../rel/rules/SortProjectTransposeRule.java | 28 ++-
.../calcite/rel/rules/SortRemoveRule.java | 16 +-
.../calcite/rel/rules/SubQueryRemoveRule.java | 9 +-
.../apache/calcite/rel/rules/TableScanRule.java | 14 +-
.../calcite/rel/rules/UnionEliminatorRule.java | 9 +-
.../rel/rules/UnionPullUpConstantsRule.java | 2 +-
.../calcite/rel/rules/ValuesReduceRule.java | 14 +-
.../apache/calcite/rel/stream/StreamRules.java | 108 ++++++++---
.../org/apache/calcite/test/HepPlannerTest.java | 9 +-
.../apache/calcite/test/RelOptRulesTest.java | 4 +-
.../calcite/adapter/druid/DruidRules.java | 186 ++++++++++++++-----
.../adapter/csv/CsvProjectTableScanRule.java | 12 +-
.../mongodb/MongoToEnumerableConverterRule.java | 16 +-
.../spark/EnumerableToSparkConverterRule.java | 17 +-
.../adapter/spark/JdbcToSparkConverterRule.java | 13 +-
.../adapter/splunk/SplunkPushDownRule.java | 43 ++---
77 files changed, 1136 insertions(+), 406 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java
----------------------------------------------------------------------
diff --git a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java
index 6236542..94091b2 100644
--- a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java
+++ b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java
@@ -29,6 +29,7 @@ import org.apache.calcite.rel.RelCollations;
import org.apache.calcite.rel.RelFieldCollation;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.Sort;
import org.apache.calcite.rel.logical.LogicalFilter;
import org.apache.calcite.rel.logical.LogicalProject;
@@ -100,7 +101,8 @@ public class CassandraRules {
<R extends RelNode> CassandraConverterRule(Class<R> clazz,
Predicate<? super R> predicate,
String description) {
- super(clazz, predicate, Convention.NONE, CassandraRel.CONVENTION, description);
+ super(clazz, predicate, Convention.NONE,
+ CassandraRel.CONVENTION, RelFactories.LOGICAL_BUILDER, description);
this.out = CassandraRel.CONVENTION;
}
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java
----------------------------------------------------------------------
diff --git a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java
index dae992d..abcf155 100644
--- a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java
+++ b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java
@@ -20,6 +20,10 @@ import org.apache.calcite.adapter.enumerable.EnumerableConvention;
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.tools.RelBuilderFactory;
+
+import com.google.common.base.Predicates;
/**
* Rule to convert a relational expression from
@@ -27,11 +31,18 @@ import org.apache.calcite.rel.convert.ConverterRule;
*/
public class CassandraToEnumerableConverterRule extends ConverterRule {
public static final ConverterRule INSTANCE =
- new CassandraToEnumerableConverterRule();
+ new CassandraToEnumerableConverterRule(RelFactories.LOGICAL_BUILDER);
- private CassandraToEnumerableConverterRule() {
- super(RelNode.class, CassandraRel.CONVENTION, EnumerableConvention.INSTANCE,
- "CassandraToEnumerableConverterRule");
+ /**
+ * Creates a CassandraToEnumerableConverterRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public CassandraToEnumerableConverterRule(
+ RelBuilderFactory relBuilderFactory) {
+ super(RelNode.class, Predicates.<RelNode>alwaysTrue(),
+ CassandraRel.CONVENTION, EnumerableConvention.INSTANCE,
+ relBuilderFactory, "CassandraToEnumerableConverterRule");
}
@Override public RelNode convert(RelNode rel) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchToEnumerableConverterRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchToEnumerableConverterRule.java b/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchToEnumerableConverterRule.java
index 1047757..9575d4f 100644
--- a/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchToEnumerableConverterRule.java
+++ b/core/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchToEnumerableConverterRule.java
@@ -20,17 +20,29 @@ import org.apache.calcite.adapter.enumerable.EnumerableConvention;
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.tools.RelBuilderFactory;
+
+import com.google.common.base.Predicates;
/**
* Rule to convert a relational expression from
* {@link ElasticsearchRel#CONVENTION} to {@link EnumerableConvention}.
*/
public class ElasticsearchToEnumerableConverterRule extends ConverterRule {
- public static final ConverterRule INSTANCE = new ElasticsearchToEnumerableConverterRule();
+ public static final ConverterRule INSTANCE =
+ new ElasticsearchToEnumerableConverterRule(RelFactories.LOGICAL_BUILDER);
- private ElasticsearchToEnumerableConverterRule() {
- super(RelNode.class, ElasticsearchRel.CONVENTION, EnumerableConvention.INSTANCE,
- "ElasticsearchToEnumerableConverterRule");
+ /**
+ * Creates an ElasticsearchToEnumerableConverterRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public ElasticsearchToEnumerableConverterRule(
+ RelBuilderFactory relBuilderFactory) {
+ super(RelNode.class, Predicates.<RelNode>alwaysTrue(),
+ ElasticsearchRel.CONVENTION, EnumerableConvention.INSTANCE,
+ relBuilderFactory, "ElasticsearchToEnumerableConverterRule");
}
@Override public RelNode convert(RelNode relNode) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBindable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBindable.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBindable.java
index 2ad069e..820be91 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBindable.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBindable.java
@@ -30,9 +30,12 @@ import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterImpl;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.runtime.ArrayBindable;
import org.apache.calcite.runtime.Bindable;
+import org.apache.calcite.tools.RelBuilderFactory;
+import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableMap;
import java.util.List;
@@ -86,11 +89,18 @@ public class EnumerableBindable extends ConverterImpl implements BindableRel {
*/
public static class EnumerableToBindableConverterRule extends ConverterRule {
public static final EnumerableToBindableConverterRule INSTANCE =
- new EnumerableToBindableConverterRule();
+ new EnumerableToBindableConverterRule(RelFactories.LOGICAL_BUILDER);
- private EnumerableToBindableConverterRule() {
- super(EnumerableRel.class, EnumerableConvention.INSTANCE,
- BindableConvention.INSTANCE, "EnumerableToBindableConverterRule");
+ /**
+ * Creates an EnumerableToBindableConverterRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public EnumerableToBindableConverterRule(
+ RelBuilderFactory relBuilderFactory) {
+ super(EnumerableRel.class, Predicates.<RelNode>alwaysTrue(),
+ EnumerableConvention.INSTANCE, BindableConvention.INSTANCE,
+ relBuilderFactory, "EnumerableToBindableConverterRule");
}
@Override public RelNode convert(RelNode rel) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCalcRule.java
----------------------------------------------------------------------
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 b94ff57..c85985b 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
@@ -20,6 +20,7 @@ import org.apache.calcite.plan.Convention;
import org.apache.calcite.plan.RelOptUtil;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalCalc;
/**
@@ -31,7 +32,8 @@ class EnumerableCalcRule extends ConverterRule {
// The predicate ensures that if there's a multiset, FarragoMultisetSplitter
// will work on it first.
super(LogicalCalc.class, RelOptUtil.CALC_PREDICATE, Convention.NONE,
- EnumerableConvention.INSTANCE, "EnumerableCalcRule");
+ EnumerableConvention.INSTANCE, RelFactories.LOGICAL_BUILDER,
+ "EnumerableCalcRule");
}
public RelNode convert(RelNode rel) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelateRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelateRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelateRule.java
index eb08a27..9c7bc71 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelateRule.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableCorrelateRule.java
@@ -21,14 +21,23 @@ import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
import org.apache.calcite.rel.logical.LogicalCorrelate;
+import org.apache.calcite.tools.RelBuilderFactory;
+
+import com.google.common.base.Predicates;
/**
* Implementation of nested loops over enumerable inputs.
*/
public class EnumerableCorrelateRule extends ConverterRule {
- EnumerableCorrelateRule() {
- super(LogicalCorrelate.class, Convention.NONE,
- EnumerableConvention.INSTANCE, "EnumerableCorrelateRule");
+ /**
+ * Creates an EnumerableCorrelateRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public EnumerableCorrelateRule(RelBuilderFactory relBuilderFactory) {
+ super(LogicalCorrelate.class, Predicates.<RelNode>alwaysTrue(),
+ Convention.NONE, EnumerableConvention.INSTANCE, relBuilderFactory,
+ "EnumerableCorrelateRule");
}
public RelNode convert(RelNode rel) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterRule.java
----------------------------------------------------------------------
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 51fcdd4..65b80f1 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
@@ -20,6 +20,7 @@ import org.apache.calcite.plan.Convention;
import org.apache.calcite.plan.RelOptUtil;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalFilter;
/**
@@ -29,7 +30,8 @@ import org.apache.calcite.rel.logical.LogicalFilter;
class EnumerableFilterRule extends ConverterRule {
EnumerableFilterRule() {
super(LogicalFilter.class, RelOptUtil.FILTER_PREDICATE, Convention.NONE,
- EnumerableConvention.INSTANCE, "EnumerableFilterRule");
+ EnumerableConvention.INSTANCE, RelFactories.LOGICAL_BUILDER,
+ "EnumerableFilterRule");
}
public RelNode convert(RelNode rel) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterToCalcRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterToCalcRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterToCalcRule.java
index 9a61124..58d885d 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterToCalcRule.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableFilterToCalcRule.java
@@ -23,12 +23,18 @@ import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.rex.RexProgram;
import org.apache.calcite.rex.RexProgramBuilder;
+import org.apache.calcite.tools.RelBuilderFactory;
/** Variant of {@link org.apache.calcite.rel.rules.FilterToCalcRule} for
* {@link org.apache.calcite.adapter.enumerable.EnumerableConvention enumerable calling convention}. */
public class EnumerableFilterToCalcRule extends RelOptRule {
- EnumerableFilterToCalcRule() {
- super(operand(EnumerableFilter.class, any()));
+ /**
+ * Creates an EnumerableFilterToCalcRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public EnumerableFilterToCalcRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(EnumerableFilter.class, any()), relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java
index 99996fa..5462004 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableInterpreterRule.java
@@ -19,6 +19,10 @@ package org.apache.calcite.adapter.enumerable;
import org.apache.calcite.interpreter.BindableConvention;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.tools.RelBuilderFactory;
+
+import com.google.common.base.Predicates;
/**
* Planner rule that converts {@link org.apache.calcite.interpreter.BindableRel}
@@ -27,11 +31,17 @@ import org.apache.calcite.rel.convert.ConverterRule;
*/
public class EnumerableInterpreterRule extends ConverterRule {
public static final EnumerableInterpreterRule INSTANCE =
- new EnumerableInterpreterRule();
+ new EnumerableInterpreterRule(RelFactories.LOGICAL_BUILDER);
- private EnumerableInterpreterRule() {
- super(RelNode.class, BindableConvention.INSTANCE,
- EnumerableConvention.INSTANCE, "EnumerableInterpreterRule");
+ /**
+ * Creates an EnumerableInterpreterRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public EnumerableInterpreterRule(RelBuilderFactory relBuilderFactory) {
+ super(RelNode.class, Predicates.<RelNode>alwaysTrue(),
+ BindableConvention.INSTANCE, EnumerableConvention.INSTANCE,
+ relBuilderFactory, "EnumerableInterpreterRule");
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectRule.java
----------------------------------------------------------------------
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 3f998da..9c015a0 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
@@ -20,6 +20,7 @@ import org.apache.calcite.plan.Convention;
import org.apache.calcite.plan.RelOptUtil;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalProject;
/**
@@ -29,7 +30,8 @@ import org.apache.calcite.rel.logical.LogicalProject;
class EnumerableProjectRule extends ConverterRule {
EnumerableProjectRule() {
super(LogicalProject.class, RelOptUtil.PROJECT_PREDICATE, Convention.NONE,
- EnumerableConvention.INSTANCE, "EnumerableProjectRule");
+ EnumerableConvention.INSTANCE, RelFactories.LOGICAL_BUILDER,
+ "EnumerableProjectRule");
}
public RelNode convert(RelNode rel) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectToCalcRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectToCalcRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectToCalcRule.java
index 2e1a4a8..4d2b9c1 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectToCalcRule.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableProjectToCalcRule.java
@@ -20,12 +20,18 @@ import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rex.RexProgram;
+import org.apache.calcite.tools.RelBuilderFactory;
/** Variant of {@link org.apache.calcite.rel.rules.ProjectToCalcRule} for
* {@link org.apache.calcite.adapter.enumerable.EnumerableConvention enumerable calling convention}. */
public class EnumerableProjectToCalcRule extends RelOptRule {
- EnumerableProjectToCalcRule() {
- super(operand(EnumerableProject.class, any()));
+ /**
+ * Creates an EnumerableProjectToCalcRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public EnumerableProjectToCalcRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(EnumerableProject.class, any()), relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRules.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRules.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRules.java
index 5a4874f..7871638 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRules.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRules.java
@@ -17,6 +17,7 @@
package org.apache.calcite.adapter.enumerable;
import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.util.trace.CalciteTrace;
import org.slf4j.Logger;
@@ -40,7 +41,7 @@ public class EnumerableRules {
new EnumerableSemiJoinRule();
public static final RelOptRule ENUMERABLE_CORRELATE_RULE =
- new EnumerableCorrelateRule();
+ new EnumerableCorrelateRule(RelFactories.LOGICAL_BUILDER);
private EnumerableRules() {
}
@@ -73,10 +74,10 @@ public class EnumerableRules {
new EnumerableMinusRule();
public static final EnumerableTableModifyRule ENUMERABLE_TABLE_MODIFICATION_RULE =
- new EnumerableTableModifyRule();
+ new EnumerableTableModifyRule(RelFactories.LOGICAL_BUILDER);
public static final EnumerableValuesRule ENUMERABLE_VALUES_RULE =
- new EnumerableValuesRule();
+ new EnumerableValuesRule(RelFactories.LOGICAL_BUILDER);
public static final EnumerableWindowRule ENUMERABLE_WINDOW_RULE =
new EnumerableWindowRule();
@@ -88,16 +89,16 @@ public class EnumerableRules {
new EnumerableUncollectRule();
public static final EnumerableFilterToCalcRule ENUMERABLE_FILTER_TO_CALC_RULE =
- new EnumerableFilterToCalcRule();
+ new EnumerableFilterToCalcRule(RelFactories.LOGICAL_BUILDER);
public static final EnumerableProjectToCalcRule ENUMERABLE_PROJECT_TO_CALC_RULE =
- new EnumerableProjectToCalcRule();
+ new EnumerableProjectToCalcRule(RelFactories.LOGICAL_BUILDER);
public static final EnumerableTableScanRule ENUMERABLE_TABLE_SCAN_RULE =
- new EnumerableTableScanRule();
+ new EnumerableTableScanRule(RelFactories.LOGICAL_BUILDER);
public static final EnumerableTableFunctionScanRule ENUMERABLE_TABLE_FUNCTION_SCAN_RULE =
- new EnumerableTableFunctionScanRule();
+ new EnumerableTableFunctionScanRule(RelFactories.LOGICAL_BUILDER);
}
// End EnumerableRules.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScanRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScanRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScanRule.java
index 5d06c18..8a21b1e 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScanRule.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableFunctionScanRule.java
@@ -20,16 +20,31 @@ import org.apache.calcite.plan.Convention;
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalTableFunctionScan;
+import org.apache.calcite.tools.RelBuilderFactory;
+
+import com.google.common.base.Predicates;
/** Planner rule that converts a
* {@link org.apache.calcite.rel.logical.LogicalTableFunctionScan}
* relational expression
* {@link org.apache.calcite.adapter.enumerable.EnumerableConvention enumerable calling convention}. */
public class EnumerableTableFunctionScanRule extends ConverterRule {
+ @Deprecated // to be removed before 2.0
public EnumerableTableFunctionScanRule() {
- super(LogicalTableFunctionScan.class, Convention.NONE,
- EnumerableConvention.INSTANCE, "EnumerableTableFunctionScanRule");
+ this(RelFactories.LOGICAL_BUILDER);
+ }
+
+ /**
+ * Creates an EnumerableTableFunctionScanRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public EnumerableTableFunctionScanRule(RelBuilderFactory relBuilderFactory) {
+ super(LogicalTableFunctionScan.class, Predicates.<RelNode>alwaysTrue(),
+ Convention.NONE, EnumerableConvention.INSTANCE, relBuilderFactory,
+ "EnumerableTableFunctionScanRule");
}
@Override public RelNode convert(RelNode rel) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModifyRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModifyRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModifyRule.java
index 321115f..87eaefe 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModifyRule.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableModifyRule.java
@@ -22,15 +22,24 @@ import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
import org.apache.calcite.rel.logical.LogicalTableModify;
import org.apache.calcite.schema.ModifiableTable;
+import org.apache.calcite.tools.RelBuilderFactory;
+
+import com.google.common.base.Predicates;
/** Planner rule that converts a
* {@link org.apache.calcite.rel.logical.LogicalTableModify}
* relational expression
* {@link org.apache.calcite.adapter.enumerable.EnumerableConvention enumerable calling convention}. */
public class EnumerableTableModifyRule extends ConverterRule {
- EnumerableTableModifyRule() {
- super(LogicalTableModify.class, Convention.NONE,
- EnumerableConvention.INSTANCE, "EnumerableTableModificationRule");
+ /**
+ * Creates an EnumerableTableModifyRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public EnumerableTableModifyRule(RelBuilderFactory relBuilderFactory) {
+ super(LogicalTableModify.class, Predicates.<RelNode>alwaysTrue(),
+ Convention.NONE, EnumerableConvention.INSTANCE, relBuilderFactory,
+ "EnumerableTableModificationRule");
}
@Override public RelNode convert(RelNode rel) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScanRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScanRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScanRule.java
index 416c01a..adcfa09 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScanRule.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableTableScanRule.java
@@ -21,17 +21,33 @@ import org.apache.calcite.plan.Convention;
import org.apache.calcite.plan.RelOptTable;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalTableScan;
import org.apache.calcite.schema.Table;
+import org.apache.calcite.tools.RelBuilderFactory;
+
+import com.google.common.base.Predicates;
/** Planner rule that converts a
* {@link org.apache.calcite.rel.logical.LogicalTableFunctionScan}
* relational expression
* {@link EnumerableConvention enumerable calling convention}. */
public class EnumerableTableScanRule extends ConverterRule {
+
+ @Deprecated // to be removed before 2.0
public EnumerableTableScanRule() {
- super(LogicalTableScan.class, Convention.NONE,
- EnumerableConvention.INSTANCE, "EnumerableTableScanRule");
+ this(RelFactories.LOGICAL_BUILDER);
+ }
+
+ /**
+ * Creates an EnumerableTableScanRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public EnumerableTableScanRule(RelBuilderFactory relBuilderFactory) {
+ super(LogicalTableScan.class, Predicates.<RelNode>alwaysTrue(),
+ Convention.NONE, EnumerableConvention.INSTANCE, relBuilderFactory,
+ "EnumerableTableScanRule");
}
@Override public RelNode convert(RelNode rel) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableValuesRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableValuesRule.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableValuesRule.java
index 6e14bcc..b401598 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableValuesRule.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableValuesRule.java
@@ -20,14 +20,23 @@ import org.apache.calcite.plan.Convention;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
import org.apache.calcite.rel.logical.LogicalValues;
+import org.apache.calcite.tools.RelBuilderFactory;
+
+import com.google.common.base.Predicates;
/** Planner rule that converts a
* {@link org.apache.calcite.rel.logical.LogicalValues}
* relational expression
* {@link org.apache.calcite.adapter.enumerable.EnumerableConvention enumerable calling convention}. */
public class EnumerableValuesRule extends ConverterRule {
- EnumerableValuesRule() {
- super(LogicalValues.class, Convention.NONE, EnumerableConvention.INSTANCE,
+ /**
+ * Creates an EnumerableValuesRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public EnumerableValuesRule(RelBuilderFactory relBuilderFactory) {
+ super(LogicalValues.class, Predicates.<RelNode>alwaysTrue(),
+ Convention.NONE, EnumerableConvention.INSTANCE, relBuilderFactory,
"EnumerableValuesRule");
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
index c4e4c82..53f5012 100644
--- a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
+++ b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
@@ -42,6 +42,7 @@ import org.apache.calcite.rel.core.Join;
import org.apache.calcite.rel.core.JoinRelType;
import org.apache.calcite.rel.core.Minus;
import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.Sort;
import org.apache.calcite.rel.core.TableModify;
import org.apache.calcite.rel.core.Union;
@@ -94,7 +95,7 @@ public class JdbcRules {
public static List<RelOptRule> rules(JdbcConvention out) {
return ImmutableList.<RelOptRule>of(
- new JdbcToEnumerableConverterRule(out),
+ new JdbcToEnumerableConverterRule(out, RelFactories.LOGICAL_BUILDER),
new JdbcJoinRule(out),
new JdbcCalcRule(out),
new JdbcProjectRule(out),
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverterRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverterRule.java b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverterRule.java
index a212c3b..e5eec50 100644
--- a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverterRule.java
+++ b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverterRule.java
@@ -20,6 +20,9 @@ import org.apache.calcite.adapter.enumerable.EnumerableConvention;
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.tools.RelBuilderFactory;
+
+import com.google.common.base.Predicates;
/**
* Rule to convert a relational expression from
@@ -27,8 +30,11 @@ import org.apache.calcite.rel.convert.ConverterRule;
* {@link EnumerableConvention}.
*/
public class JdbcToEnumerableConverterRule extends ConverterRule {
- JdbcToEnumerableConverterRule(JdbcConvention out) {
- super(RelNode.class, out, EnumerableConvention.INSTANCE,
+ /** Creates a JdbcToEnumerableConverterRule. */
+ public JdbcToEnumerableConverterRule(JdbcConvention out,
+ RelBuilderFactory relBuilderFactory) {
+ super(RelNode.class, Predicates.<RelNode>alwaysTrue(), out,
+ EnumerableConvention.INSTANCE, relBuilderFactory,
"JdbcToEnumerableConverterRule:" + out);
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/interpreter/Bindables.java
----------------------------------------------------------------------
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 b8b0b6f..c5287eb 100644
--- a/core/src/main/java/org/apache/calcite/interpreter/Bindables.java
+++ b/core/src/main/java/org/apache/calcite/interpreter/Bindables.java
@@ -42,6 +42,7 @@ import org.apache.calcite.rel.core.Filter;
import org.apache.calcite.rel.core.Join;
import org.apache.calcite.rel.core.JoinRelType;
import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.Sort;
import org.apache.calcite.rel.core.TableScan;
import org.apache.calcite.rel.core.Union;
@@ -66,10 +67,12 @@ import org.apache.calcite.schema.FilterableTable;
import org.apache.calcite.schema.ProjectableFilterableTable;
import org.apache.calcite.schema.ScannableTable;
import org.apache.calcite.schema.Table;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.ImmutableBitSet;
import org.apache.calcite.util.ImmutableIntList;
import com.google.common.base.Preconditions;
+import com.google.common.base.Predicates;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
@@ -83,31 +86,31 @@ public class Bindables {
private Bindables() {}
public static final RelOptRule BINDABLE_TABLE_SCAN_RULE =
- new BindableTableScanRule();
+ new BindableTableScanRule(RelFactories.LOGICAL_BUILDER);
public static final RelOptRule BINDABLE_FILTER_RULE =
- new BindableFilterRule();
+ new BindableFilterRule(RelFactories.LOGICAL_BUILDER);
public static final RelOptRule BINDABLE_PROJECT_RULE =
- new BindableProjectRule();
+ new BindableProjectRule(RelFactories.LOGICAL_BUILDER);
public static final RelOptRule BINDABLE_SORT_RULE =
- new BindableSortRule();
+ new BindableSortRule(RelFactories.LOGICAL_BUILDER);
public static final RelOptRule BINDABLE_JOIN_RULE =
- new BindableJoinRule();
+ new BindableJoinRule(RelFactories.LOGICAL_BUILDER);
public static final RelOptRule BINDABLE_UNION_RULE =
- new BindableUnionRule();
+ new BindableUnionRule(RelFactories.LOGICAL_BUILDER);
public static final RelOptRule BINDABLE_VALUES_RULE =
- new BindableValuesRule();
+ new BindableValuesRule(RelFactories.LOGICAL_BUILDER);
public static final RelOptRule BINDABLE_AGGREGATE_RULE =
- new BindableAggregateRule();
+ new BindableAggregateRule(RelFactories.LOGICAL_BUILDER);
public static final RelOptRule BINDABLE_WINDOW_RULE =
- new BindableWindowRule();
+ new BindableWindowRule(RelFactories.LOGICAL_BUILDER);
/** All rules that convert logical relational expression to bindable. */
public static final ImmutableList<RelOptRule> RULES =
@@ -136,9 +139,15 @@ public class Bindables {
/** Rule that converts a {@link org.apache.calcite.rel.core.TableScan}
* to bindable convention. */
- private static class BindableTableScanRule extends RelOptRule {
- private BindableTableScanRule() {
- super(operand(LogicalTableScan.class, none()));
+ public static class BindableTableScanRule extends RelOptRule {
+
+ /**
+ * Creates a BindableTableScanRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public BindableTableScanRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(LogicalTableScan.class, none()), relBuilderFactory, null);
}
@Override public void onMatch(RelOptRuleCall call) {
@@ -251,10 +260,16 @@ public class Bindables {
}
/** Rule that converts a {@link Filter} to bindable convention. */
- private static class BindableFilterRule extends ConverterRule {
- private BindableFilterRule() {
+ public static class BindableFilterRule extends ConverterRule {
+
+ /**
+ * Creates a BindableFilterRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public BindableFilterRule(RelBuilderFactory relBuilderFactory) {
super(LogicalFilter.class, RelOptUtil.FILTER_PREDICATE, Convention.NONE,
- BindableConvention.INSTANCE, "BindableFilterRule");
+ BindableConvention.INSTANCE, relBuilderFactory, "BindableFilterRule");
}
public RelNode convert(RelNode rel) {
@@ -314,10 +329,17 @@ public class Bindables {
* Rule to convert a {@link org.apache.calcite.rel.logical.LogicalProject}
* to a {@link BindableProject}.
*/
- private static class BindableProjectRule extends ConverterRule {
- private BindableProjectRule() {
+ public static class BindableProjectRule extends ConverterRule {
+
+ /**
+ * Creates a BindableProjectRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public BindableProjectRule(RelBuilderFactory relBuilderFactory) {
super(LogicalProject.class, RelOptUtil.PROJECT_PREDICATE, Convention.NONE,
- BindableConvention.INSTANCE, "BindableProjectRule");
+ BindableConvention.INSTANCE, relBuilderFactory,
+ "BindableProjectRule");
}
public RelNode convert(RelNode rel) {
@@ -364,10 +386,16 @@ public class Bindables {
* Rule to convert an {@link org.apache.calcite.rel.core.Sort} to a
* {@link org.apache.calcite.interpreter.Bindables.BindableSort}.
*/
- private static class BindableSortRule extends ConverterRule {
- private BindableSortRule() {
- super(Sort.class, Convention.NONE, BindableConvention.INSTANCE,
- "BindableSortRule");
+ public static class BindableSortRule extends ConverterRule {
+
+ /**
+ * Creates a BindableSortRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public BindableSortRule(RelBuilderFactory relBuilderFactory) {
+ super(Sort.class, Predicates.<RelNode>alwaysTrue(), Convention.NONE,
+ BindableConvention.INSTANCE, relBuilderFactory, "BindableSortRule");
}
public RelNode convert(RelNode rel) {
@@ -414,9 +442,16 @@ public class Bindables {
* Rule to convert a {@link org.apache.calcite.rel.logical.LogicalJoin}
* to a {@link BindableJoin}.
*/
- private static class BindableJoinRule extends ConverterRule {
- private BindableJoinRule() {
- super(LogicalJoin.class, Convention.NONE, BindableConvention.INSTANCE,
+ public static class BindableJoinRule extends ConverterRule {
+
+ /**
+ * Creates a BindableJoinRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public BindableJoinRule(RelBuilderFactory relBuilderFactory) {
+ super(LogicalJoin.class, Predicates.<RelNode>alwaysTrue(),
+ Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory,
"BindableJoinRule");
}
@@ -477,9 +512,16 @@ public class Bindables {
* Rule to convert an {@link org.apache.calcite.rel.logical.LogicalUnion}
* to a {@link BindableUnion}.
*/
- private static class BindableUnionRule extends ConverterRule {
- private BindableUnionRule() {
- super(LogicalUnion.class, Convention.NONE, BindableConvention.INSTANCE,
+ public static class BindableUnionRule extends ConverterRule {
+
+ /**
+ * Creates a BindableUnionRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public BindableUnionRule(RelBuilderFactory relBuilderFactory) {
+ super(LogicalUnion.class, Predicates.<RelNode>alwaysTrue(),
+ Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory,
"BindableUnionRule");
}
@@ -545,9 +587,16 @@ public class Bindables {
}
/** Rule that converts a {@link Values} to bindable convention. */
- private static class BindableValuesRule extends ConverterRule {
- private BindableValuesRule() {
- super(LogicalValues.class, Convention.NONE, BindableConvention.INSTANCE,
+ public static class BindableValuesRule extends ConverterRule {
+
+ /**
+ * Creates a BindableValuesRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public BindableValuesRule(RelBuilderFactory relBuilderFactory) {
+ super(LogicalValues.class, Predicates.<RelNode>alwaysTrue(),
+ Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory,
"BindableValuesRule");
}
@@ -616,10 +665,17 @@ public class Bindables {
}
/** Rule that converts an {@link Aggregate} to bindable convention. */
- private static class BindableAggregateRule extends ConverterRule {
- private BindableAggregateRule() {
- super(LogicalAggregate.class, Convention.NONE,
- BindableConvention.INSTANCE, "BindableAggregateRule");
+ public static class BindableAggregateRule extends ConverterRule {
+
+ /**
+ * Creates a BindableAggregateRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public BindableAggregateRule(RelBuilderFactory relBuilderFactory) {
+ super(LogicalAggregate.class, Predicates.<RelNode>alwaysTrue(),
+ Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory,
+ "BindableAggregateRule");
}
public RelNode convert(RelNode rel) {
@@ -674,9 +730,16 @@ public class Bindables {
* Rule to convert a {@link org.apache.calcite.rel.logical.LogicalWindow}
* to a {@link BindableWindow}.
*/
- private static class BindableWindowRule extends ConverterRule {
- private BindableWindowRule() {
- super(LogicalWindow.class, Convention.NONE, BindableConvention.INSTANCE,
+ public static class BindableWindowRule extends ConverterRule {
+
+ /**
+ * Creates a BindableWindowRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public BindableWindowRule(RelBuilderFactory relBuilderFactory) {
+ super(LogicalWindow.class, Predicates.<RelNode>alwaysTrue(),
+ Convention.NONE, BindableConvention.INSTANCE, relBuilderFactory,
"BindableWindowRule");
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/interpreter/NoneToBindableConverterRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/interpreter/NoneToBindableConverterRule.java b/core/src/main/java/org/apache/calcite/interpreter/NoneToBindableConverterRule.java
index ab41cac..e352ca1 100644
--- a/core/src/main/java/org/apache/calcite/interpreter/NoneToBindableConverterRule.java
+++ b/core/src/main/java/org/apache/calcite/interpreter/NoneToBindableConverterRule.java
@@ -20,6 +20,10 @@ import org.apache.calcite.plan.Convention;
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.ConverterRule;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.tools.RelBuilderFactory;
+
+import com.google.common.base.Predicates;
/**
* Rule to convert a relational expression from
@@ -28,10 +32,16 @@ import org.apache.calcite.rel.convert.ConverterRule;
*/
public class NoneToBindableConverterRule extends ConverterRule {
public static final ConverterRule INSTANCE =
- new NoneToBindableConverterRule();
+ new NoneToBindableConverterRule(RelFactories.LOGICAL_BUILDER);
- private NoneToBindableConverterRule() {
- super(RelNode.class, Convention.NONE, BindableConvention.INSTANCE,
+ /**
+ * Creates a NoneToBindableConverterRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public NoneToBindableConverterRule(RelBuilderFactory relBuilderFactory) {
+ super(RelNode.class, Predicates.<RelNode>alwaysTrue(), Convention.NONE,
+ BindableConvention.INSTANCE, relBuilderFactory,
"NoneToBindableConverterRule");
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
index 7129ccb..d18527b 100644
--- a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
+++ b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
@@ -1545,12 +1545,18 @@ public class SubstitutionVisitor {
};
public static final FilterOnProjectRule INSTANCE =
- new FilterOnProjectRule();
+ new FilterOnProjectRule(RelFactories.LOGICAL_BUILDER);
- private FilterOnProjectRule() {
+ /**
+ * Creates a FilterOnProjectRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public FilterOnProjectRule(RelBuilderFactory relBuilderFactory) {
super(
operand(LogicalFilter.class, null, PREDICATE,
- some(operand(LogicalProject.class, any()))));
+ some(operand(LogicalProject.class, any()))),
+ relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java b/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
index 33e4056..410ef27 100644
--- a/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
+++ b/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
@@ -33,6 +33,7 @@ import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.convert.Converter;
import org.apache.calcite.rel.convert.ConverterRule;
import org.apache.calcite.rel.convert.TraitMatchingRule;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.metadata.RelMetadataProvider;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.calcite.util.Pair;
@@ -307,7 +308,8 @@ public class HepPlanner extends AbstractRelOptPlanner {
instruction.ruleSet.add(converter);
if (!instruction.guaranteed) {
// Add a TraitMatchingRule to work bottom-up
- instruction.ruleSet.add(new TraitMatchingRule(converter));
+ instruction.ruleSet.add(
+ new TraitMatchingRule(converter, RelFactories.LOGICAL_BUILDER));
}
}
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/plan/volcano/AbstractConverter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/AbstractConverter.java b/core/src/main/java/org/apache/calcite/plan/volcano/AbstractConverter.java
index 42604c9..5c36ad1 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/AbstractConverter.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/AbstractConverter.java
@@ -27,7 +27,9 @@ import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.RelWriter;
import org.apache.calcite.rel.convert.ConverterImpl;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.tools.RelBuilderFactory;
import java.util.List;
@@ -100,13 +102,15 @@ public class AbstractConverter extends ConverterImpl {
*/
public static class ExpandConversionRule extends RelOptRule {
public static final ExpandConversionRule INSTANCE =
- new ExpandConversionRule();
+ new ExpandConversionRule(RelFactories.LOGICAL_BUILDER);
/**
* Creates an ExpandConversionRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
*/
- private ExpandConversionRule() {
- super(operand(AbstractConverter.class, any()));
+ public ExpandConversionRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(AbstractConverter.class, any()), relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java b/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java
index 7761488..ef8d629 100644
--- a/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java
@@ -22,6 +22,8 @@ import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelTrait;
import org.apache.calcite.plan.RelTraitDef;
import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.tools.RelBuilderFactory;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
@@ -49,7 +51,15 @@ public abstract class ConverterRule extends RelOptRule {
*/
public ConverterRule(Class<? extends RelNode> clazz, RelTrait in,
RelTrait out, String description) {
- this(clazz, Predicates.<RelNode>alwaysTrue(), in, out, description);
+ this(clazz, Predicates.<RelNode>alwaysTrue(), in, out,
+ RelFactories.LOGICAL_BUILDER, description);
+ }
+
+ @Deprecated // to be removed before 2.0
+ public <R extends RelNode> ConverterRule(Class<R> clazz,
+ Predicate<? super R> predicate, RelTrait in, RelTrait out,
+ String description) {
+ this(clazz, predicate, in, out, RelFactories.LOGICAL_BUILDER, description);
}
/**
@@ -59,12 +69,14 @@ public abstract class ConverterRule extends RelOptRule {
* @param predicate Predicate on the relational expression
* @param in Trait of relational expression to consider converting
* @param out Trait which is converted to
+ * @param relBuilderFactory Builder for relational expressions
* @param description Description of rule
*/
public <R extends RelNode> ConverterRule(Class<R> clazz,
Predicate<? super R> predicate, RelTrait in, RelTrait out,
- String description) {
+ RelBuilderFactory relBuilderFactory, String description) {
super(convertOperand(clazz, predicate, in),
+ relBuilderFactory,
description == null
? "ConverterRule<in=" + in + ",out=" + out + ">"
: description);
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/convert/TraitMatchingRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/convert/TraitMatchingRule.java b/core/src/main/java/org/apache/calcite/rel/convert/TraitMatchingRule.java
index 63f621c..0fb14c9 100644
--- a/core/src/main/java/org/apache/calcite/rel/convert/TraitMatchingRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/convert/TraitMatchingRule.java
@@ -21,6 +21,8 @@ import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptRuleOperandChildPolicy;
import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* TraitMatchingRule adapts a converter rule, restricting it to fire only when
@@ -35,17 +37,25 @@ public class TraitMatchingRule extends RelOptRule {
//~ Constructors -----------------------------------------------------------
+ @Deprecated // to be removed before 2.0
+ public TraitMatchingRule(ConverterRule converterRule) {
+ this(converterRule, RelFactories.LOGICAL_BUILDER);
+ }
+
/**
- * Creates a new TraitMatchingRule.
+ * Creates a TraitMatchingRule.
*
- * @param converterRule rule to be restricted; rule must take a single
- * operand expecting a single input
+ * @param converterRule Rule to be restricted; rule must take a single
+ * operand expecting a single input
+ * @param relBuilderFactory Builder for relational expressions
*/
- public TraitMatchingRule(ConverterRule converterRule) {
+ public TraitMatchingRule(ConverterRule converterRule,
+ RelBuilderFactory relBuilderFactory) {
super(
operand(
converterRule.getOperand().getMatchedClass(),
operand(RelNode.class, any())),
+ relBuilderFactory,
"TraitMatchingRule: " + converterRule);
assert converterRule.getOperand().childPolicy
== RelOptRuleOperandChildPolicy.ANY;
@@ -54,8 +64,7 @@ public class TraitMatchingRule extends RelOptRule {
//~ Methods ----------------------------------------------------------------
- // implement RelOptRule
- public Convention getOutConvention() {
+ @Override public Convention getOutConvention() {
return converter.getOutConvention();
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java
index abe17bc..68a047d 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateFilterTransposeRule.java
@@ -66,7 +66,8 @@ public class AggregateFilterTransposeRule extends RelOptRule {
RelFactories.LOGICAL_BUILDER);
}
- protected AggregateFilterTransposeRule(RelOptRuleOperand operand,
+ /** Creates an AggregateFilterTransposeRule. */
+ public AggregateFilterTransposeRule(RelOptRuleOperand operand,
RelBuilderFactory relBuilderFactory) {
super(operand, relBuilderFactory, null);
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java
index 746e1f4..957af1e 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java
@@ -89,7 +89,8 @@ public class AggregateReduceFunctionsRule extends RelOptRule {
//~ Constructors -----------------------------------------------------------
- protected AggregateReduceFunctionsRule(RelOptRuleOperand operand,
+ /** Creates an AggregateReduceFunctionsRule. */
+ public AggregateReduceFunctionsRule(RelOptRuleOperand operand,
RelBuilderFactory relBuilderFactory) {
super(operand, relBuilderFactory, null);
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
index 46a5826..11a6d1c 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
@@ -20,10 +20,12 @@ import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.core.Aggregate;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalAggregate;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.calcite.runtime.SqlFunctions;
import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that removes
@@ -34,14 +36,21 @@ import org.apache.calcite.tools.RelBuilder;
*/
public class AggregateRemoveRule extends RelOptRule {
public static final AggregateRemoveRule INSTANCE =
- new AggregateRemoveRule(LogicalAggregate.class);
+ new AggregateRemoveRule(LogicalAggregate.class,
+ RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
+ @Deprecated // to be removed before 2.0
+ public AggregateRemoveRule(Class<? extends Aggregate> aggregateClass) {
+ this(aggregateClass, RelFactories.LOGICAL_BUILDER);
+ }
+
/**
- * Creates a AggregateRemoveRule.
+ * Creates an AggregateRemoveRule.
*/
- public AggregateRemoveRule(Class<? extends Aggregate> aggregateClass) {
+ public AggregateRemoveRule(Class<? extends Aggregate> aggregateClass,
+ RelBuilderFactory relBuilderFactory) {
// REVIEW jvs 14-Mar-2006: We have to explicitly mention the child here
// to make sure the rule re-fires after the child changes (e.g. via
// ProjectRemoveRule), since that may change our information
@@ -50,7 +59,8 @@ public class AggregateRemoveRule extends RelOptRule {
// to the child here.
super(
operand(aggregateClass,
- operand(RelNode.class, any())));
+ operand(RelNode.class, any())),
+ relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
index 51ae97f..22ee628 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
@@ -33,12 +33,14 @@ import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.core.Aggregate;
import org.apache.calcite.rel.core.AggregateCall;
import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.schema.Table;
import org.apache.calcite.schema.impl.StarTable;
import org.apache.calcite.sql.SqlAggFunction;
import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.ImmutableBitSet;
import org.apache.calcite.util.Pair;
import org.apache.calcite.util.mapping.AbstractSourceMapping;
@@ -60,6 +62,7 @@ public class AggregateStarTableRule extends RelOptRule {
new AggregateStarTableRule(
operand(Aggregate.class, null, Aggregate.IS_SIMPLE,
some(operand(StarTable.StarTableScan.class, none()))),
+ RelFactories.LOGICAL_BUILDER,
"AggregateStarTableRule");
public static final AggregateStarTableRule INSTANCE2 =
@@ -67,6 +70,7 @@ public class AggregateStarTableRule extends RelOptRule {
operand(Aggregate.class, null, Aggregate.IS_SIMPLE,
operand(Project.class,
operand(StarTable.StarTableScan.class, none()))),
+ RelFactories.LOGICAL_BUILDER,
"AggregateStarTableRule:project") {
@Override public void onMatch(RelOptRuleCall call) {
final Aggregate aggregate = call.rel(0);
@@ -89,9 +93,16 @@ public class AggregateStarTableRule extends RelOptRule {
}
};
- private AggregateStarTableRule(RelOptRuleOperand operand,
- String description) {
- super(operand, description);
+ /**
+ * Creates an AggregateStarTableRule.
+ *
+ * @param operand root operand, must not be null
+ * @param description Description, or null to guess description
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public AggregateStarTableRule(RelOptRuleOperand operand,
+ RelBuilderFactory relBuilderFactory, String description) {
+ super(operand, relBuilderFactory, description);
}
@Override public void onMatch(RelOptRuleCall call) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/AggregateValuesRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateValuesRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateValuesRule.java
index 654a86a..db31937 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateValuesRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateValuesRule.java
@@ -20,10 +20,12 @@ import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.rel.core.Aggregate;
import org.apache.calcite.rel.core.AggregateCall;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.Values;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.rex.RexLiteral;
import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.Util;
import com.google.common.base.Predicates;
@@ -52,12 +54,19 @@ import java.util.List;
* value, and each group will consist of at least one row.
*/
public class AggregateValuesRule extends RelOptRule {
- public static final AggregateValuesRule INSTANCE = new AggregateValuesRule();
+ public static final AggregateValuesRule INSTANCE =
+ new AggregateValuesRule(RelFactories.LOGICAL_BUILDER);
- private AggregateValuesRule() {
+ /**
+ * Creates an AggregateValuesRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public AggregateValuesRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Aggregate.class, null, Predicates.not(Aggregate.IS_NOT_GRAND_TOTAL),
- operand(Values.class, null, Values.IS_EMPTY, none())));
+ operand(Values.class, null, Values.IS_EMPTY, none())),
+ relBuilderFactory, null);
}
@Override public void onMatch(RelOptRuleCall call) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java
index d218553..0173c3f 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/CalcMergeRule.java
@@ -19,9 +19,11 @@ package org.apache.calcite.rel.rules;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.rel.core.Calc;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rex.RexOver;
import org.apache.calcite.rex.RexProgram;
import org.apache.calcite.rex.RexProgramBuilder;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that merges a
@@ -36,15 +38,22 @@ import org.apache.calcite.rex.RexProgramBuilder;
public class CalcMergeRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
- public static final CalcMergeRule INSTANCE = new CalcMergeRule();
+ public static final CalcMergeRule INSTANCE =
+ new CalcMergeRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
- private CalcMergeRule() {
+ /**
+ * Creates a CalcMergeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public CalcMergeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(
Calc.class,
- operand(Calc.class, any())));
+ operand(Calc.class, any())),
+ relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/CalcRemoveRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/CalcRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/CalcRemoveRule.java
index cbbd011..0a8869c 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/CalcRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/CalcRemoveRule.java
@@ -19,8 +19,10 @@ package org.apache.calcite.rel.rules;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalCalc;
import org.apache.calcite.rex.RexProgram;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that removes a trivial
@@ -36,12 +38,17 @@ public class CalcRemoveRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
public static final CalcRemoveRule INSTANCE =
- new CalcRemoveRule();
+ new CalcRemoveRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
- private CalcRemoveRule() {
- super(operand(LogicalCalc.class, any()));
+ /**
+ * Creates a CalcRemoveRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public CalcRemoveRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(LogicalCalc.class, any()), relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/CalcSplitRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/CalcSplitRule.java b/core/src/main/java/org/apache/calcite/rel/rules/CalcSplitRule.java
index 359ade9..01b7c91 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/CalcSplitRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/CalcSplitRule.java
@@ -42,7 +42,12 @@ public class CalcSplitRule extends RelOptRule {
public static final CalcSplitRule INSTANCE =
new CalcSplitRule(RelFactories.LOGICAL_BUILDER);
- private CalcSplitRule(RelBuilderFactory relBuilderFactory) {
+ /**
+ * Creates a CalcSplitRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public CalcSplitRule(RelBuilderFactory relBuilderFactory) {
super(operand(Calc.class, any()), relBuilderFactory, null);
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/CoerceInputsRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/CoerceInputsRule.java b/core/src/main/java/org/apache/calcite/rel/rules/CoerceInputsRule.java
index 5f489b9..c6e839f 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/CoerceInputsRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/CoerceInputsRule.java
@@ -21,13 +21,15 @@ import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptUtil;
import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.tools.RelBuilderFactory;
import java.util.ArrayList;
import java.util.List;
/**
- * CoerceInputsRule precasts inputs to a particular type. This can be used to
+ * CoerceInputsRule pre-casts inputs to a particular type. This can be used to
* assist operator implementations which impose requirements on their input
* types.
*/
@@ -40,18 +42,26 @@ public class CoerceInputsRule extends RelOptRule {
//~ Constructors -----------------------------------------------------------
- /**
- * Constructs the rule.
- *
- * @param consumerRelClass the RelNode class which will consume the inputs
- * @param coerceNames if true, coerce names and types; if false, coerce
- * type only
- */
+ @Deprecated // to be removed before 2.0
public CoerceInputsRule(
Class<? extends RelNode> consumerRelClass,
boolean coerceNames) {
+ this(consumerRelClass, coerceNames, RelFactories.LOGICAL_BUILDER);
+ }
+
+ /**
+ * Creates a CoerceInputsRule.
+ *
+ * @param consumerRelClass Class of RelNode that will consume the inputs
+ * @param coerceNames If true, coerce names and types; if false, coerce
+ * type only
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public CoerceInputsRule(Class<? extends RelNode> consumerRelClass,
+ boolean coerceNames, RelBuilderFactory relBuilderFactory) {
super(
operand(consumerRelClass, any()),
+ relBuilderFactory,
"CoerceInputsRule:" + consumerRelClass.getName());
this.consumerRelClass = consumerRelClass;
this.coerceNames = coerceNames;
@@ -59,12 +69,10 @@ public class CoerceInputsRule extends RelOptRule {
//~ Methods ----------------------------------------------------------------
- // implement RelOptRule
- public Convention getOutConvention() {
+ @Override public Convention getOutConvention() {
return Convention.NONE;
}
- // implement RelOptRule
public void onMatch(RelOptRuleCall call) {
RelNode consumerRel = call.rel(0);
if (consumerRel.getClass() != consumerRelClass) {
@@ -72,7 +80,7 @@ public class CoerceInputsRule extends RelOptRule {
return;
}
List<RelNode> inputs = consumerRel.getInputs();
- List<RelNode> newInputs = new ArrayList<RelNode>(inputs);
+ List<RelNode> newInputs = new ArrayList<>(inputs);
boolean coerce = false;
for (int i = 0; i < inputs.size(); ++i) {
RelDataType expectedType = consumerRel.getExpectedInputRowType(i);
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java
index 7f5191b..b422763 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterCalcMergeRule.java
@@ -19,11 +19,13 @@ package org.apache.calcite.rel.rules;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.rel.core.Filter;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalCalc;
import org.apache.calcite.rel.logical.LogicalFilter;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.rex.RexProgram;
import org.apache.calcite.rex.RexProgramBuilder;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that merges a
@@ -38,15 +40,21 @@ public class FilterCalcMergeRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
public static final FilterCalcMergeRule INSTANCE =
- new FilterCalcMergeRule();
+ new FilterCalcMergeRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
- private FilterCalcMergeRule() {
+ /**
+ * Creates a FilterCalcMergeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public FilterCalcMergeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(
Filter.class,
- operand(LogicalCalc.class, any())));
+ operand(LogicalCalc.class, any())),
+ relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterMultiJoinMergeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterMultiJoinMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterMultiJoinMergeRule.java
index fe446d1..73f24aa 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/FilterMultiJoinMergeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterMultiJoinMergeRule.java
@@ -18,7 +18,9 @@ package org.apache.calcite.rel.rules;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalFilter;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that merges a
@@ -30,17 +32,18 @@ import org.apache.calcite.rel.logical.LogicalFilter;
*/
public class FilterMultiJoinMergeRule extends RelOptRule {
public static final FilterMultiJoinMergeRule INSTANCE =
- new FilterMultiJoinMergeRule();
+ new FilterMultiJoinMergeRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/**
* Creates a FilterMultiJoinMergeRule.
*/
- private FilterMultiJoinMergeRule() {
+ public FilterMultiJoinMergeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(LogicalFilter.class,
- operand(MultiJoin.class, any())));
+ operand(MultiJoin.class, any())),
+ relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterRemoveIsNotDistinctFromRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterRemoveIsNotDistinctFromRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterRemoveIsNotDistinctFromRule.java
index adfb14d..5739ed9 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/FilterRemoveIsNotDistinctFromRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterRemoveIsNotDistinctFromRule.java
@@ -28,6 +28,7 @@ import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexShuttle;
import org.apache.calcite.rex.RexUtil;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that replaces {@code IS NOT DISTINCT FROM}
@@ -41,12 +42,18 @@ public final class FilterRemoveIsNotDistinctFromRule extends RelOptRule {
/** The singleton. */
public static final FilterRemoveIsNotDistinctFromRule INSTANCE =
- new FilterRemoveIsNotDistinctFromRule();
+ new FilterRemoveIsNotDistinctFromRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
- private FilterRemoveIsNotDistinctFromRule() {
- super(operand(LogicalFilter.class, any()));
+ /**
+ * Creates a FilterRemoveIsNotDistinctFromRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public FilterRemoveIsNotDistinctFromRule(
+ RelBuilderFactory relBuilderFactory) {
+ super(operand(LogicalFilter.class, any()), relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterTableFunctionTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterTableFunctionTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterTableFunctionTransposeRule.java
index 3f517ab..a151487 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/FilterTableFunctionTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterTableFunctionTransposeRule.java
@@ -21,12 +21,14 @@ import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptUtil;
import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalFilter;
import org.apache.calcite.rel.logical.LogicalTableFunctionScan;
import org.apache.calcite.rel.metadata.RelColumnMapping;
import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.tools.RelBuilderFactory;
import java.util.ArrayList;
import java.util.List;
@@ -39,17 +41,18 @@ import java.util.Set;
*/
public class FilterTableFunctionTransposeRule extends RelOptRule {
public static final FilterTableFunctionTransposeRule INSTANCE =
- new FilterTableFunctionTransposeRule();
+ new FilterTableFunctionTransposeRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/**
* Creates a FilterTableFunctionTransposeRule.
*/
- private FilterTableFunctionTransposeRule() {
+ public FilterTableFunctionTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(LogicalFilter.class,
- operand(LogicalTableFunctionScan.class, any())));
+ operand(LogicalTableFunctionScan.class, any())),
+ relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java
index d090d79..1a52eec 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java
@@ -23,12 +23,14 @@ import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptRuleOperand;
import org.apache.calcite.plan.RelOptTable;
import org.apache.calcite.rel.core.Filter;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.TableScan;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexUtil;
import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.schema.FilterableTable;
import org.apache.calcite.schema.ProjectableFilterableTable;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.ImmutableIntList;
import org.apache.calcite.util.mapping.Mapping;
import org.apache.calcite.util.mapping.Mappings;
@@ -66,7 +68,8 @@ public abstract class FilterTableScanRule extends RelOptRule {
new FilterTableScanRule(
operand(Filter.class,
operand(TableScan.class, null, PREDICATE, none())),
- "FilterTableRule") {
+ RelFactories.LOGICAL_BUILDER,
+ "FilterTableScanRule") {
public void onMatch(RelOptRuleCall call) {
final Filter filter = call.rel(0);
final TableScan scan = call.rel(1);
@@ -80,7 +83,8 @@ public abstract class FilterTableScanRule extends RelOptRule {
operand(Filter.class,
operand(EnumerableInterpreter.class,
operand(TableScan.class, null, PREDICATE, none()))),
- "FilterTableRule:interpreter") {
+ RelFactories.LOGICAL_BUILDER,
+ "FilterTableScanRule:interpreter") {
public void onMatch(RelOptRuleCall call) {
final Filter filter = call.rel(0);
final TableScan scan = call.rel(2);
@@ -90,9 +94,15 @@ public abstract class FilterTableScanRule extends RelOptRule {
//~ Constructors -----------------------------------------------------------
- /** Creates a FilterTableRule. */
+ @Deprecated // to be removed before 2.0
protected FilterTableScanRule(RelOptRuleOperand operand, String description) {
- super(operand, description);
+ this(operand, RelFactories.LOGICAL_BUILDER, description);
+ }
+
+ /** Creates a FilterTableScanRule. */
+ protected FilterTableScanRule(RelOptRuleOperand operand,
+ RelBuilderFactory relBuilderFactory, String description) {
+ super(operand, relBuilderFactory, description);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/FilterToCalcRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterToCalcRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterToCalcRule.java
index 2e7feaf..d8d1a49 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/FilterToCalcRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterToCalcRule.java
@@ -19,12 +19,14 @@ package org.apache.calcite.rel.rules;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalCalc;
import org.apache.calcite.rel.logical.LogicalFilter;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.rex.RexProgram;
import org.apache.calcite.rex.RexProgramBuilder;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that converts a
@@ -43,12 +45,18 @@ import org.apache.calcite.rex.RexProgramBuilder;
public class FilterToCalcRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
- public static final FilterToCalcRule INSTANCE = new FilterToCalcRule();
+ public static final FilterToCalcRule INSTANCE =
+ new FilterToCalcRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
- private FilterToCalcRule() {
- super(operand(LogicalFilter.class, any()));
+ /**
+ * Creates a FilterToCalcRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public FilterToCalcRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(LogicalFilter.class, any()), relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------