diff --git ql/src/test/queries/clientpositive/udf_substr.q ql/src/test/queries/clientpositive/udf_substr.q index 32757be..d90996b 100644 --- ql/src/test/queries/clientpositive/udf_substr.q +++ ql/src/test/queries/clientpositive/udf_substr.q @@ -2,7 +2,7 @@ DESCRIBE FUNCTION substr; DESCRIBE FUNCTION EXTENDED substr; SELECT - substr(null, 1), substr(null, 1, 1), + substr(CAST(null AS string), 1), substr(CAST(null AS string), 1, 1), substr('ABC', null), substr('ABC', null, 1), substr('ABC', 1, null) FROM src LIMIT 1; @@ -50,7 +50,7 @@ FROM src LIMIT 1; -- test for binary substr SELECT - substr(null, 1), substr(null, 1, 1), + substr(CAST(null AS binary), 1), substr(CAST(null AS binary), 1, 1), substr(ABC, null), substr(ABC, null, 1), substr(ABC, 1, null), substr(ABC, 0, 1), substr(ABC, 0, 2), substr(ABC, 0, 3), substr(ABC, 0, 4), diff --git ql/src/test/results/clientpositive/udf_substr.q.out ql/src/test/results/clientpositive/udf_substr.q.out index a7e690f..32c468d 100644 --- ql/src/test/results/clientpositive/udf_substr.q.out +++ ql/src/test/results/clientpositive/udf_substr.q.out @@ -18,7 +18,7 @@ Example: > SELECT substr('Facebook', 5, 1) FROM src LIMIT 1; 'b' PREHOOK: query: SELECT - substr(null, 1), substr(null, 1, 1), + substr(CAST(null AS string), 1), substr(CAST(null AS string), 1, 1), substr('ABC', null), substr('ABC', null, 1), substr('ABC', 1, null) FROM src LIMIT 1 @@ -26,7 +26,7 @@ PREHOOK: type: QUERY PREHOOK: Input: default@src #### A masked pattern was here #### POSTHOOK: query: SELECT - substr(null, 1), substr(null, 1, 1), + substr(CAST(null AS string), 1), substr(CAST(null AS string), 1, 1), substr('ABC', null), substr('ABC', null, 1), substr('ABC', 1, null) FROM src LIMIT 1 @@ -143,7 +143,7 @@ POSTHOOK: Input: default@src CDEF CDEF CDEFG CDEFG ABC ABC BC C ABC BC A A A PREHOOK: query: -- test for binary substr SELECT - substr(null, 1), substr(null, 1, 1), + substr(CAST(null AS binary), 1), substr(CAST(null AS binary), 1, 1), substr(ABC, null), substr(ABC, null, 1), substr(ABC, 1, null), substr(ABC, 0, 1), substr(ABC, 0, 2), substr(ABC, 0, 3), substr(ABC, 0, 4), @@ -163,7 +163,7 @@ PREHOOK: Input: default@src #### A masked pattern was here #### POSTHOOK: query: -- test for binary substr SELECT - substr(null, 1), substr(null, 1, 1), + substr(CAST(null AS binary), 1), substr(CAST(null AS binary), 1, 1), substr(ABC, null), substr(ABC, null, 1), substr(ABC, 1, null), substr(ABC, 0, 1), substr(ABC, 0, 2), substr(ABC, 0, 3), substr(ABC, 0, 4), @@ -181,7 +181,7 @@ FROM ( POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### -NULL NULL null null null A AB ABC ABC A AB ABC ABC B BC BC BC C C C C C C C C B BC BC BC A AB ABC ABC +null null null null null A AB ABC ABC A AB ABC ABC B BC BC BC C C C C C C C C B BC BC BC A AB ABC ABC PREHOOK: query: -- test UTF-8 substr SELECT substr("玩", 1), diff --git serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java index f0b16fa..b0ffe56 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java +++ serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java @@ -272,6 +272,10 @@ public class PrimitiveObjectInspectorConverter { @Override public Object convert(Object input) { + if (input == null) { + return null; + } + return outputOI.set(r, PrimitiveObjectInspectorUtils.getBinary(input, inputOI)); }