@@ -126,7 +126,8 @@ class StandardColumnWriter : public PrimitiveColumnWriter {
126126public:
127127 unique_ptr<ColumnWriterState> InitializeWriteState (duckdb_parquet::RowGroup &row_group) override {
128128 auto result = make_uniq<StandardColumnWriterState<SRC, TGT, OP>>(writer, row_group, row_group.columns .size ());
129- result->encoding = duckdb_parquet::Encoding::RLE_DICTIONARY;
129+ result->encoding = writer.GetParquetVersion () == ParquetVersion::V1 ? duckdb_parquet::Encoding::PLAIN_DICTIONARY
130+ : duckdb_parquet::Encoding::RLE_DICTIONARY;
130131 RegisterToRowGroup (row_group);
131132 return std::move (result);
132133 }
@@ -150,6 +151,8 @@ class StandardColumnWriter : public PrimitiveColumnWriter {
150151 }
151152 page_state.dbp_encoder .FinishWrite (temp_writer);
152153 break ;
154+ case duckdb_parquet::Encoding::PLAIN_DICTIONARY:
155+ // PLAIN_DICTIONARY can be treated the same as RLE_DICTIONARY
153156 case duckdb_parquet::Encoding::RLE_DICTIONARY:
154157 D_ASSERT (page_state.dict_bit_width != 0 );
155158 if (!page_state.dict_written_value ) {
@@ -265,7 +268,8 @@ class StandardColumnWriter : public PrimitiveColumnWriter {
265268
266269 bool HasDictionary (PrimitiveColumnWriterState &state_p) override {
267270 auto &state = state_p.Cast <StandardColumnWriterState<SRC, TGT, OP>>();
268- return state.encoding == duckdb_parquet::Encoding::RLE_DICTIONARY;
271+ return state.encoding == duckdb_parquet::Encoding::RLE_DICTIONARY ||
272+ state.encoding == duckdb_parquet::Encoding::PLAIN_DICTIONARY;
269273 }
270274
271275 idx_t DictionarySize (PrimitiveColumnWriterState &state_p) override {
@@ -285,7 +289,8 @@ class StandardColumnWriter : public PrimitiveColumnWriter {
285289
286290 void FlushDictionary (PrimitiveColumnWriterState &state_p, ColumnWriterStatistics *stats) override {
287291 auto &state = state_p.Cast <StandardColumnWriterState<SRC, TGT, OP>>();
288- D_ASSERT (state.encoding == duckdb_parquet::Encoding::RLE_DICTIONARY);
292+ D_ASSERT (state.encoding == duckdb_parquet::Encoding::RLE_DICTIONARY ||
293+ state.encoding == duckdb_parquet::Encoding::PLAIN_DICTIONARY);
289294
290295 if (writer.EnableBloomFilters ()) {
291296 state.bloom_filter =
@@ -310,7 +315,8 @@ class StandardColumnWriter : public PrimitiveColumnWriter {
310315 idx_t GetRowSize (const Vector &vector, const idx_t index,
311316 const PrimitiveColumnWriterState &state_p) const override {
312317 auto &state = state_p.Cast <StandardColumnWriterState<SRC, TGT, OP>>();
313- if (state.encoding == duckdb_parquet::Encoding::RLE_DICTIONARY) {
318+ if (state.encoding == duckdb_parquet::Encoding::RLE_DICTIONARY ||
319+ state.encoding == duckdb_parquet::Encoding::PLAIN_DICTIONARY) {
314320 return (state.key_bit_width + 7 ) / 8 ;
315321 } else {
316322 return OP::template GetRowSize<SRC, TGT>(vector, index);
@@ -328,6 +334,8 @@ class StandardColumnWriter : public PrimitiveColumnWriter {
328334 const auto *data_ptr = FlatVector::GetData<SRC>(input_column);
329335
330336 switch (page_state.encoding ) {
337+ case duckdb_parquet::Encoding::PLAIN_DICTIONARY:
338+ // PLAIN_DICTIONARY can be treated the same as RLE_DICTIONARY
331339 case duckdb_parquet::Encoding::RLE_DICTIONARY: {
332340 idx_t r = chunk_start;
333341 if (!page_state.dict_written_value ) {
0 commit comments