diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBridge.java ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBridge.java index a9feba4..88e34d6 100644 --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBridge.java +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBridge.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import org.apache.hadoop.hive.ql.exec.FunctionRegistry; +import org.apache.hadoop.hive.ql.exec.NoMatchingMethodException; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.hive.ql.exec.UDFArgumentException; import org.apache.hadoop.hive.ql.metadata.HiveException; @@ -152,6 +153,9 @@ public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumen .getTypeInfoFromObjectInspector(argument)); } udfMethod = udf.getResolver().getEvalMethod(argumentTypeInfos); + if (udfMethod == null) { + throw new NoMatchingMethodException(udfClass, argumentTypeInfos, null); + } udfMethod.setAccessible(true); // Create parameter converters diff --git ql/src/test/queries/clientnegative/invalid_arithmetic_type.q ql/src/test/queries/clientnegative/invalid_arithmetic_type.q new file mode 100644 index 0000000..ad37cff --- /dev/null +++ ql/src/test/queries/clientnegative/invalid_arithmetic_type.q @@ -0,0 +1,3 @@ + +select timestamp('2001-01-01 00:00:01') - timestamp('2000-01-01 00:00:01') from src; + diff --git ql/src/test/results/clientnegative/invalid_arithmetic_type.q.out ql/src/test/results/clientnegative/invalid_arithmetic_type.q.out new file mode 100644 index 0000000..c4e93ac --- /dev/null +++ ql/src/test/results/clientnegative/invalid_arithmetic_type.q.out @@ -0,0 +1 @@ +FAILED: SemanticException Line 0:-1 Wrong arguments ''2000-01-01 00:00:01'': No matching method for class org.apache.hadoop.hive.ql.udf.UDFOPMinus with (timestamp, timestamp)