aboutsummaryrefslogtreecommitdiff
path: root/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeFilterRule.java
diff options
context:
space:
mode:
authorJinfeng Ni <jni@maprtech.com>2014-10-01 10:09:42 -0700
committerJinfeng Ni <jni@apache.org>2015-04-21 16:29:37 -0700
commit581f2e840336f78bd8e6e1a7fca34fdd8f10b7fc (patch)
tree4f12d599e7ae38023a27f5bfadab258f81f13c08 /exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillMergeFilterRule.java
parent2a484251be48b0443318626b1364044db5473124 (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.java62
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(),