You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2017/02/24 01:09:10 UTC
[38/50] [abbrv] hive git commit: HIVE-16002 : Correlated IN subquery
with aggregate asserts in sq_count_check UDF (Vineet Garg via Ashutosh
Chauhan)
HIVE-16002 : Correlated IN subquery with aggregate asserts in sq_count_check UDF (Vineet Garg via Ashutosh Chauhan)
Signed-off-by: Ashutosh Chauhan <ha...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/89310fee
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/89310fee
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/89310fee
Branch: refs/heads/hive-14535
Commit: 89310fee3ab7fa8cf4347850aaa03a57e10e78ba
Parents: ede8a55
Author: Vineet Garg <vg...@hortonworks.com>
Authored: Wed Feb 22 18:15:40 2017 -0800
Committer: Ashutosh Chauhan <ha...@apache.org>
Committed: Wed Feb 22 18:16:52 2017 -0800
----------------------------------------------------------------------
.../ql/udf/generic/GenericUDFSQCountCheck.java | 11 ++++--
.../clientnegative/subquery_corr_in_agg.q | 8 ++++
.../clientnegative/subquery_corr_in_agg.q.out | 39 ++++++++++++++++++++
3 files changed, 54 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/89310fee/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSQCountCheck.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSQCountCheck.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSQCountCheck.java
index 89fa0de..f5d9f82 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSQCountCheck.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSQCountCheck.java
@@ -61,11 +61,8 @@ public class GenericUDFSQCountCheck extends GenericUDF {
@Override
public Object evaluate(DeferredObject[] arguments) throws HiveException {
- Object valObject = arguments[0].get();
- assert(valObject != null);
Long val = getLongValue(arguments, 0, converters);
- assert(val >= 0);
switch (arguments.length){
case 1: //Scalar queries, should expect value/count less than 1
@@ -75,7 +72,13 @@ public class GenericUDFSQCountCheck extends GenericUDF {
}
break;
case 2:
- if (val == 0) { // IN/NOT IN subqueries with aggregate
+ Object valObject = arguments[0].get();
+ if( valObject != null
+ && getLongValue(arguments, 0, converters) == 0){
+ throw new UDFArgumentException(
+ " IN/NOT IN subquery with aggregate returning zero result. Currently this is not supported.");
+ }
+ else if(valObject == null) {
throw new UDFArgumentException(
" IN/NOT IN subquery with aggregate returning zero result. Currently this is not supported.");
}
http://git-wip-us.apache.org/repos/asf/hive/blob/89310fee/ql/src/test/queries/clientnegative/subquery_corr_in_agg.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientnegative/subquery_corr_in_agg.q b/ql/src/test/queries/clientnegative/subquery_corr_in_agg.q
new file mode 100644
index 0000000..f677fba
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/subquery_corr_in_agg.q
@@ -0,0 +1,8 @@
+create table Part1 (PNum int, OrderOnHand int);
+insert into Part1 values (3,6),(10,1),(8,0);
+create table Supply (PNum int, Qty int);
+insert into Supply values (3,4),(3,2),(10,1);
+
+
+select pnum from Part1 p where OrderOnHand in
+ (select count(*) from Supply s where s.pnum = p.pnum);
http://git-wip-us.apache.org/repos/asf/hive/blob/89310fee/ql/src/test/results/clientnegative/subquery_corr_in_agg.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/subquery_corr_in_agg.q.out b/ql/src/test/results/clientnegative/subquery_corr_in_agg.q.out
new file mode 100644
index 0000000..36019cb
--- /dev/null
+++ b/ql/src/test/results/clientnegative/subquery_corr_in_agg.q.out
@@ -0,0 +1,39 @@
+PREHOOK: query: create table Part1 (PNum int, OrderOnHand int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@Part1
+POSTHOOK: query: create table Part1 (PNum int, OrderOnHand int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@Part1
+PREHOOK: query: insert into Part1 values (3,6),(10,1),(8,0)
+PREHOOK: type: QUERY
+PREHOOK: Output: default@part1
+POSTHOOK: query: insert into Part1 values (3,6),(10,1),(8,0)
+POSTHOOK: type: QUERY
+POSTHOOK: Output: default@part1
+POSTHOOK: Lineage: part1.orderonhand EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
+POSTHOOK: Lineage: part1.pnum EXPRESSION [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+PREHOOK: query: create table Supply (PNum int, Qty int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@Supply
+POSTHOOK: query: create table Supply (PNum int, Qty int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@Supply
+PREHOOK: query: insert into Supply values (3,4),(3,2),(10,1)
+PREHOOK: type: QUERY
+PREHOOK: Output: default@supply
+POSTHOOK: query: insert into Supply values (3,4),(3,2),(10,1)
+POSTHOOK: type: QUERY
+POSTHOOK: Output: default@supply
+POSTHOOK: Lineage: supply.pnum EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col1, type:string, comment:), ]
+POSTHOOK: Lineage: supply.qty EXPRESSION [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col2, type:string, comment:), ]
+PREHOOK: query: select pnum from Part1 p where OrderOnHand in
+ (select count(*) from Supply s where s.pnum = p.pnum)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part1
+PREHOOK: Input: default@supply
+#### A masked pattern was here ####
+FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask