You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2012/12/10 06:41:31 UTC
svn commit: r1419202 - in /hive/trunk:
ql/src/test/queries/clientpositive/null_cast.q
ql/src/test/results/clientpositive/null_cast.q.out
serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java
Author: hashutosh
Date: Mon Dec 10 05:41:31 2012
New Revision: 1419202
URL: http://svn.apache.org/viewvc?rev=1419202&view=rev
Log:
HIVE-2689 : ObjectInspectorConverters cannot convert Void types to Array/Map/Struct types. (Jonathan Chang via Ashutosh Chauhan)
Added:
hive/trunk/ql/src/test/queries/clientpositive/null_cast.q
hive/trunk/ql/src/test/results/clientpositive/null_cast.q.out
Modified:
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java
Added: hive/trunk/ql/src/test/queries/clientpositive/null_cast.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/null_cast.q?rev=1419202&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/null_cast.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/null_cast.q Mon Dec 10 05:41:31 2012
@@ -0,0 +1,11 @@
+EXPLAIN SELECT ARRAY(NULL, 0),
+ ARRAY(NULL, ARRAY()),
+ ARRAY(NULL, MAP()),
+ ARRAY(NULL, STRUCT(0))
+ FROM src LIMIT 1;
+
+SELECT ARRAY(NULL, 0),
+ ARRAY(NULL, ARRAY()),
+ ARRAY(NULL, MAP()),
+ ARRAY(NULL, STRUCT(0))
+FROM src LIMIT 1;
Added: hive/trunk/ql/src/test/results/clientpositive/null_cast.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/null_cast.q.out?rev=1419202&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/null_cast.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/null_cast.q.out Mon Dec 10 05:41:31 2012
@@ -0,0 +1,67 @@
+PREHOOK: query: EXPLAIN SELECT ARRAY(NULL, 0),
+ ARRAY(NULL, ARRAY()),
+ ARRAY(NULL, MAP()),
+ ARRAY(NULL, STRUCT(0))
+ FROM src LIMIT 1
+PREHOOK: type: QUERY
+POSTHOOK: query: EXPLAIN SELECT ARRAY(NULL, 0),
+ ARRAY(NULL, ARRAY()),
+ ARRAY(NULL, MAP()),
+ ARRAY(NULL, STRUCT(0))
+ FROM src LIMIT 1
+POSTHOOK: type: QUERY
+ABSTRACT SYNTAX TREE:
+ (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_FUNCTION ARRAY TOK_NULL 0)) (TOK_SELEXPR (TOK_FUNCTION ARRAY TOK_NULL (TOK_FUNCTION ARRAY))) (TOK_SELEXPR (TOK_FUNCTION ARRAY TOK_NULL (TOK_FUNCTION MAP))) (TOK_SELEXPR (TOK_FUNCTION ARRAY TOK_NULL (TOK_FUNCTION STRUCT 0)))) (TOK_LIMIT 1)))
+
+STAGE DEPENDENCIES:
+ Stage-1 is a root stage
+ Stage-0 is a root stage
+
+STAGE PLANS:
+ Stage: Stage-1
+ Map Reduce
+ Alias -> Map Operator Tree:
+ src
+ TableScan
+ alias: src
+ Select Operator
+ expressions:
+ expr: array(null,0)
+ type: array<int>
+ expr: array(null,array())
+ type: array<array<string>>
+ expr: array(null,map())
+ type: array<map<string,string>>
+ expr: array(null,struct(0))
+ type: array<struct<col1:int>>
+ outputColumnNames: _col0, _col1, _col2, _col3
+ Limit
+ File Output Operator
+ compressed: false
+ GlobalTableId: 0
+ table:
+ input format: org.apache.hadoop.mapred.TextInputFormat
+ output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+
+ Stage: Stage-0
+ Fetch Operator
+ limit: 1
+
+
+PREHOOK: query: SELECT ARRAY(NULL, 0),
+ ARRAY(NULL, ARRAY()),
+ ARRAY(NULL, MAP()),
+ ARRAY(NULL, STRUCT(0))
+FROM src LIMIT 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT ARRAY(NULL, 0),
+ ARRAY(NULL, ARRAY()),
+ ARRAY(NULL, MAP()),
+ ARRAY(NULL, STRUCT(0))
+FROM src LIMIT 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+[null,0] [null,[]] [null,{}] [null,{"col1":0}]
Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java?rev=1419202&r1=1419201&r2=1419202&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java Mon Dec 10 05:41:31 2012
@@ -34,6 +34,7 @@ import org.apache.hadoop.hive.serde2.obj
import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableShortObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableTimestampObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.VoidObjectInspector;
/**
* ObjectInspectorConverters.
@@ -124,13 +125,13 @@ public final class ObjectInspectorConver
+ " not supported yet.");
}
case STRUCT:
- return new StructConverter((StructObjectInspector) inputOI,
+ return new StructConverter(inputOI,
(SettableStructObjectInspector) outputOI);
case LIST:
- return new ListConverter((ListObjectInspector) inputOI,
+ return new ListConverter(inputOI,
(SettableListObjectInspector) outputOI);
case MAP:
- return new MapConverter((MapObjectInspector) inputOI,
+ return new MapConverter(inputOI,
(SettableMapObjectInspector) outputOI);
default:
throw new RuntimeException("Hive internal error: conversion of "
@@ -154,14 +155,20 @@ public final class ObjectInspectorConver
Object output;
- public ListConverter(ListObjectInspector inputOI,
+ public ListConverter(ObjectInspector inputOI,
SettableListObjectInspector outputOI) {
- this.inputOI = inputOI;
- this.outputOI = outputOI;
- inputElementOI = inputOI.getListElementObjectInspector();
- outputElementOI = outputOI.getListElementObjectInspector();
- output = outputOI.create(0);
- elementConverters = new ArrayList<Converter>();
+ if (inputOI instanceof ListObjectInspector) {
+ this.inputOI = (ListObjectInspector)inputOI;
+ this.outputOI = outputOI;
+ inputElementOI = this.inputOI.getListElementObjectInspector();
+ outputElementOI = outputOI.getListElementObjectInspector();
+ output = outputOI.create(0);
+ elementConverters = new ArrayList<Converter>();
+ } else if (!(inputOI instanceof VoidObjectInspector)) {
+ throw new RuntimeException("Hive internal error: conversion of " +
+ inputOI.getTypeName() + " to " + outputOI.getTypeName() +
+ "not supported yet.");
+ }
}
@Override
@@ -207,22 +214,27 @@ public final class ObjectInspectorConver
Object output;
- public StructConverter(StructObjectInspector inputOI,
+ public StructConverter(ObjectInspector inputOI,
SettableStructObjectInspector outputOI) {
-
- this.inputOI = inputOI;
- this.outputOI = outputOI;
- inputFields = inputOI.getAllStructFieldRefs();
- outputFields = outputOI.getAllStructFieldRefs();
- assert (inputFields.size() == outputFields.size());
-
- fieldConverters = new ArrayList<Converter>(inputFields.size());
- for (int f = 0; f < inputFields.size(); f++) {
- fieldConverters.add(getConverter(inputFields.get(f)
- .getFieldObjectInspector(), outputFields.get(f)
- .getFieldObjectInspector()));
+ if (inputOI instanceof StructObjectInspector) {
+ this.inputOI = (StructObjectInspector)inputOI;
+ this.outputOI = outputOI;
+ inputFields = this.inputOI.getAllStructFieldRefs();
+ outputFields = outputOI.getAllStructFieldRefs();
+ assert (inputFields.size() == outputFields.size());
+
+ fieldConverters = new ArrayList<Converter>(inputFields.size());
+ for (int f = 0; f < inputFields.size(); f++) {
+ fieldConverters.add(getConverter(inputFields.get(f)
+ .getFieldObjectInspector(), outputFields.get(f)
+ .getFieldObjectInspector()));
+ }
+ output = outputOI.create();
+ } else if (!(inputOI instanceof VoidObjectInspector)) {
+ throw new RuntimeException("Hive internal error: conversion of " +
+ inputOI.getTypeName() + " to " + outputOI.getTypeName() +
+ "not supported yet.");
}
- output = outputOI.create();
}
@Override
@@ -263,17 +275,23 @@ public final class ObjectInspectorConver
Object output;
- public MapConverter(MapObjectInspector inputOI,
+ public MapConverter(ObjectInspector inputOI,
SettableMapObjectInspector outputOI) {
- this.inputOI = inputOI;
- this.outputOI = outputOI;
- inputKeyOI = inputOI.getMapKeyObjectInspector();
- outputKeyOI = outputOI.getMapKeyObjectInspector();
- inputValueOI = inputOI.getMapValueObjectInspector();
- outputValueOI = outputOI.getMapValueObjectInspector();
- keyConverters = new ArrayList<Converter>();
- valueConverters = new ArrayList<Converter>();
- output = outputOI.create();
+ if (inputOI instanceof MapObjectInspector) {
+ this.inputOI = (MapObjectInspector)inputOI;
+ this.outputOI = outputOI;
+ inputKeyOI = this.inputOI.getMapKeyObjectInspector();
+ outputKeyOI = outputOI.getMapKeyObjectInspector();
+ inputValueOI = this.inputOI.getMapValueObjectInspector();
+ outputValueOI = outputOI.getMapValueObjectInspector();
+ keyConverters = new ArrayList<Converter>();
+ valueConverters = new ArrayList<Converter>();
+ output = outputOI.create();
+ } else if (!(inputOI instanceof VoidObjectInspector)) {
+ throw new RuntimeException("Hive internal error: conversion of " +
+ inputOI.getTypeName() + " to " + outputOI.getTypeName() +
+ "not supported yet.");
+ }
}
@Override