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