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

Method InitializeLevelDecoders

cpp/src/parquet/column_reader.cc:763–800  ·  view source on GitHub ↗

If the data page includes repetition and definition levels, we initialize the level decoders and return the number of encoded level bytes. The return value helps determine the number of bytes in the encoded data.

Source from the content-addressed store, hash-verified

761 // initialize the level decoders and return the number of encoded level bytes.
762 // The return value helps determine the number of bytes in the encoded data.
763 int64_t InitializeLevelDecoders(const DataPage& page,
764 Encoding::type repetition_level_encoding,
765 Encoding::type definition_level_encoding) {
766 // Read a data page.
767 num_buffered_values_ = page.num_values();
768
769 // Have not decoded any values from the data page yet
770 num_decoded_values_ = 0;
771
772 const uint8_t* buffer = page.data();
773 int32_t levels_byte_size = 0;
774 int32_t max_size = page.size();
775
776 // Data page Layout: Repetition Levels - Definition Levels - encoded values.
777 // Levels are encoded as rle or bit-packed.
778 // Init repetition levels
779 if (max_rep_level_ > 0) {
780 int32_t rep_levels_bytes = repetition_level_decoder_.SetData(
781 repetition_level_encoding, max_rep_level_,
782 static_cast<int>(num_buffered_values_), buffer, max_size);
783 buffer += rep_levels_bytes;
784 levels_byte_size += rep_levels_bytes;
785 max_size -= rep_levels_bytes;
786 }
787 // TODO figure a way to set max_def_level_ to 0
788 // if the initial value is invalid
789
790 // Init definition levels
791 if (max_def_level_ > 0) {
792 int32_t def_levels_bytes = definition_level_decoder_.SetData(
793 definition_level_encoding, max_def_level_,
794 static_cast<int>(num_buffered_values_), buffer, max_size);
795 levels_byte_size += def_levels_bytes;
796 max_size -= def_levels_bytes;
797 }
798
799 return levels_byte_size;
800 }
801
802 int64_t InitializeLevelDecodersV2(const DataPageV2& page) {
803 // Read a data page.

Callers

nothing calls this directly

Calls 4

num_valuesMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45
SetDataMethod · 0.45

Tested by

no test coverage detected