You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jc...@apache.org on 2017/06/20 06:36:36 UTC

calcite git commit: [CALCITE-1805] Druid adapter incorrectly pushes down "COUNT(c)"; Druid only supports "COUNT(*)"

Repository: calcite
Updated Branches:
  refs/heads/master 304eb9c54 -> bdaa485ee


[CALCITE-1805] Druid adapter incorrectly pushes down "COUNT(c)"; Druid only supports "COUNT(*)"

Fixes issue with multiple mixed aggregate functions


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

Branch: refs/heads/master
Commit: bdaa485eecf7e5d6a80b3ee7cc3ccd5579c41794
Parents: 304eb9c
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Tue Jun 20 07:34:16 2017 +0100
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Tue Jun 20 07:34:16 2017 +0100

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


http://git-wip-us.apache.org/repos/asf/calcite/blob/bdaa485e/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 8b108d5..ef5d6f2 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
@@ -122,7 +122,11 @@ public class DruidRules {
           for (AggregateCall aggregateCall : aggregate.getAggCallList()) {
             switch (aggregateCall.getAggregation().getKind()) {
             case COUNT:
-              return !aggregateCall.getArgList().isEmpty();
+              if (!aggregateCall.getArgList().isEmpty()) {
+                // Cannot handle this aggregate function
+                return true;
+              }
+              break;
             case SUM:
             case SUM0:
             case MIN:

http://git-wip-us.apache.org/repos/asf/calcite/blob/bdaa485e/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 da905b2..cb2024d 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
@@ -2160,18 +2160,28 @@ public class DruidAdapterIT {
    * Druid adapter cannot handle count column without adding support for nested queries</a>.
    */
   @Test public void testCountColumn() {
-
     final String sql = "SELECT count(\"countryName\") FROM (SELECT \"countryName\" FROM "
         + "\"wikiticker\" WHERE \"countryName\"  IS NOT NULL) as a";
-    sql(sql, WIKI_AUTO2).returnsUnordered("EXPR$0=3799");
+    sql(sql, WIKI_AUTO2)
+        .returnsUnordered("EXPR$0=3799");
 
     final String sql2 = "SELECT count(\"countryName\") FROM (SELECT \"countryName\" FROM "
         + "\"wikiticker\") as a";
-    sql(sql2, WIKI_AUTO2).returnsUnordered("EXPR$0=3799").explainContains("PLAN"
-        + "=EnumerableInterpreter\n"
+    final String plan2 = "PLAN=EnumerableInterpreter\n"
         + "  BindableAggregate(group=[{}], EXPR$0=[COUNT($0)])\n"
         + "    DruidQuery(table=[[wiki, wikiticker]], "
-        + "intervals=[[1900-01-01T00:00:00.000/3000-01-01T00:00:00.000]], projects=[[$7]])");
+        + "intervals=[[1900-01-01T00:00:00.000/3000-01-01T00:00:00.000]], projects=[[$7]])";
+    sql(sql2, WIKI_AUTO2)
+        .returnsUnordered("EXPR$0=3799")
+        .explainContains(plan2);
+
+    final String sql3 = "SELECT count(*), count(\"countryName\") FROM \"wikiticker\"";
+    final String plan3 = "PLAN=EnumerableInterpreter\n"
+        + "  BindableAggregate(group=[{}], EXPR$0=[COUNT()], EXPR$1=[COUNT($0)])\n"
+        + "    DruidQuery(table=[[wiki, wikiticker]], "
+        + "intervals=[[1900-01-01T00:00:00.000/3000-01-01T00:00:00.000]], projects=[[$7]])";
+    sql(sql3, WIKI_AUTO2)
+        .explainContains(plan3);
   }
 
   /**