You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by vi...@apache.org on 2019/01/18 18:22:56 UTC

[drill] 06/06: DRILL-6967: Fix TIMESTAMPDIFF function for QUARTER qualifier

This is an automated email from the ASF dual-hosted git repository.

vitalii pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git

commit 0f05f53e0e34ccc0606a561f44d82b794be32b83
Author: Volodymyr Vysotskyi <vv...@gmail.com>
AuthorDate: Fri Jan 11 16:25:02 2019 +0200

    DRILL-6967: Fix TIMESTAMPDIFF function for QUARTER qualifier
    
    closes #1609
---
 .../TimestampDiff.java                             |  3 +-
 .../fn/impl/TestTimestampAddDiffFunctions.java     | 80 ++++++++++++----------
 2 files changed, 45 insertions(+), 38 deletions(-)

diff --git a/exec/java-exec/src/main/codegen/templates/DateIntervalFunctionTemplates/TimestampDiff.java b/exec/java-exec/src/main/codegen/templates/DateIntervalFunctionTemplates/TimestampDiff.java
index 54232e2..b139efc 100644
--- a/exec/java-exec/src/main/codegen/templates/DateIntervalFunctionTemplates/TimestampDiff.java
+++ b/exec/java-exec/src/main/codegen/templates/DateIntervalFunctionTemplates/TimestampDiff.java
@@ -95,7 +95,8 @@ public class ${className} {
         <#if unit == "Month">
       out.value = months;
         <#elseif unit == "Quarter">
-      out.value = months / 4;
+      // Quarter has 3 month
+      out.value = months / 3;
         <#elseif unit == "Year">
       out.value = months / org.apache.drill.exec.vector.DateUtilities.yearsToMonths;
         </#if>
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestTimestampAddDiffFunctions.java b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestTimestampAddDiffFunctions.java
index 4b3e93b..f2d5af6 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestTimestampAddDiffFunctions.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestTimestampAddDiffFunctions.java
@@ -73,17 +73,12 @@ public class TestTimestampAddDiffFunctions extends ClusterTest {
         String dateTimeLiteral = typeResultPair.getValue();
         String type = typeResultPair.getKey();
 
-        client.queryBuilder()
-            .sql("SELECT TIMESTAMPADD(%s, 0, CAST('%s' AS %s)) col1",
-                qualifier, dateTimeLiteral, type)
-            .run();
+        run("SELECT TIMESTAMPADD(%s, 0, CAST('%s' AS %s)) col1", qualifier, dateTimeLiteral, type);
 
         // TIMESTAMPDIFF with args of different types
         for (Map.Entry<String, String> secondArg : dateTypes.entrySet()) {
-          client.queryBuilder()
-              .sql("SELECT TIMESTAMPDIFF(%s, CAST('%s' AS %s), CAST('%s' AS %s)) col1",
-                  qualifier, dateTimeLiteral, type, secondArg.getValue(), secondArg.getKey())
-              .run();
+          run("SELECT TIMESTAMPDIFF(%s, CAST('%s' AS %s), CAST('%s' AS %s)) col1",
+              qualifier, dateTimeLiteral, type, secondArg.getValue(), secondArg.getKey());
         }
       }
     }
