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;

Reply via email to