diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAbs.java ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAbs.java index 1fdd41c..a8e2786 100644 --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAbs.java +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAbs.java @@ -130,6 +130,9 @@ public Object evaluate(DeferredObject[] arguments) throws HiveException { case STRING: case DOUBLE: valObject = inputConverter.convert(valObject); + if (valObject == null) { + return null; + } resultDouble.set(Math.abs(((DoubleWritable) valObject).get())); return resultDouble; case DECIMAL: diff --git ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAbs.java ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAbs.java index 8c531ea..6dbb33f 100644 --- ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAbs.java +++ ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAbs.java @@ -133,6 +133,12 @@ public void testText() throws HiveException { output = (DoubleWritable) udf.evaluate(args); assertEquals("abs() test for String failed ", "123.45", output.toString()); + + valueObj = new DeferredJavaObject(new Text("foo")); + args[0] = valueObj; + output = (DoubleWritable) udf.evaluate(args); + + assertEquals("abs() test for String failed ", null, output); } public void testHiveDecimal() throws HiveException {