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 2014/11/23 11:44:21 UTC
[2/4] incubator-calcite git commit: [CALCITE-474] Clean up rule
naming in order to support enabling/disabling rules
[CALCITE-474] Clean up rule naming in order to support enabling/disabling rules
Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/7882a5b9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/7882a5b9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/7882a5b9
Branch: refs/heads/master
Commit: 7882a5b958663f417df3f4e5cfca6f79c298537f
Parents: ac85beb
Author: Julian Hyde <jh...@apache.org>
Authored: Sun Nov 23 00:10:04 2014 -0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Sun Nov 23 01:04:42 2014 -0800
----------------------------------------------------------------------
.../java/org/apache/calcite/plan/RelOptRule.java | 11 ++++++++++-
.../apache/calcite/plan/volcano/VolcanoPlanner.java | 16 ++++++++++++++++
.../apache/calcite/rel/rules/FilterJoinRule.java | 2 +-
.../calcite/rel/rules/JoinProjectTransposeRule.java | 6 +++---
.../calcite/rel/rules/JoinUnionTransposeRule.java | 9 +++++----
.../calcite/rel/rules/ReduceExpressionsRule.java | 8 ++++----
.../apache/calcite/rel/rules/ValuesReduceRule.java | 6 +++---
7 files changed, 42 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/7882a5b9/core/src/main/java/org/apache/calcite/plan/RelOptRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptRule.java b/core/src/main/java/org/apache/calcite/plan/RelOptRule.java
index d9d2e6f..788b88d 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptRule.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptRule.java
@@ -80,6 +80,10 @@ public abstract class RelOptRule {
if (description == null) {
description = guessDescription(getClass().getName());
}
+ if (!description.matches("[A-Za-z][-A-Za-z0-9_.():]*")) {
+ throw new RuntimeException("Rule description '" + description
+ + "' is not valid");
+ }
this.description = description;
this.operands = flattenOperands(operand);
assignSolveOrder();
@@ -429,7 +433,12 @@ public abstract class RelOptRule {
return null;
}
- public String toString() {
+ /** Returns the description of this rule.
+ *
+ * <p>It must be unique (for rules that are not equal) and must consist of
+ * only the characters A-Z, a-z, 0-9, '_', '.', '(', ')'. It must start with
+ * a letter. */
+ public final String toString() {
return description;
}
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/7882a5b9/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
index 87623ea..b605a60 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
@@ -76,10 +76,12 @@ import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
+import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import com.google.common.collect.SetMultimap;
import com.google.common.collect.Sets;
import java.io.PrintWriter;
@@ -266,6 +268,11 @@ public class VolcanoPlanner extends AbstractRelOptPlanner {
* {@link org.apache.calcite.plan.volcano.VolcanoCost}. */
private final RelOptCost zeroCost;
+ /** Maps rule classes to their name, to ensure that the names are unique and
+ * conform to rules. */
+ private final SetMultimap<String, Class> ruleNames =
+ LinkedHashMultimap.create();
+
//~ Constructors -----------------------------------------------------------
/**
@@ -572,6 +579,15 @@ public class VolcanoPlanner extends AbstractRelOptPlanner {
final boolean added = ruleSet.add(rule);
assert added;
+ final String ruleName = rule.toString();
+ if (ruleNames.put(ruleName, rule.getClass())) {
+ Set<Class> x = ruleNames.get(ruleName);
+ if (x.size() > 1) {
+ throw new RuntimeException("Rule description '" + ruleName
+ + "' is not unique; classes: " + x);
+ }
+ }
+
mapRuleDescription(rule);
// Each of this rule's operands is an 'entry point' for a rule call.
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/7882a5b9/core/src/main/java/org/apache/calcite/rel/rules/FilterJoinRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterJoinRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterJoinRule.java
index 9ea4c40..bef2844 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/FilterJoinRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterJoinRule.java
@@ -71,7 +71,7 @@ public abstract class FilterJoinRule extends RelOptRule {
protected FilterJoinRule(RelOptRuleOperand operand, String id,
boolean smart, RelFactories.FilterFactory filterFactory,
RelFactories.ProjectFactory projectFactory) {
- super(operand, "PushFilterRule: " + id);
+ super(operand, "PushFilterRule:" + id);
this.smart = smart;
this.filterFactory = filterFactory;
this.projectFactory = projectFactory;
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/7882a5b9/core/src/main/java/org/apache/calcite/rel/rules/JoinProjectTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/JoinProjectTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/JoinProjectTransposeRule.java
index b266e68..2f41648 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/JoinProjectTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/JoinProjectTransposeRule.java
@@ -59,13 +59,13 @@ public class JoinProjectTransposeRule extends RelOptRule {
operand(LogicalJoin.class,
operand(LogicalProject.class, any()),
operand(LogicalProject.class, any())),
- "JoinProjectTransposeRule: with two LogicalProject children");
+ "JoinProjectTransposeRule(Project-Project)");
public static final JoinProjectTransposeRule LEFT_PROJECT =
new JoinProjectTransposeRule(
operand(LogicalJoin.class,
some(operand(LogicalProject.class, any()))),
- "JoinProjectTransposeRule: with LogicalProject on left");
+ "JoinProjectTransposeRule(Project-Other)");
public static final JoinProjectTransposeRule RIGHT_PROJECT =
new JoinProjectTransposeRule(
@@ -73,7 +73,7 @@ public class JoinProjectTransposeRule extends RelOptRule {
LogicalJoin.class,
operand(RelNode.class, any()),
operand(LogicalProject.class, any())),
- "JoinProjectTransposeRule: with LogicalProject on right");
+ "JoinProjectTransposeRule(Other-Project)");
private final ProjectFactory projectFactory;
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/7882a5b9/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 c0fa8af..c1a7f84 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
@@ -39,17 +39,18 @@ public class JoinUnionTransposeRule extends RelOptRule {
operand(Join.class,
operand(Union.class, any()),
operand(RelNode.class, any())),
- "union on left");
+ "JoinUnionTransposeRule(Union-Other)");
public static final JoinUnionTransposeRule RIGHT_UNION =
new JoinUnionTransposeRule(
operand(Join.class,
operand(RelNode.class, any()),
operand(Union.class, any())),
- "union on right");
+ "JoinUnionTransposeRule(Other-Union)");
- private JoinUnionTransposeRule(RelOptRuleOperand operand, String id) {
- super(operand, "JoinUnionTransposeRule: " + id);
+ private JoinUnionTransposeRule(RelOptRuleOperand operand,
+ String description) {
+ super(operand, description);
}
public void onMatch(RelOptRuleCall call) {
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/7882a5b9/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java
index 620096e..5bf65de 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java
@@ -85,7 +85,7 @@ public abstract class ReduceExpressionsRule extends RelOptRule {
*/
public static final ReduceExpressionsRule FILTER_INSTANCE =
new ReduceExpressionsRule(LogicalFilter.class,
- "ReduceExpressionsRule[Filter]") {
+ "ReduceExpressionsRule(Filter)") {
public void onMatch(RelOptRuleCall call) {
LogicalFilter filter = call.rel(0);
List<RexNode> expList = new ArrayList<RexNode>(filter.getChildExps());
@@ -174,7 +174,7 @@ public abstract class ReduceExpressionsRule extends RelOptRule {
public static final ReduceExpressionsRule PROJECT_INSTANCE =
new ReduceExpressionsRule(LogicalProject.class,
- "ReduceExpressionsRule[Project]") {
+ "ReduceExpressionsRule(Project)") {
public void onMatch(RelOptRuleCall call) {
LogicalProject project = call.rel(0);
List<RexNode> expList =
@@ -197,7 +197,7 @@ public abstract class ReduceExpressionsRule extends RelOptRule {
public static final ReduceExpressionsRule JOIN_INSTANCE =
new ReduceExpressionsRule(Join.class,
- "ReduceExpressionsRule[Join]") {
+ "ReduceExpressionsRule(Join)") {
public void onMatch(RelOptRuleCall call) {
final Join join = call.rel(0);
List<RexNode> expList = new ArrayList<RexNode>(join.getChildExps());
@@ -219,7 +219,7 @@ public abstract class ReduceExpressionsRule extends RelOptRule {
public static final ReduceExpressionsRule CALC_INSTANCE =
new ReduceExpressionsRule(LogicalCalc.class,
- "ReduceExpressionsRule[Calc]") {
+ "ReduceExpressionsRule(Calc)") {
public void onMatch(RelOptRuleCall call) {
LogicalCalc calc = call.rel(0);
RexProgram program = calc.getProgram();
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/7882a5b9/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 533c027..0f77897 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
@@ -68,7 +68,7 @@ public abstract class ValuesReduceRule extends RelOptRule {
new ValuesReduceRule(
operand(LogicalFilter.class,
operand(LogicalValues.class, none())),
- "ValuesReduceRule[Filter") {
+ "ValuesReduceRule(Filter)") {
public void onMatch(RelOptRuleCall call) {
LogicalFilter filter = call.rel(0);
LogicalValues values = call.rel(1);
@@ -84,7 +84,7 @@ public abstract class ValuesReduceRule extends RelOptRule {
new ValuesReduceRule(
operand(LogicalProject.class,
operand(LogicalValues.class, none())),
- "ValuesReduceRule[Project]") {
+ "ValuesReduceRule(Project)") {
public void onMatch(RelOptRuleCall call) {
LogicalProject project = call.rel(0);
LogicalValues values = call.rel(1);
@@ -101,7 +101,7 @@ public abstract class ValuesReduceRule extends RelOptRule {
operand(LogicalProject.class,
operand(LogicalFilter.class,
operand(LogicalValues.class, none()))),
- "ValuesReduceRule[Project+Filter]") {
+ "ValuesReduceRule(Project-Filter)") {
public void onMatch(RelOptRuleCall call) {
LogicalProject project = call.rel(0);
LogicalFilter filter = call.rel(1);