You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by li...@apache.org on 2016/08/22 11:02:28 UTC
hive git commit: HIVE-14595: TimestampWritable::setTimestamp gives
wrong result when 2nd VInt exists (Rui reviewed by Xuefu)
Repository: hive
Updated Branches:
refs/heads/master 2d1f403dd -> a705bdaec
HIVE-14595: TimestampWritable::setTimestamp gives wrong result when 2nd VInt exists (Rui reviewed by Xuefu)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/a705bdae
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/a705bdae
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/a705bdae
Branch: refs/heads/master
Commit: a705bdaecf13795933cd36418a18e0121aef99aa
Parents: 2d1f403
Author: Rui Li <li...@apache.org>
Authored: Mon Aug 22 19:02:11 2016 +0800
Committer: Rui Li <sh...@cn.ibm.com>
Committed: Mon Aug 22 19:02:11 2016 +0800
----------------------------------------------------------------------
.../hadoop/hive/serde2/io/TimestampWritable.java | 15 ++-------------
.../hadoop/hive/serde2/io/TestTimestampWritable.java | 11 +++++++++++
2 files changed, 13 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/a705bdae/serde/src/java/org/apache/hadoop/hive/serde2/io/TimestampWritable.java
----------------------------------------------------------------------
diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/io/TimestampWritable.java b/serde/src/java/org/apache/hadoop/hive/serde2/io/TimestampWritable.java
index b90e576..ef7ad78 100644
--- a/serde/src/java/org/apache/hadoop/hive/serde2/io/TimestampWritable.java
+++ b/serde/src/java/org/apache/hadoop/hive/serde2/io/TimestampWritable.java
@@ -552,20 +552,9 @@ public class TimestampWritable implements WritableComparable<TimestampWritable>
}
public static void setTimestamp(Timestamp t, byte[] bytes, int offset) {
- boolean hasDecimalOrSecondVInt = hasDecimalOrSecondVInt(bytes[offset]);
- long seconds = (long) TimestampWritable.getSeconds(bytes, offset);
- int nanos = 0;
- if (hasDecimalOrSecondVInt) {
- nanos = TimestampWritable.getNanos(bytes, offset + 4);
- if (hasSecondVInt(bytes[offset + 4])) {
- seconds += LazyBinaryUtils.readVLongFromByteArray(bytes,
- offset + 4 + WritableUtils.decodeVIntSize(bytes[offset + 4]));
- }
- }
+ long seconds = getSeconds(bytes, offset);
t.setTime(seconds * 1000);
- if (nanos != 0) {
- t.setNanos(nanos);
- }
+ t.setNanos(getNanos(bytes, offset + 4));
}
public static Timestamp createTimestamp(byte[] bytes, int offset) {
http://git-wip-us.apache.org/repos/asf/hive/blob/a705bdae/serde/src/test/org/apache/hadoop/hive/serde2/io/TestTimestampWritable.java
----------------------------------------------------------------------
diff --git a/serde/src/test/org/apache/hadoop/hive/serde2/io/TestTimestampWritable.java b/serde/src/test/org/apache/hadoop/hive/serde2/io/TestTimestampWritable.java
index 7619efa..cd7a1b9 100644
--- a/serde/src/test/org/apache/hadoop/hive/serde2/io/TestTimestampWritable.java
+++ b/serde/src/test/org/apache/hadoop/hive/serde2/io/TestTimestampWritable.java
@@ -493,4 +493,15 @@ public class TestTimestampWritable {
}
}
+ @Test
+ public void testSetTimestamp() {
+ // make sure we need a 2nd VInt
+ Timestamp t1 = new Timestamp((long) Integer.MAX_VALUE * 1000 + 1234);
+ TimestampWritable writable = new TimestampWritable(t1);
+ byte[] bytes = writable.getBytes();
+ Timestamp t2 = new Timestamp(0);
+ TimestampWritable.setTimestamp(t2, bytes, 0);
+ assertEquals(t1, t2);
+ }
+
}