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);

Reply via email to