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