Repository: hive Updated Branches: refs/heads/branch-1 b8418b861 -> e9947776a
HIVE-11432 : Hive macro give same result for different arguments (Pengcheng Xiong, reviewed by Hari Subramaniyan) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/e9947776 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/e9947776 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/e9947776 Branch: refs/heads/branch-1 Commit: e9947776a4522f4d36b68ce2715599b1078f485c Parents: b8418b8 Author: Hari Subramaniyan <[email protected]> Authored: Thu Aug 6 12:26:24 2015 -0700 Committer: Hari Subramaniyan <[email protected]> Committed: Thu Aug 6 12:26:59 2015 -0700 ---------------------------------------------------------------------- .../hadoop/hive/ql/exec/FunctionRegistry.java | 2 +- .../queries/clientpositive/macro_duplicate.q | 10 ++++ .../clientpositive/macro_duplicate.q.out | 56 ++++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/e9947776/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java index fabc21e..fb06d44 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java @@ -1281,7 +1281,7 @@ public final class FunctionRegistry { bridge.getUdfClassName()); } else if (genericUDF instanceof GenericUDFMacro) { GenericUDFMacro bridge = (GenericUDFMacro) genericUDF; - clonedUDF = new GenericUDFMacro(bridge.getMacroName(), bridge.getBody(), + clonedUDF = new GenericUDFMacro(bridge.getMacroName(), bridge.getBody().clone(), bridge.getColNames(), bridge.getColTypes()); } else { clonedUDF = ReflectionUtils.newInstance(genericUDF.getClass(), null); http://git-wip-us.apache.org/repos/asf/hive/blob/e9947776/ql/src/test/queries/clientpositive/macro_duplicate.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/macro_duplicate.q b/ql/src/test/queries/clientpositive/macro_duplicate.q new file mode 100644 index 0000000..dba38b1 --- /dev/null +++ b/ql/src/test/queries/clientpositive/macro_duplicate.q @@ -0,0 +1,10 @@ +drop table macro_testing; +CREATE TABLE macro_testing(a int, b int, c int); + +insert into table macro_testing values (1,2,3); +insert into table macro_testing values (4,5,6); + +create temporary macro math_square(x int) x*x; +create temporary macro math_add(x int) x+x; + +select math_square(a), math_square(b),factorial(a), factorial(b), math_add(a), math_add(b),int(c) from macro_testing; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hive/blob/e9947776/ql/src/test/results/clientpositive/macro_duplicate.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/macro_duplicate.q.out b/ql/src/test/results/clientpositive/macro_duplicate.q.out new file mode 100644 index 0000000..4e62ccb --- /dev/null +++ b/ql/src/test/results/clientpositive/macro_duplicate.q.out @@ -0,0 +1,56 @@ +PREHOOK: query: drop table macro_testing +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table macro_testing +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE macro_testing(a int, b int, c int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@macro_testing +POSTHOOK: query: CREATE TABLE macro_testing(a int, b int, c int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@macro_testing +PREHOOK: query: insert into table macro_testing values (1,2,3) +PREHOOK: type: QUERY +PREHOOK: Input: default@values__tmp__table__1 +PREHOOK: Output: default@macro_testing +POSTHOOK: query: insert into table macro_testing values (1,2,3) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@values__tmp__table__1 +POSTHOOK: Output: default@macro_testing +POSTHOOK: Lineage: macro_testing.a EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +POSTHOOK: Lineage: macro_testing.b EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ] +POSTHOOK: Lineage: macro_testing.c EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col3, type:string, comment:), ] +PREHOOK: query: insert into table macro_testing values (4,5,6) +PREHOOK: type: QUERY +PREHOOK: Input: default@values__tmp__table__2 +PREHOOK: Output: default@macro_testing +POSTHOOK: query: insert into table macro_testing values (4,5,6) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@values__tmp__table__2 +POSTHOOK: Output: default@macro_testing +POSTHOOK: Lineage: macro_testing.a EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +POSTHOOK: Lineage: macro_testing.b EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col2, type:string, comment:), ] +POSTHOOK: Lineage: macro_testing.c EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col3, type:string, comment:), ] +PREHOOK: query: create temporary macro math_square(x int) x*x +PREHOOK: type: CREATEMACRO +PREHOOK: Output: database:default +POSTHOOK: query: create temporary macro math_square(x int) x*x +POSTHOOK: type: CREATEMACRO +POSTHOOK: Output: database:default +PREHOOK: query: create temporary macro math_add(x int) x+x +PREHOOK: type: CREATEMACRO +PREHOOK: Output: database:default +POSTHOOK: query: create temporary macro math_add(x int) x+x +POSTHOOK: type: CREATEMACRO +POSTHOOK: Output: database:default +PREHOOK: query: select math_square(a), math_square(b),factorial(a), factorial(b), math_add(a), math_add(b),int(c) from macro_testing +PREHOOK: type: QUERY +PREHOOK: Input: default@macro_testing +#### A masked pattern was here #### +POSTHOOK: query: select math_square(a), math_square(b),factorial(a), factorial(b), math_add(a), math_add(b),int(c) from macro_testing +POSTHOOK: type: QUERY +POSTHOOK: Input: default@macro_testing +#### A masked pattern was here #### +1 4 1 2 2 4 3 +16 25 24 120 8 10 6
