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