Repository: calcite Updated Branches: refs/heads/master d9e9103bb -> 105bba1f8
http://git-wip-us.apache.org/repos/asf/calcite/blob/54556b82/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java ---------------------------------------------------------------------- diff --git a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java index 70917e8..7f6eee4 100644 --- a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java +++ b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java @@ -16,6 +16,7 @@ */ package org.apache.calcite.adapter.druid; +import org.apache.calcite.plan.RelOptCluster; import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.plan.RelOptUtil; @@ -100,6 +101,8 @@ public class DruidRules { public void onMatch(RelOptRuleCall call) { final Filter filter = call.rel(0); final DruidQuery query = call.rel(1); + final RelOptCluster cluster = filter.getCluster(); + final RexBuilder rexBuilder = cluster.getRexBuilder(); if (!DruidQuery.isValidSignature(query.signature() + 'f') || !query.isValidFilter(filter.getCondition())) { return; @@ -113,8 +116,9 @@ public class DruidRules { break; } } - final Pair<List<RexNode>, List<RexNode>> pair = splitFilters( - filter.getCluster().getRexBuilder(), query, filter.getCondition(), + final Pair<List<RexNode>, List<RexNode>> pair = + splitFilters(rexBuilder, query, + RexUtil.simplify(rexBuilder, filter.getCondition(), true), timestampFieldIdx); if (pair == null) { // We can't push anything useful to Druid. @@ -124,7 +128,7 @@ public class DruidRules { if (!pair.left.isEmpty()) { intervals = DruidDateTimeUtils.createInterval( query.getRowType().getFieldList().get(timestampFieldIdx).getType(), - RexUtil.composeConjunction(query.getCluster().getRexBuilder(), pair.left, false)); + RexUtil.composeConjunction(rexBuilder, pair.left, false)); if (intervals == null) { // We can't push anything useful to Druid. return; @@ -133,7 +137,7 @@ public class DruidRules { DruidQuery newDruidQuery = query; if (!pair.right.isEmpty()) { final RelNode newFilter = filter.copy(filter.getTraitSet(), Util.last(query.rels), - RexUtil.composeConjunction(filter.getCluster().getRexBuilder(), pair.right, false)); + RexUtil.composeConjunction(rexBuilder, pair.right, false)); newDruidQuery = DruidQuery.extendQuery(query, newFilter); } if (intervals != null) { @@ -189,6 +193,8 @@ public class DruidRules { public void onMatch(RelOptRuleCall call) { final Project project = call.rel(0); final DruidQuery query = call.rel(1); + final RelOptCluster cluster = project.getCluster(); + final RexBuilder rexBuilder = cluster.getRexBuilder(); if (!DruidQuery.isValidSignature(query.signature() + 'p')) { return; } @@ -201,16 +207,16 @@ public class DruidRules { call.transformTo(newNode); return; } - final Pair<List<RexNode>, List<RexNode>> pair = splitProjects( - project.getCluster().getRexBuilder(), query, project.getProjects()); + final Pair<List<RexNode>, List<RexNode>> pair = + splitProjects(rexBuilder, query, project.getProjects()); if (pair == null) { // We can't push anything useful to Druid. return; } final List<RexNode> above = pair.left; final List<RexNode> below = pair.right; - final RelDataTypeFactory.FieldInfoBuilder builder = project.getCluster().getTypeFactory() - .builder(); + final RelDataTypeFactory.FieldInfoBuilder builder = + cluster.getTypeFactory().builder(); final RelNode input = Util.last(query.rels); for (RexNode e : below) { final String name;