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/07/13 23:49:53 UTC

git commit: Restore PushFilterPastJoinRule to RelDecorrelator; interim pending [OPTIQ-443] fix.

Repository: incubator-optiq
Updated Branches:
  refs/heads/master f247bc610 -> 33e80e21f


Restore PushFilterPastJoinRule to RelDecorrelator; interim pending [OPTIQ-443] fix.


Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq/commit/33e80e21
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq/tree/33e80e21
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq/diff/33e80e21

Branch: refs/heads/master
Commit: 33e80e21ff1fcf546883c3b0589d6a07ef7b0b4b
Parents: f247bc6
Author: Julian Hyde <jh...@apache.org>
Authored: Sun Jul 13 14:30:15 2014 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Sun Jul 13 14:30:15 2014 -0700

----------------------------------------------------------------------
 .../org/eigenbase/rel/rules/PushFilterPastJoinRule.java | 12 ++++++++++++
 .../java/org/eigenbase/sql2rel/RelDecorrelator.java     |  2 ++
 2 files changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/33e80e21/core/src/main/java/org/eigenbase/rel/rules/PushFilterPastJoinRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/rel/rules/PushFilterPastJoinRule.java b/core/src/main/java/org/eigenbase/rel/rules/PushFilterPastJoinRule.java
index f9b6f06..cc0a315 100644
--- a/core/src/main/java/org/eigenbase/rel/rules/PushFilterPastJoinRule.java
+++ b/core/src/main/java/org/eigenbase/rel/rules/PushFilterPastJoinRule.java
@@ -22,6 +22,7 @@ import java.util.*;
 import org.eigenbase.rel.*;
 import org.eigenbase.relopt.*;
 import org.eigenbase.rex.*;
+import org.eigenbase.util.Bug;
 
 import com.google.common.collect.ImmutableList;
 
@@ -179,6 +180,17 @@ public abstract class PushFilterPastJoinRule extends RelOptRule {
             join.isSemiJoinDone());
     call.getPlanner().onCopy(join, newJoinRel);
 
+    // The pushed filters are not exact copies of the original filter, but
+    // telling the planner about them seems to help the RelDecorrelator more
+    // often than not. The real solution is to fix OPTIQ-443.
+    Bug.upgrade("OPTIQ-443");
+    if (!leftFilters.isEmpty()) {
+      call.getPlanner().onCopy(filter, leftRel);
+    }
+    if (!rightFilters.isEmpty()) {
+      call.getPlanner().onCopy(filter, rightRel);
+    }
+
     // create a FilterRel on top of the join if needed
     RelNode newRel =
         createFilterOnRel(rexBuilder, newJoinRel, aboveFilters);

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/33e80e21/core/src/main/java/org/eigenbase/sql2rel/RelDecorrelator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/sql2rel/RelDecorrelator.java b/core/src/main/java/org/eigenbase/sql2rel/RelDecorrelator.java
index e21cb0d..4997a30 100644
--- a/core/src/main/java/org/eigenbase/sql2rel/RelDecorrelator.java
+++ b/core/src/main/java/org/eigenbase/sql2rel/RelDecorrelator.java
@@ -24,6 +24,7 @@ import java.util.logging.*;
 import org.eigenbase.rel.*;
 import org.eigenbase.rel.CorrelatorRel.Correlation;
 import org.eigenbase.rel.metadata.*;
+import org.eigenbase.rel.rules.PushFilterPastJoinRule;
 import org.eigenbase.relopt.*;
 import org.eigenbase.relopt.hep.*;
 import org.eigenbase.reltype.*;
@@ -119,6 +120,7 @@ public class RelDecorrelator implements ReflectiveVisitor {
     HepProgram program = HepProgram.builder()
         .addRuleInstance(new AdjustProjectForCountAggregateRule(false))
         .addRuleInstance(new AdjustProjectForCountAggregateRule(true))
+        .addRuleInstance(PushFilterPastJoinRule.FILTER_ON_JOIN)
         .build();
 
     HepPlanner planner = createPlanner(program);