MCPcopy Create free account
hub / github.com/apache/arrow / ShouldSkipPage

Method ShouldSkipPage

cpp/src/parquet/column_reader.cc:351–398  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

349}
350
351bool SerializedPageReader::ShouldSkipPage(EncodedStatistics* data_page_statistics) {
352 const PageType::type page_type = LoadEnumSafe(&current_page_header_.type);
353 if (page_type == PageType::DATA_PAGE) {
354 const format::DataPageHeader& header = current_page_header_.data_page_header;
355 CheckNumValuesInHeader(header.num_values);
356 *data_page_statistics = ExtractStatsFromHeader(header, stats_min_max_field_);
357 seen_num_values_ += header.num_values;
358 if (data_page_filter_) {
359 const EncodedStatistics* filter_statistics =
360 data_page_statistics->is_set() ? data_page_statistics : nullptr;
361 DataPageStats data_page_stats(filter_statistics, header.num_values,
362 /*num_rows=*/std::nullopt);
363 if (data_page_filter_(data_page_stats)) {
364 return true;
365 }
366 }
367 } else if (page_type == PageType::DATA_PAGE_V2) {
368 const format::DataPageHeaderV2& header = current_page_header_.data_page_header_v2;
369 CheckNumValuesInHeader(header.num_values);
370 if (header.num_rows < 0) {
371 throw ParquetException("Invalid page header (negative number of rows)");
372 }
373 if (header.definition_levels_byte_length < 0 ||
374 header.repetition_levels_byte_length < 0) {
375 throw ParquetException("Invalid page header (negative levels byte length)");
376 }
377 *data_page_statistics = ExtractStatsFromHeader(header, stats_min_max_field_);
378 seen_num_values_ += header.num_values;
379 if (data_page_filter_) {
380 const EncodedStatistics* filter_statistics =
381 data_page_statistics->is_set() ? data_page_statistics : nullptr;
382 DataPageStats data_page_stats(filter_statistics, header.num_values,
383 header.num_rows);
384 if (data_page_filter_(data_page_stats)) {
385 return true;
386 }
387 }
388 } else if (page_type == PageType::DICTIONARY_PAGE) {
389 const format::DictionaryPageHeader& dict_header =
390 current_page_header_.dictionary_page_header;
391 CheckNumValuesInHeader(dict_header.num_values);
392 } else {
393 // We don't know what this page type is. We're allowed to skip non-data
394 // pages.
395 return true;
396 }
397 return false;
398}
399
400std::shared_ptr<Page> SerializedPageReader::NextPage() {
401 ThriftDeserializer deserializer(properties_);

Callers

nothing calls this directly

Calls 4

LoadEnumSafeFunction · 0.85
CheckNumValuesInHeaderFunction · 0.85
ExtractStatsFromHeaderFunction · 0.85
ParquetExceptionFunction · 0.85

Tested by

no test coverage detected