diff --git a/common/src/java/org/apache/hadoop/hive/common/type/HiveBaseChar.java b/common/src/java/org/apache/hadoop/hive/common/type/HiveBaseChar.java index 3514726..53684e7 100644 --- a/common/src/java/org/apache/hadoop/hive/common/type/HiveBaseChar.java +++ b/common/src/java/org/apache/hadoop/hive/common/type/HiveBaseChar.java @@ -38,6 +38,9 @@ public void setValue(HiveBaseChar val, int maxLength) { } public static String enforceMaxLength(String val, int maxLength) { + if (val == null) { + return null; + } String value = val; if (maxLength > 0) { @@ -52,6 +55,9 @@ public static String enforceMaxLength(String val, int maxLength) { } public static String getPaddedValue(String val, int maxLength) { + if (val == null) { + return null; + } if (maxLength < 0) { return val; } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveCharObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveCharObjectInspector.java index f429709..aa25d4a 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveCharObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveCharObjectInspector.java @@ -49,7 +49,13 @@ public HiveCharWritable getPrimitiveWritableObject(Object o) { if (o == null) { return null; } - return getWritableWithParams((HiveChar) o); + HiveChar var; + if (o instanceof String) { + var = new HiveChar((String) o, getMaxLength()); + } else { + var = (HiveChar) o; + } + return getWritableWithParams(var); } private HiveChar getPrimitiveWithParams(HiveChar val) { diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveVarcharObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveVarcharObjectInspector.java index a8e34ff..7a6ce7a 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveVarcharObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaHiveVarcharObjectInspector.java @@ -51,7 +51,13 @@ public HiveVarcharWritable getPrimitiveWritableObject(Object o) { if (o == null) { return null; } - return getWritableWithParams((HiveVarchar) o); + HiveVarchar var; + if (o instanceof String) { + var= new HiveVarchar((String)o, getMaxLength()); + } else { + var = (HiveVarchar)o; + } + return getWritableWithParams(var); } @Override diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java index 5eb41d5..b3c60cd 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java @@ -514,7 +514,7 @@ public Object convert(Object input) { PrimitiveObjectInspector inputOI; SettableHiveVarcharObjectInspector outputOI; - HiveVarcharWritable hc; + Object hc; public HiveVarcharConverter(PrimitiveObjectInspector inputOI, SettableHiveVarcharObjectInspector outputOI) { @@ -528,7 +528,7 @@ public HiveVarcharConverter(PrimitiveObjectInspector inputOI, //if (typeParams == null) { // throw new RuntimeException("varchar type used without type params"); //} - hc = new HiveVarcharWritable(); + hc = outputOI.create(new HiveVarchar()); } @Override @@ -551,13 +551,13 @@ public Object convert(Object input) { public static class HiveCharConverter implements Converter { PrimitiveObjectInspector inputOI; SettableHiveCharObjectInspector outputOI; - HiveCharWritable hc; + Object hc; public HiveCharConverter(PrimitiveObjectInspector inputOI, SettableHiveCharObjectInspector outputOI) { this.inputOI = inputOI; this.outputOI = outputOI; - hc = new HiveCharWritable(); + hc = outputOI.create(new HiveChar()); } @Override