One schema field's write-time metadata and QC bounds, parsed from a MAML fields: entry (or built via schema%add_field); one array element per field, held in parquet_column_info%col(:).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | is_set | = | .false. |
true if this column is currently enabled to be written; toggled by set_column_available/set_column_unavailable. |
|
| logical, | public | :: | is_deactivated | = | .false. |
true for columns merged in from a base MAML that the user's MAML excluded; protects is_set from being changed by set_column_available/set_column_unavailable (bulk or by name). |
|
| logical, | public | :: | is_protected | = | .false. |
true if this column's name is listed under extra: protected_cols: in whichever MAML built this cinfo; parquet_write_column error stops if an is_valid mask with any .false. entry is passed for such a column. |
|
| logical, | public | :: | has_qc_min | = | .false. |
true if a qc: min: bound was declared for this field. |
|
| logical, | public | :: | has_qc_max | = | .false. |
true if a qc: max: bound was declared for this field. |
|
| character(len=2), | public | :: | qc_min_op | = | ">=" |
one of ">", ">="; default when qc: min: has no operator prefix. |
|
| character(len=2), | public | :: | qc_max_op | = | "<=" |
one of "<", "<="; default when qc: max: has no operator prefix. |
|
| character(len=:), | public, | allocatable | :: | qc_min_raw |
The qc: min: bound text, operator prefix already stripped/ trimmed; numeric for int32/int64/float32/float64, literal for string. |
||
| character(len=:), | public, | allocatable | :: | qc_max_raw |
qc: max: bound text, same convention as qc_min_raw. |
||
| character(len=:), | public, | allocatable | :: | qc_miss_raw |
The qc: miss: value exactly as declared (unquoted, trimmed), kept ONLY so parquet_validate_field_rules can name the offending text when it is not one of the three legal forms; qc_allow_null below is what every enforcement path actually reads. Left unallocated when the field declares no qc: miss: at all, which is what distinguishes "not declared" from "declared empty" here -- qc_allow_null alone cannot, since both leave it .true./.false. by value only. |
||
| logical, | public | :: | qc_allow_null | = | .true. |
Whether Nulls are an expected part of this field's output, in which case parquet_write_column/parquet_open_reader's qc: enforcement never warns/errors about them. .true. for a declared qc: miss: Null/NA AND -- this is what the default carries -- for a field that declares no qc: miss: at all, since an undeclared miss: means the author said nothing about Nulls and the library does not invent a restriction. Only an EXPLICIT, EMPTY qc: miss: sets this .false., which is how a schema asks for Null validation; finding a Null then triggers a qc: violation. The .true. default is load-bearing and is the only inverted default in this type: the "no miss: declared" case works by nothing ever assigning this, so flipping it back to .false. would silently turn Null validation on for every column of every schema. May be set on any data_type. |
|
| character(len=:), | public, | allocatable | :: | name |
The name of the field [required]; always the internal/ canonical name, i.e. what parquet_write_column/set_column_available/etc. use -- never affected by a col_map: rename (see output_name). |
||
| character(len=:), | public, | allocatable | :: | unit |
The unit of measurement for the field. |
||
| character(len=:), | public, | allocatable | :: | info |
A short description of the field. |
||
| character(len=:), | public, | allocatable | :: | ucd |
Unified Content Descriptor for IVOA (can have many). |
||
| character(len=:), | public, | allocatable | :: | data_type |
The data type of the field [required]. For a temporal column this is the base token only ("date"/"time"/"timestamp"); the unit/utc suffix is parsed out into time_unit/is_utc below. |
||
| integer, | public | :: | time_unit | = | 0 |
For a time/timestamp field, its stored unit as a parquet_unit_* selector (0 = not a temporal column, or unset). A bare time/timestamp token resolves to parquet_unit_micros. |
|
| logical, | public | :: | is_utc | = | .false. |
For a timestamp field, .true. if declared UTC-adjusted (timestamp[...,utc]). |
|
| integer, | public | :: | array_size | = | 1 |
Maximum length of character strings; parquet_size_auto if declared array_size: auto (not yet resolved -- see schema%set_array_size). |
|
| integer, | public | :: | col_size | = | 1 |
The number of elements in the vector column; parquet_size_auto if declared col_size: auto (not yet resolved -- see schema%set_col_size). |
|
| character(len=:), | public, | allocatable | :: | output_name |
The name actually written to the parquet file/VOTable
header. Equal to |
type parquet_column_type logical :: is_set = .false. !! true if this column is currently enabled to be written; toggled by !! set_column_available/set_column_unavailable. logical :: is_deactivated = .false. !! true for columns merged in from a base MAML that the user's MAML !! excluded; protects is_set from being changed by set_column_available/set_column_unavailable (bulk or !! by name). logical :: is_protected = .false. !! true if this column's name is listed under extra: protected_cols: in !! whichever MAML built this cinfo; parquet_write_column error stops if an is_valid mask with any !! .false. entry is passed for such a column. logical :: has_qc_min = .false. !! true if a qc: min: bound was declared for this field. logical :: has_qc_max = .false. !! true if a qc: max: bound was declared for this field. character(len=2) :: qc_min_op = ">=" !! one of ">", ">="; default when qc: min: has no operator prefix. character(len=2) :: qc_max_op = "<=" !! one of "<", "<="; default when qc: max: has no operator prefix. character(len=:), allocatable :: qc_min_raw !! The qc: min: bound text, operator prefix already stripped/ !! trimmed; numeric for int32/int64/float32/float64, literal for string. character(len=:), allocatable :: qc_max_raw !! qc: max: bound text, same convention as qc_min_raw. character(len=:), allocatable :: qc_miss_raw !! The qc: miss: value exactly as declared (unquoted, trimmed), !! kept ONLY so parquet_validate_field_rules can name the offending text when it is not one of the three !! legal forms; qc_allow_null below is what every enforcement path actually reads. Left unallocated when !! the field declares no qc: miss: at all, which is what distinguishes "not declared" from "declared !! empty" here -- qc_allow_null alone cannot, since both leave it .true./.false. by value only. logical :: qc_allow_null = .true. !! Whether Nulls are an expected part of this field's output, in which !! case parquet_write_column/parquet_open_reader's qc: enforcement never warns/errors about them. !! .true. for a declared qc: miss: Null/NA AND -- this is what the default carries -- for a field that !! declares no qc: miss: at all, since an undeclared miss: means the author said nothing about Nulls !! and the library does not invent a restriction. Only an EXPLICIT, EMPTY qc: miss: sets this .false., !! which is how a schema asks for Null validation; finding a Null then triggers a qc: violation. !! **The .true. default is load-bearing and is the only inverted default in this type**: the "no miss: !! declared" case works by nothing ever assigning this, so flipping it back to .false. would silently !! turn Null validation on for every column of every schema. May be set on any data_type. character(len=:), allocatable :: name !! The name of the field [required]; always the internal/ !! canonical name, i.e. what parquet_write_column/set_column_available/etc. use -- never affected by a !! col_map: rename (see output_name). character(len=:), allocatable :: unit !! The unit of measurement for the field. character(len=:), allocatable :: info !! A short description of the field. character(len=:), allocatable :: ucd !! Unified Content Descriptor for IVOA (can have many). character(len=:), allocatable :: data_type !! The data type of the field [required]. For a temporal !! column this is the base token only ("date"/"time"/"timestamp"); the unit/utc suffix is parsed out !! into time_unit/is_utc below. integer :: time_unit = 0 !! For a time/timestamp field, its stored unit as a parquet_unit_* selector !! (0 = not a temporal column, or unset). A bare time/timestamp token resolves to parquet_unit_micros. logical :: is_utc = .false. !! For a timestamp field, .true. if declared UTC-adjusted (timestamp[...,utc]). integer :: array_size = 1 !! Maximum length of character strings; parquet_size_auto if declared !! array_size: auto (not yet resolved -- see schema%set_array_size). integer :: col_size = 1 !! The number of elements in the vector column; parquet_size_auto if !! declared col_size: auto (not yet resolved -- see schema%set_col_size). character(len=:), allocatable :: output_name !! The name actually written to the parquet file/VOTable !! header. Equal to `name` unless a col_map: entry in the MAML that declared this field renamed it !! (col_map: maps internal_name -> output_name; `name` is then set to the internal_name and !! `output_name` keeps the field's own declared name from that MAML's fields: section). end type parquet_column_type