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());