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