You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by kg...@apache.org on 2019/01/21 13:54:58 UTC

[2/2] hive git commit: HIVE-20879: Using null in a projection expression leads to CastException (David Lavati via Zoltan Haindrich)

HIVE-20879: Using null in a projection expression leads to CastException (David Lavati via Zoltan Haindrich)

Signed-off-by: Zoltan Haindrich <ki...@rxd.hu>


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

Branch: refs/heads/master
Commit: 34c8ca432c5802192ef07d92ca81e5eea22d6c6b
Parents: 750b7c1
Author: David Lavati <da...@gmail.com>
Authored: Mon Jan 21 14:48:10 2019 +0100
Committer: Zoltan Haindrich <ki...@rxd.hu>
Committed: Mon Jan 21 14:48:10 2019 +0100

----------------------------------------------------------------------
 .../hive/ql/parse/TypeCheckProcFactory.java     |  6 +++
 ql/src/test/queries/clientpositive/cast3.q      |  9 +++++
 ql/src/test/results/clientpositive/cast3.q.out  | 40 ++++++++++++++++++++
 3 files changed, 55 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/34c8ca43/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java
index fa4abf9..b49bb36 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java
@@ -1229,6 +1229,9 @@ public class TypeCheckProcFactory {
           List<ExprNodeDesc> childrenList = new ArrayList<ExprNodeDesc>(
               children.size());
           for (ExprNodeDesc child : children) {
+            if (TypeInfoFactory.getPrimitiveTypeInfo("void").equals(child.getTypeInfo())) {
+              child.setTypeInfo(TypeInfoFactory.getPrimitiveTypeInfo("boolean"));
+            }
             if (FunctionRegistry.isOpOr(child)) {
               childrenList.addAll(child.getChildren());
             } else {
@@ -1242,6 +1245,9 @@ public class TypeCheckProcFactory {
           List<ExprNodeDesc> childrenList = new ArrayList<ExprNodeDesc>(
               children.size());
           for (ExprNodeDesc child : children) {
+            if (TypeInfoFactory.getPrimitiveTypeInfo("void").equals(child.getTypeInfo())) {
+              child.setTypeInfo(TypeInfoFactory.getPrimitiveTypeInfo("boolean"));
+            }
             if (FunctionRegistry.isOpAnd(child)) {
               childrenList.addAll(child.getChildren());
             } else {

http://git-wip-us.apache.org/repos/asf/hive/blob/34c8ca43/ql/src/test/queries/clientpositive/cast3.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/cast3.q b/ql/src/test/queries/clientpositive/cast3.q
new file mode 100644
index 0000000..a01eb3a
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/cast3.q
@@ -0,0 +1,9 @@
+create table cx1(bool0 boolean);
+
+select cast(NULL as boolean) or bool0 from cx1;
+
+select NULL or bool0 from cx1;
+
+select cast(NULL as boolean) and bool0 from cx1;
+
+select NULL and bool0 from cx1;

http://git-wip-us.apache.org/repos/asf/hive/blob/34c8ca43/ql/src/test/results/clientpositive/cast3.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/cast3.q.out b/ql/src/test/results/clientpositive/cast3.q.out
new file mode 100644
index 0000000..d3234e9
--- /dev/null
+++ b/ql/src/test/results/clientpositive/cast3.q.out
@@ -0,0 +1,40 @@
+PREHOOK: query: create table cx1(bool0 boolean)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@cx1
+POSTHOOK: query: create table cx1(bool0 boolean)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@cx1
+PREHOOK: query: select cast(NULL as boolean) or bool0 from cx1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@cx1
+#### A masked pattern was here ####
+POSTHOOK: query: select cast(NULL as boolean) or bool0 from cx1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@cx1
+#### A masked pattern was here ####
+PREHOOK: query: select NULL or bool0 from cx1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@cx1
+#### A masked pattern was here ####
+POSTHOOK: query: select NULL or bool0 from cx1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@cx1
+#### A masked pattern was here ####
+PREHOOK: query: select cast(NULL as boolean) and bool0 from cx1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@cx1
+#### A masked pattern was here ####
+POSTHOOK: query: select cast(NULL as boolean) and bool0 from cx1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@cx1
+#### A masked pattern was here ####
+PREHOOK: query: select NULL and bool0 from cx1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@cx1
+#### A masked pattern was here ####
+POSTHOOK: query: select NULL and bool0 from cx1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@cx1
+#### A masked pattern was here ####