diff options
author | Jinfeng Ni <jni@maprtech.com> | 2014-10-01 10:09:42 -0700 |
---|---|---|
committer | Jinfeng Ni <jni@apache.org> | 2015-04-21 16:29:37 -0700 |
commit | 581f2e840336f78bd8e6e1a7fca34fdd8f10b7fc (patch) | |
tree | 4f12d599e7ae38023a27f5bfadab258f81f13c08 /exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeFilterRule.java | |
parent | 2a484251be48b0443318626b1364044db5473124 (diff) |
DRILL-1384: Part 1 - Rebase on Calcite. Change code due to Calcite package renaming/re-structure.
Optiq changed to use DATETIME_PLUS. Have to handle it in Drill.
PushFilterPastJoinRule has some issue. Temp fix for that.
Failed unit tests:
1) TestFlatten
2) TestConvertFunctions / TestComplexTypeWriter : "Concat"
3) TPCH Q16 : CanNotPlanException
Feed a RelDataTypeSystem into planner, to support decimal with precision/scale up to 38.
Remove assertion in DrillFilterRel. Optiq/Calcite could create a TRUE AND TRUE for query like WHERE col1 in (select ...) and col2 in (select ...) .
Rebase on calcite-1.1.0-drill-test-r1. Change code due to Calcite package renaming/re-structure.
Rebase on calcite : remaing with perl script. Part 1
reverse change to jdbc test.
Renaming for rebasing calcite. Part 2
Renaming for calcite rebasing. Part 3
Renaming for calcite rebasing. Part 4
Reverse change to testcase in jdbc.
Renaming for calcite rebasing. Part 5
Renaming for calcite rebasing. Part 6
remove 1.sh
WindowRel change related.
Renaming for calcite rebase. Part 7
PreprocessLogical and AggPrelBase
Renaming for calcite rebasing. Part 8. More manual change
Rebasing Calcite. Part 9
Rebasing calcite. Part 10
Rebasing API change from Calcite.
SQL parser change, due to Calcite rebasing.
Renaming change for calcite rebasing.
Renaming package due to Calcite rebasing.
Renaming package due to Calicte Rebase.
Work in progress for calcite rebasing.
Change import package names due to Calcite rebase.
Code refactor due to Calcite rebasing.
Fix bug in DistributionTraitDef.
Resolve compiler error, due to Calcite Rebasing.
Resolve compiler error after Calcite Rebasing.
minor change.
Diffstat (limited to 'exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeFilterRule.java')
-rw-r--r-- | exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeFilterRule.java | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeFilterRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeFilterRule.java index b406cfb6d..951edccf9 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeFilterRule.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeFilterRule.java @@ -17,40 +17,45 @@ */ package org.apache.drill.exec.planner.logical; -import org.eigenbase.rel.FilterRel; -import org.eigenbase.relopt.RelOptRule; -import org.eigenbase.relopt.RelOptRuleCall; -import org.eigenbase.rex.RexBuilder; -import org.eigenbase.rex.RexCall; -import org.eigenbase.rex.RexNode; -import org.eigenbase.rex.RexProgram; -import org.eigenbase.rex.RexProgramBuilder; -import org.eigenbase.rex.RexUtil; +import org.apache.calcite.plan.RelOptRule; +import org.apache.calcite.plan.RelOptRuleCall; +import org.apache.calcite.rel.core.Filter; +import org.apache.calcite.rel.core.RelFactories; +import org.apache.calcite.rex.RexBuilder; +import org.apache.calcite.rex.RexCall; +import org.apache.calcite.rex.RexNode; +import org.apache.calcite.rex.RexProgram; +import org.apache.calcite.rex.RexProgramBuilder; +import org.apache.calcite.rex.RexUtil; /** - * MergeFilterRule implements the rule for combining two {@link FilterRel}s + * MergeFilterRule implements the rule for combining two {@link Filter}s */ public class DrillMergeFilterRule extends RelOptRule { - public static final DrillMergeFilterRule INSTANCE = new DrillMergeFilterRule(); + public static final DrillMergeFilterRule INSTANCE = + new DrillMergeFilterRule(RelFactories.DEFAULT_FILTER_FACTORY); + + private final RelFactories.FilterFactory filterFactory; + //~ Constructors ----------------------------------------------------------- /** * Creates a MergeFilterRule. */ - private DrillMergeFilterRule() { + private DrillMergeFilterRule(RelFactories.FilterFactory filterFactory) { super( - operand( - FilterRel.class, - operand(FilterRel.class, any()))); + operand(Filter.class, + operand(Filter.class, any()))); + this.filterFactory = filterFactory; } //~ Methods ---------------------------------------------------------------- // implement RelOptRule public void onMatch(RelOptRuleCall call) { - FilterRel topFilter = call.rel(0); - FilterRel bottomFilter = call.rel(1); + Filter topFilter = call.rel(0); + Filter bottomFilter = call.rel(1); // use RexPrograms to merge the two FilterRels into a single program // so we can convert the two FilterRel conditions to directly @@ -69,27 +74,26 @@ public class DrillMergeFilterRule extends RelOptRule { mergedProgram.expandLocalRef( mergedProgram.getCondition()); - if(!RexUtil.isFlat(newCondition)){ - RexCall newCall = (RexCall) newCondition; - newCondition = rexBuilder.makeFlatCall( newCall.getOperator(), newCall.getOperands()); - } +// if(!RexUtil.isFlat(newCondition)){ +// RexCall newCall = (RexCall) newCondition; +// newCondition = rexBuilder.makeFlatCall( newCall.getOperator(), newCall.getOperands()); +// } - FilterRel newFilterRel = - new FilterRel( - topFilter.getCluster(), - bottomFilter.getChild(), - newCondition); + Filter newFilterRel = + (Filter) filterFactory.createFilter( + bottomFilter.getInput(), + RexUtil.flatten(rexBuilder, newCondition)); call.transformTo(newFilterRel); } /** - * Creates a RexProgram corresponding to a FilterRel + * Creates a RexProgram corresponding to a LogicalFilter * - * @param filterRel the FilterRel + * @param filterRel the LogicalFilter * @return created RexProgram */ - private RexProgram createProgram(FilterRel filterRel) { + private RexProgram createProgram(Filter filterRel) { RexProgramBuilder programBuilder = new RexProgramBuilder( filterRel.getRowType(), |