diff --git serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java index 1baf359..d307b0f 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java +++ serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorUtils.java @@ -69,9 +69,7 @@ import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.TimestampObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector; -import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils; -import org.apache.hadoop.hive.shims.ShimLoader; import org.apache.hadoop.io.BytesWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.util.StringUtils; @@ -108,7 +106,7 @@ public static ObjectInspector getWritableObjectInspector(ObjectInspector oi) { PrimitiveObjectInspector poi = (PrimitiveObjectInspector) oi; if (!(poi instanceof AbstractPrimitiveWritableObjectInspector)) { return PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector( - (PrimitiveTypeInfo)poi.getTypeInfo()); + poi.getTypeInfo()); } } return oi; @@ -292,24 +290,21 @@ public static Object copyToStandardObject( switch (oi.getCategory()) { case PRIMITIVE: { PrimitiveObjectInspector loi = (PrimitiveObjectInspector) oi; - switch (objectInspectorOption) { - case DEFAULT: { - if (loi.preferWritable()) { - result = loi.getPrimitiveWritableObject(loi.copyObject(o)); - } else { - result = loi.getPrimitiveJavaObject(o); - } - break; + if (objectInspectorOption == ObjectInspectorCopyOption.DEFAULT) { + objectInspectorOption = loi.preferWritable() ? + ObjectInspectorCopyOption.WRITABLE : ObjectInspectorCopyOption.JAVA; } - case JAVA: { + switch (objectInspectorOption) { + case JAVA: result = loi.getPrimitiveJavaObject(o); + if (loi.getPrimitiveCategory() == PrimitiveObjectInspector.PrimitiveCategory.TIMESTAMP) { + result = PrimitiveObjectInspectorFactory.javaTimestampObjectInspector.copyObject(result); + } break; - } - case WRITABLE: { + case WRITABLE: result = loi.getPrimitiveWritableObject(loi.copyObject(o)); break; } - } break; } case LIST: { diff --git serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaBinaryObjectInspector.java serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaBinaryObjectInspector.java index 6746edc..3653013 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaBinaryObjectInspector.java +++ serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaBinaryObjectInspector.java @@ -32,17 +32,6 @@ } @Override - public byte[] copyObject(Object o) { - if (null == o){ - return null; - } - byte[] incoming = (byte[])o; - byte[] outgoing = new byte[incoming.length]; - System.arraycopy(incoming, 0, outgoing, 0, incoming.length); - return outgoing; - } - - @Override public BytesWritable getPrimitiveWritableObject(Object o) { return o == null ? null : new BytesWritable((byte[])o); } diff --git serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaTimestampObjectInspector.java serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaTimestampObjectInspector.java index 165ccf7..509189e 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaTimestampObjectInspector.java +++ serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaTimestampObjectInspector.java @@ -39,6 +39,17 @@ public Timestamp getPrimitiveJavaObject(Object o) { return o == null ? null : (Timestamp) o; } + @Override + public Object copyObject(Object o) { + if (o == null) { + return null; + } + Timestamp source = (Timestamp) o; + Timestamp copy = new Timestamp(source.getTime()); + copy.setNanos(source.getNanos()); + return copy; + } + public Timestamp get(Object o) { return (Timestamp) o; }