Resolves a writer's codec and compression level from the caller's optional arguments and the
process-global defaults. Library-internal plumbing -- the facade keeps it out of the
use parquet namespace.
The whole reason this is one procedure rather than four lines in parquet_open_writer is the
level rule, which is easy to state and easy to get wrong: level 3 is this library's choice
for its own default codec, so it applies only when the codec was defaulted all the way --
no compression= argument AND no parquet_set_default_compression. Name a codec by either
route and the level falls back to that codec's own default, unless a level was named too.
Collapsing that condition would silently attach a zstd-tuned level to whatever codec was
chosen; test_compression_default_level_is_conditional (test/test_writing.f90) is the
assertion that fails if it is.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in), | optional | :: | compression |
the caller's compression= argument. |
|
| integer, | intent(in), | optional | :: | compression_level |
the caller's compression_level= argument. |
|
| character(len=:), | intent(out), | allocatable | :: | codec |
resolved codec name, lowercased. |
|
| integer, | intent(out) | :: | level |
resolved level, or the codec-default sentinel. |
subroutine parquet_resolve_writer_compression(compression, compression_level, codec, level) character(len=*), intent(in), optional :: compression !! the caller's compression= argument. integer, intent(in), optional :: compression_level !! the caller's compression_level= argument. character(len=:), allocatable, intent(out) :: codec !! resolved codec name, lowercased. integer, intent(out) :: level !! resolved level, or the codec-default sentinel. logical :: codec_defaulted codec_defaulted = .not. present(compression) .and. len_trim(cfg_default_compression) == 0 if (present(compression)) then call fold_ascii_lower(trim(compression), codec) else call parquet_get_default_compression(codec) end if level = level_codec_default if (codec_defaulted) level = level_zstd_default if (cfg_default_compression_level /= level_codec_default) level = cfg_default_compression_level if (present(compression_level)) level = compression_level end subroutine parquet_resolve_writer_compression