This is an automated email from the ASF dual-hosted git repository.
JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new b3d9dfc715 [format] Fix cumulative DELTA_BINARY_PACKED read count
(#9137)
b3d9dfc715 is described below
commit b3d9dfc7159c674855c9dcc536197aea20df1e13
Author: YeJunHao <[email protected]>
AuthorDate: Mon Aug 10 12:59:17 2026 +0800
[format] Fix cumulative DELTA_BINARY_PACKED read count (#9137)
---
.../reader/VectorizedDeltaBinaryPackedReader.java | 2 +-
.../format/parquet/reader/DeltaEncodingTest.java | 42 ++++++++++++++++++++++
2 files changed, 43 insertions(+), 1 deletion(-)
diff --git
a/paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/VectorizedDeltaBinaryPackedReader.java
b/paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/VectorizedDeltaBinaryPackedReader.java
index 49dc914bba..180ee7f642 100644
---
a/paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/VectorizedDeltaBinaryPackedReader.java
+++
b/paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/VectorizedDeltaBinaryPackedReader.java
@@ -201,7 +201,7 @@ public class VectorizedDeltaBinaryPackedReader extends
VectorizedReaderBase {
rowId += n;
remaining -= n;
}
- valuesRead = total - remaining;
+ valuesRead += total;
}
/**
diff --git
a/paimon-format/src/test/java/org/apache/paimon/format/parquet/reader/DeltaEncodingTest.java
b/paimon-format/src/test/java/org/apache/paimon/format/parquet/reader/DeltaEncodingTest.java
index 0a194cf061..75377b0851 100644
---
a/paimon-format/src/test/java/org/apache/paimon/format/parquet/reader/DeltaEncodingTest.java
+++
b/paimon-format/src/test/java/org/apache/paimon/format/parquet/reader/DeltaEncodingTest.java
@@ -188,6 +188,48 @@ abstract class DeltaEncodingTest<T extends Number, F
extends WritableColumnVecto
assertTrue(e.getMessage().startsWith("No more values to read."));
}
+ @Test
+ public void testReadCountAccumulatesAcrossCalls() throws IOException {
+ T[] data = allocDataArray(blockSize + 1);
+ for (int i = 0; i < data.length; i++) {
+ setValue(data, i, i * 32);
+ }
+ writeData(data);
+ reader = new VectorizedDeltaBinaryPackedReader();
+ reader.initFromPage(data.length, writer.getBytes().toInputStream());
+ writableColumnVector = getWritableColumnVector(data.length);
+
+ for (int i = 0; i < data.length; i++) {
+ readData(1, writableColumnVector, i);
+ assertTrue(compareValues(i * 32,
readDataFromVector(writableColumnVector, i)));
+ }
+
+ ParquetDecodingException e =
+ assertThrows(
+ ParquetDecodingException.class,
+ () -> readData(1, writableColumnVector, data.length));
+ assertTrue(e.getMessage().startsWith("No more values to read."));
+ }
+
+ @Test
+ public void testZeroLengthReadDoesNotResetPosition() throws IOException {
+ T[] data = allocDataArray(3);
+ for (int i = 0; i < data.length; i++) {
+ setValue(data, i, i * 32);
+ }
+ writeData(data);
+ reader = new VectorizedDeltaBinaryPackedReader();
+ reader.initFromPage(data.length, writer.getBytes().toInputStream());
+ writableColumnVector = getWritableColumnVector(data.length);
+
+ readData(1, writableColumnVector, 0);
+ readData(0, writableColumnVector, 1);
+ readData(1, writableColumnVector, 1);
+
+ assertTrue(compareValues(0, readDataFromVector(writableColumnVector,
0)));
+ assertTrue(compareValues(32, readDataFromVector(writableColumnVector,
1)));
+ }
+
@Test
public void testSkip() throws IOException {
T[] data = allocDataArray(5 * blockSize + 1);