parquet_table_col — a resolved handle on one column of a parquet_table.
The column-major twin of parquet_tables_row.f90: where a parquet_table_row fixes the ROW and
leaves the column to be named per access, this fixes the COLUMN and leaves the row to be given
per access. A per-element loop over one column is the shape that pays, because the name lookup
it removes is 52–77% of what a %get_element costs.
Three rules run through the file:
column_by_name/column_by_index do the whole of
table_resolve's work — the lookup, the unsupported-type refusal, the lazy first touch — and
store the slot, the kind and the row scope. Nothing here repeats any of it.col_resolve, which is
an associated test and one integer(int64) comparison against the stamp taken at creation.
That is deliberately conservative — %append does not move existing slots, so a handle
could survive one — because a single total rule beats a list of exceptions the next
mutation would silently fall outside.cache, never at the table. Same rule as the row handle, and it is
what lets a caller hold a handle without the table needing the target attribute.