@@ -92,31 +87,25 @@ public class TestTimestampAddDiffFunctions extends ClusterTest {
   @Test // DRILL-3610
   public void testTimestampAddDiffTypeInference() throws Exception {
     for (String qualifier : QUALIFIERS) {
-      client.queryBuilder()
-          .sql(
-            "SELECT TIMESTAMPADD(%1$s, 0, `date`) col1," +
-                    "TIMESTAMPADD(%1$s, 0, `time`) timeReq," +
-                    "TIMESTAMPADD(%1$s, 0, `timestamp`) timestampReq," +
-                    "TIMESTAMPADD(%1$s, 0, t.time_map.`date`) dateOpt," +
-                    "TIMESTAMPADD(%1$s, 0, t.time_map.`time`) timeOpt," +
-                    "TIMESTAMPADD(%1$s, 0, t.time_map.`timestamp`) timestampOpt\n" +
-            "FROM cp.`datetime.parquet` t", qualifier)
-          .run();
-
-      client.queryBuilder()
-          .sql(
-            "SELECT TIMESTAMPDIFF(%1$s, `date`, `date`) col1," +
-                    "TIMESTAMPDIFF(%1$s, `time`, `time`) timeReq," +
-                    "TIMESTAMPDIFF(%1$s, `timestamp`, `timestamp`) timestampReq," +
-                    "TIMESTAMPDIFF(%1$s, `timestamp`, t.time_map.`date`) timestampReqTimestampOpt," +
-                    "TIMESTAMPDIFF(%1$s, `timestamp`, t.time_map.`timestamp`) timestampReqTimestampOpt," +
-                    "TIMESTAMPDIFF(%1$s, `date`, `time`) timeDate," +
-                    "TIMESTAMPDIFF(%1$s, `time`, `date`) Datetime," +
-                    "TIMESTAMPDIFF(%1$s, t.time_map.`date`, t.time_map.`date`) dateOpt," +
-                    "TIMESTAMPDIFF(%1$s, t.time_map.`time`, t.time_map.`time`) timeOpt," +
-                    "TIMESTAMPDIFF(%1$s, t.time_map.`timestamp`, t.time_map.`timestamp`) timestampOpt\n" +
-            "FROM cp.`datetime.parquet` t", qualifier)
-          .run();
+      run("SELECT TIMESTAMPADD(%1$s, 0, `date`) col1," +
+                "TIMESTAMPADD(%1$s, 0, `time`) timeReq," +
+                "TIMESTAMPADD(%1$s, 0, `timestamp`) timestampReq," +
+                "TIMESTAMPADD(%1$s, 0, t.time_map.`date`) dateOpt," +
+                "TIMESTAMPADD(%1$s, 0, t.time_map.`time`) timeOpt," +
+                "TIMESTAMPADD(%1$s, 0, t.time_map.`timestamp`) timestampOpt\n" +
+          "FROM cp.`datetime.parquet` t", qualifier);
+
+      run("SELECT TIMESTAMPDIFF(%1$s, `date`, `date`) col1," +
+                "TIMESTAMPDIFF(%1$s, `time`, `time`) timeReq," +
+                "TIMESTAMPDIFF(%1$s, `timestamp`, `timestamp`) timestampReq," +
+                "TIMESTAMPDIFF(%1$s, `timestamp`, t.time_map.`date`) timestampReqTimestampOpt," +
+                "TIMESTAMPDIFF(%1$s, `timestamp`, t.time_map.`timestamp`) timestampReqTimestampOpt," +
+                "TIMESTAMPDIFF(%1$s, `date`, `time`) timeDate," +
+                "TIMESTAMPDIFF(%1$s, `time`, `date`) Datetime," +
+                "TIMESTAMPDIFF(%1$s, t.time_map.`date`, t.time_map.`date`) dateOpt," +
+                "TIMESTAMPDIFF(%1$s, t.time_map.`time`, t.time_map.`time`) timeOpt," +
+                "TIMESTAMPDIFF(%1$s, t.time_map.`timestamp`, t.time_map.`timestamp`) timestampOpt\n" +
+          "FROM cp.`datetime.parquet` t", qualifier);
     }
   }
 
@@ -131,7 +120,7 @@ public class TestTimestampAddDiffFunctions extends ClusterTest {
               "TIMESTAMPADD(YEAR, 1, t.time_map.`timestamp`) timestampOpt\n" +
         "FROM cp.`datetime.parquet` t";
 
-    client.testBuilder()
+    testBuilder()
         .sqlQuery(query)
         .unOrdered()
         .baselineColumns("dateReq", "timeReq", "timestampReq", "dateOpt", "timeOpt", "timestampOpt")
@@ -152,7 +141,7 @@ public class TestTimestampAddDiffFunctions extends ClusterTest {
             "TIMESTAMPDIFF(YEAR, TIMESTAMP '2020-03-24 17:40:52.123', t.time_map.`timestamp`) timestampOpt\n" +
         "FROM cp.`datetime.parquet` t";
 
-    client.testBuilder()
+    testBuilder()
         .sqlQuery(query)
         .unOrdered()
         .baselineColumns("dateReq", "timeReq", "timestampReq", "dateOpt", "timeOpt", "timestampOpt")
@@ -173,7 +162,7 @@ public class TestTimestampAddDiffFunctions extends ClusterTest {
             "(SELECT CASE WHEN FALSE THEN TIME '12:00:03.600' ELSE null END AS a," +
             "CASE WHEN FALSE THEN 2 ELSE null END AS b)";
 
-    client.testBuilder()
+    testBuilder()
         .sqlQuery(query)
         .unOrdered()
         .baselineColumns("col1", "col2", "col3", "col4", "col5", "col6")
@@ -192,11 +181,28 @@ public class TestTimestampAddDiffFunctions extends ClusterTest {
               "TIMESTAMPDIFF(DAY, DATE '2012-01-01', DATE '2013-01-01') col6," +
               "TIMESTAMPDIFF(DAY, DATE '2013-01-01', DATE '2014-01-01') col7";
 
-    client.testBuilder()
+    testBuilder()
         .sqlQuery(query)
         .unOrdered()
         .baselineColumns("col1", "col2", "col3", "col4", "col5", "col6", "col7")
         .baselineValues(0L, 0L, 0L, 1L, -1L, 366L, 365L)
         .go();
   }
+
+  @Test // DRILL-6967
+  public void testTimestampDiffQuarter() throws Exception {
+    String query =
+        "SELECT TIMESTAMPDIFF(SQL_TSI_QUARTER, date '1996-03-09', date '1998-03-09') AS col1," +
+                "TIMESTAMPDIFF(QUARTER, date '2019-01-01', date '2019-01-17') AS col2," +
+                "TIMESTAMPDIFF(SQL_TSI_QUARTER, date '2019-01-01', date '2019-03-31') AS col3," +
+                "TIMESTAMPDIFF(QUARTER, date '2019-01-01', date '2019-04-01') AS col4," +
+                "TIMESTAMPDIFF(SQL_TSI_QUARTER, date '1970-01-01', date '2019-01-11') AS col5";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .baselineColumns("col1", "col2", "col3", "col4", "col5")
+        .baselineValues(8L, 0L, 0L, 1L, 196L)
+        .go();
+  }
 }