From 1b03a782b91f97abd2385985e0f89f78548eed16 Mon Sep 17 00:00:00 2001 From: Dmitry Stasenko Date: Thu, 7 Dec 2023 02:39:35 +0300 Subject: [PATCH] Reserve memory in builder before loop. Do not read validity bits when we don't have nulls --- cpp/src/parquet/column_reader.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/cpp/src/parquet/column_reader.cc b/cpp/src/parquet/column_reader.cc index ecc48811e46..051deb0259f 100644 --- a/cpp/src/parquet/column_reader.cc +++ b/cpp/src/parquet/column_reader.cc @@ -2065,8 +2065,9 @@ class FLBARecordReader : public TypedRecordReader, this->current_decoder_->Decode(values, static_cast(values_to_read)); CheckNumberDecoded(num_decoded, values_to_read); + PARQUET_THROW_NOT_OK(builder_->Reserve(num_decoded)); for (int64_t i = 0; i < num_decoded; i++) { - PARQUET_THROW_NOT_OK(builder_->Append(values[i].ptr)); + builder_->UnsafeAppend(values[i].ptr); } ResetValues(); } @@ -2081,11 +2082,13 @@ class FLBARecordReader : public TypedRecordReader, valid_bits, valid_bits_offset); ARROW_DCHECK_EQ(num_decoded, values_to_read); + PARQUET_THROW_NOT_OK(builder_->Reserve(num_decoded)); for (int64_t i = 0; i < num_decoded; i++) { - if (::arrow::bit_util::GetBit(valid_bits, valid_bits_offset + i)) { - PARQUET_THROW_NOT_OK(builder_->Append(values[i].ptr)); + if (null_count == 0 || + ::arrow::bit_util::GetBit(valid_bits, valid_bits_offset + i)) { + builder_->UnsafeAppend(values[i].ptr); } else { - PARQUET_THROW_NOT_OK(builder_->AppendNull()); + builder_->UnsafeAppendNull(); } } ResetValues();