You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2017/05/09 01:48:48 UTC

[2/2] calcite git commit: [CALCITE-1777] Druid adapter: "WHERE FALSE" causes AssertionError (Slim Bouguerra)

[CALCITE-1777] Druid adapter: "WHERE FALSE" causes AssertionError (Slim Bouguerra)

Close apache/calcite#444


Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/520c0ccc
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/520c0ccc
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/520c0ccc

Branch: refs/heads/master
Commit: 520c0ccc9b8ec4832f69ebba366e23d80326be5f
Parents: 6b8e2c3
Author: Slim Bouguerra <sl...@gmail.com>
Authored: Mon May 8 11:10:05 2017 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon May 8 17:14:07 2017 -0700

----------------------------------------------------------------------
 .../org/apache/calcite/adapter/druid/DruidRules.java     |  9 +++++++++
 .../java/org/apache/calcite/test/DruidAdapterIT.java     | 11 +++++++++++
 2 files changed, 20 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/520c0ccc/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 bbc8b4c..c5a97ce 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
@@ -175,6 +175,9 @@ public class DruidRules {
           Util.first(cluster.getPlanner().getExecutor(), RexUtil.EXECUTOR);
       final RexSimplify simplify = new RexSimplify(rexBuilder, true, executor);
       final RexNode cond = simplify.simplify(filter.getCondition());
+      if (!canPush(cond)) {
+        return;
+      }
       for (RexNode e : RelOptUtil.conjunctions(cond)) {
         if (query.isValidFilter(e)) {
           validPreds.add(e);
@@ -272,6 +275,12 @@ public class DruidRules {
       }
       return ImmutableTriple.of(timeRangeNodes, pushableNodes, nonPushableNodes);
     }
+
+    /** Returns whether we can push an expression to Druid. */
+    private static boolean canPush(RexNode cond) {
+      // Druid cannot implement "where false"
+      return !cond.isAlwaysFalse();
+    }
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/calcite/blob/520c0ccc/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
----------------------------------------------------------------------
diff --git a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
index 17d6211..63a4bd9 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
@@ -2100,6 +2100,17 @@ public class DruidAdapterIT {
     String druidQuery = "'filter':{'type':'selector','dimension':'product_id','value':''}";
     sql(sql).queryContains(druidChecker(druidQuery));
   }
+
+  @Test public void testFalseFilter() {
+    String sql = "Select count(*) as c from \"foodmart\" where false";
+    sql(sql).returnsUnordered("C=0");
+  }
+
+  @Test public void testFalseFilterCaseConjectionWithTrue() {
+    String sql = "Select count(*) as c from \"foodmart\" where "
+        + "\"product_id\" = 1558 and (true or false)";
+    sql(sql).returnsUnordered("C=60").queryContains(druidChecker("'queryType':'timeseries'"));
+  }
 }
 
 // End DruidAdapterIT.java