diff --git ql/src/test/queries/clientpositive/partition_char.q ql/src/test/queries/clientpositive/partition_char.q new file mode 100644 index 0000000000000000000000000000000000000000..a42e0912197a3d2293af8345408e7cbd6eea1742 --- /dev/null +++ ql/src/test/queries/clientpositive/partition_char.q @@ -0,0 +1,10 @@ +drop table partition_char_1; + +create table partition_char_1 (key string, value char(20)) partitioned by (dt char(10), region int); + +insert overwrite table partition_char_1 partition(dt='2000-01-01', region=1) + select * from src tablesample (10 rows); + +select * from partition_char_1 limit 1; + +drop table partition_char_1; diff --git ql/src/test/results/clientpositive/partition_char.q.out ql/src/test/results/clientpositive/partition_char.q.out new file mode 100644 index 0000000000000000000000000000000000000000..763e5d4c4a4c40a5321cbc205b9a23440564dcea --- /dev/null +++ ql/src/test/results/clientpositive/partition_char.q.out @@ -0,0 +1,43 @@ +PREHOOK: query: drop table partition_char_1 +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table partition_char_1 +POSTHOOK: type: DROPTABLE +PREHOOK: query: create table partition_char_1 (key string, value char(20)) partitioned by (dt char(10), region int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@partition_char_1 +POSTHOOK: query: create table partition_char_1 (key string, value char(20)) partitioned by (dt char(10), region int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@partition_char_1 +PREHOOK: query: insert overwrite table partition_char_1 partition(dt='2000-01-01', region=1) + select * from src tablesample (10 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@partition_char_1@dt=2000-01-01/region=1 +POSTHOOK: query: insert overwrite table partition_char_1 partition(dt='2000-01-01', region=1) + select * from src tablesample (10 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@partition_char_1@dt=2000-01-01/region=1 +POSTHOOK: Lineage: partition_char_1 PARTITION(dt=2000-01-01,region=1).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_char_1 PARTITION(dt=2000-01-01,region=1).value EXPRESSION [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: select * from partition_char_1 limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_char_1 +PREHOOK: Input: default@partition_char_1@dt=2000-01-01/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select * from partition_char_1 limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_char_1 +POSTHOOK: Input: default@partition_char_1@dt=2000-01-01/region=1 +#### A masked pattern was here #### +238 val_238 2000-01-01 1 +PREHOOK: query: drop table partition_char_1 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@partition_char_1 +PREHOOK: Output: default@partition_char_1 +POSTHOOK: query: drop table partition_char_1 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@partition_char_1 +POSTHOOK: Output: default@partition_char_1 diff --git serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveCharObjectInspector.java serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveCharObjectInspector.java index ff114c04f396fa3b51aa6c065ae019dac2db3a81..cdce8daf9d0d1328ca29a096997f36592b7700c3 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveCharObjectInspector.java +++ serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveCharObjectInspector.java @@ -64,15 +64,16 @@ private HiveCharWritable getWritableWithParams(HiveChar val) { } public Object set(Object o, HiveChar value) { - HiveChar setValue = (HiveChar) o; - setValue.setValue(value, getMaxLength()); - return setValue; + if (BaseCharUtils.doesPrimitiveMatchTypeParams(value, + (CharTypeInfo)typeInfo)) { + return value; + } else { + return new HiveChar(value, getMaxLength()); + } } public Object set(Object o, String value) { - HiveChar setValue = (HiveChar) o; - setValue.setValue(value, getMaxLength()); - return setValue; + return new HiveChar(value, getMaxLength()); } public Object create(HiveChar value) {