diff --git a/parquet-column/src/main/java/org/apache/parquet/column/values/deltastrings/DeltaByteArrayReader.java b/parquet-column/src/main/java/org/apache/parquet/column/values/deltastrings/DeltaByteArrayReader.java index c2cfd6d311..742b515dc8 100644 --- a/parquet-column/src/main/java/org/apache/parquet/column/values/deltastrings/DeltaByteArrayReader.java +++ b/parquet-column/src/main/java/org/apache/parquet/column/values/deltastrings/DeltaByteArrayReader.java @@ -55,8 +55,8 @@ public void initFromPage(int valueCount, ByteBuffer page, int offset) @Override public void skip() { - prefixLengthReader.skip(); - suffixReader.skip(); + // read the next value to skip so that previous is correct. + readBytes(); } @Override diff --git a/parquet-column/src/test/java/org/apache/parquet/column/values/deltastrings/TestDeltaByteArray.java b/parquet-column/src/test/java/org/apache/parquet/column/values/deltastrings/TestDeltaByteArray.java index 770f4dcc5b..4f8f40c179 100644 --- a/parquet-column/src/test/java/org/apache/parquet/column/values/deltastrings/TestDeltaByteArray.java +++ b/parquet-column/src/test/java/org/apache/parquet/column/values/deltastrings/TestDeltaByteArray.java @@ -19,6 +19,7 @@ package org.apache.parquet.column.values.deltastrings; import java.io.IOException; +import java.nio.ByteBuffer; import org.junit.Test; import org.junit.Assert; @@ -49,6 +50,13 @@ public void testRandomStrings() throws Exception { assertReadWrite(writer, reader, randvalues); } + @Test + public void testRandomStringsWithSkip() throws Exception { + DeltaByteArrayWriter writer = new DeltaByteArrayWriter(64 * 1024, 64 * 1024, new DirectByteBufferAllocator()); + DeltaByteArrayReader reader = new DeltaByteArrayReader(); + assertReadWriteWithSkip(writer, reader, randvalues); + } + @Test public void testLengths() throws IOException { DeltaByteArrayWriter writer = new DeltaByteArrayWriter(64 * 1024, 64 * 1024, new DirectByteBufferAllocator()); @@ -81,6 +89,16 @@ private void assertReadWrite(DeltaByteArrayWriter writer, DeltaByteArrayReader r } } + private void assertReadWriteWithSkip(DeltaByteArrayWriter writer, DeltaByteArrayReader reader, String[] vals) throws Exception { + Utils.writeData(writer, vals); + + reader.initFromPage(vals.length, writer.getBytes().toByteBuffer(), 0); + for (int i = 0; i < vals.length; i += 2) { + Assert.assertEquals(Binary.fromString(vals[i]), reader.readBytes()); + reader.skip(); + } + } + @Test public void testWriterReset() throws Exception { DeltaByteArrayWriter writer = new DeltaByteArrayWriter(64 * 1024, 64 * 1024, new DirectByteBufferAllocator());