Repository: hive
Updated Branches:
  refs/heads/master f0faf78dc -> e5c3cf1de


HIVE-12502: to_date UDF cannot accept NULLs of VOID type (Aaron Tokhy via Jason 
Dere)


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

Branch: refs/heads/master
Commit: e5c3cf1def1e3bb2481b67eede37ba5d5563cee5
Parents: f0faf78
Author: Jason Dere <[email protected]>
Authored: Mon Jan 4 16:31:58 2016 -0800
Committer: Jason Dere <[email protected]>
Committed: Mon Jan 4 16:31:58 2016 -0800

----------------------------------------------------------------------
 .../hive/ql/udf/generic/GenericUDFDate.java     |  4 ++++
 .../hive/ql/udf/generic/TestGenericUDFDate.java | 23 ++++++++++++++++++++
 2 files changed, 27 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/e5c3cf1d/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDate.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDate.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDate.java
index 86a0714..10e648e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDate.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDate.java
@@ -74,6 +74,8 @@ public class GenericUDFDate extends GenericUDF {
     inputType = argumentOI.getPrimitiveCategory();
     ObjectInspector outputOI = 
PrimitiveObjectInspectorFactory.writableStringObjectInspector;
     switch (inputType) {
+    case VOID:
+      break;
     case CHAR:
     case VARCHAR:
     case STRING:
@@ -103,6 +105,8 @@ public class GenericUDFDate extends GenericUDF {
     }
 
     switch (inputType) {
+    case VOID:
+      throw new UDFArgumentException("TO_DATE() received non-null object of 
VOID type");
     case STRING:
       Date date;
       String dateString = textConverter.convert(arguments[0].get()).toString();

http://git-wip-us.apache.org/repos/asf/hive/blob/e5c3cf1d/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDate.java
----------------------------------------------------------------------
diff --git 
a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDate.java 
b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDate.java
index 0c4928e..c9f566d 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDate.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDate.java
@@ -23,6 +23,7 @@ import java.sql.Timestamp;
 
 import junit.framework.TestCase;
 
+import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDF.DeferredJavaObject;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDF.DeferredObject;
@@ -89,4 +90,26 @@ public class TestGenericUDFDate extends TestCase {
     assertNull("to_date() with null DATE", output);
   }
 
+  public void testVoidToDate() throws HiveException {
+    GenericUDFDate udf = new GenericUDFDate();
+    ObjectInspector valueOI = 
PrimitiveObjectInspectorFactory.writableVoidObjectInspector;
+    ObjectInspector[] arguments = {valueOI};
+
+    udf.initialize(arguments);
+    DeferredObject[] args = { new DeferredJavaObject(null) };
+    Text output = (Text) udf.evaluate(args);
+
+    // Try with null VOID
+    assertNull("to_date() with null DATE ", output);
+
+    // Try with erroneously generated VOID
+    DeferredObject[] junkArgs = { new DeferredJavaObject(new 
Text("2015-11-22")) };
+    try {
+      udf.evaluate(junkArgs);
+      fail("to_date() test with VOID non-null failed");
+    } catch (UDFArgumentException udfae) {
+      assertEquals("TO_DATE() received non-null object of VOID type", 
udfae.getMessage());
+    }
+  }
+
 }

Reply via email to