| 877 | |
| 878 | template <typename T> |
| 879 | void GetDictDecoder(DictEncoder<T>* encoder, int64_t num_values, |
| 880 | std::shared_ptr<Buffer>* out_values, |
| 881 | std::shared_ptr<Buffer>* out_dict, const ColumnDescriptor* descr, |
| 882 | std::unique_ptr<TypedDecoder<T>>* out_decoder) { |
| 883 | auto decoder = MakeDictDecoder<T>(descr); |
| 884 | auto buf = encoder->FlushValues(); |
| 885 | auto dict_buf = AllocateBuffer(default_memory_pool(), encoder->dict_encoded_size()); |
| 886 | encoder->WriteDict(dict_buf->mutable_data()); |
| 887 | |
| 888 | auto dict_decoder = MakeTypedDecoder<T>(Encoding::PLAIN, descr); |
| 889 | dict_decoder->SetData(encoder->num_entries(), dict_buf->data(), |
| 890 | static_cast<int>(dict_buf->size())); |
| 891 | |
| 892 | decoder->SetData(static_cast<int>(num_values), buf->data(), |
| 893 | static_cast<int>(buf->size())); |
| 894 | decoder->SetDict(dict_decoder.get()); |
| 895 | |
| 896 | *out_values = buf; |
| 897 | *out_dict = dict_buf; |
| 898 | ASSERT_NE(decoder, nullptr); |
| 899 | auto released = dynamic_cast<TypedDecoder<T>*>(decoder.release()); |
| 900 | ASSERT_NE(released, nullptr); |
| 901 | *out_decoder = std::unique_ptr<TypedDecoder<T>>(released); |
| 902 | } |
| 903 | |
| 904 | template <typename ParquetType> |
| 905 | class EncodingAdHocTyped : public ::testing::Test { |
no test coverage detected