diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java index af2bacb..1fa7d38 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java @@ -389,6 +389,7 @@ public final class FunctionRegistry { // Generic UDFs registerGenericUDF("reflect", GenericUDFReflect.class); + registerGenericUDF("java_method", GenericUDFReflect.class); registerGenericUDF("array", GenericUDFArray.class); registerGenericUDF("map", GenericUDFMap.class); diff --git ql/src/test/queries/clientpositive/udf_java_method.q ql/src/test/queries/clientpositive/udf_java_method.q new file mode 100644 index 0000000..a1ecc04 --- /dev/null +++ ql/src/test/queries/clientpositive/udf_java_method.q @@ -0,0 +1,11 @@ +DESCRIBE FUNCTION java_method; +DESCRIBE FUNCTION EXTENDED java_method; + +-- java_method() is a synonym for reflect() + +EXPLAIN EXTENDED +SELECT java_method("java.lang.String", "valueOf", 1) +FROM src LIMIT 1; + +SELECT java_method("java.lang.String", "valueOf", 1) +FROM src LIMIT 1; diff --git ql/src/test/results/clientpositive/show_functions.q.out ql/src/test/results/clientpositive/show_functions.q.out index 7dfcd86..09390f4 100644 --- ql/src/test/results/clientpositive/show_functions.q.out +++ ql/src/test/results/clientpositive/show_functions.q.out @@ -74,6 +74,7 @@ instr int isnotnull isnull +java_method json_tuple lcase length diff --git ql/src/test/results/clientpositive/udf_java_method.q.out ql/src/test/results/clientpositive/udf_java_method.q.out new file mode 100644 index 0000000..1e8102c --- /dev/null +++ ql/src/test/results/clientpositive/udf_java_method.q.out @@ -0,0 +1,119 @@ +PREHOOK: query: DESCRIBE FUNCTION java_method +PREHOOK: type: DESCFUNCTION +POSTHOOK: query: DESCRIBE FUNCTION java_method +POSTHOOK: type: DESCFUNCTION +java_method(class,method[,arg1[,arg2..]]) calls method with reflection +PREHOOK: query: DESCRIBE FUNCTION EXTENDED java_method +PREHOOK: type: DESCFUNCTION +POSTHOOK: query: DESCRIBE FUNCTION EXTENDED java_method +POSTHOOK: type: DESCFUNCTION +java_method(class,method[,arg1[,arg2..]]) calls method with reflection +Synonyms: reflect +Use this UDF to call Java methods by matching the argument signature + +PREHOOK: query: -- java_method() is a synonym for reflect() + +EXPLAIN EXTENDED +SELECT java_method("java.lang.String", "valueOf", 1) +FROM src LIMIT 1 +PREHOOK: type: QUERY +POSTHOOK: query: -- java_method() is a synonym for reflect() + +EXPLAIN EXTENDED +SELECT java_method("java.lang.String", "valueOf", 1) +FROM src LIMIT 1 +POSTHOOK: type: QUERY +ABSTRACT SYNTAX TREE: + (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION java_method "java.lang.String" "valueOf" 1))) (TOK_LIMIT 1))) + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Alias -> Map Operator Tree: + src + TableScan + alias: src + GatherStats: false + Select Operator + expressions: + expr: reflect('java.lang.String','valueOf',1) + type: string + outputColumnNames: _col0 + Limit + File Output Operator + compressed: false + GlobalTableId: 0 + directory: file:/var/folders/b7/b7UUwNZdF1KKHtM+5la6f++++TI/-Tmp-/carl/hive_2011-01-03_11-00-54_158_5729422079309707246/-ext-10001 + NumFilesPerFileSink: 1 + Stats Publishing Key Prefix: file:/var/folders/b7/b7UUwNZdF1KKHtM+5la6f++++TI/-Tmp-/carl/hive_2011-01-03_11-00-54_158_5729422079309707246/-ext-10001/ + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + columns _col0 + columns.types string + serialization.format 1 + TotalFiles: 1 + GatherStats: false + MultiFileSpray: false + Needs Tagging: false + Path -> Alias: + pfile:/Users/carl/Work/repos/hive-trunk/build/ql/test/data/warehouse/src [src] + Path -> Partition: + pfile:/Users/carl/Work/repos/hive-trunk/build/ql/test/data/warehouse/src + Partition + base file name: src + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string + file.inputformat org.apache.hadoop.mapred.TextInputFormat + file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + location pfile:/Users/carl/Work/repos/hive-trunk/build/ql/test/data/warehouse/src + name src + serialization.ddl struct src { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + transient_lastDdlTime 1294081250 + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + properties: + bucket_count -1 + columns key,value + columns.types string:string + file.inputformat org.apache.hadoop.mapred.TextInputFormat + file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + location pfile:/Users/carl/Work/repos/hive-trunk/build/ql/test/data/warehouse/src + name src + serialization.ddl struct src { string key, string value} + serialization.format 1 + serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + transient_lastDdlTime 1294081250 + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + name: src + name: src + + Stage: Stage-0 + Fetch Operator + limit: 1 + + +PREHOOK: query: SELECT java_method("java.lang.String", "valueOf", 1) +FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/var/folders/b7/b7UUwNZdF1KKHtM+5la6f++++TI/-Tmp-/carl/hive_2011-01-03_11-00-54_404_4163289024036766373/-mr-10000 +POSTHOOK: query: SELECT java_method("java.lang.String", "valueOf", 1) +FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/var/folders/b7/b7UUwNZdF1KKHtM+5la6f++++TI/-Tmp-/carl/hive_2011-01-03_11-00-54_404_4163289024036766373/-mr-10000 +1 diff --git ql/src/test/results/clientpositive/udf_reflect.q.out ql/src/test/results/clientpositive/udf_reflect.q.out index ac562f0..d8900f6 100644 --- ql/src/test/results/clientpositive/udf_reflect.q.out +++ ql/src/test/results/clientpositive/udf_reflect.q.out @@ -8,6 +8,7 @@ PREHOOK: type: DESCFUNCTION POSTHOOK: query: DESCRIBE FUNCTION EXTENDED reflect POSTHOOK: type: DESCFUNCTION reflect(class,method[,arg1[,arg2..]]) calls method with reflection +Synonyms: java_method Use this UDF to call Java methods by matching the argument signature PREHOOK: query: EXPLAIN EXTENDED @@ -66,9 +67,9 @@ STAGE PLANS: File Output Operator compressed: false GlobalTableId: 0 - directory: file:/tmp/nzhang/hive_2010-09-15_17-26-36_357_6265400288274412023/-ext-10001 + directory: file:/var/folders/b7/b7UUwNZdF1KKHtM+5la6f++++TI/-Tmp-/carl/hive_2011-01-03_11-01-01_892_708948145299804234/-ext-10001 NumFilesPerFileSink: 1 - Stats Publishing Key Prefix: file:/tmp/nzhang/hive_2010-09-15_17-26-36_357_6265400288274412023/-ext-10001/ + Stats Publishing Key Prefix: file:/var/folders/b7/b7UUwNZdF1KKHtM+5la6f++++TI/-Tmp-/carl/hive_2011-01-03_11-01-01_892_708948145299804234/-ext-10001/ table: input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat @@ -81,9 +82,9 @@ STAGE PLANS: MultiFileSpray: false Needs Tagging: false Path -> Alias: - pfile:/data/users/nzhang/work/784/apache-hive/build/ql/test/data/warehouse/src [src] + pfile:/Users/carl/Work/repos/hive-trunk/build/ql/test/data/warehouse/src [src] Path -> Partition: - pfile:/data/users/nzhang/work/784/apache-hive/build/ql/test/data/warehouse/src + pfile:/Users/carl/Work/repos/hive-trunk/build/ql/test/data/warehouse/src Partition base file name: src input format: org.apache.hadoop.mapred.TextInputFormat @@ -94,12 +95,12 @@ STAGE PLANS: columns.types string:string file.inputformat org.apache.hadoop.mapred.TextInputFormat file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat - location pfile:/data/users/nzhang/work/784/apache-hive/build/ql/test/data/warehouse/src + location pfile:/Users/carl/Work/repos/hive-trunk/build/ql/test/data/warehouse/src name src serialization.ddl struct src { string key, string value} serialization.format 1 serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe - transient_lastDdlTime 1284588338 + transient_lastDdlTime 1294081250 serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe input format: org.apache.hadoop.mapred.TextInputFormat @@ -110,12 +111,12 @@ STAGE PLANS: columns.types string:string file.inputformat org.apache.hadoop.mapred.TextInputFormat file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat - location pfile:/data/users/nzhang/work/784/apache-hive/build/ql/test/data/warehouse/src + location pfile:/Users/carl/Work/repos/hive-trunk/build/ql/test/data/warehouse/src name src serialization.ddl struct src { string key, string value} serialization.format 1 serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe - transient_lastDdlTime 1284588338 + transient_lastDdlTime 1294081250 serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe name: src name: src @@ -135,7 +136,7 @@ PREHOOK: query: SELECT reflect("java.lang.String", "valueOf", 1), FROM src LIMIT 1 PREHOOK: type: QUERY PREHOOK: Input: default@src -PREHOOK: Output: file:/tmp/nzhang/hive_2010-09-15_17-26-36_401_5084178290925314023/-mr-10000 +PREHOOK: Output: file:/var/folders/b7/b7UUwNZdF1KKHtM+5la6f++++TI/-Tmp-/carl/hive_2011-01-03_11-01-02_008_3002628618217452027/-mr-10000 POSTHOOK: query: SELECT reflect("java.lang.String", "valueOf", 1), reflect("java.lang.String", "isEmpty"), reflect("java.lang.Math", "max", 2, 3), @@ -146,5 +147,5 @@ POSTHOOK: query: SELECT reflect("java.lang.String", "valueOf", 1), FROM src LIMIT 1 POSTHOOK: type: QUERY POSTHOOK: Input: default@src -POSTHOOK: Output: file:/tmp/nzhang/hive_2010-09-15_17-26-36_401_5084178290925314023/-mr-10000 +POSTHOOK: Output: file:/var/folders/b7/b7UUwNZdF1KKHtM+5la6f++++TI/-Tmp-/carl/hive_2011-01-03_11-01-02_008_3002628618217452027/-mr-10000 1 true 3 2 3 2.7182818284590455 1.0