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:30 UTC
[2/4] calcite git commit: [CALCITE-2043] Use custom RelBuilder
implementation in some rules (Volodymyr Vysotskyi)
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/JoinAddRedundantSemiJoinRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/JoinAddRedundantSemiJoinRule.java b/core/src/main/java/org/apache/calcite/rel/rules/JoinAddRedundantSemiJoinRule.java
index ae68a91..494ab78 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/JoinAddRedundantSemiJoinRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/JoinAddRedundantSemiJoinRule.java
@@ -22,8 +22,10 @@ import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.core.Join;
import org.apache.calcite.rel.core.JoinInfo;
import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.SemiJoin;
import org.apache.calcite.rel.logical.LogicalJoin;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Rule to add a semi-join into a join. Transformation is as follows:
@@ -36,15 +38,17 @@ import org.apache.calcite.rel.logical.LogicalJoin;
*/
public class JoinAddRedundantSemiJoinRule extends RelOptRule {
public static final JoinAddRedundantSemiJoinRule INSTANCE =
- new JoinAddRedundantSemiJoinRule(LogicalJoin.class);
+ new JoinAddRedundantSemiJoinRule(LogicalJoin.class,
+ RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/**
* Creates an JoinAddRedundantSemiJoinRule.
*/
- private JoinAddRedundantSemiJoinRule(Class<? extends Join> clazz) {
- super(operand(clazz, any()));
+ public JoinAddRedundantSemiJoinRule(Class<? extends Join> clazz,
+ RelBuilderFactory relBuilderFactory) {
+ super(operand(clazz, any()), relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/JoinAssociateRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/JoinAssociateRule.java b/core/src/main/java/org/apache/calcite/rel/rules/JoinAssociateRule.java
index 455176f..ad6b3c6 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/JoinAssociateRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/JoinAssociateRule.java
@@ -23,10 +23,12 @@ import org.apache.calcite.plan.volcano.RelSubset;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.core.Join;
import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexPermuteInputsShuttle;
import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.ImmutableBitSet;
import org.apache.calcite.util.mapping.Mappings;
@@ -49,18 +51,20 @@ public class JoinAssociateRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
/** The singleton. */
- public static final JoinAssociateRule INSTANCE = new JoinAssociateRule();
+ public static final JoinAssociateRule INSTANCE =
+ new JoinAssociateRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/**
* Creates a JoinAssociateRule.
*/
- private JoinAssociateRule() {
+ public JoinAssociateRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Join.class,
operand(Join.class, any()),
- operand(RelSubset.class, any())));
+ operand(RelSubset.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/JoinExtractFilterRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/JoinExtractFilterRule.java b/core/src/main/java/org/apache/calcite/rel/rules/JoinExtractFilterRule.java
index 8d3f665..8c4a02d 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/JoinExtractFilterRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/JoinExtractFilterRule.java
@@ -23,6 +23,7 @@ import org.apache.calcite.rel.core.Join;
import org.apache.calcite.rel.core.JoinRelType;
import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalJoin;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Rule to convert an
@@ -43,15 +44,25 @@ public final class JoinExtractFilterRule extends RelOptRule {
/** The singleton. */
public static final JoinExtractFilterRule INSTANCE =
- new JoinExtractFilterRule(LogicalJoin.class);
+ new JoinExtractFilterRule(LogicalJoin.class,
+ RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/**
* Creates an JoinExtractFilterRule.
*/
+ @Deprecated // to be removed before 2.0
public JoinExtractFilterRule(Class<? extends Join> clazz) {
- super(operand(clazz, any()));
+ this(clazz, RelFactories.LOGICAL_BUILDER);
+ }
+
+ /**
+ * Creates a JoinExtractFilterRule.
+ */
+ public JoinExtractFilterRule(Class<? extends Join> clazz,
+ RelBuilderFactory relBuilderFactory) {
+ super(operand(clazz, any()), relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/JoinToCorrelateRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/JoinToCorrelateRule.java b/core/src/main/java/org/apache/calcite/rel/rules/JoinToCorrelateRule.java
index 5afbe2a..47a128d 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/JoinToCorrelateRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/JoinToCorrelateRule.java
@@ -66,9 +66,9 @@ public class JoinToCorrelateRule extends RelOptRule {
//~ Constructors -----------------------------------------------------------
/**
- * Private constructor; use singleton {@link #INSTANCE}.
+ * Creates a JoinToCorrelateRule.
*/
- protected JoinToCorrelateRule(RelBuilderFactory relBuilderFactory) {
+ public JoinToCorrelateRule(RelBuilderFactory relBuilderFactory) {
super(operand(LogicalJoin.class, any()), relBuilderFactory, null);
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/JoinToMultiJoinRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/JoinToMultiJoinRule.java b/core/src/main/java/org/apache/calcite/rel/rules/JoinToMultiJoinRule.java
index 7d6c059..ecccad1 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/JoinToMultiJoinRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/JoinToMultiJoinRule.java
@@ -22,6 +22,7 @@ import org.apache.calcite.plan.RelOptUtil;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.core.Join;
import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalJoin;
import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.calcite.rex.RexBuilder;
@@ -29,6 +30,7 @@ import org.apache.calcite.rex.RexInputRef;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexUtil;
import org.apache.calcite.rex.RexVisitorImpl;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.ImmutableBitSet;
import org.apache.calcite.util.ImmutableIntList;
import org.apache.calcite.util.Pair;
@@ -102,18 +104,25 @@ import java.util.Map;
*/
public class JoinToMultiJoinRule extends RelOptRule {
public static final JoinToMultiJoinRule INSTANCE =
- new JoinToMultiJoinRule(LogicalJoin.class);
+ new JoinToMultiJoinRule(LogicalJoin.class, RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
+ @Deprecated // to be removed before 2.0
+ public JoinToMultiJoinRule(Class<? extends Join> clazz) {
+ this(clazz, RelFactories.LOGICAL_BUILDER);
+ }
+
/**
* Creates a JoinToMultiJoinRule.
*/
- public JoinToMultiJoinRule(Class<? extends Join> clazz) {
+ public JoinToMultiJoinRule(Class<? extends Join> clazz,
+ RelBuilderFactory relBuilderFactory) {
super(
operand(clazz,
operand(RelNode.class, any()),
- 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/JoinUnionTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/JoinUnionTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/JoinUnionTransposeRule.java
index 0a3bee9..acd4577 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/JoinUnionTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/JoinUnionTransposeRule.java
@@ -21,8 +21,10 @@ import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptRuleOperand;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.core.Join;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.SetOp;
import org.apache.calcite.rel.core.Union;
+import org.apache.calcite.tools.RelBuilderFactory;
import java.util.ArrayList;
import java.util.List;
@@ -38,6 +40,7 @@ public class JoinUnionTransposeRule extends RelOptRule {
operand(Join.class,
operand(Union.class, any()),
operand(RelNode.class, any())),
+ RelFactories.LOGICAL_BUILDER,
"JoinUnionTransposeRule(Union-Other)");
public static final JoinUnionTransposeRule RIGHT_UNION =
@@ -45,11 +48,19 @@ public class JoinUnionTransposeRule extends RelOptRule {
operand(Join.class,
operand(RelNode.class, any()),
operand(Union.class, any())),
+ RelFactories.LOGICAL_BUILDER,
"JoinUnionTransposeRule(Other-Union)");
- private JoinUnionTransposeRule(RelOptRuleOperand operand,
- String description) {
- super(operand, description);
+ /**
+ * Creates a JoinUnionTransposeRule.
+ *
+ * @param operand root operand, must not be null
+ * @param description Description, or null to guess description
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public JoinUnionTransposeRule(RelOptRuleOperand operand,
+ RelBuilderFactory relBuilderFactory, String description) {
+ super(operand, relBuilderFactory, description);
}
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/MaterializedViewFilterScanRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/MaterializedViewFilterScanRule.java b/core/src/main/java/org/apache/calcite/rel/rules/MaterializedViewFilterScanRule.java
index f1775aa..b382f52 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/MaterializedViewFilterScanRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/MaterializedViewFilterScanRule.java
@@ -56,7 +56,7 @@ public class MaterializedViewFilterScanRule extends RelOptRule {
//~ Constructors -----------------------------------------------------------
/** Creates a MaterializedViewFilterScanRule. */
- protected MaterializedViewFilterScanRule(RelBuilderFactory relBuilderFactory) {
+ public MaterializedViewFilterScanRule(RelBuilderFactory relBuilderFactory) {
super(operand(Filter.class, operand(TableScan.class, null, none())),
relBuilderFactory, "MaterializedViewFilterScanRule");
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
index 4c254fb..8579816 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
@@ -20,8 +20,10 @@ import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptRuleOperand;
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.LogicalJoin;
import org.apache.calcite.rel.logical.LogicalProject;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* MultiJoinProjectTransposeRule implements the rule for pulling
@@ -64,6 +66,7 @@ public class MultiJoinProjectTransposeRule extends JoinProjectTransposeRule {
operand(MultiJoin.class, any())),
operand(LogicalProject.class,
operand(MultiJoin.class, any()))),
+ RelFactories.LOGICAL_BUILDER,
"MultiJoinProjectTransposeRule: with two LogicalProject children");
public static final MultiJoinProjectTransposeRule MULTI_LEFT_PROJECT =
@@ -72,6 +75,7 @@ public class MultiJoinProjectTransposeRule extends JoinProjectTransposeRule {
some(
operand(LogicalProject.class,
operand(MultiJoin.class, any())))),
+ RelFactories.LOGICAL_BUILDER,
"MultiJoinProjectTransposeRule: with LogicalProject on left");
public static final MultiJoinProjectTransposeRule MULTI_RIGHT_PROJECT =
@@ -80,14 +84,24 @@ public class MultiJoinProjectTransposeRule extends JoinProjectTransposeRule {
operand(RelNode.class, any()),
operand(LogicalProject.class,
operand(MultiJoin.class, any()))),
+ RelFactories.LOGICAL_BUILDER,
"MultiJoinProjectTransposeRule: with LogicalProject on right");
//~ Constructors -----------------------------------------------------------
+ @Deprecated // to be removed before 2.0
public MultiJoinProjectTransposeRule(
RelOptRuleOperand operand,
String description) {
- super(operand, description);
+ this(operand, RelFactories.LOGICAL_BUILDER, description);
+ }
+
+ /** Creates a MultiJoinProjectTransposeRule. */
+ public MultiJoinProjectTransposeRule(
+ RelOptRuleOperand operand,
+ RelBuilderFactory relBuilderFactory,
+ String description) {
+ super(operand, description, false, relBuilderFactory);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java
index 9ecd044..568c31b 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java
@@ -19,6 +19,7 @@ package org.apache.calcite.rel.rules;
import org.apache.calcite.plan.RelOptCluster;
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.LogicalCalc;
import org.apache.calcite.rel.logical.LogicalProject;
import org.apache.calcite.rex.RexBuilder;
@@ -26,6 +27,7 @@ import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexOver;
import org.apache.calcite.rex.RexProgram;
import org.apache.calcite.rex.RexProgramBuilder;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.Pair;
/**
@@ -44,15 +46,21 @@ public class ProjectCalcMergeRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
public static final ProjectCalcMergeRule INSTANCE =
- new ProjectCalcMergeRule();
+ new ProjectCalcMergeRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
- private ProjectCalcMergeRule() {
+ /**
+ * Creates a ProjectCalcMergeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public ProjectCalcMergeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(
LogicalProject.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/ProjectMultiJoinMergeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectMultiJoinMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectMultiJoinMergeRule.java
index 0cf5d58..95a568f 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectMultiJoinMergeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectMultiJoinMergeRule.java
@@ -39,7 +39,7 @@ public class ProjectMultiJoinMergeRule extends RelOptRule {
//~ Constructors -----------------------------------------------------------
/** Creates a ProjectMultiJoinMergeRule. */
- private ProjectMultiJoinMergeRule(RelBuilderFactory relBuilderFactory) {
+ public ProjectMultiJoinMergeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(LogicalProject.class,
operand(MultiJoin.class, any())), relBuilderFactory, null);
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
index 7a92ccb..cc773fb 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.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.Project;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexUtil;
import org.apache.calcite.runtime.PredicateImpl;
+import org.apache.calcite.tools.RelBuilderFactory;
import com.google.common.base.Predicate;
@@ -49,15 +51,21 @@ public class ProjectRemoveRule extends RelOptRule {
}
};
- public static final ProjectRemoveRule INSTANCE = new ProjectRemoveRule();
+ public static final ProjectRemoveRule INSTANCE =
+ new ProjectRemoveRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
- /** Creates a ProjectRemoveRule. */
- private ProjectRemoveRule() {
+ /**
+ * Creates a ProjectRemoveRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public ProjectRemoveRule(RelBuilderFactory relBuilderFactory) {
// Create a specialized operand to detect non-matches early. This keeps
// the rule queue short.
- super(operand(Project.class, null, PREDICATE, any()));
+ super(operand(Project.class, null, PREDICATE, any()), relBuilderFactory,
+ null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/ProjectSortTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectSortTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectSortTransposeRule.java
index 727f5dd..d1dd14e 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectSortTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectSortTransposeRule.java
@@ -21,7 +21,9 @@ import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptRuleOperand;
import org.apache.calcite.rel.RelNode;
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.tools.RelBuilderFactory;
import com.google.common.collect.ImmutableList;
@@ -34,21 +36,29 @@ import com.google.common.collect.ImmutableList;
*/
public class ProjectSortTransposeRule extends RelOptRule {
public static final ProjectSortTransposeRule INSTANCE =
- new ProjectSortTransposeRule();
+ new ProjectSortTransposeRule(Project.class, Sort.class,
+ RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
- /**
- * Creates a ProjectSortTransposeRule.
- */
- private ProjectSortTransposeRule() {
- super(
- operand(Project.class,
- operand(Sort.class, any())));
+ /** Creates a ProjectSortTransposeRule. */
+ private ProjectSortTransposeRule(Class<Project> projectClass,
+ Class<Sort> sortClass, RelBuilderFactory relBuilderFactory) {
+ this(
+ operand(projectClass,
+ operand(sortClass, any())),
+ relBuilderFactory, null);
}
+ @Deprecated // to be removed before 2.0
protected ProjectSortTransposeRule(RelOptRuleOperand operand) {
- super(operand);
+ this(operand, RelFactories.LOGICAL_BUILDER, null);
+ }
+
+ /** Creates a ProjectSortTransposeRule with an operand. */
+ protected ProjectSortTransposeRule(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/ProjectTableScanRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableScanRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableScanRule.java
index eff4e52..bd4b5fe 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableScanRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableScanRule.java
@@ -23,10 +23,12 @@ import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptRuleOperand;
import org.apache.calcite.plan.RelOptTable;
import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.TableScan;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.runtime.PredicateImpl;
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;
@@ -62,6 +64,7 @@ public abstract class ProjectTableScanRule extends RelOptRule {
new ProjectTableScanRule(
operand(Project.class,
operand(TableScan.class, null, PREDICATE, none())),
+ RelFactories.LOGICAL_BUILDER,
"ProjectScanRule") {
@Override public void onMatch(RelOptRuleCall call) {
final Project project = call.rel(0);
@@ -76,6 +79,7 @@ public abstract class ProjectTableScanRule extends RelOptRule {
operand(Project.class,
operand(EnumerableInterpreter.class,
operand(TableScan.class, null, PREDICATE, none()))),
+ RelFactories.LOGICAL_BUILDER,
"ProjectScanRule:interpreter") {
@Override public void onMatch(RelOptRuleCall call) {
final Project project = call.rel(0);
@@ -86,9 +90,10 @@ public abstract class ProjectTableScanRule extends RelOptRule {
//~ Constructors -----------------------------------------------------------
- /** Creates a ProjectScanRule. */
- private ProjectTableScanRule(RelOptRuleOperand operand, String description) {
- super(operand, description);
+ /** Creates a ProjectTableScanRule. */
+ public ProjectTableScanRule(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/ProjectToCalcRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectToCalcRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectToCalcRule.java
index b6f05c9..e16bc81 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectToCalcRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectToCalcRule.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.RelNode;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalCalc;
import org.apache.calcite.rel.logical.LogicalProject;
import org.apache.calcite.rex.RexProgram;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Rule to convert a
@@ -40,12 +42,18 @@ import org.apache.calcite.rex.RexProgram;
public class ProjectToCalcRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
- public static final ProjectToCalcRule INSTANCE = new ProjectToCalcRule();
+ public static final ProjectToCalcRule INSTANCE =
+ new ProjectToCalcRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
- private ProjectToCalcRule() {
- super(operand(LogicalProject.class, any()));
+ /**
+ * Creates a ProjectToCalcRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public ProjectToCalcRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(LogicalProject.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/ProjectToWindowRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectToWindowRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectToWindowRule.java
index 4c441e2..2a37522 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectToWindowRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectToWindowRule.java
@@ -25,6 +25,7 @@ import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.core.Calc;
import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalCalc;
import org.apache.calcite.rel.logical.LogicalWindow;
import org.apache.calcite.rex.RexCall;
@@ -39,6 +40,7 @@ import org.apache.calcite.rex.RexVisitorImpl;
import org.apache.calcite.rex.RexWindow;
import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.ImmutableIntList;
import org.apache.calcite.util.Pair;
import org.apache.calcite.util.graph.DefaultDirectedGraph;
@@ -90,25 +92,56 @@ public abstract class ProjectToWindowRule extends RelOptRule {
}
};
+ public static final ProjectToWindowRule INSTANCE =
+ new CalcToWindowRule(RelFactories.LOGICAL_BUILDER);
+
+ public static final ProjectToWindowRule PROJECT =
+ new ProjectToLogicalProjectAndWindowRule(RelFactories.LOGICAL_BUILDER);
+
+ //~ Constructors -----------------------------------------------------------
+
+ /**
+ * Creates a ProjectToWindowRule.
+ *
+ * @param operand Root operand, must not be null
+ * @param description Description, or null to guess description
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public ProjectToWindowRule(RelOptRuleOperand operand,
+ RelBuilderFactory relBuilderFactory, String description) {
+ super(operand, relBuilderFactory, description);
+ }
+
+ //~ Inner Classes ----------------------------------------------------------
+
/**
* Instance of the rule that applies to a
* {@link org.apache.calcite.rel.core.Calc} that contains
* windowed aggregates and converts it into a mixture of
* {@link org.apache.calcite.rel.logical.LogicalWindow} and {@code Calc}.
*/
- public static final ProjectToWindowRule INSTANCE =
- new ProjectToWindowRule(
- operand(Calc.class, null, PREDICATE, any()),
- "ProjectToWindowRule") {
- public void onMatch(RelOptRuleCall call) {
- Calc calc = call.rel(0);
- assert RexOver.containsOver(calc.getProgram());
- final CalcRelSplitter transform =
- new WindowedAggRelSplitter(calc, call.builder());
- RelNode newRel = transform.execute();
- call.transformTo(newRel);
- }
- };
+ public static class CalcToWindowRule extends ProjectToWindowRule {
+
+ /**
+ * Creates a CalcToWindowRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public CalcToWindowRule(RelBuilderFactory relBuilderFactory) {
+ super(
+ operand(Calc.class, null, PREDICATE, any()),
+ relBuilderFactory, "ProjectToWindowRule");
+ }
+
+ public void onMatch(RelOptRuleCall call) {
+ Calc calc = call.rel(0);
+ assert RexOver.containsOver(calc.getProgram());
+ final CalcRelSplitter transform =
+ new WindowedAggRelSplitter(calc, call.builder());
+ RelNode newRel = transform.execute();
+ call.transformTo(newRel);
+ }
+ }
/**
* Instance of the rule that can be applied to a
@@ -116,63 +149,63 @@ public abstract class ProjectToWindowRule extends RelOptRule {
* a mixture of {@code LogicalProject}
* and {@link org.apache.calcite.rel.logical.LogicalWindow}.
*/
- public static final ProjectToWindowRule PROJECT =
- new ProjectToWindowRule(
- operand(Project.class, null, PREDICATE2, any()),
- "ProjectToWindowRule:project") {
- @Override public void onMatch(RelOptRuleCall call) {
- Project project = call.rel(0);
- assert RexOver.containsOver(project.getProjects(), null);
- final RelNode input = project.getInput();
- final RexProgram program =
- RexProgram.create(
- input.getRowType(),
- project.getProjects(),
- null,
- project.getRowType(),
- project.getCluster().getRexBuilder());
- // temporary LogicalCalc, never registered
- final LogicalCalc calc = LogicalCalc.create(input, program);
- final CalcRelSplitter transform = new WindowedAggRelSplitter(calc,
- call.builder()) {
- @Override protected RelNode handle(RelNode rel) {
- if (!(rel instanceof LogicalCalc)) {
- return rel;
- }
- final LogicalCalc calc = (LogicalCalc) rel;
- final RexProgram program = calc.getProgram();
- relBuilder.push(calc.getInput());
- if (program.getCondition() != null) {
- relBuilder.filter(
- program.expandLocalRef(program.getCondition()));
- }
- if (!program.projectsOnlyIdentity()) {
- relBuilder.project(
- Lists.transform(program.getProjectList(),
- new Function<RexLocalRef, RexNode>() {
- public RexNode apply(RexLocalRef a0) {
- return program.expandLocalRef(a0);
- }
- }),
- calc.getRowType().getFieldNames());
- }
- return relBuilder.build();
- }
- };
- RelNode newRel = transform.execute();
- call.transformTo(newRel);
+ public static class ProjectToLogicalProjectAndWindowRule
+ extends ProjectToWindowRule {
+ /**
+ * Creates a ProjectToWindowRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public ProjectToLogicalProjectAndWindowRule(
+ RelBuilderFactory relBuilderFactory) {
+ super(operand(Project.class, null, PREDICATE2, any()),
+ relBuilderFactory, "ProjectToWindowRule:project");
+ }
+
+ @Override public void onMatch(RelOptRuleCall call) {
+ Project project = call.rel(0);
+ assert RexOver.containsOver(project.getProjects(), null);
+ final RelNode input = project.getInput();
+ final RexProgram program =
+ RexProgram.create(
+ input.getRowType(),
+ project.getProjects(),
+ null,
+ project.getRowType(),
+ project.getCluster().getRexBuilder());
+ // temporary LogicalCalc, never registered
+ final LogicalCalc calc = LogicalCalc.create(input, program);
+ final CalcRelSplitter transform = new WindowedAggRelSplitter(calc,
+ call.builder()) {
+ @Override protected RelNode handle(RelNode rel) {
+ if (!(rel instanceof LogicalCalc)) {
+ return rel;
+ }
+ final LogicalCalc calc = (LogicalCalc) rel;
+ final RexProgram program = calc.getProgram();
+ relBuilder.push(calc.getInput());
+ if (program.getCondition() != null) {
+ relBuilder.filter(
+ program.expandLocalRef(program.getCondition()));
+ }
+ if (!program.projectsOnlyIdentity()) {
+ relBuilder.project(
+ Lists.transform(program.getProjectList(),
+ new Function<RexLocalRef, RexNode>() {
+ public RexNode apply(RexLocalRef a0) {
+ return program.expandLocalRef(a0);
+ }
+ }),
+ calc.getRowType().getFieldNames());
+ }
+ return relBuilder.build();
}
};
-
- //~ Constructors -----------------------------------------------------------
-
- /** Creates a ProjectToWindowRule. */
- private ProjectToWindowRule(RelOptRuleOperand operand, String description) {
- super(operand, description);
+ RelNode newRel = transform.execute();
+ call.transformTo(newRel);
+ }
}
- //~ Inner Classes ----------------------------------------------------------
-
/**
* Splitter that distinguishes between windowed aggregation expressions
* (calls to {@link RexOver}) and ordinary expressions.
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/ProjectWindowTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectWindowTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectWindowTransposeRule.java
index 152a3d2..10afd40 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectWindowTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectWindowTransposeRule.java
@@ -21,6 +21,7 @@ import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.rel.RelCollations;
import org.apache.calcite.rel.RelFieldCollation;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.Window;
import org.apache.calcite.rel.logical.LogicalProject;
import org.apache.calcite.rel.logical.LogicalWindow;
@@ -31,6 +32,7 @@ import org.apache.calcite.rex.RexInputRef;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexShuttle;
import org.apache.calcite.sql.SqlAggFunction;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.BitSets;
import org.apache.calcite.util.ImmutableBitSet;
@@ -46,12 +48,18 @@ public class ProjectWindowTransposeRule extends RelOptRule {
/** The default instance of
* {@link org.apache.calcite.rel.rules.ProjectWindowTransposeRule}. */
public static final ProjectWindowTransposeRule INSTANCE =
- new ProjectWindowTransposeRule();
-
- private ProjectWindowTransposeRule() {
+ new ProjectWindowTransposeRule(RelFactories.LOGICAL_BUILDER);
+
+ /**
+ * Creates ProjectWindowTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public ProjectWindowTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(LogicalProject.class,
- operand(LogicalWindow.class, any())));
+ operand(LogicalWindow.class, any())),
+ 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/ReduceDecimalsRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ReduceDecimalsRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ReduceDecimalsRule.java
index 3dac4ed..2d27fc5 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ReduceDecimalsRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ReduceDecimalsRule.java
@@ -20,6 +20,7 @@ import org.apache.calcite.linq4j.Ord;
import org.apache.calcite.plan.Convention;
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.LogicalCalc;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeSystem;
@@ -36,6 +37,7 @@ import org.apache.calcite.sql.SqlOperator;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.type.SqlTypeName;
import org.apache.calcite.sql.type.SqlTypeUtil;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.Pair;
import org.apache.calcite.util.Util;
@@ -65,15 +67,16 @@ import static org.apache.calcite.util.Static.RESOURCE;
* would like to push down decimal operations to an external database.
*/
public class ReduceDecimalsRule extends RelOptRule {
- public static final ReduceDecimalsRule INSTANCE = new ReduceDecimalsRule();
+ public static final ReduceDecimalsRule INSTANCE =
+ new ReduceDecimalsRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/**
* Creates a ReduceDecimalsRule.
*/
- private ReduceDecimalsRule() {
- super(operand(LogicalCalc.class, any()));
+ public ReduceDecimalsRule(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/SemiJoinFilterTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinFilterTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinFilterTransposeRule.java
index 486e43c..6103720 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinFilterTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinFilterTransposeRule.java
@@ -22,6 +22,7 @@ import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.SemiJoin;
import org.apache.calcite.rel.logical.LogicalFilter;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that pushes
@@ -37,17 +38,18 @@ import org.apache.calcite.rel.logical.LogicalFilter;
*/
public class SemiJoinFilterTransposeRule extends RelOptRule {
public static final SemiJoinFilterTransposeRule INSTANCE =
- new SemiJoinFilterTransposeRule();
+ new SemiJoinFilterTransposeRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/**
* Creates a SemiJoinFilterTransposeRule.
*/
- private SemiJoinFilterTransposeRule() {
+ public SemiJoinFilterTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(SemiJoin.class,
- some(operand(LogicalFilter.class, any()))));
+ some(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/SemiJoinJoinTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinJoinTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinJoinTransposeRule.java
index 42821e7..f7e4f48 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinJoinTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinJoinTransposeRule.java
@@ -21,9 +21,11 @@ import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptUtil;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.core.Join;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.SemiJoin;
import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.ImmutableIntList;
import java.util.ArrayList;
@@ -45,17 +47,18 @@ import java.util.List;
*/
public class SemiJoinJoinTransposeRule extends RelOptRule {
public static final SemiJoinJoinTransposeRule INSTANCE =
- new SemiJoinJoinTransposeRule();
+ new SemiJoinJoinTransposeRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/**
* Creates a SemiJoinJoinTransposeRule.
*/
- private SemiJoinJoinTransposeRule() {
+ public SemiJoinJoinTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(SemiJoin.class,
- some(operand(Join.class, any()))));
+ some(operand(Join.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/SemiJoinRemoveRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinRemoveRule.java
index 4c6a20d..24ee4fb 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinRemoveRule.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.core.SemiJoin;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that removes a {@link org.apache.calcite.rel.core.SemiJoin}s
@@ -33,13 +35,13 @@ import org.apache.calcite.rel.core.SemiJoin;
*/
public class SemiJoinRemoveRule extends RelOptRule {
public static final SemiJoinRemoveRule INSTANCE =
- new SemiJoinRemoveRule();
+ new SemiJoinRemoveRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/** Creates a SemiJoinRemoveRule. */
- private SemiJoinRemoveRule() {
- super(operand(SemiJoin.class, any()));
+ public SemiJoinRemoveRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(SemiJoin.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/SortJoinTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/SortJoinTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/SortJoinTransposeRule.java
index 86d3e5e..04fbb6d 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/SortJoinTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/SortJoinTransposeRule.java
@@ -26,11 +26,13 @@ import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.core.Join;
import org.apache.calcite.rel.core.JoinInfo;
import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.Sort;
import org.apache.calcite.rel.logical.LogicalJoin;
import org.apache.calcite.rel.logical.LogicalSort;
import org.apache.calcite.rel.metadata.RelMdUtil;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
@@ -45,16 +47,24 @@ public class SortJoinTransposeRule extends RelOptRule {
public static final SortJoinTransposeRule INSTANCE =
new SortJoinTransposeRule(LogicalSort.class,
- LogicalJoin.class);
+ LogicalJoin.class, RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/** Creates a SortJoinTransposeRule. */
+ @Deprecated // to be removed before 2.0
public SortJoinTransposeRule(Class<? extends Sort> sortClass,
Class<? extends Join> joinClass) {
+ this(sortClass, joinClass, RelFactories.LOGICAL_BUILDER);
+ }
+
+ /** Creates a SortJoinTransposeRule. */
+ public SortJoinTransposeRule(Class<? extends Sort> sortClass,
+ Class<? extends Join> joinClass, RelBuilderFactory relBuilderFactory) {
super(
operand(sortClass,
- operand(joinClass, any())));
+ operand(joinClass, any())),
+ relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/SortProjectTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/SortProjectTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/SortProjectTransposeRule.java
index 127e95e..19cde5f 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/SortProjectTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/SortProjectTransposeRule.java
@@ -27,6 +27,7 @@ import org.apache.calcite.rel.RelCollations;
import org.apache.calcite.rel.RelFieldCollation;
import org.apache.calcite.rel.RelNode;
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.logical.LogicalProject;
import org.apache.calcite.rex.RexCall;
@@ -35,6 +36,7 @@ import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexUtil;
import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.validate.SqlMonotonicity;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.mapping.Mappings;
import com.google.common.collect.ImmutableList;
@@ -51,7 +53,8 @@ import java.util.Map;
*/
public class SortProjectTransposeRule extends RelOptRule {
public static final SortProjectTransposeRule INSTANCE =
- new SortProjectTransposeRule(Sort.class, LogicalProject.class, null);
+ new SortProjectTransposeRule(Sort.class, LogicalProject.class,
+ RelFactories.LOGICAL_BUILDER, null);
//~ Constructors -----------------------------------------------------------
@@ -59,20 +62,35 @@ public class SortProjectTransposeRule extends RelOptRule {
public SortProjectTransposeRule(
Class<? extends Sort> sortClass,
Class<? extends Project> projectClass) {
- this(sortClass, projectClass, null);
+ this(sortClass, projectClass, RelFactories.LOGICAL_BUILDER, null);
}
- /** Creates a SortProjectTransposeRule.*/
+ @Deprecated // to be removed before 2.0
public SortProjectTransposeRule(
Class<? extends Sort> sortClass,
Class<? extends Project> projectClass,
String description) {
- super(
+ this(sortClass, projectClass, RelFactories.LOGICAL_BUILDER, description);
+ }
+
+ /** Creates a SortProjectTransposeRule. */
+ public SortProjectTransposeRule(
+ Class<? extends Sort> sortClass,
+ Class<? extends Project> projectClass,
+ RelBuilderFactory relBuilderFactory, String description) {
+ this(
operand(sortClass,
operand(projectClass, any())),
- description);
+ relBuilderFactory, description);
+ }
+
+ /** Creates a SortProjectTransposeRule with an operand. */
+ protected SortProjectTransposeRule(RelOptRuleOperand operand,
+ RelBuilderFactory relBuilderFactory, String description) {
+ super(operand, relBuilderFactory, description);
}
+ @Deprecated // to be removed before 2.0
protected SortProjectTransposeRule(RelOptRuleOperand operand) {
super(operand);
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/SortRemoveRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/SortRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/SortRemoveRule.java
index bd56821..09334ab 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/SortRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/SortRemoveRule.java
@@ -21,7 +21,9 @@ import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelCollation;
import org.apache.calcite.rel.RelCollationTraitDef;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.Sort;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that removes
@@ -30,12 +32,16 @@ import org.apache.calcite.rel.core.Sort;
* <p>Requires {@link RelCollationTraitDef}.
*/
public class SortRemoveRule extends RelOptRule {
- public static final SortRemoveRule INSTANCE = new SortRemoveRule();
+ public static final SortRemoveRule INSTANCE =
+ new SortRemoveRule(RelFactories.LOGICAL_BUILDER);
- private SortRemoveRule() {
- super(
- operand(Sort.class, any()),
- "SortRemoveRule");
+ /**
+ * Creates a SortRemoveRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public SortRemoveRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(Sort.class, any()), relBuilderFactory, "SortRemoveRule");
}
@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/SubQueryRemoveRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
index 3bed2b3..12ee805 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
@@ -148,7 +148,14 @@ public abstract class SubQueryRemoveRule extends RelOptRule {
}
};
- private SubQueryRemoveRule(RelOptRuleOperand operand,
+ /**
+ * Creates a SubQueryRemoveRule.
+ *
+ * @param operand root operand, must not be null
+ * @param description Description, or null to guess description
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public SubQueryRemoveRule(RelOptRuleOperand operand,
RelBuilderFactory relBuilderFactory,
String description) {
super(operand, relBuilderFactory, description);
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/TableScanRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/TableScanRule.java b/core/src/main/java/org/apache/calcite/rel/rules/TableScanRule.java
index 208fc89..851c7c3 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/TableScanRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/TableScanRule.java
@@ -21,7 +21,9 @@ import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptTable;
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.LogicalTableScan;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* Planner rule that converts a
@@ -31,12 +33,18 @@ import org.apache.calcite.rel.logical.LogicalTableScan;
public class TableScanRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
- public static final TableScanRule INSTANCE = new TableScanRule();
+ public static final TableScanRule INSTANCE =
+ new TableScanRule(RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
- private TableScanRule() {
- super(operand(LogicalTableScan.class, any()));
+ /**
+ * Creates a TableScanRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public TableScanRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(LogicalTableScan.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/UnionEliminatorRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/UnionEliminatorRule.java b/core/src/main/java/org/apache/calcite/rel/rules/UnionEliminatorRule.java
index 4e908ec..024dd4e 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/UnionEliminatorRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/UnionEliminatorRule.java
@@ -18,8 +18,10 @@ 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.core.Union;
import org.apache.calcite.rel.logical.LogicalUnion;
+import org.apache.calcite.tools.RelBuilderFactory;
/**
* <code>UnionEliminatorRule</code> checks to see if its possible to optimize a
@@ -28,15 +30,16 @@ import org.apache.calcite.rel.logical.LogicalUnion;
*/
public class UnionEliminatorRule extends RelOptRule {
public static final UnionEliminatorRule INSTANCE =
- new UnionEliminatorRule(LogicalUnion.class);
+ new UnionEliminatorRule(LogicalUnion.class, RelFactories.LOGICAL_BUILDER);
//~ Constructors -----------------------------------------------------------
/**
* Creates a UnionEliminatorRule.
*/
- private UnionEliminatorRule(Class<? extends Union> clazz) {
- super(operand(clazz, any()));
+ public UnionEliminatorRule(Class<? extends Union> clazz,
+ RelBuilderFactory relBuilderFactory) {
+ super(operand(clazz, any()), relBuilderFactory, null);
}
//~ Methods ----------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/UnionPullUpConstantsRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/UnionPullUpConstantsRule.java b/core/src/main/java/org/apache/calcite/rel/rules/UnionPullUpConstantsRule.java
index 05e42be..9fb0426 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/UnionPullUpConstantsRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/UnionPullUpConstantsRule.java
@@ -51,7 +51,7 @@ public class UnionPullUpConstantsRule extends RelOptRule {
new UnionPullUpConstantsRule(Union.class, RelFactories.LOGICAL_BUILDER);
/** Creates a UnionPullUpConstantsRule. */
- protected UnionPullUpConstantsRule(Class<? extends Union> unionClass,
+ public UnionPullUpConstantsRule(Class<? extends Union> unionClass,
RelBuilderFactory relBuilderFactory) {
super(operand(unionClass, any()), relBuilderFactory, null);
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/rules/ValuesReduceRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ValuesReduceRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ValuesReduceRule.java
index 7a194c0..f7d5b15 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ValuesReduceRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ValuesReduceRule.java
@@ -21,6 +21,7 @@ import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptRuleOperand;
import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.Values;
import org.apache.calcite.rel.logical.LogicalFilter;
import org.apache.calcite.rel.logical.LogicalProject;
@@ -32,6 +33,7 @@ import org.apache.calcite.rex.RexLiteral;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexShuttle;
import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.Util;
import org.apache.calcite.util.trace.CalciteTrace;
@@ -74,6 +76,7 @@ public abstract class ValuesReduceRule extends RelOptRule {
new ValuesReduceRule(
operand(LogicalFilter.class,
operand(LogicalValues.class, null, Values.IS_NOT_EMPTY, none())),
+ RelFactories.LOGICAL_BUILDER,
"ValuesReduceRule(Filter)") {
public void onMatch(RelOptRuleCall call) {
LogicalFilter filter = call.rel(0);
@@ -90,6 +93,7 @@ public abstract class ValuesReduceRule extends RelOptRule {
new ValuesReduceRule(
operand(LogicalProject.class,
operand(LogicalValues.class, null, Values.IS_NOT_EMPTY, none())),
+ RelFactories.LOGICAL_BUILDER,
"ValuesReduceRule(Project)") {
public void onMatch(RelOptRuleCall call) {
LogicalProject project = call.rel(0);
@@ -108,6 +112,7 @@ public abstract class ValuesReduceRule extends RelOptRule {
operand(LogicalFilter.class,
operand(LogicalValues.class, null, Values.IS_NOT_EMPTY,
none()))),
+ RelFactories.LOGICAL_BUILDER,
"ValuesReduceRule(Project-Filter)") {
public void onMatch(RelOptRuleCall call) {
LogicalProject project = call.rel(0);
@@ -122,10 +127,13 @@ public abstract class ValuesReduceRule extends RelOptRule {
/**
* Creates a ValuesReduceRule.
*
- * @param operand class of rels to which this rule should apply
+ * @param operand Class of rels to which this rule should apply
+ * @param relBuilderFactory Builder for relational expressions
+ * @param desc Description, or null to guess description
*/
- private ValuesReduceRule(RelOptRuleOperand operand, String desc) {
- super(operand, desc);
+ public ValuesReduceRule(RelOptRuleOperand operand,
+ RelBuilderFactory relBuilderFactory, String desc) {
+ super(operand, relBuilderFactory, desc);
Util.discard(LOGGER);
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/main/java/org/apache/calcite/rel/stream/StreamRules.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/stream/StreamRules.java b/core/src/main/java/org/apache/calcite/rel/stream/StreamRules.java
index 80ee68f..a1e0d58 100644
--- a/core/src/main/java/org/apache/calcite/rel/stream/StreamRules.java
+++ b/core/src/main/java/org/apache/calcite/rel/stream/StreamRules.java
@@ -26,6 +26,7 @@ import org.apache.calcite.rel.core.Aggregate;
import org.apache.calcite.rel.core.Filter;
import org.apache.calcite.rel.core.Join;
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;
@@ -40,6 +41,7 @@ import org.apache.calcite.rel.logical.LogicalUnion;
import org.apache.calcite.schema.StreamableTable;
import org.apache.calcite.schema.Table;
import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.Util;
import com.google.common.collect.ImmutableList;
@@ -55,21 +57,28 @@ public class StreamRules {
public static final ImmutableList<RelOptRule> RULES =
ImmutableList.of(
- new DeltaProjectTransposeRule(),
- new DeltaFilterTransposeRule(),
- new DeltaAggregateTransposeRule(),
- new DeltaSortTransposeRule(),
- new DeltaUnionTransposeRule(),
- new DeltaJoinTransposeRule(),
- new DeltaTableScanRule(),
- new DeltaTableScanToEmptyRule());
+ new DeltaProjectTransposeRule(RelFactories.LOGICAL_BUILDER),
+ new DeltaFilterTransposeRule(RelFactories.LOGICAL_BUILDER),
+ new DeltaAggregateTransposeRule(RelFactories.LOGICAL_BUILDER),
+ new DeltaSortTransposeRule(RelFactories.LOGICAL_BUILDER),
+ new DeltaUnionTransposeRule(RelFactories.LOGICAL_BUILDER),
+ new DeltaJoinTransposeRule(RelFactories.LOGICAL_BUILDER),
+ new DeltaTableScanRule(RelFactories.LOGICAL_BUILDER),
+ new DeltaTableScanToEmptyRule(RelFactories.LOGICAL_BUILDER));
/** Planner rule that pushes a {@link Delta} through a {@link Project}. */
public static class DeltaProjectTransposeRule extends RelOptRule {
- private DeltaProjectTransposeRule() {
+
+ /**
+ * Creates a DeltaProjectTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DeltaProjectTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Delta.class,
- operand(Project.class, any())));
+ operand(Project.class, any())),
+ relBuilderFactory, null);
}
@Override public void onMatch(RelOptRuleCall call) {
@@ -86,10 +95,17 @@ public class StreamRules {
/** Planner rule that pushes a {@link Delta} through a {@link Filter}. */
public static class DeltaFilterTransposeRule extends RelOptRule {
- private DeltaFilterTransposeRule() {
+
+ /**
+ * Creates a DeltaFilterTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DeltaFilterTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Delta.class,
- operand(Filter.class, any())));
+ operand(Filter.class, any())),
+ relBuilderFactory, null);
}
@Override public void onMatch(RelOptRuleCall call) {
@@ -105,10 +121,17 @@ public class StreamRules {
/** Planner rule that pushes a {@link Delta} through an {@link Aggregate}. */
public static class DeltaAggregateTransposeRule extends RelOptRule {
- private DeltaAggregateTransposeRule() {
+
+ /**
+ * Creates a DeltaAggregateTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DeltaAggregateTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Delta.class,
- operand(Aggregate.class, null, Aggregate.NO_INDICATOR, any())));
+ operand(Aggregate.class, null, Aggregate.NO_INDICATOR, any())),
+ relBuilderFactory, null);
}
@Override public void onMatch(RelOptRuleCall call) {
@@ -126,10 +149,17 @@ public class StreamRules {
/** Planner rule that pushes a {@link Delta} through an {@link Sort}. */
public static class DeltaSortTransposeRule extends RelOptRule {
- private DeltaSortTransposeRule() {
+
+ /**
+ * Creates a DeltaSortTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DeltaSortTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Delta.class,
- operand(Sort.class, any())));
+ operand(Sort.class, any())),
+ relBuilderFactory, null);
}
@Override public void onMatch(RelOptRuleCall call) {
@@ -146,10 +176,17 @@ public class StreamRules {
/** Planner rule that pushes a {@link Delta} through an {@link Union}. */
public static class DeltaUnionTransposeRule extends RelOptRule {
- private DeltaUnionTransposeRule() {
+
+ /**
+ * Creates a DeltaUnionTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DeltaUnionTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Delta.class,
- operand(Union.class, any())));
+ operand(Union.class, any())),
+ relBuilderFactory, null);
}
@Override public void onMatch(RelOptRuleCall call) {
@@ -174,10 +211,17 @@ public class StreamRules {
* with the other relations in the system. The Delta disappears and the stream
* can be implemented directly. */
public static class DeltaTableScanRule extends RelOptRule {
- private DeltaTableScanRule() {
+
+ /**
+ * Creates a DeltaTableScanRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DeltaTableScanRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Delta.class,
- operand(TableScan.class, none())));
+ operand(TableScan.class, none())),
+ relBuilderFactory, null);
}
@Override public void onMatch(RelOptRuleCall call) {
@@ -208,10 +252,17 @@ public class StreamRules {
* an empty {@link Values}.
*/
public static class DeltaTableScanToEmptyRule extends RelOptRule {
- private DeltaTableScanToEmptyRule() {
+
+ /**
+ * Creates a DeltaTableScanToEmptyRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DeltaTableScanToEmptyRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Delta.class,
- operand(TableScan.class, none())));
+ operand(TableScan.class, none())),
+ relBuilderFactory, null);
}
@Override public void onMatch(RelOptRuleCall call) {
@@ -239,10 +290,21 @@ public class StreamRules {
*/
public static class DeltaJoinTransposeRule extends RelOptRule {
+ @Deprecated // to be removed before 2.0
public DeltaJoinTransposeRule() {
+ this(RelFactories.LOGICAL_BUILDER);
+ }
+
+ /**
+ * Creates a DeltaJoinTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DeltaJoinTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Delta.class,
- operand(Join.class, any())));
+ operand(Join.class, any())),
+ relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/test/java/org/apache/calcite/test/HepPlannerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/HepPlannerTest.java b/core/src/test/java/org/apache/calcite/test/HepPlannerTest.java
index 3145db5..c88fe24 100644
--- a/core/src/test/java/org/apache/calcite/test/HepPlannerTest.java
+++ b/core/src/test/java/org/apache/calcite/test/HepPlannerTest.java
@@ -20,6 +20,7 @@ import org.apache.calcite.plan.hep.HepMatchOrder;
import org.apache.calcite.plan.hep.HepPlanner;
import org.apache.calcite.plan.hep.HepProgram;
import org.apache.calcite.plan.hep.HepProgramBuilder;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalIntersect;
import org.apache.calcite.rel.logical.LogicalUnion;
import org.apache.calcite.rel.rules.CalcMergeRule;
@@ -61,8 +62,12 @@ public class HepPlannerTest extends RelOptTestBase {
new HepPlanner(
programBuilder.build());
- planner.addRule(new CoerceInputsRule(LogicalUnion.class, false));
- planner.addRule(new CoerceInputsRule(LogicalIntersect.class, false));
+ planner.addRule(
+ new CoerceInputsRule(LogicalUnion.class, false,
+ RelFactories.LOGICAL_BUILDER));
+ planner.addRule(
+ new CoerceInputsRule(LogicalIntersect.class, false,
+ RelFactories.LOGICAL_BUILDER));
checkPlanning(planner,
"(select name from dept union select ename from emp)"
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
index c6bc035..53c2c6a 100644
--- a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
@@ -33,6 +33,7 @@ import org.apache.calcite.rel.core.Intersect;
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.RelFactories;
import org.apache.calcite.rel.core.Union;
import org.apache.calcite.rel.logical.LogicalTableModify;
import org.apache.calcite.rel.metadata.CachingRelMetadataProvider;
@@ -2211,7 +2212,8 @@ public class RelOptRulesTest extends RelOptTestBase {
// Simulate the way INSERT will insert casts to the target types
.addRuleInstance(
- new CoerceInputsRule(LogicalTableModify.class, false))
+ new CoerceInputsRule(LogicalTableModify.class, false,
+ RelFactories.LOGICAL_BUILDER))
// Convert projects to calcs, merge two calcs, and then
// reduce redundant casts in merged calc.
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java
----------------------------------------------------------------------
diff --git a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java
index 7a22012..6779ded 100644
--- a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java
+++ b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java
@@ -55,6 +55,7 @@ import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.type.SqlTypeFamily;
import org.apache.calcite.sql.type.SqlTypeName;
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.Util;
@@ -85,26 +86,30 @@ public class DruidRules {
protected static final Logger LOGGER = CalciteTrace.getPlannerTracer();
- public static final DruidFilterRule FILTER = new DruidFilterRule();
- public static final DruidProjectRule PROJECT = new DruidProjectRule();
- public static final DruidAggregateRule AGGREGATE = new DruidAggregateRule();
+ public static final DruidFilterRule FILTER =
+ new DruidFilterRule(RelFactories.LOGICAL_BUILDER);
+ public static final DruidProjectRule PROJECT =
+ new DruidProjectRule(RelFactories.LOGICAL_BUILDER);
+ public static final DruidAggregateRule AGGREGATE =
+ new DruidAggregateRule(RelFactories.LOGICAL_BUILDER);
public static final DruidAggregateProjectRule AGGREGATE_PROJECT =
- new DruidAggregateProjectRule();
- public static final DruidSortRule SORT = new DruidSortRule();
+ new DruidAggregateProjectRule(RelFactories.LOGICAL_BUILDER);
+ public static final DruidSortRule SORT =
+ new DruidSortRule(RelFactories.LOGICAL_BUILDER);
public static final DruidSortProjectTransposeRule SORT_PROJECT_TRANSPOSE =
- new DruidSortProjectTransposeRule();
+ new DruidSortProjectTransposeRule(RelFactories.LOGICAL_BUILDER);
public static final DruidProjectSortTransposeRule PROJECT_SORT_TRANSPOSE =
- new DruidProjectSortTransposeRule();
+ new DruidProjectSortTransposeRule(RelFactories.LOGICAL_BUILDER);
public static final DruidProjectFilterTransposeRule PROJECT_FILTER_TRANSPOSE =
- new DruidProjectFilterTransposeRule();
+ new DruidProjectFilterTransposeRule(RelFactories.LOGICAL_BUILDER);
public static final DruidFilterProjectTransposeRule FILTER_PROJECT_TRANSPOSE =
- new DruidFilterProjectTransposeRule();
+ new DruidFilterProjectTransposeRule(RelFactories.LOGICAL_BUILDER);
public static final DruidAggregateFilterTransposeRule AGGREGATE_FILTER_TRANSPOSE =
- new DruidAggregateFilterTransposeRule();
+ new DruidAggregateFilterTransposeRule(RelFactories.LOGICAL_BUILDER);
public static final DruidFilterAggregateTransposeRule FILTER_AGGREGATE_TRANSPOSE =
- new DruidFilterAggregateTransposeRule();
+ new DruidFilterAggregateTransposeRule(RelFactories.LOGICAL_BUILDER);
public static final DruidPostAggregationProjectRule POST_AGGREGATION_PROJECT =
- new DruidPostAggregationProjectRule();
+ new DruidPostAggregationProjectRule(RelFactories.LOGICAL_BUILDER);
public static final List<RelOptRule> RULES =
ImmutableList.of(FILTER,
@@ -181,9 +186,16 @@ public class DruidRules {
/**
* Rule to push a {@link org.apache.calcite.rel.core.Filter} into a {@link DruidQuery}.
*/
- private static class DruidFilterRule extends RelOptRule {
- private DruidFilterRule() {
- super(operand(Filter.class, operand(DruidQuery.class, none())));
+ public static class DruidFilterRule extends RelOptRule {
+
+ /**
+ * Creates a DruidFilterRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidFilterRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(Filter.class, operand(DruidQuery.class, none())),
+ relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
@@ -316,9 +328,16 @@ public class DruidRules {
/**
* Rule to push a {@link org.apache.calcite.rel.core.Project} into a {@link DruidQuery}.
*/
- private static class DruidProjectRule extends RelOptRule {
- private DruidProjectRule() {
- super(operand(Project.class, operand(DruidQuery.class, none())));
+ public static class DruidProjectRule extends RelOptRule {
+
+ /**
+ * Creates a DruidProjectRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidProjectRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(Project.class, operand(DruidQuery.class, none())),
+ relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
@@ -412,8 +431,18 @@ public class DruidRules {
* Post aggregator.
*/
public static class DruidPostAggregationProjectRule extends RelOptRule {
- private DruidPostAggregationProjectRule() {
- super(operand(Project.class, operand(DruidQuery.class, none())));
+
+ /**
+ * Creates a DruidPostAggregationProjectRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidPostAggregationProjectRule(
+ RelBuilderFactory relBuilderFactory) {
+ super(
+ operand(Project.class,
+ operand(DruidQuery.class, none())),
+ relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
@@ -603,9 +632,16 @@ public class DruidRules {
/**
* Rule to push an {@link org.apache.calcite.rel.core.Aggregate} into a {@link DruidQuery}.
*/
- private static class DruidAggregateRule extends RelOptRule {
- private DruidAggregateRule() {
- super(operand(Aggregate.class, operand(DruidQuery.class, none())));
+ public static class DruidAggregateRule extends RelOptRule {
+
+ /**
+ * Creates a DruidAggregateRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidAggregateRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(Aggregate.class, operand(DruidQuery.class, none())),
+ relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
@@ -642,12 +678,19 @@ public class DruidRules {
* Rule to push an {@link org.apache.calcite.rel.core.Aggregate} and
* {@link org.apache.calcite.rel.core.Project} into a {@link DruidQuery}.
*/
- private static class DruidAggregateProjectRule extends RelOptRule {
- private DruidAggregateProjectRule() {
+ public static class DruidAggregateProjectRule extends RelOptRule {
+
+ /**
+ * Creates a DruidAggregateProjectRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidAggregateProjectRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Aggregate.class,
operand(Project.class,
- operand(DruidQuery.class, none()))));
+ operand(DruidQuery.class, none()))),
+ relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
@@ -960,12 +1003,19 @@ public class DruidRules {
* {@link org.apache.calcite.rel.core.Project}. Useful to transform
* to complex Druid queries.
*/
- private static class DruidSortProjectTransposeRule
+ public static class DruidSortProjectTransposeRule
extends SortProjectTransposeRule {
- private DruidSortProjectTransposeRule() {
+
+ /**
+ * Creates a DruidSortProjectTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidSortProjectTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Sort.class,
- operand(Project.class, operand(DruidQuery.class, none()))));
+ operand(Project.class, operand(DruidQuery.class, none()))),
+ relBuilderFactory, null);
}
}
@@ -974,12 +1024,19 @@ public class DruidRules {
* {@link org.apache.calcite.rel.core.Sort}. Useful if after pushing Sort,
* we could not push it inside DruidQuery.
*/
- private static class DruidProjectSortTransposeRule
+ public static class DruidProjectSortTransposeRule
extends ProjectSortTransposeRule {
- private DruidProjectSortTransposeRule() {
+
+ /**
+ * Creates a DruidProjectSortTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidProjectSortTransposeRule(RelBuilderFactory relBuilderFactory) {
super(
operand(Project.class,
- operand(Sort.class, operand(DruidQuery.class, none()))));
+ operand(Sort.class, operand(DruidQuery.class, none()))),
+ relBuilderFactory, null);
}
}
@@ -987,9 +1044,16 @@ public class DruidRules {
* Rule to push a {@link org.apache.calcite.rel.core.Sort}
* into a {@link DruidQuery}.
*/
- private static class DruidSortRule extends RelOptRule {
- private DruidSortRule() {
- super(operand(Sort.class, operand(DruidQuery.class, none())));
+ public static class DruidSortRule extends RelOptRule {
+
+ /**
+ * Creates a DruidSortRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidSortRule(RelBuilderFactory relBuilderFactory) {
+ super(operand(Sort.class, operand(DruidQuery.class, none())),
+ relBuilderFactory, null);
}
public void onMatch(RelOptRuleCall call) {
@@ -1139,15 +1203,22 @@ public class DruidRules {
* past a {@link org.apache.calcite.rel.core.Filter}
* when {@code Filter} is on top of a {@link DruidQuery}.
*/
- private static class DruidProjectFilterTransposeRule
+ public static class DruidProjectFilterTransposeRule
extends ProjectFilterTransposeRule {
- private DruidProjectFilterTransposeRule() {
+
+ /**
+ * Creates a DruidProjectFilterTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidProjectFilterTransposeRule(
+ RelBuilderFactory relBuilderFactory) {
super(
operand(Project.class,
operand(Filter.class,
operand(DruidQuery.class, none()))),
PushProjector.ExprCondition.FALSE,
- RelFactories.LOGICAL_BUILDER);
+ relBuilderFactory);
}
}
@@ -1156,14 +1227,21 @@ public class DruidRules {
* past a {@link org.apache.calcite.rel.core.Project}
* when {@code Project} is on top of a {@link DruidQuery}.
*/
- private static class DruidFilterProjectTransposeRule
+ public static class DruidFilterProjectTransposeRule
extends FilterProjectTransposeRule {
- private DruidFilterProjectTransposeRule() {
+
+ /**
+ * Creates a DruidFilterProjectTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidFilterProjectTransposeRule(
+ RelBuilderFactory relBuilderFactory) {
super(
operand(Filter.class,
operand(Project.class,
operand(DruidQuery.class, none()))),
- true, true, RelFactories.LOGICAL_BUILDER);
+ true, true, relBuilderFactory);
}
}
@@ -1172,14 +1250,21 @@ public class DruidRules {
* past a {@link org.apache.calcite.rel.core.Filter}
* when {@code Filter} is on top of a {@link DruidQuery}.
*/
- private static class DruidAggregateFilterTransposeRule
+ public static class DruidAggregateFilterTransposeRule
extends AggregateFilterTransposeRule {
- private DruidAggregateFilterTransposeRule() {
+
+ /**
+ * Creates a DruidAggregateFilterTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidAggregateFilterTransposeRule(
+ RelBuilderFactory relBuilderFactory) {
super(
operand(Aggregate.class,
operand(Filter.class,
operand(DruidQuery.class, none()))),
- RelFactories.LOGICAL_BUILDER);
+ relBuilderFactory);
}
}
@@ -1188,14 +1273,21 @@ public class DruidRules {
* past an {@link org.apache.calcite.rel.core.Aggregate}
* when {@code Aggregate} is on top of a {@link DruidQuery}.
*/
- private static class DruidFilterAggregateTransposeRule
+ public static class DruidFilterAggregateTransposeRule
extends FilterAggregateTransposeRule {
- private DruidFilterAggregateTransposeRule() {
+
+ /**
+ * Creates a DruidFilterAggregateTransposeRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public DruidFilterAggregateTransposeRule(
+ RelBuilderFactory relBuilderFactory) {
super(
operand(Filter.class,
operand(Aggregate.class,
operand(DruidQuery.class, none()))),
- RelFactories.LOGICAL_BUILDER);
+ relBuilderFactory);
}
}
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/d407395e/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvProjectTableScanRule.java
----------------------------------------------------------------------
diff --git a/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvProjectTableScanRule.java b/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvProjectTableScanRule.java
index b0851c7..9c136a9 100644
--- a/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvProjectTableScanRule.java
+++ b/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvProjectTableScanRule.java
@@ -18,9 +18,11 @@ package org.apache.calcite.adapter.csv;
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.LogicalProject;
import org.apache.calcite.rex.RexInputRef;
import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.tools.RelBuilderFactory;
import java.util.List;
@@ -31,12 +33,18 @@ import java.util.List;
*/
public class CsvProjectTableScanRule extends RelOptRule {
public static final CsvProjectTableScanRule INSTANCE =
- new CsvProjectTableScanRule();
+ new CsvProjectTableScanRule(RelFactories.LOGICAL_BUILDER);
- private CsvProjectTableScanRule() {
+ /**
+ * Creates a CsvProjectTableScanRule.
+ *
+ * @param relBuilderFactory Builder for relational expressions
+ */
+ public CsvProjectTableScanRule(RelBuilderFactory relBuilderFactory) {
super(
operand(LogicalProject.class,
operand(CsvTableScan.class, none())),
+ relBuilderFactory,
"CsvProjectTableScanRule");
}