From 6f603558869153bd249836004e9c78af7d3fd5fd Mon Sep 17 00:00:00 2001 From: wangd Date: Sun, 29 Sep 2024 01:47:31 +0800 Subject: [PATCH] Fix the length of offsets array in parquet long decimal value decoders --- .../decoders/delta/BinaryLongDecimalDeltaValuesDecoder.java | 2 +- .../decoders/plain/BinaryLongDecimalPlainValuesDecoder.java | 2 +- .../decoders/rle/LongDecimalRLEDictionaryValuesDecoder.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/delta/BinaryLongDecimalDeltaValuesDecoder.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/delta/BinaryLongDecimalDeltaValuesDecoder.java index 676ca0fadcebd..fb08cd047e0cc 100644 --- a/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/delta/BinaryLongDecimalDeltaValuesDecoder.java +++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/delta/BinaryLongDecimalDeltaValuesDecoder.java @@ -49,7 +49,7 @@ public void readNext(long[] values, int offset, int length) BinaryValuesDecoder.ValueBuffer valueBuffer = delegate.readNext(length); int bufferSize = valueBuffer.getBufferSize(); byte[] byteBuffer = new byte[bufferSize]; - int[] offsets = new int[bufferSize + 1]; + int[] offsets = new int[length + 1]; delegate.readIntoBuffer(byteBuffer, 0, offsets, 0, valueBuffer); for (int i = 0; i < length; i++) { diff --git a/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/plain/BinaryLongDecimalPlainValuesDecoder.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/plain/BinaryLongDecimalPlainValuesDecoder.java index 81f86f376c42e..4af38a23018c5 100644 --- a/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/plain/BinaryLongDecimalPlainValuesDecoder.java +++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/plain/BinaryLongDecimalPlainValuesDecoder.java @@ -45,7 +45,7 @@ public void readNext(long[] values, int offset, int length) PlainValueBuffer valueBuffer = (PlainValueBuffer) delegate.readNext(length); int bufferSize = valueBuffer.getBufferSize(); byte[] byteBuffer = new byte[bufferSize]; - int[] offsets = new int[bufferSize + 1]; + int[] offsets = new int[length + 1]; delegate.readIntoBuffer(byteBuffer, 0, offsets, 0, valueBuffer); for (int i = 0; i < length; i++) { diff --git a/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/rle/LongDecimalRLEDictionaryValuesDecoder.java b/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/rle/LongDecimalRLEDictionaryValuesDecoder.java index b130aa416719d..05ced8bc80107 100644 --- a/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/rle/LongDecimalRLEDictionaryValuesDecoder.java +++ b/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/decoders/rle/LongDecimalRLEDictionaryValuesDecoder.java @@ -46,7 +46,7 @@ public void readNext(long[] values, int offset, int length) ValueBuffer valueBuffer = delegate.readNext(length); int bufferSize = valueBuffer.getBufferSize(); byte[] byteBuffer = new byte[bufferSize]; - int[] offsets = new int[bufferSize + 1]; + int[] offsets = new int[length + 1]; delegate.readIntoBuffer(byteBuffer, 0, offsets, 0, valueBuffer); for (int i = 0; i < length; i++) {