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/10/29 18:14:17 UTC
git commit: [CALCITE-447] Change semi-join rules to make use of
factories
Repository: incubator-calcite
Updated Branches:
refs/heads/master 1f91bbf81 -> c91259dd5
[CALCITE-447] Change semi-join rules to make use of factories
Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/c91259dd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/c91259dd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/c91259dd
Branch: refs/heads/master
Commit: c91259dd5b89351a5218af5c89471748213547c2
Parents: 1f91bbf
Author: Julian Hyde <jh...@apache.org>
Authored: Tue Oct 28 15:50:53 2014 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Tue Oct 28 15:50:53 2014 -0700
----------------------------------------------------------------------
.../eigenbase/rel/rules/ConvertMultiJoinRule.java | 2 +-
.../rel/rules/PushSemiJoinPastFilterRule.java | 15 ++++++++++-----
.../rel/rules/PushSemiJoinPastProjectRule.java | 12 +++++++++---
3 files changed, 20 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/c91259dd/core/src/main/java/org/eigenbase/rel/rules/ConvertMultiJoinRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/rel/rules/ConvertMultiJoinRule.java b/core/src/main/java/org/eigenbase/rel/rules/ConvertMultiJoinRule.java
index 29ccad1..ec003b3 100644
--- a/core/src/main/java/org/eigenbase/rel/rules/ConvertMultiJoinRule.java
+++ b/core/src/main/java/org/eigenbase/rel/rules/ConvertMultiJoinRule.java
@@ -83,7 +83,7 @@ import com.google.common.collect.Maps;
*/
public class ConvertMultiJoinRule extends RelOptRule {
public static final ConvertMultiJoinRule INSTANCE =
- new ConvertMultiJoinRule(JoinRel.class);
+ new ConvertMultiJoinRule(JoinRelBase.class);
//~ Constructors -----------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/c91259dd/core/src/main/java/org/eigenbase/rel/rules/PushSemiJoinPastFilterRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/rel/rules/PushSemiJoinPastFilterRule.java b/core/src/main/java/org/eigenbase/rel/rules/PushSemiJoinPastFilterRule.java
index 53d2132..4e961db 100644
--- a/core/src/main/java/org/eigenbase/rel/rules/PushSemiJoinPastFilterRule.java
+++ b/core/src/main/java/org/eigenbase/rel/rules/PushSemiJoinPastFilterRule.java
@@ -17,6 +17,7 @@
package org.eigenbase.rel.rules;
import org.eigenbase.rel.*;
+import org.eigenbase.rel.RelFactories.FilterFactory;
import org.eigenbase.relopt.*;
/**
@@ -26,18 +27,22 @@ import org.eigenbase.relopt.*;
*/
public class PushSemiJoinPastFilterRule extends RelOptRule {
public static final PushSemiJoinPastFilterRule INSTANCE =
- new PushSemiJoinPastFilterRule();
+ new PushSemiJoinPastFilterRule(RelFactories.DEFAULT_FILTER_FACTORY);
+
+ private final FilterFactory filterFactory;
//~ Constructors -----------------------------------------------------------
/**
* Creates a PushSemiJoinPastFilterRule.
+ * @param filterFactory Factory to create Filter
*/
- private PushSemiJoinPastFilterRule() {
+ public PushSemiJoinPastFilterRule(FilterFactory filterFactory) {
super(
operand(
SemiJoinRel.class,
- some(operand(FilterRel.class, any()))));
+ some(operand(FilterRelBase.class, any()))));
+ this.filterFactory = filterFactory;
}
//~ Methods ----------------------------------------------------------------
@@ -45,7 +50,7 @@ public class PushSemiJoinPastFilterRule extends RelOptRule {
// implement RelOptRule
public void onMatch(RelOptRuleCall call) {
SemiJoinRel semiJoin = call.rel(0);
- FilterRel filter = call.rel(1);
+ FilterRelBase filter = call.rel(1);
RelNode newSemiJoin =
new SemiJoinRel(
@@ -60,7 +65,7 @@ public class PushSemiJoinPastFilterRule extends RelOptRule {
RelNode newFilter =
RelOptUtil.createFilter(
newSemiJoin,
- filter.getCondition());
+ filter.getCondition(), filterFactory);
call.transformTo(newFilter);
}
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/c91259dd/core/src/main/java/org/eigenbase/rel/rules/PushSemiJoinPastProjectRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/rel/rules/PushSemiJoinPastProjectRule.java b/core/src/main/java/org/eigenbase/rel/rules/PushSemiJoinPastProjectRule.java
index d6efb37..9d7d4b0 100644
--- a/core/src/main/java/org/eigenbase/rel/rules/PushSemiJoinPastProjectRule.java
+++ b/core/src/main/java/org/eigenbase/rel/rules/PushSemiJoinPastProjectRule.java
@@ -19,6 +19,7 @@ package org.eigenbase.rel.rules;
import java.util.*;
import org.eigenbase.rel.*;
+import org.eigenbase.rel.RelFactories.ProjectFactory;
import org.eigenbase.relopt.*;
import org.eigenbase.reltype.*;
import org.eigenbase.rex.*;
@@ -34,18 +35,23 @@ import org.eigenbase.util.Pair;
*/
public class PushSemiJoinPastProjectRule extends RelOptRule {
public static final PushSemiJoinPastProjectRule INSTANCE =
- new PushSemiJoinPastProjectRule();
+ new PushSemiJoinPastProjectRule(RelFactories.DEFAULT_PROJECT_FACTORY);
+
+ private final RelFactories.ProjectFactory projectFactory;
//~ Constructors -----------------------------------------------------------
/**
* Creates a PushSemiJoinPastProjectRule.
+ *
+ * @param projectFactory factory to create Project
*/
- private PushSemiJoinPastProjectRule() {
+ public PushSemiJoinPastProjectRule(ProjectFactory projectFactory) {
super(
operand(
SemiJoinRel.class,
some(operand(ProjectRel.class, any()))));
+ this.projectFactory = projectFactory;
}
//~ Methods ----------------------------------------------------------------
@@ -84,7 +90,7 @@ public class PushSemiJoinPastProjectRule extends RelOptRule {
// are the same as the original because they only reference the LHS
// of the semijoin and the semijoin only projects out the LHS
RelNode newProject =
- RelOptUtil.createProject(
+ projectFactory.createProject(
newSemiJoin,
projExprs,
project.getRowType().getFieldNames());