Skip to content

Commit 044de16

Browse files
rdbluejulienledem
authored andcommitted
PARQUET-623: Fix DeltaByteArrayReader#skip.
Previously, this passed the skip to the underlying readers, but would not update previous and would corrupt values or cause exceptions. Author: Ryan Blue <blue@apache.org> Closes #366 from rdblue/PARQUET-623-fix-delta-byte-array-skip and squashes the following commits: f85800c [Ryan Blue] PARQUET-623: Fix DeltaByteArrayReader#skip.
1 parent 6dad1e3 commit 044de16

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

parquet-column/src/main/java/org/apache/parquet/column/values/deltastrings/DeltaByteArrayReader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ public void initFromPage(int valueCount, ByteBuffer page, int offset)
5555

5656
@Override
5757
public void skip() {
58-
prefixLengthReader.skip();
59-
suffixReader.skip();
58+
// read the next value to skip so that previous is correct.
59+
readBytes();
6060
}
6161

6262
@Override

parquet-column/src/test/java/org/apache/parquet/column/values/deltastrings/TestDeltaByteArray.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.parquet.column.values.deltastrings;
2020

2121
import java.io.IOException;
22+
import java.nio.ByteBuffer;
2223

2324
import org.junit.Test;
2425
import org.junit.Assert;
@@ -49,6 +50,13 @@ public void testRandomStrings() throws Exception {
4950
assertReadWrite(writer, reader, randvalues);
5051
}
5152

53+
@Test
54+
public void testRandomStringsWithSkip() throws Exception {
55+
DeltaByteArrayWriter writer = new DeltaByteArrayWriter(64 * 1024, 64 * 1024, new DirectByteBufferAllocator());
56+
DeltaByteArrayReader reader = new DeltaByteArrayReader();
57+
assertReadWriteWithSkip(writer, reader, randvalues);
58+
}
59+
5260
@Test
5361
public void testLengths() throws IOException {
5462
DeltaByteArrayWriter writer = new DeltaByteArrayWriter(64 * 1024, 64 * 1024, new DirectByteBufferAllocator());
@@ -81,6 +89,16 @@ private void assertReadWrite(DeltaByteArrayWriter writer, DeltaByteArrayReader r
8189
}
8290
}
8391

92+
private void assertReadWriteWithSkip(DeltaByteArrayWriter writer, DeltaByteArrayReader reader, String[] vals) throws Exception {
93+
Utils.writeData(writer, vals);
94+
95+
reader.initFromPage(vals.length, writer.getBytes().toByteBuffer(), 0);
96+
for (int i = 0; i < vals.length; i += 2) {
97+
Assert.assertEquals(Binary.fromString(vals[i]), reader.readBytes());
98+
reader.skip();
99+
}
100+
}
101+
84102
@Test
85103
public void testWriterReset() throws Exception {
86104
DeltaByteArrayWriter writer = new DeltaByteArrayWriter(64 * 1024, 64 * 1024, new DirectByteBufferAllocator());

0 commit comments

Comments
 (0)