You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by su...@apache.org on 2016/12/13 00:40:03 UTC

[06/14] drill git commit: DRILL-5048: Fix type mismatch error in case statement with null timestamp

DRILL-5048: Fix type mismatch error in case statement with null timestamp

closes #657


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

Branch: refs/heads/master
Commit: 85a9651844c3e5f33db14c57b8f43f01100a729e
Parents: 3cd2f44
Author: Serhii-Harnyk <se...@gmail.com>
Authored: Thu Nov 17 14:23:58 2016 +0000
Committer: Sudheesh Katkam <su...@apache.org>
Committed: Mon Dec 12 15:40:02 2016 -0800

----------------------------------------------------------------------
 .../exec/planner/logical/DrillConstExecutor.java     |  3 ++-
 .../exec/planner/logical/TestCaseNullableTypes.java  | 15 +++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/85a96518/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java
index 4a0f8fa..829db2a 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java
@@ -287,7 +287,8 @@ public class DrillConstExecutor implements RelOptPlanner.Executor {
               Calendar value = (materializedExpr.getMajorType().getMode() == TypeProtos.DataMode.OPTIONAL) ?
                 new DateTime(((NullableTimeStampHolder) output).value, DateTimeZone.UTC).toCalendar(null) :
                 new DateTime(((TimeStampHolder) output).value, DateTimeZone.UTC).toCalendar(null);
-              return rexBuilder.makeTimestampLiteral(value, 0);
+              return rexBuilder.makeLiteral(value,
+                TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.TIMESTAMP, newCall.getType().isNullable()), false);
             }
             case INTERVALYEAR: {
               BigDecimal value = (materializedExpr.getMajorType().getMode() == TypeProtos.DataMode.OPTIONAL) ?

http://git-wip-us.apache.org/repos/asf/drill/blob/85a96518/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/TestCaseNullableTypes.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/TestCaseNullableTypes.java b/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/TestCaseNullableTypes.java
index 8e5245f..4db59eb 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/TestCaseNullableTypes.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/TestCaseNullableTypes.java
@@ -17,6 +17,8 @@
 package org.apache.drill.exec.planner.logical;
 
 import org.apache.drill.BaseTestQuery;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
 import org.junit.Test;
 
 /**
@@ -124,4 +126,17 @@ public class TestCaseNullableTypes extends BaseTestQuery {
       .baselineValues(1, 0.1f)
       .go();
   }
+
+  @Test //DRILL-5048
+  public void testCaseNullableTimestamp() throws Exception {
+    DateTime date = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
+      .parseDateTime("2016-11-17 14:43:23");
+
+    testBuilder()
+      .sqlQuery("SELECT (CASE WHEN (false) THEN null ELSE CAST('2016-11-17 14:43:23' AS TIMESTAMP) END) res FROM (values(1)) foo")
+      .unOrdered()
+      .baselineColumns("res")
+      .baselineValues(date)
+      .go();
+  }
 }