DRILL-976: Fix extract second to return only second portion of interval; 
exclude hours, minutes


Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/219e4fa3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/219e4fa3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/219e4fa3

Branch: refs/heads/master
Commit: 219e4fa3f2ec5346ab2480cd5fece220638e80b4
Parents: 5e357fd
Author: Mehant Baid <[email protected]>
Authored: Tue Jun 17 02:11:55 2014 -0700
Committer: Jacques Nadeau <[email protected]>
Committed: Tue Jun 17 16:04:19 2014 -0700

----------------------------------------------------------------------
 .../templates/DateIntervalFunctionTemplates/Extract.java  |  6 ++++--
 .../org/apache/drill/jdbc/test/TestFunctionsQuery.java    | 10 ++++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/219e4fa3/exec/java-exec/src/main/codegen/templates/DateIntervalFunctionTemplates/Extract.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/codegen/templates/DateIntervalFunctionTemplates/Extract.java
 
b/exec/java-exec/src/main/codegen/templates/DateIntervalFunctionTemplates/Extract.java
index 3f0dcee..6dae417 100644
--- 
a/exec/java-exec/src/main/codegen/templates/DateIntervalFunctionTemplates/Extract.java
+++ 
b/exec/java-exec/src/main/codegen/templates/DateIntervalFunctionTemplates/Extract.java
@@ -103,7 +103,8 @@ public class ${className} {
       int millis = in.milliSeconds % 
(org.apache.drill.exec.expr.fn.impl.DateUtility.hoursToMillis);
       out.value = millis / 
(org.apache.drill.exec.expr.fn.impl.DateUtility.minutesToMillis);
     <#elseif toUnit == "Second">
-      out.value = (double) in.milliSeconds / 
(org.apache.drill.exec.expr.fn.impl.DateUtility.secondsToMillis);
+      long millis = in.milliSeconds % 
org.apache.drill.exec.expr.fn.impl.DateUtility.minutesToMillis;
+      out.value = (double) millis / 
(org.apache.drill.exec.expr.fn.impl.DateUtility.secondsToMillis);
     </#if>
   <#elseif fromUnit == "IntervalDay">
     <#if toUnit == "Year" || toUnit == "Month">
@@ -116,7 +117,8 @@ public class ${className} {
       int millis = in.milliSeconds % 
(org.apache.drill.exec.expr.fn.impl.DateUtility.hoursToMillis);
       out.value = millis / 
(org.apache.drill.exec.expr.fn.impl.DateUtility.minutesToMillis);
     <#elseif toUnit == "Second">
-      out.value = (double) in.milliSeconds/ 
(org.apache.drill.exec.expr.fn.impl.DateUtility.secondsToMillis);
+      long millis = in.milliSeconds % 
org.apache.drill.exec.expr.fn.impl.DateUtility.minutesToMillis;
+      out.value = (double) millis / 
(org.apache.drill.exec.expr.fn.impl.DateUtility.secondsToMillis);
     </#if>
   <#else> <#-- IntervalYear type -->
     <#if toUnit == "Year">

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/219e4fa3/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java
----------------------------------------------------------------------
diff --git 
a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java 
b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java
index c2d90fe..d700763 100644
--- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java
+++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestFunctionsQuery.java
@@ -537,5 +537,15 @@ public class TestFunctionsQuery {
             "DEC18_MUL=15241578780673678.515622620750190521\n");
   }
 
+  @Test
+  public void testExtractSecondFromInterval() throws Exception {
+    String query = "select extract (second from interval '1 2:30:45.100' day 
to second) as EXT_INTDAY " +
+        "from cp.`employee.json` where employee_id = 1";
+
+    JdbcAssert.withNoDefaultSchema()
+        .sql(query)
+        .returns(
+            "EXT_INTDAY=45.1\n");
+  }
 
 }

Reply via email to