diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFReflect.java ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFReflect.java index 9e364af07a..e60ddbebd2 100644 --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFReflect.java +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFReflect.java @@ -105,13 +105,13 @@ public Object evaluate(DeferredObject[] arguments) throws HiveException { try { c = JavaUtils.loadClass(classNameString); } catch (ClassNotFoundException ex) { - throw new HiveException("UDFReflect evaluate ", ex); + throw new HiveException(String.format("UDFReflect evaluate error while loading class %s", classNameString), ex); } try { o = null; o = ReflectionUtils.newInstance(c, null); } catch (Exception e) { - // ignored + throw new HiveException(String.format("UDFReflect evaluate error while instantiating class %s", classNameString), e); } classNameChanged = true; } diff --git ql/src/test/queries/clientnegative/udf_reflect_neg.q ql/src/test/queries/clientnegative/udf_reflect_neg.q index fedc439e1c..f3008d5817 100644 --- ql/src/test/queries/clientnegative/udf_reflect_neg.q +++ ql/src/test/queries/clientnegative/udf_reflect_neg.q @@ -5,6 +5,7 @@ SELECT reflect("java.lang.StringClassThatDoesNotExist", "valueOf", 1), reflect("java.lang.Math", "min", 2, 3), reflect("java.lang.Math", "round", 2.5), reflect("java.lang.Math", "exp", 1.0), - reflect("java.lang.Math", "floor", 1.9) + reflect("java.lang.Math", "floor", 1.9), + reflect("java.lang.Integer", "valueOf", key, 16) FROM src LIMIT 1; diff --git ql/src/test/queries/clientpositive/udf_reflect.q ql/src/test/queries/clientpositive/udf_reflect.q index c7cdd7f3a8..2a5d879cb8 100644 --- ql/src/test/queries/clientpositive/udf_reflect.q +++ ql/src/test/queries/clientpositive/udf_reflect.q @@ -11,8 +11,7 @@ SELECT reflect("java.lang.String", "valueOf", 1), reflect("java.lang.Math", "min", 2, 3), reflect("java.lang.Math", "round", 2.5D), round(reflect("java.lang.Math", "exp", 1.0D), 6), - reflect("java.lang.Math", "floor", 1.9D), - reflect("java.lang.Integer", "valueOf", key, 16) + reflect("java.lang.Math", "floor", 1.9D) FROM src tablesample (1 rows); @@ -22,6 +21,5 @@ SELECT reflect("java.lang.String", "valueOf", 1), reflect("java.lang.Math", "min", 2, 3), reflect("java.lang.Math", "round", 2.5D), round(reflect("java.lang.Math", "exp", 1.0D), 6), - reflect("java.lang.Math", "floor", 1.9D), - reflect("java.lang.Integer", "valueOf", key, 16) + reflect("java.lang.Math", "floor", 1.9D) FROM src tablesample (1 rows); diff --git ql/src/test/results/clientnegative/udf_reflect_neg.q.out ql/src/test/results/clientnegative/udf_reflect_neg.q.out index 7ae91b5eef..ff4c0ac74e 100644 --- ql/src/test/results/clientnegative/udf_reflect_neg.q.out +++ ql/src/test/results/clientnegative/udf_reflect_neg.q.out @@ -4,7 +4,8 @@ PREHOOK: query: SELECT reflect("java.lang.StringClassThatDoesNotExist", "valueOf reflect("java.lang.Math", "min", 2, 3), reflect("java.lang.Math", "round", 2.5), reflect("java.lang.Math", "exp", 1.0), - reflect("java.lang.Math", "floor", 1.9) + reflect("java.lang.Math", "floor", 1.9), + reflect("java.lang.Integer", "valueOf", key, 16) FROM src LIMIT 1 PREHOOK: type: QUERY PREHOOK: Input: default@src diff --git ql/src/test/results/clientpositive/udf_reflect.q.out ql/src/test/results/clientpositive/udf_reflect.q.out index e9d72c04bc..b2e1591403 100644 --- ql/src/test/results/clientpositive/udf_reflect.q.out +++ ql/src/test/results/clientpositive/udf_reflect.q.out @@ -20,8 +20,7 @@ SELECT reflect("java.lang.String", "valueOf", 1), reflect("java.lang.Math", "min", 2, 3), reflect("java.lang.Math", "round", 2.5D), round(reflect("java.lang.Math", "exp", 1.0D), 6), - reflect("java.lang.Math", "floor", 1.9D), - reflect("java.lang.Integer", "valueOf", key, 16) + reflect("java.lang.Math", "floor", 1.9D) FROM src tablesample (1 rows) PREHOOK: type: QUERY PREHOOK: Input: default@src @@ -33,8 +32,7 @@ SELECT reflect("java.lang.String", "valueOf", 1), reflect("java.lang.Math", "min", 2, 3), reflect("java.lang.Math", "round", 2.5D), round(reflect("java.lang.Math", "exp", 1.0D), 6), - reflect("java.lang.Math", "floor", 1.9D), - reflect("java.lang.Integer", "valueOf", key, 16) + reflect("java.lang.Math", "floor", 1.9D) FROM src tablesample (1 rows) POSTHOOK: type: QUERY POSTHOOK: Input: default@src @@ -50,12 +48,12 @@ STAGE PLANS: TableScan alias: src Row Limit Per Split: 1 - Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE + Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: COMPLETE GatherStats: false Select Operator - expressions: reflect('java.lang.String','valueOf',1) (type: string), reflect('java.lang.String','isEmpty') (type: string), reflect('java.lang.Math','max',2,3) (type: string), reflect('java.lang.Math','min',2,3) (type: string), reflect('java.lang.Math','round',2.5D) (type: string), round(reflect('java.lang.Math','exp',1.0D), 6) (type: double), reflect('java.lang.Math','floor',1.9D) (type: string), reflect('java.lang.Integer','valueOf',key,16) (type: string) - outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7 - Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE + expressions: reflect('java.lang.String','valueOf',1) (type: string), reflect('java.lang.String','isEmpty') (type: string), reflect('java.lang.Math','max',2,3) (type: string), reflect('java.lang.Math','min',2,3) (type: string), reflect('java.lang.Math','round',2.5D) (type: string), round(reflect('java.lang.Math','exp',1.0D), 6) (type: double), reflect('java.lang.Math','floor',1.9D) (type: string) + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6 + Statistics: Num rows: 500 Data size: 556000 Basic stats: COMPLETE Column stats: COMPLETE ListSink PREHOOK: query: SELECT reflect("java.lang.String", "valueOf", 1), @@ -64,8 +62,7 @@ PREHOOK: query: SELECT reflect("java.lang.String", "valueOf", 1), reflect("java.lang.Math", "min", 2, 3), reflect("java.lang.Math", "round", 2.5D), round(reflect("java.lang.Math", "exp", 1.0D), 6), - reflect("java.lang.Math", "floor", 1.9D), - reflect("java.lang.Integer", "valueOf", key, 16) + reflect("java.lang.Math", "floor", 1.9D) FROM src tablesample (1 rows) PREHOOK: type: QUERY PREHOOK: Input: default@src @@ -76,10 +73,9 @@ POSTHOOK: query: SELECT reflect("java.lang.String", "valueOf", 1), reflect("java.lang.Math", "min", 2, 3), reflect("java.lang.Math", "round", 2.5D), round(reflect("java.lang.Math", "exp", 1.0D), 6), - reflect("java.lang.Math", "floor", 1.9D), - reflect("java.lang.Integer", "valueOf", key, 16) + reflect("java.lang.Math", "floor", 1.9D) FROM src tablesample (1 rows) POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### -1 true 3 2 3 2.718282 1.0 568 +1 true 3 2 3 2.718282 1.0