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

Method ShouldSkipPage

cpp/src/parquet/column_reader.cc:347–394  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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