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

Method Make

cpp/src/parquet/column_writer.cc:2700–2754  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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