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