diff --git a/cpp/src/parquet/column/column-writer-test.cc b/cpp/src/parquet/column/column-writer-test.cc index ab232ea47576f..3806bd02fd02d 100644 --- a/cpp/src/parquet/column/column-writer-test.cc +++ b/cpp/src/parquet/column/column-writer-test.cc @@ -84,14 +84,22 @@ class TestPrimitiveWriter : public ::testing::Test { reader_.reset(new TypedColumnReader(schema_.get(), std::move(page_reader))); } - std::unique_ptr> BuildWriter( + std::shared_ptr> BuildWriter( int64_t output_size = SMALL_SIZE, Encoding::type encoding = Encoding::PLAIN) { sink_.reset(new InMemoryOutputStream()); std::unique_ptr pager( new SerializedPageWriter(sink_.get(), Compression::UNCOMPRESSED, &metadata_)); - return std::unique_ptr>( - new TypedColumnWriter(schema_.get(), std::move(pager), output_size, - encoding, writer_properties_.get())); + WriterProperties::Builder wp_builder; + if (encoding == Encoding::PLAIN_DICTIONARY || encoding == Encoding::RLE_DICTIONARY) { + wp_builder.enable_dictionary(); + } else { + wp_builder.disable_dictionary(); + wp_builder.encoding(encoding); + } + writer_properties_ = wp_builder.build(); + std::shared_ptr writer = ColumnWriter::Make( + schema_.get(), std::move(pager), output_size, writer_properties_.get()); + return std::static_pointer_cast>(writer); } void SyncValuesOut(); @@ -106,7 +114,7 @@ class TestPrimitiveWriter : public ::testing::Test { this->GenerateData(SMALL_SIZE); // Test case 1: required and non-repeated, so no definition or repetition levels - std::unique_ptr> writer = + std::shared_ptr> writer = this->BuildWriter(SMALL_SIZE, encoding); writer->WriteBatch(this->values_.size(), nullptr, nullptr, this->values_ptr_); // The behaviour should be independent from the number of Close() calls @@ -191,20 +199,11 @@ typedef ::testing::Types TestDictionaryTypes; - -template -class TestPrimitiveDictionaryWriter : public TestPrimitiveWriter {}; - -TYPED_TEST_CASE(TestPrimitiveDictionaryWriter, TestDictionaryTypes); - TYPED_TEST(TestPrimitiveWriter, RequiredPlain) { this->TestRequiredWithEncoding(Encoding::PLAIN); } -TYPED_TEST(TestPrimitiveDictionaryWriter, RequiredDictionary) { +TYPED_TEST(TestPrimitiveWriter, RequiredDictionary) { this->TestRequiredWithEncoding(Encoding::PLAIN_DICTIONARY); } diff --git a/cpp/src/parquet/column/writer.cc b/cpp/src/parquet/column/writer.cc index 1c376ade3110a..da4b17c6aedcb 100644 --- a/cpp/src/parquet/column/writer.cc +++ b/cpp/src/parquet/column/writer.cc @@ -200,7 +200,8 @@ std::shared_ptr ColumnWriter::Make(const ColumnDescriptor* descr, std::unique_ptr pager, int64_t expected_rows, const WriterProperties* properties) { Encoding::type encoding = properties->encoding(descr->path()); - if (properties->dictionary_enabled(descr->path())) { + if (properties->dictionary_enabled(descr->path()) && + descr->physical_type() != Type::BOOLEAN) { encoding = properties->dictionary_page_encoding(); } switch (descr->physical_type()) {