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 ####