MCPcopy Create free account
hub / github.com/apache/arrow / Make

Method Make

cpp/src/parquet/column_writer.cc:2694–2748  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2692// Dynamic column writer constructor
2693
2694std::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

Callers

nothing calls this directly

Calls 8

ParquetExceptionFunction · 0.85
NYIFunction · 0.85
TypeToStringFunction · 0.85
physical_typeMethod · 0.80
descrMethod · 0.45
pathMethod · 0.45
encodingMethod · 0.45
versionMethod · 0.45

Tested by

no test coverage detected