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/10/06 18:50:15 UTC
calcite git commit: [CALCITE-1983] Push EQUALS and NOT EQUALS
operations with numeric cast on dimensions to Druid * Fix value for strict
flag * Adding additional tests
Repository: calcite
Updated Branches:
refs/heads/master fb760a6f4 -> 6971a3065
[CALCITE-1983] Push EQUALS and NOT EQUALS operations with numeric cast on dimensions to Druid
* Fix value for strict flag
* Adding additional tests
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/6971a306
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/6971a306
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/6971a306
Branch: refs/heads/master
Commit: 6971a3065f7f93e9882b044b41ab69babdd46364
Parents: fb760a6
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Fri Oct 6 11:39:06 2017 -0700
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Fri Oct 6 11:47:47 2017 -0700
----------------------------------------------------------------------
.../calcite/adapter/druid/DruidQuery.java | 6 +-
.../org/apache/calcite/test/DruidAdapterIT.java | 58 +++++++++++++-------
2 files changed, 40 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/6971a306/druid/src/main/java/org/apache/calcite/adapter/druid/DruidQuery.java
----------------------------------------------------------------------
diff --git a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidQuery.java b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidQuery.java
index 272a7c8..20cdb7c 100644
--- a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidQuery.java
+++ b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidQuery.java
@@ -1187,7 +1187,7 @@ public class DruidQuery extends AbstractRelNode implements BindableRel {
// normal selector
if (numeric && extractionFunction == null) {
String constantValue = tr(e, posConstant);
- return new JsonBound(dimName, constantValue, true, constantValue, true,
+ return new JsonBound(dimName, constantValue, false, constantValue, false,
numeric, extractionFunction);
}
return new JsonSelector(dimName, tr(e, posConstant), extractionFunction);
@@ -1198,9 +1198,9 @@ public class DruidQuery extends AbstractRelNode implements BindableRel {
if (numeric && extractionFunction == null) {
String constantValue = tr(e, posConstant);
return new JsonCompositeFilter(JsonFilter.Type.OR,
- new JsonBound(dimName, constantValue, false, null, false,
+ new JsonBound(dimName, constantValue, true, null, false,
numeric, extractionFunction),
- new JsonBound(dimName, null, false, constantValue, false,
+ new JsonBound(dimName, null, false, constantValue, true,
numeric, extractionFunction));
}
return new JsonCompositeFilter(JsonFilter.Type.NOT,
http://git-wip-us.apache.org/repos/asf/calcite/blob/6971a306/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 a6902cf..1f6b895 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
@@ -3190,40 +3190,56 @@ public class DruidAdapterIT {
@Test public void testPushEqualsCastDimension() {
final String sqlQuery = "select sum(\"store_cost\") as a "
+ "from \"foodmart\" "
- + "where cast(\"customer_id\" as double) = 1.0";
+ + "where cast(\"product_id\" as double) = 1016.0";
final String plan = "PLAN=EnumerableInterpreter\n"
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000/2992-01-10T00:00:00.000]], "
- + "filter=[=(CAST($20):DOUBLE, 1.0)], groups=[{}], aggs=[[SUM($91)]])";
+ + "filter=[=(CAST($1):DOUBLE, 1016.0)], groups=[{}], aggs=[[SUM($91)]])";
+ final String druidQuery =
+ "{'queryType':'timeseries','dataSource':'foodmart','descending':false,'granularity':'all',"
+ + "'filter':{'type':'bound','dimension':'product_id','lower':'1016.0',"
+ + "'lowerStrict':false,'upper':'1016.0','upperStrict':false,'ordering':'numeric'},"
+ + "'aggregations':[{'type':'doubleSum','name':'A','fieldName':'store_cost'}],"
+ + "'intervals':['1900-01-09T00:00:00.000/2992-01-10T00:00:00.000'],"
+ + "'context':{'skipEmptyBuckets':true}}";
sql(sqlQuery, FOODMART)
.explainContains(plan)
- .queryContains(
- druidChecker(
- "{'queryType':'timeseries','dataSource':'foodmart','descending':false,'granularity':'all',"
- + "'filter':{'type':'bound','dimension':'customer_id','lower':'1.0','lowerStrict':true,"
- + "'upper':'1.0','upperStrict':true,'ordering':'numeric'},"
- + "'aggregations':[{'type':'doubleSum','name':'A','fieldName':'store_cost'}],"
- + "'intervals':['1900-01-09T00:00:00.000/2992-01-10T00:00:00.000'],"
- + "'context':{'skipEmptyBuckets':true}}"));
+ .queryContains(druidChecker(druidQuery))
+ .returnsUnordered("A=85.3163999915123");
+
+ final String sqlQuery2 = "select sum(\"store_cost\") as a "
+ + "from \"foodmart\" "
+ + "where cast(\"product_id\" as double) <= 1016.0 "
+ + "and cast(\"product_id\" as double) >= 1016.0";
+ sql(sqlQuery2, FOODMART)
+ .returnsUnordered("A=85.3163999915123");
}
@Test public void testPushNotEqualsCastDimension() {
final String sqlQuery = "select sum(\"store_cost\") as a "
+ "from \"foodmart\" "
- + "where cast(\"customer_id\" as double) <> 1.0";
+ + "where cast(\"product_id\" as double) <> 1016.0";
final String plan = "PLAN=EnumerableInterpreter\n"
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000/2992-01-10T00:00:00.000]], "
- + "filter=[<>(CAST($20):DOUBLE, 1.0)], groups=[{}], aggs=[[SUM($91)]])";
+ + "filter=[<>(CAST($1):DOUBLE, 1016.0)], groups=[{}], aggs=[[SUM($91)]])";
+ final String druidQuery =
+ "{'queryType':'timeseries','dataSource':'foodmart','descending':false,'granularity':'all',"
+ + "'filter':{'type':'or','fields':[{'type':'bound','dimension':'product_id','lower':'1016.0',"
+ + "'lowerStrict':true,'ordering':'numeric'},{'type':'bound','dimension':'product_id',"
+ + "'upper':'1016.0','upperStrict':true,'ordering':'numeric'}]},"
+ + "'aggregations':[{'type':'doubleSum','name':'A','fieldName':'store_cost'}],"
+ + "'intervals':['1900-01-09T00:00:00.000/2992-01-10T00:00:00.000'],"
+ + "'context':{'skipEmptyBuckets':true}}";
sql(sqlQuery, FOODMART)
.explainContains(plan)
- .queryContains(
- druidChecker(
- "{'queryType':'timeseries','dataSource':'foodmart','descending':false,'granularity':'all',"
- + "'filter':{'type':'or','fields':[{'type':'bound','dimension':'customer_id','lower':'1.0',"
- + "'lowerStrict':false,'ordering':'numeric'},{'type':'bound','dimension':'customer_id',"
- + "'upper':'1.0','upperStrict':false,'ordering':'numeric'}]},"
- + "'aggregations':[{'type':'doubleSum','name':'A','fieldName':'store_cost'}],"
- + "'intervals':['1900-01-09T00:00:00.000/2992-01-10T00:00:00.000'],"
- + "'context':{'skipEmptyBuckets':true}}"));
+ .queryContains(druidChecker(druidQuery))
+ .returnsUnordered("A=225541.91732536256");
+
+ final String sqlQuery2 = "select sum(\"store_cost\") as a "
+ + "from \"foodmart\" "
+ + "where cast(\"product_id\" as double) < 1016.0 "
+ + "or cast(\"product_id\" as double) > 1016.0";
+ sql(sqlQuery2, FOODMART)
+ .returnsUnordered("A=225541.91732536256");
}
}