diff --git a/paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/VectorizedDeltaLengthByteArrayReader.java b/paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/VectorizedDeltaLengthByteArrayReader.java index 7dfaf868a896..97df39ac5718 100644 --- a/paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/VectorizedDeltaLengthByteArrayReader.java +++ b/paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/VectorizedDeltaLengthByteArrayReader.java @@ -58,7 +58,7 @@ public void readBinary(int total, WritableBytesVector c, int rowId) { ByteBufferOutputWriter outputWriter = ByteBufferOutputWriter::writeArrayByteBuffer; int length; for (int i = 0; i < total; i++) { - length = lengthsVector.getInt(rowId + i); + length = lengthsVector.getInt(currentRow + i); try { buffer = in.slice(length); } catch (EOFException e) { diff --git a/paimon-format/src/test/java/org/apache/paimon/format/parquet/reader/DeltaLengthByteArrayEncodingTest.java b/paimon-format/src/test/java/org/apache/paimon/format/parquet/reader/DeltaLengthByteArrayEncodingTest.java index 1c73dcca7723..f6cd6e891b4f 100644 --- a/paimon-format/src/test/java/org/apache/paimon/format/parquet/reader/DeltaLengthByteArrayEncodingTest.java +++ b/paimon-format/src/test/java/org/apache/paimon/format/parquet/reader/DeltaLengthByteArrayEncodingTest.java @@ -57,6 +57,22 @@ public void testSerialization() throws Exception { readAndValidate(reader, writer.getBytes().toInputStream(), values.length, values); } + @Test + public void testReadOnePageAcrossVectorBatches() throws Exception { + String[] values = {"a", "bbbb", "ccccc"}; + writeData(writer, values); + reader.initFromPage(values.length, writer.getBytes().toInputStream()); + HeapBytesVector vector = new HeapBytesVector(values.length); + + reader.readBinary(1, vector, 0); + assertArrayEquals(values[0].getBytes(), vector.getBytes(0).getBytes()); + + vector.reset(); + reader.readBinary(2, vector, 0); + assertArrayEquals(values[1].getBytes(), vector.getBytes(0).getBytes()); + assertArrayEquals(values[2].getBytes(), vector.getBytes(1).getBytes()); + } + @Test public void testRandomStrings() throws Exception { String[] values = Utils.getRandomStringSamples(1000, 32);