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");
   }
 
 }