From cdaca54aa60bd3f68d21fd6ddfcbca592565e142 Mon Sep 17 00:00:00 2001 From: Owen O'Malley Date: Tue, 6 Dec 2016 14:54:28 -0800 Subject: [PATCH] HIVE-15375. Backport ORC-115 to Hive. --- .../hive/ql/exec/vector/BytesColumnVector.java | 2 +- .../ql/exec/vector/TestStructColumnVector.java | 36 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/BytesColumnVector.java storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/BytesColumnVector.java index 3caa584..552982c 100644 --- storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/BytesColumnVector.java +++ storage-api/src/java/org/apache/hadoop/hive/ql/exec/vector/BytesColumnVector.java @@ -387,7 +387,7 @@ public void stringifyValue(StringBuilder buffer, int row) { } if (noNulls || !isNull[row]) { buffer.append('"'); - buffer.append(new String(this.buffer, start[row], length[row])); + buffer.append(new String(vector[row], start[row], length[row])); buffer.append('"'); } else { buffer.append("null"); diff --git storage-api/src/test/org/apache/hadoop/hive/ql/exec/vector/TestStructColumnVector.java storage-api/src/test/org/apache/hadoop/hive/ql/exec/vector/TestStructColumnVector.java index 41b4b65..9ac7ba0 100644 --- storage-api/src/test/org/apache/hadoop/hive/ql/exec/vector/TestStructColumnVector.java +++ storage-api/src/test/org/apache/hadoop/hive/ql/exec/vector/TestStructColumnVector.java @@ -20,6 +20,10 @@ import org.junit.Test; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.sql.Timestamp; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -92,4 +96,36 @@ public void testSet() throws Exception { assertEquals(false, input1.isRepeating); assertEquals(true, input.noNulls); } + + @Test + public void testStringify() throws IOException { + VectorizedRowBatch batch = new VectorizedRowBatch(2); + LongColumnVector x1 = new LongColumnVector(); + TimestampColumnVector x2 = new TimestampColumnVector(); + StructColumnVector x = new StructColumnVector(1024, x1, x2); + BytesColumnVector y = new BytesColumnVector(); + batch.cols[0] = x; + batch.cols[1] = y; + batch.reset(); + Timestamp ts = Timestamp.valueOf("2000-01-01 00:00:00"); + for(int r=0; r < 10; ++r) { + batch.size += 1; + x1.vector[r] = 3 * r; + ts.setTime(ts.getTime() + 1000); + x2.set(r, ts); + byte[] buffer = ("value " + r).getBytes(StandardCharsets.UTF_8); + y.setRef(r, buffer, 0, buffer.length); + } + final String EXPECTED = ("[[0, 2000-01-01 00:00:01.0], \"value 0\"]\n" + + "[[3, 2000-01-01 00:00:02.0], \"value 1\"]\n" + + "[[6, 2000-01-01 00:00:03.0], \"value 2\"]\n" + + "[[9, 2000-01-01 00:00:04.0], \"value 3\"]\n" + + "[[12, 2000-01-01 00:00:05.0], \"value 4\"]\n" + + "[[15, 2000-01-01 00:00:06.0], \"value 5\"]\n" + + "[[18, 2000-01-01 00:00:07.0], \"value 6\"]\n" + + "[[21, 2000-01-01 00:00:08.0], \"value 7\"]\n" + + "[[24, 2000-01-01 00:00:09.0], \"value 8\"]\n" + + "[[27, 2000-01-01 00:00:10.0], \"value 9\"]"); + assertEquals(EXPECTED, batch.toString()); + } } -- 2.10.2