parquet_resolve_writer_compression Subroutine

public subroutine parquet_resolve_writer_compression(compression, compression_level, codec, level)

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.

Arguments

Type IntentOptional 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.


Source Code

    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