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);
}
/**