Index: ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBridge.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBridge.java (revision 1166865) +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFBridge.java (working copy) @@ -60,6 +60,11 @@ Class udfClass; /** + * The underlying UDF class Name. + */ + String udfClassName; + + /** * Greate a new GenericUDFBridge object. * * @param udfName @@ -72,6 +77,7 @@ this.udfName = udfName; this.isOperator = isOperator; this.udfClass = udfClass; + this.udfClassName = udfClass != null ? udfClass.getName() : null; } // For Java serialization only @@ -86,6 +92,14 @@ return udfName; } + public String getUdfClassName() { + return udfClassName; + } + + public void setUdfClassName(String udfClassName) { + this.udfClassName = udfClassName; + } + public boolean isOperator() { return isOperator; } @@ -123,6 +137,11 @@ @Override public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { + if (udfClass == null) { + throw new UDFArgumentException( + "The UDF implementation class '" + udfClassName + + "' is not present in the class path"); + } udf = (UDF) ReflectionUtils.newInstance(udfClass, null); // Resolve for the method based on argument types Index: ql/src/test/queries/clientnegative/udfnull.q =================================================================== --- ql/src/test/queries/clientnegative/udfnull.q (revision 0) +++ ql/src/test/queries/clientnegative/udfnull.q (revision 0) @@ -0,0 +1,6 @@ + +CREATE TEMPORARY FUNCTION example_arraysum AS 'org.apache.hadoop.hive.contrib.udf.example.UDFExampleArraySum'; + +SELECT example_arraysum(lint)FROM src_thrift; + +DROP TEMPORARY FUNCTION example_arraysum; Index: ql/src/test/results/clientnegative/udfnull.q.out =================================================================== --- ql/src/test/results/clientnegative/udfnull.q.out (revision 0) +++ ql/src/test/results/clientnegative/udfnull.q.out (revision 0) @@ -0,0 +1,9 @@ +PREHOOK: query: CREATE TEMPORARY FUNCTION example_arraysum AS 'org.apache.hadoop.hive.contrib.udf.example.UDFExampleArraySum' +PREHOOK: type: CREATEFUNCTION +POSTHOOK: query: CREATE TEMPORARY FUNCTION example_arraysum AS 'org.apache.hadoop.hive.contrib.udf.example.UDFExampleArraySum' +POSTHOOK: type: CREATEFUNCTION +PREHOOK: query: SELECT example_arraysum(lint)FROM src_thrift +PREHOOK: type: QUERY +PREHOOK: Input: default@src_thrift +PREHOOK: Output: file:/tmp/root/hive_2011-05-25_10-05-57_126_4632621650656424226/-mr-10000 +FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask