diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java index f0b8e3b..f621715 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBasePad.java @@ -66,7 +66,7 @@ public Object evaluate(DeferredObject[] arguments) throws HiveException { Text str = (Text) converter1.convert(valObject1); IntWritable lenW = (IntWritable) converter2.convert(valObject2); Text pad = (Text) converter3.convert(valObject3); - if (str == null || pad == null || lenW == null) { + if (str == null || pad == null || lenW == null || pad.toString().isEmpty()) { return null; } int len = lenW.get(); diff --git a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFLpad.java b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFLpad.java index f2d1fa9..9929215 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFLpad.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFLpad.java @@ -43,6 +43,7 @@ public void testLpad() throws HiveException { runAndVerify("hi", 1, "??", "h", udf); runAndVerify("hi", 5, "??", "???hi", udf); runAndVerify("hi", 1, "??", "h", udf); + runAndVerify("hi", 3, "", null, udf); } private void runAndVerify(String str, int len, String pad, String expResult, GenericUDF udf) @@ -51,7 +52,11 @@ private void runAndVerify(String str, int len, String pad, String expResult, Gen DeferredObject valueObj2 = new DeferredJavaObject(new IntWritable(len)); DeferredObject valueObj3 = new DeferredJavaObject(new Text(pad)); DeferredObject[] args = { valueObj1, valueObj2, valueObj3 }; - Text output = (Text) udf.evaluate(args); - assertEquals("lpad() test ", expResult, output.toString()); + Object output = udf.evaluate(args); + if(expResult != null) { + assertEquals("lpad() test ", expResult, output.toString()); + } else { + assertNull("lpad() test ", output); + } } } diff --git a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFRpad.java b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFRpad.java index 62908fd..28c6818 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFRpad.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFRpad.java @@ -18,10 +18,8 @@ package org.apache.hadoop.hive.ql.udf.generic; import org.apache.hadoop.hive.ql.metadata.HiveException; -import org.apache.hadoop.hive.ql.udf.generic.GenericUDF; import org.apache.hadoop.hive.ql.udf.generic.GenericUDF.DeferredJavaObject; import org.apache.hadoop.hive.ql.udf.generic.GenericUDF.DeferredObject; -import org.apache.hadoop.hive.ql.udf.generic.GenericUDFLpad; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; import org.apache.hadoop.io.IntWritable; @@ -43,6 +41,7 @@ public void testRpad() throws HiveException { runAndVerify("hi", 1, "??", "h", udf); runAndVerify("hi", 5, "??", "hi???", udf); runAndVerify("hi", 1, "??", "h", udf); + runAndVerify("hi", 3, "", null, udf); } private void runAndVerify(String str, int len, String pad, String expResult, GenericUDF udf) @@ -51,7 +50,11 @@ private void runAndVerify(String str, int len, String pad, String expResult, Gen DeferredObject valueObj2 = new DeferredJavaObject(new IntWritable(len)); DeferredObject valueObj3 = new DeferredJavaObject(new Text(pad)); DeferredObject[] args = { valueObj1, valueObj2, valueObj3 }; - Text output = (Text) udf.evaluate(args); - assertEquals("rpad() test ", expResult, output.toString()); + Object output = udf.evaluate(args); + if(expResult != null) { + assertEquals("rpad() test ", expResult, output.toString()); + } else { + assertNull("rpad() test ", output); + } } }