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 fa4abf9083..e1ea147b04 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 @@ -88,8 +88,10 @@ import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.StructField; import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveTypeEntry; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableVoidObjectInspector; import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.ListTypeInfo; @@ -1229,6 +1231,9 @@ protected ExprNodeDesc getXpathOrFuncExprNodeDesc(ASTNode expr, List childrenList = new ArrayList( 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 +1247,9 @@ protected ExprNodeDesc getXpathOrFuncExprNodeDesc(ASTNode expr, List childrenList = new ArrayList( 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 { diff --git a/ql/src/test/queries/clientpositive/cast3.q b/ql/src/test/queries/clientpositive/cast3.q new file mode 100644 index 0000000000..a01eb3ad9b --- /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; 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 0000000000..d3234e913b --- /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 ####