parquet_debug_colread_block_rows Interface

interface
public module subroutine parquet_debug_colread_block_rows(lo, hi, width, mid_lo, mid_hi)

Arguments

Type IntentOptional Attributes Name
integer(kind=int64), intent(in) :: lo

first row of the range.

integer(kind=int64), intent(in) :: hi

last row of the range.

integer(kind=int64), intent(in) :: width

elements per row.

integer(kind=int64), intent(out) :: mid_lo

first row occupying a whole block.

integer(kind=int64), intent(out) :: mid_hi

last such row; < mid_lo when there is none.

Description

Exposes the parallel single-column read's validity-block alignment arithmetic for testing.

This is a debug hook, not API, public for the same reason parquet_debug_table_set_inflight is: the procedure it forwards to lives in a submodule and the property it computes cannot be observed from outside.

What it computes is which rows of lo..hi occupy WHOLE validity-bitmap blocks, and it is the one thing standing between the parallel column read and a silent wrong answer -- two threads pasting adjacent row groups share a bitmap block unless their ranges are trimmed to this. That race is a few instructions wide, so an end-to-end test cannot be relied on to catch a mistake in it; this makes the rule itself assertable, exactly as parquet_debug_string_row_ranges does for parquet_string_column's byte-aligned split. mid_lo > mid_hi reports that no whole block exists in the range.