You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2013/09/29 19:17:20 UTC

svn commit: r1527354 - in /hive/trunk/ql/src: java/org/apache/hadoop/hive/ql/exec/UnionOperator.java test/queries/clientpositive/union_null.q test/results/beelinepositive/union_null.q.out test/results/clientpositive/union_null.q.out

Author: hashutosh
Date: Sun Sep 29 17:17:20 2013
New Revision: 1527354

URL: http://svn.apache.org/r1527354
Log:
HIVE-4837 : Union on void type fails with NPE (Navis via Ashutosh Chauhan)

Modified:
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java
    hive/trunk/ql/src/test/queries/clientpositive/union_null.q
    hive/trunk/ql/src/test/results/beelinepositive/union_null.q.out
    hive/trunk/ql/src/test/results/clientpositive/union_null.q.out

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java?rev=1527354&r1=1527353&r2=1527354&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java Sun Sep 29 17:17:20 2013
@@ -80,15 +80,20 @@ public class UnionOperator extends Opera
     for (int p = 0; p < parents; p++) {
       assert (parentFields[p].size() == columns);
       for (int c = 0; c < columns; c++) {
-        columnTypeResolvers[c].update(parentFields[p].get(c)
-            .getFieldObjectInspector());
+        if (!columnTypeResolvers[c].update(parentFields[p].get(c)
+            .getFieldObjectInspector())) {
+          // checked in SemanticAnalyzer. Should not happen
+          throw new HiveException("Incompatible types for union operator");
+        }
       }
     }
 
     ArrayList<ObjectInspector> outputFieldOIs = new ArrayList<ObjectInspector>(
         columns);
     for (int c = 0; c < columns; c++) {
-      outputFieldOIs.add(columnTypeResolvers[c].get());
+      // can be null for void type
+      ObjectInspector oi = columnTypeResolvers[c].get();
+      outputFieldOIs.add(oi == null ? parentFields[0].get(c).getFieldObjectInspector() : oi);
     }
 
     // create output row ObjectInspector

Modified: hive/trunk/ql/src/test/queries/clientpositive/union_null.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/union_null.q?rev=1527354&r1=1527353&r2=1527354&view=diff
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/union_null.q (original)
+++ hive/trunk/ql/src/test/queries/clientpositive/union_null.q Sun Sep 29 17:17:20 2013
@@ -1,2 +1,5 @@
 -- HIVE-2901
 select x from (select value as x from src union all select NULL as x from src)a limit 10;
+
+-- HIVE-4837
+select * from (select null as N from src1 group by key UNION ALL select null as N from src1 group by key ) a;

Modified: hive/trunk/ql/src/test/results/beelinepositive/union_null.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/beelinepositive/union_null.q.out?rev=1527354&r1=1527353&r2=1527354&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/beelinepositive/union_null.q.out (original)
+++ hive/trunk/ql/src/test/results/beelinepositive/union_null.q.out Sun Sep 29 17:17:20 2013
@@ -14,4 +14,41 @@ Saving all output to "!!{outputDirectory
 'val_165'
 ''
 10 rows selected 
+>>>  
+>>>  -- HIVE-4837
+>>>  select * from (select null as N from src1 group by key UNION ALL select null as N from src1 group by key ) a;
+'n'
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+''
+32 rows selected 
 >>>  !record

Modified: hive/trunk/ql/src/test/results/clientpositive/union_null.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/union_null.q.out?rev=1527354&r1=1527353&r2=1527354&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/union_null.q.out (original)
+++ hive/trunk/ql/src/test/results/clientpositive/union_null.q.out Sun Sep 29 17:17:20 2013
@@ -18,3 +18,45 @@ val_27
 NULL
 val_165
 NULL
+PREHOOK: query: -- HIVE-4837
+select * from (select null as N from src1 group by key UNION ALL select null as N from src1 group by key ) a
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src1
+#### A masked pattern was here ####
+POSTHOOK: query: -- HIVE-4837
+select * from (select null as N from src1 group by key UNION ALL select null as N from src1 group by key ) a
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src1
+#### A masked pattern was here ####
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL