Skip to content

Commit 6a540de

Browse files
committed
unnesting buffer building
1 parent 1d32195 commit 6a540de

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

cpp/src/parquet/file_reader.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,7 @@ class SerializedFile : public ParquetFileReader::Contents {
441441
PARQUET_ASSIGN_OR_THROW(
442442
auto footer_buffer,
443443
source_->ReadAt(source_size_ - footer_read_size, footer_read_size));
444+
uint32_t metadata_len = ParseFooterLength(footer_buffer, footer_read_size);
444445
if (properties_.read_flatbuffer_metadata_if_present()) {
445446
// Try to extract flatbuffer metadata from footer
446447
std::string flatbuffer_data;
@@ -463,14 +464,13 @@ class SerializedFile : public ParquetFileReader::Contents {
463464
auto thrift_metadata =
464465
std::make_unique<format::FileMetaData>(FromFlatbuffer(fb_metadata));
465466
file_metadata_ =
466-
FileMetaData::Make(std::move(thrift_metadata), *result, properties_);
467+
FileMetaData::Make(std::move(thrift_metadata), metadata_len, properties_);
467468
return;
468469
}
469470
}
470471
// If extraction failed or returned 0 (no flatbuffer), fall through to standard
471472
// parsing
472473
}
473-
uint32_t metadata_len = ParseFooterLength(footer_buffer, footer_read_size);
474474
int64_t metadata_start = source_size_ - kFooterSize - metadata_len;
475475

476476
std::shared_ptr<::arrow::Buffer> metadata_buffer;

cpp/src/parquet/metadata3.cc

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -981,6 +981,14 @@ struct FlatbufferConverter {
981981
std::optional<decltype(To(cm.statistics, rg_idx, col_idx))> statistics;
982982
if (cm.__isset.statistics) statistics = To(cm.statistics, rg_idx, col_idx);
983983

984+
// Create sub-objects before starting the builder (FlatBuffers requirement).
985+
flatbuffers::Offset<format3::BloomFilterInfo> bloom_filter;
986+
if (cm.__isset.bloom_filter_offset) {
987+
bloom_filter = format3::CreateBloomFilterInfo(
988+
root, cm.bloom_filter_offset,
989+
cm.__isset.bloom_filter_length ? cm.bloom_filter_length : 0);
990+
}
991+
984992
// All offsets are relative to the row group.
985993
const auto& rg = md.row_groups[rg_idx];
986994

@@ -1000,9 +1008,6 @@ struct FlatbufferConverter {
10001008
if (statistics) b.add_statistics(*statistics);
10011009
b.add_is_fully_dict_encoded(To(cm));
10021010
if (cm.__isset.bloom_filter_offset) {
1003-
auto bloom_filter = format3::CreateBloomFilterInfo(
1004-
root, cm.bloom_filter_offset,
1005-
cm.__isset.bloom_filter_length ? cm.bloom_filter_length : 0);
10061011
b.add_bloom_filter(bloom_filter);
10071012
}
10081013

0 commit comments

Comments
 (0)