You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jp...@apache.org on 2016/01/06 22:52:47 UTC
hive git commit: HIVE-11603: IndexOutOfBoundsException thrown when
accessing a union all subquery and filtering on a column which does not exist
in all underlying tables (Laljo John Pullokkaran,
reviewed by Jesus Camacho Rodriguez )
Repository: hive
Updated Branches:
refs/heads/branch-1 05e609638 -> 95f2bd8d4
HIVE-11603: IndexOutOfBoundsException thrown when accessing a union all subquery and filtering on a column which does not exist in all underlying tables (Laljo John Pullokkaran, reviewed by Jesus Camacho Rodriguez )
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/95f2bd8d
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/95f2bd8d
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/95f2bd8d
Branch: refs/heads/branch-1
Commit: 95f2bd8d43ebc47925f604b4d2f98bd40b6361ed
Parents: 05e6096
Author: jpullokk <jp...@apache.org>
Authored: Wed Jan 6 13:50:58 2016 -0800
Committer: jpullokk <jp...@apache.org>
Committed: Wed Jan 6 13:50:58 2016 -0800
----------------------------------------------------------------------
.../java/org/apache/hadoop/hive/ql/exec/UnionOperator.java | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/95f2bd8d/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java
index 9bbaadd..9f33ab3 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/UnionOperator.java
@@ -62,13 +62,16 @@ public class UnionOperator extends Operator<UnionDesc> implements Serializable {
int parents = parentOperators.size();
parentObjInspectors = new StructObjectInspector[parents];
parentFields = new List[parents];
+ int columns = 0;
for (int p = 0; p < parents; p++) {
parentObjInspectors[p] = (StructObjectInspector) inputObjInspectors[p];
parentFields[p] = parentObjInspectors[p].getAllStructFieldRefs();
+ if (p == 0 || parentFields[p].size() < columns) {
+ columns = parentFields[p].size();
+ }
}
// Get columnNames from the first parent
- int columns = parentFields[0].size();
ArrayList<String> columnNames = new ArrayList<String>(columns);
for (int c = 0; c < columns; c++) {
columnNames.add(parentFields[0].get(c).getFieldName());
@@ -81,7 +84,8 @@ public class UnionOperator extends Operator<UnionDesc> implements Serializable {
}
for (int p = 0; p < parents; p++) {
- assert (parentFields[p].size() == columns);
+ // When columns is 0, the union operator is empty.
+ assert (columns == 0 || parentFields[p].size() == columns);
for (int c = 0; c < columns; c++) {
if (!columnTypeResolvers[c].updateForUnionAll(parentFields[p].get(c)
.getFieldObjectInspector())) {