| 1317 | class DictEncoding : public TestArrowBuilderDecoding { |
| 1318 | public: |
| 1319 | void SetupEncoderDecoder() override { |
| 1320 | auto node = schema::ByteArray("name"); |
| 1321 | descr_ = std::make_unique<ColumnDescriptor>(node, 0, 0); |
| 1322 | encoder_ = MakeTypedEncoder<ByteArrayType>(Encoding::PLAIN, /*use_dictionary=*/true, |
| 1323 | descr_.get()); |
| 1324 | if (null_count_ == 0) { |
| 1325 | ASSERT_NO_THROW(encoder_->Put(input_data_.data(), num_values_)); |
| 1326 | } else { |
| 1327 | ASSERT_NO_THROW( |
| 1328 | encoder_->PutSpaced(input_data_.data(), num_values_, valid_bits_, 0)); |
| 1329 | } |
| 1330 | buffer_ = encoder_->FlushValues(); |
| 1331 | |
| 1332 | auto dict_encoder = dynamic_cast<DictEncoder<ByteArrayType>*>(encoder_.get()); |
| 1333 | ASSERT_NE(dict_encoder, nullptr); |
| 1334 | dict_buffer_ = |
| 1335 | AllocateBuffer(default_memory_pool(), dict_encoder->dict_encoded_size()); |
| 1336 | dict_encoder->WriteDict(dict_buffer_->mutable_data()); |
| 1337 | |
| 1338 | // Simulate reading the dictionary page followed by a data page |
| 1339 | plain_decoder_ = MakeTypedDecoder<ByteArrayType>(Encoding::PLAIN, descr_.get()); |
| 1340 | plain_decoder_->SetData(dict_encoder->num_entries(), dict_buffer_->data(), |
| 1341 | static_cast<int>(dict_buffer_->size())); |
| 1342 | |
| 1343 | dict_decoder_ = MakeDictDecoder<ByteArrayType>(descr_.get()); |
| 1344 | dict_decoder_->SetDict(plain_decoder_.get()); |
| 1345 | dict_decoder_->SetData(num_values_, buffer_->data(), |
| 1346 | static_cast<int>(buffer_->size())); |
| 1347 | decoder_ = dynamic_cast<ByteArrayDecoder*>(dict_decoder_.get()); |
| 1348 | } |
| 1349 | |
| 1350 | protected: |
| 1351 | std::unique_ptr<ColumnDescriptor> descr_; |
nothing calls this directly
no test coverage detected