| 2692 | // Dynamic column writer constructor |
| 2693 | |
| 2694 | std::shared_ptr<ColumnWriter> ColumnWriter::Make(ColumnChunkMetaDataBuilder* metadata, |
| 2695 | std::unique_ptr<PageWriter> pager, |
| 2696 | const WriterProperties* properties, |
| 2697 | BloomFilter* bloom_filter) { |
| 2698 | const ColumnDescriptor* descr = metadata->descr(); |
| 2699 | const bool use_dictionary = properties->dictionary_enabled(descr->path()) && |
| 2700 | descr->physical_type() != Type::BOOLEAN; |
| 2701 | Encoding::type encoding = properties->encoding(descr->path()); |
| 2702 | if (encoding == Encoding::UNKNOWN) { |
| 2703 | encoding = (descr->physical_type() == Type::BOOLEAN && |
| 2704 | properties->version() != ParquetVersion::PARQUET_1_0 && |
| 2705 | properties->data_page_version() == ParquetDataPageVersion::V2) |
| 2706 | ? Encoding::RLE |
| 2707 | : Encoding::PLAIN; |
| 2708 | } |
| 2709 | if (use_dictionary) { |
| 2710 | encoding = properties->dictionary_index_encoding(); |
| 2711 | } |
| 2712 | switch (descr->physical_type()) { |
| 2713 | case Type::BOOLEAN: { |
| 2714 | if (bloom_filter != nullptr) { |
| 2715 | throw ParquetException("Bloom filter is not supported for boolean type"); |
| 2716 | } |
| 2717 | return std::make_shared<TypedColumnWriterImpl<BooleanType>>( |
| 2718 | metadata, std::move(pager), use_dictionary, encoding, properties, |
| 2719 | /*bloom_filter=*/nullptr); |
| 2720 | } |
| 2721 | case Type::INT32: |
| 2722 | return std::make_shared<TypedColumnWriterImpl<Int32Type>>( |
| 2723 | metadata, std::move(pager), use_dictionary, encoding, properties, bloom_filter); |
| 2724 | case Type::INT64: |
| 2725 | return std::make_shared<TypedColumnWriterImpl<Int64Type>>( |
| 2726 | metadata, std::move(pager), use_dictionary, encoding, properties, bloom_filter); |
| 2727 | case Type::INT96: |
| 2728 | return std::make_shared<TypedColumnWriterImpl<Int96Type>>( |
| 2729 | metadata, std::move(pager), use_dictionary, encoding, properties, bloom_filter); |
| 2730 | case Type::FLOAT: |
| 2731 | return std::make_shared<TypedColumnWriterImpl<FloatType>>( |
| 2732 | metadata, std::move(pager), use_dictionary, encoding, properties, bloom_filter); |
| 2733 | case Type::DOUBLE: |
| 2734 | return std::make_shared<TypedColumnWriterImpl<DoubleType>>( |
| 2735 | metadata, std::move(pager), use_dictionary, encoding, properties, bloom_filter); |
| 2736 | case Type::BYTE_ARRAY: |
| 2737 | return std::make_shared<TypedColumnWriterImpl<ByteArrayType>>( |
| 2738 | metadata, std::move(pager), use_dictionary, encoding, properties, bloom_filter); |
| 2739 | case Type::FIXED_LEN_BYTE_ARRAY: |
| 2740 | return std::make_shared<TypedColumnWriterImpl<FLBAType>>( |
| 2741 | metadata, std::move(pager), use_dictionary, encoding, properties, bloom_filter); |
| 2742 | default: |
| 2743 | ParquetException::NYI("Column writer not implemented for type: " + |
| 2744 | TypeToString(descr->physical_type())); |
| 2745 | } |
| 2746 | // Unreachable code, but suppress compiler warning |
| 2747 | return std::shared_ptr<ColumnWriter>(nullptr); |
| 2748 | } |
| 2749 | |
| 2750 | } // namespace parquet |
nothing calls this directly
no test coverage detected