From d6637ad48a40189d385ef4fc080f889c55ea8415 Mon Sep 17 00:00:00 2001 From: vkorukanti Date: Wed, 5 Nov 2014 10:51:37 -0800 Subject: [PATCH] HIVE-8099: IN operator for partition column fails when the partition column type is DATE --- .../hadoop/hive/ql/udf/generic/GenericUDFIn.java | 2 +- .../clientpositive/partition_column_in_op.q | 19 ++++++ .../clientpositive/partition_column_in_op.q.out | 72 ++++++++++++++++++++++ 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 ql/src/test/queries/clientpositive/partition_column_in_op.q create mode 100644 ql/src/test/results/clientpositive/partition_column_in_op.q.out diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFIn.java ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFIn.java index 8990e1d..3632293 100644 --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFIn.java +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFIn.java @@ -82,7 +82,7 @@ public ObjectInspector initialize(ObjectInspector[] arguments) conversionHelper = new GenericUDFUtils.ReturnObjectInspectorResolver(true); for (ObjectInspector oi : arguments) { - if(!conversionHelper.update(oi)) { + if(!conversionHelper.updateForUnionAll(oi)) { StringBuilder sb = new StringBuilder(); sb.append("The arguments for IN should be the same type! Types are: {"); sb.append(arguments[0].getTypeName()); diff --git ql/src/test/queries/clientpositive/partition_column_in_op.q ql/src/test/queries/clientpositive/partition_column_in_op.q new file mode 100644 index 0000000..09bbbca --- /dev/null +++ ql/src/test/queries/clientpositive/partition_column_in_op.q @@ -0,0 +1,19 @@ +-- Test partition column as input to IN operator +CREATE TABLE datePartTbl(col1 string) PARTITIONED BY (date_prt date); + +-- Add test partitions and some sample data +-- ALTER TABLE datePartTbl ADD PARTITION (date_prt='2014-08-09'); +INSERT OVERWRITE TABLE datePartTbl PARTITION(date_prt='2014-08-09') + SELECT 'col1-2014-08-09' FROM src LIMIT 1; + +-- ALTER TABLE datePartTbl ADD PARTITION (date_prt='2014-08-10'); +INSERT OVERWRITE TABLE datePartTbl PARTITION(date_prt='2014-08-10') + SELECT 'col1-2014-08-10' FROM src LIMIT 1; + +-- Query where 'date_prt' value is restricted to given values in IN operator. +SELECT * FROM datePartTbl WHERE date_prt IN ('2014-08-09', '2014-08-08'); + +SELECT * FROM datePartTbl WHERE date_prt IN + (CAST('2014-08-09' AS DATE), CAST('2014-08-08' AS DATE)); + +DROP TABLE datePartTbl; diff --git ql/src/test/results/clientpositive/partition_column_in_op.q.out ql/src/test/results/clientpositive/partition_column_in_op.q.out new file mode 100644 index 0000000..64e4ed6 --- /dev/null +++ ql/src/test/results/clientpositive/partition_column_in_op.q.out @@ -0,0 +1,72 @@ +PREHOOK: query: -- Test partition column as input to IN operator +CREATE TABLE datePartTbl(col1 string) PARTITIONED BY (date_prt date) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@datePartTbl +POSTHOOK: query: -- Test partition column as input to IN operator +CREATE TABLE datePartTbl(col1 string) PARTITIONED BY (date_prt date) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@datePartTbl +PREHOOK: query: -- Add test partitions and some sample data +-- ALTER TABLE datePartTbl ADD PARTITION (date_prt='2014-08-09'); +INSERT OVERWRITE TABLE datePartTbl PARTITION(date_prt='2014-08-09') + SELECT 'col1-2014-08-09' FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@dateparttbl@date_prt=2014-08-09 +POSTHOOK: query: -- Add test partitions and some sample data +-- ALTER TABLE datePartTbl ADD PARTITION (date_prt='2014-08-09'); +INSERT OVERWRITE TABLE datePartTbl PARTITION(date_prt='2014-08-09') + SELECT 'col1-2014-08-09' FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@dateparttbl@date_prt=2014-08-09 +POSTHOOK: Lineage: dateparttbl PARTITION(date_prt=2014-08-09).col1 SIMPLE [] +PREHOOK: query: -- ALTER TABLE datePartTbl ADD PARTITION (date_prt='2014-08-10'); +INSERT OVERWRITE TABLE datePartTbl PARTITION(date_prt='2014-08-10') + SELECT 'col1-2014-08-10' FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@dateparttbl@date_prt=2014-08-10 +POSTHOOK: query: -- ALTER TABLE datePartTbl ADD PARTITION (date_prt='2014-08-10'); +INSERT OVERWRITE TABLE datePartTbl PARTITION(date_prt='2014-08-10') + SELECT 'col1-2014-08-10' FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@dateparttbl@date_prt=2014-08-10 +POSTHOOK: Lineage: dateparttbl PARTITION(date_prt=2014-08-10).col1 SIMPLE [] +PREHOOK: query: -- Query where 'date_prt' value is restricted to given values in IN operator. +SELECT * FROM datePartTbl WHERE date_prt IN ('2014-08-09', '2014-08-08') +PREHOOK: type: QUERY +PREHOOK: Input: default@dateparttbl +PREHOOK: Input: default@dateparttbl@date_prt=2014-08-09 +#### A masked pattern was here #### +POSTHOOK: query: -- Query where 'date_prt' value is restricted to given values in IN operator. +SELECT * FROM datePartTbl WHERE date_prt IN ('2014-08-09', '2014-08-08') +POSTHOOK: type: QUERY +POSTHOOK: Input: default@dateparttbl +POSTHOOK: Input: default@dateparttbl@date_prt=2014-08-09 +#### A masked pattern was here #### +col1-2014-08-09 2014-08-09 +PREHOOK: query: SELECT * FROM datePartTbl WHERE date_prt IN + (CAST('2014-08-09' AS DATE), CAST('2014-08-08' AS DATE)) +PREHOOK: type: QUERY +PREHOOK: Input: default@dateparttbl +PREHOOK: Input: default@dateparttbl@date_prt=2014-08-09 +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM datePartTbl WHERE date_prt IN + (CAST('2014-08-09' AS DATE), CAST('2014-08-08' AS DATE)) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@dateparttbl +POSTHOOK: Input: default@dateparttbl@date_prt=2014-08-09 +#### A masked pattern was here #### +col1-2014-08-09 2014-08-09 +PREHOOK: query: DROP TABLE datePartTbl +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@dateparttbl +PREHOOK: Output: default@dateparttbl +POSTHOOK: query: DROP TABLE datePartTbl +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@dateparttbl +POSTHOOK: Output: default@dateparttbl -- 1.8.5.2 (Apple Git-48)