| 711 | }; |
| 712 | |
| 713 | Result<liborc::WriterOptions> MakeOrcWriterOptions( |
| 714 | arrow::adapters::orc::WriteOptions options) { |
| 715 | liborc::WriterOptions orc_options; |
| 716 | orc_options.setFileVersion( |
| 717 | liborc::FileVersion(static_cast<uint32_t>(options.file_version.major_version()), |
| 718 | static_cast<uint32_t>(options.file_version.minor_version()))); |
| 719 | orc_options.setStripeSize(static_cast<uint64_t>(options.stripe_size)); |
| 720 | orc_options.setCompressionBlockSize( |
| 721 | static_cast<uint64_t>(options.compression_block_size)); |
| 722 | orc_options.setCompressionStrategy(static_cast<liborc::CompressionStrategy>( |
| 723 | static_cast<int8_t>(options.compression_strategy))); |
| 724 | orc_options.setRowIndexStride(static_cast<uint64_t>(options.row_index_stride)); |
| 725 | orc_options.setPaddingTolerance(options.padding_tolerance); |
| 726 | orc_options.setDictionaryKeySizeThreshold(options.dictionary_key_size_threshold); |
| 727 | std::set<uint64_t> orc_bloom_filter_columns; |
| 728 | std::for_each(options.bloom_filter_columns.begin(), options.bloom_filter_columns.end(), |
| 729 | [&orc_bloom_filter_columns](const int64_t col) { |
| 730 | orc_bloom_filter_columns.insert(static_cast<uint64_t>(col)); |
| 731 | }); |
| 732 | orc_options.setColumnsUseBloomFilter(std::move(orc_bloom_filter_columns)); |
| 733 | orc_options.setBloomFilterFPP(options.bloom_filter_fpp); |
| 734 | // Orc timestamp type is error-prone since it serializes values in the writer timezone |
| 735 | // and reads them back in the reader timezone. To avoid this, both the Apache Orc C++ |
| 736 | // writer and reader set the timezone to GMT by default to avoid any conversion. |
| 737 | // We follow the same practice here explicitly to make sure readers are aware of this. |
| 738 | orc_options.setTimezoneName("GMT"); |
| 739 | switch (options.compression) { |
| 740 | case Compression::UNCOMPRESSED: |
| 741 | orc_options.setCompression(liborc::CompressionKind::CompressionKind_NONE); |
| 742 | break; |
| 743 | case Compression::GZIP: |
| 744 | orc_options.setCompression(liborc::CompressionKind::CompressionKind_ZLIB); |
| 745 | break; |
| 746 | case Compression::SNAPPY: |
| 747 | orc_options.setCompression(liborc::CompressionKind::CompressionKind_SNAPPY); |
| 748 | break; |
| 749 | case Compression::LZ4: |
| 750 | orc_options.setCompression(liborc::CompressionKind::CompressionKind_LZ4); |
| 751 | break; |
| 752 | case Compression::ZSTD: |
| 753 | orc_options.setCompression(liborc::CompressionKind::CompressionKind_ZSTD); |
| 754 | break; |
| 755 | default: |
| 756 | return Status::Invalid("Compression type not supported by ORC"); |
| 757 | } |
| 758 | return orc_options; |
| 759 | } |
| 760 | |
| 761 | } // namespace |
| 762 |
nothing calls this directly
no test coverage detected