Add couple of optiq rule into logical plan phase. Add operator mapping for is not null, is true.
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/2038bc62 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/2038bc62 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/2038bc62 Branch: refs/heads/master Commit: 2038bc629abb2a9620c8aade2be7bdf4d5f097a6 Parents: eeb8535 Author: Jinfeng Ni <[email protected]> Authored: Tue Apr 1 15:18:36 2014 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Sat Apr 19 18:07:10 2014 -0700 ---------------------------------------------------------------------- .../common/expression/FunctionCallFactory.java | 4 +- .../exec/planner/logical/DrillRuleSets.java | 61 +++++++++++++++----- 2 files changed, 49 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/2038bc62/common/src/main/java/org/apache/drill/common/expression/FunctionCallFactory.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/drill/common/expression/FunctionCallFactory.java b/common/src/main/java/org/apache/drill/common/expression/FunctionCallFactory.java index 03be80f..50fceda 100644 --- a/common/src/main/java/org/apache/drill/common/expression/FunctionCallFactory.java +++ b/common/src/main/java/org/apache/drill/common/expression/FunctionCallFactory.java @@ -58,7 +58,9 @@ public class FunctionCallFactory { opToFuncTable.put("<>", "not_equal"); opToFuncTable.put(">=", "greater_than_or_equal_to"); opToFuncTable.put("<=", "less_than_or_equal_to"); - + opToFuncTable.put("is not null", "isnotnull"); + opToFuncTable.put("is true", "istrue"); + opToFuncTable.put("!", "not"); opToFuncTable.put("u-", "negative"); } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/2038bc62/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java index 562a3d4..d17fce3 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java @@ -30,9 +30,21 @@ import org.apache.drill.exec.planner.physical.ScreenPrule; import org.apache.drill.exec.planner.physical.SortConvertPrule; import org.apache.drill.exec.planner.physical.SortPrule; import org.apache.drill.exec.planner.physical.StreamAggPrule; +import org.eigenbase.rel.RelFactories; +import org.eigenbase.rel.rules.MergeProjectRule; import org.eigenbase.rel.rules.PushFilterPastJoinRule; import org.eigenbase.rel.rules.PushFilterPastProjectRule; import org.eigenbase.rel.rules.PushJoinThroughJoinRule; +import org.eigenbase.rel.rules.PushSortPastProjectRule; +import org.eigenbase.rel.rules.ReduceAggregatesRule; +import org.eigenbase.rel.rules.RemoveDistinctAggregateRule; +import org.eigenbase.rel.rules.RemoveDistinctRule; +import org.eigenbase.rel.rules.RemoveSortRule; +import org.eigenbase.rel.rules.RemoveTrivialCalcRule; +import org.eigenbase.rel.rules.RemoveTrivialProjectRule; +import org.eigenbase.rel.rules.SwapJoinRule; +import org.eigenbase.rel.rules.TableAccessRule; +import org.eigenbase.rel.rules.UnionToDistinctRule; import org.eigenbase.relopt.RelOptRule; import org.eigenbase.relopt.volcano.AbstractConverter.ExpandConversionRule; @@ -49,6 +61,27 @@ public class DrillRuleSets { PushJoinThroughJoinRule.LEFT, // End supprot for WHERE style joins. + //Add back rules + + ExpandConversionRule.INSTANCE, +// SwapJoinRule.INSTANCE, + RemoveDistinctRule.INSTANCE, +// UnionToDistinctRule.INSTANCE, +// RemoveTrivialProjectRule.INSTANCE, +// RemoveTrivialCalcRule.INSTANCE, + RemoveSortRule.INSTANCE, + +// TableAccessRule.INSTANCE, // + //MergeProjectRule.INSTANCE, // + new MergeProjectRule(true, RelFactories.DEFAULT_PROJECT_FACTORY), + RemoveDistinctAggregateRule.INSTANCE, // + ReduceAggregatesRule.INSTANCE, // +// SwapJoinRule.INSTANCE, // +// PushJoinThroughJoinRule.RIGHT, // +// PushJoinThroughJoinRule.LEFT, // + PushSortPastProjectRule.INSTANCE, // + + //////////////////////////////// DrillScanRule.INSTANCE, DrillFilterRule.INSTANCE, DrillProjectRule.INSTANCE, @@ -57,9 +90,7 @@ public class DrillRuleSets { DrillLimitRule.INSTANCE, DrillSortRule.INSTANCE, DrillJoinRule.INSTANCE, - DrillUnionRule.INSTANCE - - + DrillUnionRule.INSTANCE )); @@ -85,21 +116,21 @@ public class DrillRuleSets { FilterPrule.INSTANCE, LimitPrule.INSTANCE -// ExpandConversionRule.instance, -// SwapJoinRule.instance, -// RemoveDistinctRule.instance, -// UnionToDistinctRule.instance, -// RemoveTrivialProjectRule.instance, -// RemoveTrivialCalcRule.instance, +// ExpandConversionRule.INSTANCE, +// SwapJoinRule.INSTANCE, +// RemoveDistinctRule.INSTANCE, +// UnionToDistinctRule.INSTANCE, +// RemoveTrivialProjectRule.INSTANCE, +// RemoveTrivialCalcRule.INSTANCE, // RemoveSortRule.INSTANCE, // -// TableAccessRule.instance, // -// MergeProjectRule.instance, // -// PushFilterPastProjectRule.instance, // +// TableAccessRule.INSTANCE, // +// MergeProjectRule.INSTANCE, // +// PushFilterPastProjectRule.INSTANCE, // // PushFilterPastJoinRule.FILTER_ON_JOIN, // -// RemoveDistinctAggregateRule.instance, // -// ReduceAggregatesRule.instance, // -// SwapJoinRule.instance, // +// RemoveDistinctAggregateRule.INSTANCE, // +// ReduceAggregatesRule.INSTANCE, // +// SwapJoinRule.INSTANCE, // // PushJoinThroughJoinRule.RIGHT, // // PushJoinThroughJoinRule.LEFT, // // PushSortPastProjectRule.INSTANCE, //
