HIVE-16050: Regression: Union of null with non-null (Gopal V, reviewed by 
Sergey Shelukhin)

(cherry-picked: a6366fc07931f374af77d0ab208404027bf165a3)

Change-Id: I65d05a2385f712bec0f41269c2498136b60fba0d


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/72ca985e
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/72ca985e
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/72ca985e

Branch: refs/heads/branch-2.2
Commit: 72ca985e6151542b290e44fa5e8d2ed6d800196a
Parents: 5f533bc
Author: Gopal V <gop...@apache.org>
Authored: Wed Mar 1 17:57:54 2017 +0530
Committer: Owen O'Malley <omal...@apache.org>
Committed: Tue Mar 28 15:27:56 2017 -0700

----------------------------------------------------------------------
 .../org/apache/hadoop/hive/ql/exec/FunctionRegistry.java  |  9 +++++++++
 ql/src/test/queries/clientpositive/union_null.q           |  3 +++
 ql/src/test/results/clientpositive/spark/union_null.q.out | 10 ++++++++++
 ql/src/test/results/clientpositive/union_null.q.out       | 10 ++++++++++
 4 files changed, 32 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/72ca985e/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
index d8198c6..84c218f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
@@ -725,6 +725,15 @@ public final class FunctionRegistry {
 
     PrimitiveGrouping pgA = 
PrimitiveObjectInspectorUtils.getPrimitiveGrouping(pcA);
     PrimitiveGrouping pgB = 
PrimitiveObjectInspectorUtils.getPrimitiveGrouping(pcB);
+
+    // untyped nulls
+    if (pgA == PrimitiveGrouping.VOID_GROUP) {
+      return b;
+    }
+    if (pgB == PrimitiveGrouping.VOID_GROUP) {
+      return a;
+    }
+
     if (pgA != pgB) {
       return null;
     }

http://git-wip-us.apache.org/repos/asf/hive/blob/72ca985e/ql/src/test/queries/clientpositive/union_null.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/union_null.q 
b/ql/src/test/queries/clientpositive/union_null.q
index 45448b4..aacf310 100644
--- a/ql/src/test/queries/clientpositive/union_null.q
+++ b/ql/src/test/queries/clientpositive/union_null.q
@@ -8,3 +8,6 @@ select x from (select * from (select value as x from src order 
by x limit 5)a un
 set hive.cbo.returnpath.hiveop=false;
 -- HIVE-4837
 select * from (select * from (select cast(null as string) as N from src1 group 
by key)a UNION ALL select * from (select cast(null as string) as N from src1 
group by key)b ) a;
+
+-- HIVE-16050
+select null as c1 UNION ALL select 1 as c1;

http://git-wip-us.apache.org/repos/asf/hive/blob/72ca985e/ql/src/test/results/clientpositive/spark/union_null.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/spark/union_null.q.out 
b/ql/src/test/results/clientpositive/spark/union_null.q.out
index 49482b2..76f5ac8 100644
--- a/ql/src/test/results/clientpositive/spark/union_null.q.out
+++ b/ql/src/test/results/clientpositive/spark/union_null.q.out
@@ -95,3 +95,13 @@ NULL
 NULL
 NULL
 NULL
+PREHOOK: query: select null as c1 UNION ALL select 1 as c1
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select null as c1 UNION ALL select 1 as c1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+NULL
+1

http://git-wip-us.apache.org/repos/asf/hive/blob/72ca985e/ql/src/test/results/clientpositive/union_null.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/union_null.q.out 
b/ql/src/test/results/clientpositive/union_null.q.out
index e196ff3..00bd9d9 100644
--- a/ql/src/test/results/clientpositive/union_null.q.out
+++ b/ql/src/test/results/clientpositive/union_null.q.out
@@ -74,3 +74,13 @@ NULL
 NULL
 NULL
 NULL
+PREHOOK: query: select null as c1 UNION ALL select 1 as c1
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+POSTHOOK: query: select null as c1 UNION ALL select 1 as c1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+#### A masked pattern was here ####
+NULL
+1

Reply via email to