in src/parquet/column_writer.cc [617:656]
std::shared_ptr<ColumnWriter> ColumnWriter::Make(ColumnChunkMetaDataBuilder* metadata,
std::unique_ptr<PageWriter> pager,
const WriterProperties* properties) {
const ColumnDescriptor* descr = metadata->descr();
Encoding::type encoding = properties->encoding(descr->path());
if (properties->dictionary_enabled(descr->path()) &&
descr->physical_type() != Type::BOOLEAN) {
encoding = properties->dictionary_page_encoding();
}
switch (descr->physical_type()) {
case Type::BOOLEAN:
return std::make_shared<BoolWriter>(metadata, std::move(pager), encoding,
properties);
case Type::INT32:
return std::make_shared<Int32Writer>(metadata, std::move(pager), encoding,
properties);
case Type::INT64:
return std::make_shared<Int64Writer>(metadata, std::move(pager), encoding,
properties);
case Type::INT96:
return std::make_shared<Int96Writer>(metadata, std::move(pager), encoding,
properties);
case Type::FLOAT:
return std::make_shared<FloatWriter>(metadata, std::move(pager), encoding,
properties);
case Type::DOUBLE:
return std::make_shared<DoubleWriter>(metadata, std::move(pager), encoding,
properties);
case Type::BYTE_ARRAY:
return std::make_shared<ByteArrayWriter>(metadata, std::move(pager), encoding,
properties);
case Type::FIXED_LEN_BYTE_ARRAY:
return std::make_shared<FixedLenByteArrayWriter>(metadata, std::move(pager),
encoding, properties);
default:
ParquetException::NYI("type reader not implemented");
}
// Unreachable code, but supress compiler warning
return std::shared_ptr<ColumnWriter>(nullptr);
}