Index: serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestObjectInspectorConverters.java =================================================================== --- serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestObjectInspectorConverters.java (revision 1527787) +++ serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestObjectInspectorConverters.java (working copy) @@ -25,6 +25,9 @@ import org.apache.hadoop.hive.serde2.io.ShortWritable; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters.Converter; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; +import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo; +import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory; +import org.apache.hadoop.hive.serde2.typeinfo.VarcharTypeParams; import org.apache.hadoop.io.BooleanWritable; import org.apache.hadoop.io.BytesWritable; import org.apache.hadoop.io.FloatWritable; @@ -171,4 +174,22 @@ } } + + public void testGetConvertedOI() throws Throwable { + // Try with types that have type params + PrimitiveTypeInfo varchar5TI = + (PrimitiveTypeInfo) TypeInfoFactory.getPrimitiveTypeInfo("varchar(5)"); + PrimitiveTypeInfo varchar10TI = + (PrimitiveTypeInfo) TypeInfoFactory.getPrimitiveTypeInfo("varchar(10)"); + PrimitiveObjectInspector varchar5OI = + PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(varchar5TI); + PrimitiveObjectInspector varchar10OI = + PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(varchar10TI); + + // output OI should have varchar type params + PrimitiveObjectInspector poi = (PrimitiveObjectInspector) + ObjectInspectorConverters.getConvertedOI(varchar10OI, varchar5OI, true); + VarcharTypeParams vcParams = (VarcharTypeParams) poi.getTypeParams(); + assertEquals("varchar length doesn't match", 5, vcParams.length); + } } Index: serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java =================================================================== --- serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java (revision 1527787) +++ serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorConverters.java (working copy) @@ -177,9 +177,9 @@ // TODO: Add support for UNION once SettableUnionObjectInspector is implemented. switch (outputOI.getCategory()) { case PRIMITIVE: - PrimitiveObjectInspector primInputOI = (PrimitiveObjectInspector) inputOI; + PrimitiveObjectInspector primOutputOI = (PrimitiveObjectInspector) outputOI; return PrimitiveObjectInspectorFactory. - getPrimitiveWritableObjectInspector(primInputOI); + getPrimitiveWritableObjectInspector(primOutputOI); case STRUCT: StructObjectInspector structOutputOI = (StructObjectInspector) outputOI; // create a standard settable struct object inspector Index: ql/src/test/results/clientpositive/alter_varchar2.q.out =================================================================== --- ql/src/test/results/clientpositive/alter_varchar2.q.out (revision 0) +++ ql/src/test/results/clientpositive/alter_varchar2.q.out (revision 0) @@ -0,0 +1,97 @@ +PREHOOK: query: -- alter column type, with partitioned table +drop table if exists alter_varchar2 +PREHOOK: type: DROPTABLE +POSTHOOK: query: -- alter column type, with partitioned table +drop table if exists alter_varchar2 +POSTHOOK: type: DROPTABLE +PREHOOK: query: create table alter_varchar2 ( + c1 varchar(255) +) partitioned by (hr int) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table alter_varchar2 ( + c1 varchar(255) +) partitioned by (hr int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@alter_varchar2 +PREHOOK: query: insert overwrite table alter_varchar2 partition (hr=1) + select value from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@alter_varchar2@hr=1 +POSTHOOK: query: insert overwrite table alter_varchar2 partition (hr=1) + select value from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@alter_varchar2@hr=1 +POSTHOOK: Lineage: alter_varchar2 PARTITION(hr=1).c1 EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: select c1, length(c1) from alter_varchar2 +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_varchar2 +PREHOOK: Input: default@alter_varchar2@hr=1 +#### A masked pattern was here #### +POSTHOOK: query: select c1, length(c1) from alter_varchar2 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_varchar2 +POSTHOOK: Input: default@alter_varchar2@hr=1 +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_varchar2 PARTITION(hr=1).c1 EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ] +val_238 7 +PREHOOK: query: alter table alter_varchar2 change column c1 c1 varchar(10) +PREHOOK: type: ALTERTABLE_RENAMECOL +PREHOOK: Input: default@alter_varchar2 +PREHOOK: Output: default@alter_varchar2 +POSTHOOK: query: alter table alter_varchar2 change column c1 c1 varchar(10) +POSTHOOK: type: ALTERTABLE_RENAMECOL +POSTHOOK: Input: default@alter_varchar2 +POSTHOOK: Output: default@alter_varchar2 +POSTHOOK: Lineage: alter_varchar2 PARTITION(hr=1).c1 EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: select hr, c1, length(c1) from alter_varchar2 where hr = 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_varchar2 +PREHOOK: Input: default@alter_varchar2@hr=1 +#### A masked pattern was here #### +POSTHOOK: query: select hr, c1, length(c1) from alter_varchar2 where hr = 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_varchar2 +POSTHOOK: Input: default@alter_varchar2@hr=1 +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_varchar2 PARTITION(hr=1).c1 EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ] +1 val_238 7 +PREHOOK: query: insert overwrite table alter_varchar2 partition (hr=2) + select key from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@alter_varchar2@hr=2 +POSTHOOK: query: insert overwrite table alter_varchar2 partition (hr=2) + select key from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@alter_varchar2@hr=2 +POSTHOOK: Lineage: alter_varchar2 PARTITION(hr=1).c1 EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_varchar2 PARTITION(hr=2).c1 EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +PREHOOK: query: select hr, c1, length(c1) from alter_varchar2 where hr = 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_varchar2 +PREHOOK: Input: default@alter_varchar2@hr=1 +#### A masked pattern was here #### +POSTHOOK: query: select hr, c1, length(c1) from alter_varchar2 where hr = 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_varchar2 +POSTHOOK: Input: default@alter_varchar2@hr=1 +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_varchar2 PARTITION(hr=1).c1 EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_varchar2 PARTITION(hr=2).c1 EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +1 val_238 7 +PREHOOK: query: select hr, c1, length(c1) from alter_varchar2 where hr = 2 +PREHOOK: type: QUERY +PREHOOK: Input: default@alter_varchar2 +PREHOOK: Input: default@alter_varchar2@hr=2 +#### A masked pattern was here #### +POSTHOOK: query: select hr, c1, length(c1) from alter_varchar2 where hr = 2 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@alter_varchar2 +POSTHOOK: Input: default@alter_varchar2@hr=2 +#### A masked pattern was here #### +POSTHOOK: Lineage: alter_varchar2 PARTITION(hr=1).c1 EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: alter_varchar2 PARTITION(hr=2).c1 EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +2 238 3 Index: ql/src/test/queries/clientpositive/alter_varchar2.q =================================================================== --- ql/src/test/queries/clientpositive/alter_varchar2.q (revision 0) +++ ql/src/test/queries/clientpositive/alter_varchar2.q (revision 0) @@ -0,0 +1,22 @@ + +-- alter column type, with partitioned table +drop table if exists alter_varchar2; + +create table alter_varchar2 ( + c1 varchar(255) +) partitioned by (hr int); + +insert overwrite table alter_varchar2 partition (hr=1) + select value from src limit 1; + +select c1, length(c1) from alter_varchar2; + +alter table alter_varchar2 change column c1 c1 varchar(10); + +select hr, c1, length(c1) from alter_varchar2 where hr = 1; + +insert overwrite table alter_varchar2 partition (hr=2) + select key from src limit 1; + +select hr, c1, length(c1) from alter_varchar2 where hr = 1; +select hr, c1, length(c1) from alter_varchar2 where hr = 2;