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

Method InitializeLevelDecoders

cpp/src/parquet/column_reader.cc:778–815  ·  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

776 // initialize the level decoders and return the number of encoded level bytes.
777 // The return value helps determine the number of bytes in the encoded data.
778 int64_t InitializeLevelDecoders(const DataPage& page,
779 Encoding::type repetition_level_encoding,
780 Encoding::type definition_level_encoding) {
781 // Read a data page.
782 num_buffered_values_ = page.num_values();
783
784 // Have not decoded any values from the data page yet
785 num_decoded_values_ = 0;
786
787 const uint8_t* buffer = page.data();
788 int32_t levels_byte_size = 0;
789 int32_t max_size = page.size();
790
791 // Data page Layout: Repetition Levels - Definition Levels - encoded values.
792 // Levels are encoded as rle or bit-packed.
793 // Init repetition levels
794 if (max_rep_level_ > 0) {
795 int32_t rep_levels_bytes = repetition_level_decoder_.SetData(
796 repetition_level_encoding, max_rep_level_,
797 static_cast<int>(num_buffered_values_), buffer, max_size);
798 buffer += rep_levels_bytes;
799 levels_byte_size += rep_levels_bytes;
800 max_size -= rep_levels_bytes;
801 }
802 // TODO figure a way to set max_def_level_ to 0
803 // if the initial value is invalid
804
805 // Init definition levels
806 if (max_def_level_ > 0) {
807 int32_t def_levels_bytes = definition_level_decoder_.SetData(
808 definition_level_encoding, max_def_level_,
809 static_cast<int>(num_buffered_values_), buffer, max_size);
810 levels_byte_size += def_levels_bytes;
811 max_size -= def_levels_bytes;
812 }
813
814 return levels_byte_size;
815 }
816
817 int64_t InitializeLevelDecodersV2(const DataPageV2& page) {
818 // 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