Predefined-column table generated from the test schema.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=real64), | public | :: | zeropoint | = | 0.0_real64 |
A worked example of a user-added table parameter, and the thing that makes this
module's clone_extra/init_extra statements non-trivial: the generator writes
|
Number of rows every column holds.
Number of rows every column of this table holds.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
row count.
Number of columns the table has.
Number of columns this table has, or only the resident ones with resident_only.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| logical, | intent(in), | optional | :: | resident_only |
.true.: count only columns already read. |
column count.
Copy out every column name, in order.
Copies out every column's name, in file/insertion order, blank-padded to the longest.
resident_only=.true. reports only the columns that have been read, in the same order,
which is how a caller finds out what a lazy table is actually holding.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| character(len=:), | intent(out), | allocatable | :: | names(:) |
one entry per column. |
|
| logical, | intent(in), | optional | :: | resident_only |
.true.: only columns already read. |
A column's 1-based position, 0 when absent.
A column's 1-based position among the table's columns, or 0 when there is no such
column. The inverse of %column_name, and the cheap way to hoist a lookup out of a
loop that then queries the same column by position.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | name |
column name. |
||
| logical, | intent(out), | optional | :: | found |
present: report a miss instead of aborting. |
1-based position, or 0 on a reported miss.
Copy out the name at a 1-based position.
Copies out the name of the column at 1-based position j. The inverse of
%column_index, and what makes a do j = 1, t%ncols() sweep able to report itself.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| integer, | intent(in) | :: | j |
1-based column position. |
||
| character(len=:), | intent(out), | allocatable | :: | nm |
the column's name, or "". |
|
| logical, | intent(out), | optional | :: | found |
present: report an out-of-range j instead of aborting. |
Counter bumped by every structural change.
A counter bumped by every structural change to this table, for a caller holding a pointer across a call that might have invalidated it.
A stale %col pointer cannot be detected by Fortran, and this library cannot detect
it either. What it can do is tell you whether anything structural happened: take the
generation before, compare it after, and re-fetch the pointer if it moved. The counter
is deliberately conservative -- every column- and row-structural entry point bumps it,
whether or not that particular call actually relocated anything -- because a missed bump
would give false confidence, while a spare one only costs a re-fetch. A call that
changes nothing at all (see the no-detach rule) does not bump it.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
current generation.
Whether a column of this name exists.
Whether a column of this name exists (supported or not).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | name |
column name. |
.true. if the table has it.
Whether the table has left its file behind.
Whether the table has been detached from its file by a row-structural mutation.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
.true. once detached.
Copy out the file this table came from.
Copies out the file this table was opened from ("" for an in-memory table).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| character(len=:), | intent(out), | allocatable | :: | fname |
the file name, or "". |
One key from the file's metadata.
Reads one key from the source file's table metadata. found reports a missing key.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | key |
metadata key. |
||
| character(len=:), | intent(out), | allocatable | :: | value |
the value, or "". |
|
| logical, | intent(out), | optional | :: | found |
present: report a miss instead of aborting. |
Read every column not yet read.
Reads every supported, file-backed column that is not resident yet -- the one-call way to make a whole table safe to use from a parallel region.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table (fills through %cache). |
Re-read one column; force= to discard local edits.
Re-reads one column from the file, discarding whatever is in the store -- the escape hatch back to the file's own values after %set has changed them locally. Only valid for a file-backed column of a table that has not been detached.
Discarding local edits is what this is FOR, so it says so rather than assuming: a column holding values the caller wrote (%user_populated) is refused unless force=.true. is passed, which puts %reload and %evict_column under one rule instead of two. A forced reload clears the mark, since the slot then holds the file's values again.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table (refills through %cache). |
||
| character(len=*), | intent(in) | :: | name |
column to re-read. |
||
| logical, | intent(in), | optional | :: | force |
.true. to discard local edits and re-read. |
|
| logical, | intent(out), | optional | :: | found |
present: report a miss instead of aborting. |
Drop a column's VALUES; force= if it holds local edits.
Releases one column's VALUES while keeping its slot -- the honest counterpart of %prefetch, and the way to give a column's memory back without losing the column.
The difference from %drop_column is what survives: an evicted column still appears in %column_names, still answers %kind/%width/%unit, and is READ AGAIN on the next touch. A dropped one is gone. So %drop_column is for a column you are finished with, and %evict_column for one you are finished with FOR NOW.
Only a file-backed column of an attached table can be evicted, and that restriction is the whole safety story: everywhere else the values are the only copy that exists, so evicting them would be silent data loss rather than a memory saving. A column built with %add_column, and any column of a detached table, is therefore an error naming what is wrong. Evicting a column that is not resident is a no-op.
Eviction is user-driven only. Nothing in this library evicts on its own -- no LRU, no memory budget -- so what a table holds stays predictable from the calls you wrote.
A column holding values the CALLER wrote (%user_populated) is refused as well, because the file's own values would come back on the next read and the edits would be gone with nothing to notice -- pass force=.true. to discard them on purpose. Note the protection covers what the value-setting API wrote, NOT a write made through a %col/%ref pointer: the library cannot tell such a write from a read, so a caller who edits that way marks the column with %set_user_populated themselves.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | name |
column to release. |
||
| logical, | intent(in), | optional | :: | force |
.true. to evict a column holding local edits. |
|
| logical, | intent(out), | optional | :: | found |
present: report a miss instead of aborting. |
Claim a column's values as the caller's own, or unclaim.
Marks a column as holding values the CALLER wrote, or clears that mark.
The library sets this itself for every value-setting call (%set, %set_element, %set_slice, a row or column handle's %set, %set_null, %add_column, ...), and %evict_column and %reload then refuse that column unless force=.true. is passed. It cannot set it for a write made through the pointer %col/%ref hands out, because it cannot tell such a write from a read -- so a caller who edits a column that way marks it here, and gets the same protection. Clearing it says the opposite: the slot's values are the file's again, and may be discarded without force=.
Marking a column that holds no values is refused: there is nothing to protect, and the mark would outlive the read that filled the slot. Clearing is always allowed.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | name |
column to mark. |
||
| logical, | intent(in) | :: | flag |
.true. = the caller's own values; .false. = the file's. |
||
| logical, | intent(out), | optional | :: | found |
present: report a miss instead of aborting. |
Whether a column is claimed as holding the caller's values.
Whether a column is marked as holding values the caller wrote rather than the file's.
Reads no values and never triggers a read. A column that has not been read is never marked, so this answers .false. for one -- see %set_user_populated for what sets it.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | name |
column to ask about. |
||
| logical, | intent(out), | optional | :: | found |
present: report a miss instead of aborting. |
.true. when the slot holds the caller's own writes.
Check every qc-declaring column, holding none.
Checks this table's read-time qc against the file, WITHOUT leaving the columns resident.
qc is enforced when a column is read, so on a lazy table a declared bound is only checked once something asks for that column -- which means a program that reads two of forty columns never finds out whether the other thirty-eight satisfy their bounds. This reads exactly the columns that declare a bound, letting the reader check them, and then releases the ones it had to read.
What it leaves behind is the point. Residency is recorded BEFORE anything is read, and only the columns this call made resident are released afterwards -- a column that was already in memory stays there, values and all. So it can be called at any time without disturbing what the program is working on.
A violation is reported the way it would be on an ordinary read: an abort, or a warning
under qc_soft=. A table with no qc declared at all, and one built in memory, are
no-ops -- there is nothing to check and no file to check it against.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
Print what the table holds, to stdout.
Prints what this table holds, to standard output: one header line and one line per column, with each column's kind, width, row count, null count and min/max.
Materialized columns only, by default -- the header says how many of the table's
columns those are, so a lazy table reports what it is actually holding rather than what
its file contains. all=.true. lists every column, with - where a column that has
not been read has nothing to report.
Printing never reads anything. A deferred plain-LIST column, whose width is only
knowable from its data, prints as pending rather than being resolved -- a diagnostic
that changes what it is diagnosing is worse than one that admits it does not know.
These are statistics of the values IN MEMORY, computed here by a plain Fortran scan. They are not the file's own footer statistics, and they are the only ones available for a column built with %add_column, which has no footer at all. The scan is O(rows) per column, so this is not a call to put in a loop over a large table.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| logical, | intent(in), | optional | :: | all |
.true.: list every column, not just the resident ones. |
Rows before filter=/sample_fraction=.
Rows this table covers BEFORE filter=/sample_fraction= removed any -- the slice's
own length in the slice regime, and the file's row count for a whole-file table.
%nrows() is what the table holds; this is what it was cut from, which nothing else
can report once a transform is active: a filtered reader answers in survivors, so
asking it afterwards gives the same number %nrows() already gave. Captured when the
table opens, so it keeps answering after a row mutation has detached the table.
Equal to %nrows() when no filter or sample is in play. 0 for a table built in memory,
which was not cut from anything.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
rows before the transform.
Rows in the row groups this table covers.
Rows in the row groups this table covers, which is what reading it actually costs.
A slice is read by row group, so a slice of 10 rows straddling two 100k-row groups decodes 200k rows to produce them. This reports that number, so a caller choosing slice boundaries can see when a slice is not paying for itself.
Equal to %nrows_unfiltered() when the slice lines up with row-group boundaries, and
for a whole-file table always. 0 for a table built in memory.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
rows in the covering row groups.
Row-group row ranges, this table's rows or the file's.
The same row ranges for an already-open table, without reopening the file, in THIS
TABLE's own row numbering -- or, with physical=.true., in the file's.
The two differ only when the table does not hold every row of the file: a slice, a
filter, a sample. Then bounds(1, rg)/bounds(2, rg) are the rows OF THIS TABLE that
came from row group rg, which is what relates a row index in hand to the row group it
was read from; physical=.true. answers in the file's numbering instead, which is what
parquet_table_row_group_bounds and every slice bound are expressed in, and so is what
to use for planning the next slice.
Both forms have ONE ENTRY PER PHYSICAL ROW GROUP and are index-aligned, so the two can be
read side by side ("row group 7 holds file rows A..B, which are my rows C..D"). A row
group contributing no rows to this table -- outside the slice, or filtered away entirely
-- is reported as an EMPTY range, bounds(1, rg) > bounds(2, rg), rather than dropped;
dropping it would break the alignment that makes the pairing possible.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| integer(kind=int64), | intent(out), | allocatable | :: | bounds(:,:) |
(2, num_row_groups). |
|
| logical, | intent(in), | optional | :: | physical |
.true. for the file's own row numbering. |
Drop a null bitmap that no longer has nulls.
Drops a column's null bitmap when it no longer holds any null, so a column that HAD nulls and no longer does stops paying for the bitmap. Scans the column, so it is not free -- a whole-column %set already compacts on its own and does not need this. Idempotent: calling it on an already-compact column is a cheap no-op.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | name |
column name. |
||
| logical, | intent(out), | optional | :: | found |
present: report a miss instead of aborting. |
Allocate validity storage up front, for concurrent nulling.
Materializes a column's validity storage up front, so concurrent nulling allocates
nothing. See table_check_shared_write.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| character(len=*), | intent(in), | optional | :: | name |
column to prepare; absent = every resident one. |
|
| logical, | intent(out), | optional | :: | found |
.false. if |
Remove a column; force= for a predefined one.
Removes a column from the table. Cheap, and it does NOT detach: dropping a column leaves every remaining column the same length, so the table can still read the ones it has not read yet. Dropping a column that was never read is the memory-reclaiming case and reads nothing.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | name |
column to remove. |
||
| logical, | intent(in), | optional | :: | force |
.true. to drop a PREDEFINED column. |
|
| logical, | intent(out), | optional | :: | found |
present: report a miss instead of aborting. |
Change the name a column is looked up by.
Changes a column's name. Only the name a caller looks it up by changes -- a
file-backed column that has not been read yet still reads from the same physical
column afterwards. A predefined column cannot be renamed at all (its accessor is bound
to the name at compile time), and there is no force= for it.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | old_name |
the column to rename. |
||
| character(len=*), | intent(in) | :: | new_name |
its new name; must not already exist. |
||
| logical, | intent(out), | optional | :: | found |
present: report a missing SOURCE column instead of aborting. |
Add a copy of a column, optionally of another kind.
Adds a NEW column holding a copy of name's values, leaving the source column
untouched. With to_kind absent it is a plain deep copy and works for EVERY kind the
library can read -- string, temporal, logical and the vector kinds included. With
to_kind given it copies and converts, and the conversion rules are %cast's.
exact defaults to .true. here, the opposite of %cast: a copy is usually taken to
keep something, so a value that would not survive the round trip is an error naming the
row and the value rather than a silent truncation. Every value is checked before
anything is written, so a rejected copy leaves the table exactly as it was. The unit
carries over unchanged -- a kind conversion is not a unit change.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | name |
the source column. |
||
| character(len=*), | intent(in) | :: | new_name |
the column to create. |
||
| integer, | intent(in), | optional | :: | to_kind |
target PK_* kind; absent keeps the source's. |
|
| logical, | intent(in), | optional | :: | exact |
.false. to allow lossy narrowing (default .true.). |
|
| logical, | intent(out), | optional | :: | found |
present: report a missing SOURCE column instead of aborting. |
Convert a column to another kind, in place.
Converts a column to to_kind IN PLACE, so that %col can be called with a kind the
calling code has decided on rather than the one the file happens to hold. A column
already of to_kind is left alone.
The conversions allowed are exactly those the reader and writer already perform between numeric kinds: int32 <-> int64, float32 <-> float64, and either integer kind to or from either real kind, scalar or vector, never changing a column's width. An integer overflow, and a real value with a fractional part converted to an integer kind, are errors naming the row and the value. Anything else -- logical, string, temporal, or a conversion that would change a column's rank -- is refused outright.
exact defaults to .false.: precision loss (real64 to real32, or a large integer to
a real kind) is silent, exactly as it is on the read path. Pass .true. to make any
value that would not survive the round trip an error instead.
This invalidates any pointer previously taken from %col for this column, which
Fortran cannot detect -- take the pointer again afterwards.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
||
| character(len=*), | intent(in) | :: | name |
the column to convert. |
||
| integer, | intent(in) | :: | to_kind |
target PK_* kind. |
||
| logical, | intent(in), | optional | :: | exact |
.true. to refuse any precision loss. |
|
| logical, | intent(out), | optional | :: | found |
present: report a miss instead of aborting. |
Keep only the rows a mask selects.
Keeps only the rows whose keep entry is .true., dropping the rest from EVERY column.
Row-structural, so it DETACHES the table from its file: after it, a column that was
never read can never be read, because the file's rows no longer line up with the rows
in memory. Materialize what you need first (%prefetch/%materialize_all). An
all-.true. mask removes no row, so it changes nothing and does not detach.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
||
| logical, | intent(in) | :: | keep(:) |
one entry per row; .true. to retain it. |
Release capacity appends left behind.
Releases the spare storage capacity that appending left behind, so every resident column occupies exactly the rows it holds.
A no-op on a table that has not been appended to. Capacity only ever comes from an
append: reading a column from a file allocates exact-fit, and so does every rebuild
(%filter_rows, %sort_by, %top_n, %delete_rows, %truncate), which hand their
memory back on their own. So this is safe to call unconditionally -- before
parquet_write_table, say -- and costs nothing when there is nothing to release. It is
not NEEDED before a write: the writer reads through a pointer that is already bounded by
the row count, so slack costs a write nothing.
It INVALIDATES every pointer obtained from %col and every row handle, because it
reallocates storage. That makes it the one procedure in parquet_tables_mutate that
does so -- everything else there leaves the row set and the storage alone. It does NOT
detach: the row set is unchanged, so the table keeps its file and a column not yet read
can still be read afterwards.
%generation() advances only if something was actually released, which is what
makes the no-op above observable: a caller following the documented
take-generation/compare/re-fetch pattern re-fetches only when a pointer really did die.
Refused on a shared table, like every other mutation except %append.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
Makes room for n COLUMNS, so that the %add_column calls that follow relocate nothing and leave an outstanding %col pointer valid. See its own doc-comment for the guarantee.
Makes room for n COLUMNS, and in doing so gives %add_column a guarantee it does not
otherwise have:
While spare column capacity remains, adding a column under a NEW name relocates no
existing column's storage, moves no existing column's slot position, and does not
advance %generation(). A pointer taken from %col, a parquet_table_col handle
and a parquet_table_row handle all stay valid across such a call. A reservation
survives %clone and %clone_structure, so a copy starts with the same spare
capacity. Replacing an existing column (force=.true.) is not covered -- it frees
that column's storage -- and neither is any row-structural mutation.
That is what makes the commonest derived-column idiom safe rather than merely
lucky. Without a reservation, an %add_column that happens to fill the slot array
reallocates it, and Fortran leaves a pointer's association status UNDEFINED across the
MOVE_ALLOC that does it -- code that usually works and is not permitted to:
call t%reserve_columns(t%ncols() + 2) ! two derived columns coming
call t%col("mag_g", g) ! pointers taken up front...
call t%col("mag_r", r)
call t%add_column("g_minus_r", g - r) ! ...and still valid here, by contract
Reserve first, take pointers second -- the same rule %reserve (rows) follows.
Growing the capacity is itself a relocation, so this call invalidates every outstanding
pointer and advances %generation() when it actually grows; below the current capacity
it is a no-op, exactly as %reserve below the current row count is.
n is the TOTAL capacity to make room for, not an increment. Deliberately a plain
default integer and not also an int64 form: a column count cannot exceed int32 -- Arrow's
own Schema::num_fields() is an int32_t and the writer already guards that ceiling --
so the dual-kind rule in CLAUDE.md does not apply. Refused on a shared table, like every
other structural change; does not detach.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table. |
||
| integer, | intent(in) | :: | n |
total column slots to make room for. |
Column slots allocated, or spare.
How many column slots are allocated (%ncols() of them in use), or -- with
free=.true. -- how many are spare.
This is what %reserve_columns acts on, and the two are inverses: after
call t%reserve_columns(n) with n above the current capacity, %column_capacity()
is n. Capacity only ever grows: %compact releases row storage rather than slots,
and %drop_column keeps the slot it vacated.
A metadata query -- it reads no column data.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table. |
||
| logical, | intent(in), | optional | :: | free |
.true.: report the SPARE slots instead. |
slots allocated, or spare.
Independent deep copy of this table.
Makes out an independent deep copy of this table -- the way to keep a version to go
back to, since mutation is in place and there is no undo.
Columns already read are copied; columns not yet read stay unread, so a clone costs what the table actually holds rather than what its file contains. A live file-backed table's clone opens its OWN reader on the same file and stays lazy; a detached or in-memory table's clone has no reader, like its source.
out must be declared as the same concrete type as self.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table to copy. |
||
| class(parquet_table), | intent(out) | :: | out |
receives the copy. |
Empty table with the same columns.
Makes out an EMPTY table with this table's columns: same names, kinds, widths and
units, zero rows, no file behind it.
This is the first half of the bulk-append idiom -- %clone_structure a batch, fill it
with %add_column/%set, then %append it -- which is how a program adds many rows
without appending one at a time. A batch made this way structurally cannot have the
wrong column set, and abandoning a half-filled one is just a variable going out of
scope. Columns whose type this library cannot read are left out.
resident_only=.true. copies only the columns that have been read, which is also the
way to clone the structure of a table whose other columns are still deferred.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(in) | :: | self |
the table to take the shape of. |
||
| class(parquet_table), | intent(out) | :: | out |
receives the empty table. |
||
| logical, | intent(in), | optional | :: | resident_only |
.true.: only columns already read. |
Binds a generated type's predefined columns.
Binds the predefined columns a GENERATED table type declares: checks each one, converts
it to the kind the schema declared, reads it, and marks the slot predefined.
This is the one library call a generated type's %init makes
(doc/pages/utilities/generated-tables.md); it is public only because a generated module is a
DIFFERENT module and parquet_table's components are private, so there is no other way
in. Hand-written code rarely needs it -- a table opened with parquet_open_table already
reaches every column by name.
Per column, in names order:
from_file column must exist (after any remap:), or this aborts naming it;widths entry, or this aborts;%cast converts it -- and a conversion that
can lose information (a narrowing, or an integer wider than the target real's mantissa)
emits a warning naming the table and column, since the declaration is a contract the
file does not have to honour exactly;from_file column is then read in ONE %prefetch, after the casts, so a
converted column decodes straight into its declared kind rather than being read twice;from_file .false. -- a source: computed field, or any column of a
from-scratch table -- is created with %nrows() all-null rows instead of being looked
for in the file.Passing from_file all .false. is exactly what an in-memory generated table does, so
the same procedure serves a file-backed and a from-scratch construction.
units FILLS IN a unit the column does not already have; it never overwrites one. A
read-in MAML describes the physical file and is authoritative about what a file column
holds, so a declaration must not override it -- but a computed column has no other
source of a unit at all, and a file opened without a MAML has none either, which is
where the declared one belongs.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table), | intent(inout) | :: | self |
the table, already opened or created. |
||
| character(len=*), | intent(in) | :: | names(:) |
internal column names, in declaration order. |
||
| integer, | intent(in) | :: | kinds(:) |
declared PK_* kind per name. |
||
| integer, | intent(in) | :: | widths(:) |
declared col_size per name (1 if scalar). |
||
| logical, | intent(in) | :: | from_file(:) |
.false. for a computed/from-scratch column. |
||
| character(len=*), | intent(in), | optional | :: | context |
schema name, for error messages. |
|
| logical, | intent(in), | optional | :: | exact |
refuse a lossy kind conversion; forwarded verbatim to %cast, whose own default applies when this is absent. |
|
| character(len=*), | intent(in), | optional | :: | units(:) |
declared unit per name ("" for none). |
Opens a file and binds every predefined column.
Opens the file and binds every predefined column this schema declares: each is checked for presence, kind and width,
converted to its declared kind where a conversion rule applies, and fully materialized before this returns. Every optional
argument is forwarded to parquet_open_table unchanged, except exact, which belongs to the kind conversion.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(inout) | :: | self |
the table to fill. |
||
| character(len=*), | intent(in) | :: | filename |
parquet file to open. |
||
| character(len=*), | intent(in), | optional | :: | maml |
read-in (Role-B) MAML describing the file. |
|
| type(parquet_filter), | intent(in), | optional | :: | filter |
row filter, in INTERNAL column names. |
|
| type(parquet_sortkey), | intent(in), | optional | :: | sort |
sort keys, in INTERNAL column names. |
|
| type(parquet_read_qc), | intent(in), | optional | :: | qc |
read-time qc, in INTERNAL column names. |
|
| logical, | intent(in), | optional | :: | qc_soft |
warn on a qc violation instead of aborting. |
|
| logical, | intent(in), | optional | :: | use_threads |
forwarded to parquet_open_reader. |
|
| real(kind=real64), | intent(in), | optional | :: | sample_fraction |
keep each row with this probability. |
|
| integer(kind=int64), | intent(in), | optional | :: | sample_seed |
seed for that draw; |
|
| logical, | intent(in), | optional | :: | exact |
refuse a kind conversion that would lose a value; forwarded verbatim to %cast, whose own default applies when this is absent. |
Opens one contiguous row range of a file, binding the same columns %init does. There is no sort argument: a sort
reorders rows across the whole file, so a slice could not be cut along it.
%init_slice specific taking i32 row bounds; see the generic binding.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(inout) | :: | self |
the table to fill. |
||
| character(len=*), | intent(in) | :: | filename |
parquet file to open. |
||
| integer(kind=int32), | intent(in) | :: | row_lo |
first file row to cover (1-based). |
||
| integer(kind=int32), | intent(in) | :: | row_hi |
last file row to cover (inclusive). |
||
| character(len=*), | intent(in), | optional | :: | maml |
read-in (Role-B) MAML describing the file. |
|
| type(parquet_filter), | intent(in), | optional | :: | filter |
row filter, in INTERNAL column names. |
|
| type(parquet_read_qc), | intent(in), | optional | :: | qc |
read-time qc, in INTERNAL column names. |
|
| logical, | intent(in), | optional | :: | qc_soft |
warn on a qc violation instead of aborting. |
|
| logical, | intent(in), | optional | :: | use_threads |
forwarded to parquet_open_reader. |
|
| real(kind=real64), | intent(in), | optional | :: | sample_fraction |
keep each row with this probability. |
|
| integer(kind=int64), | intent(in), | optional | :: | sample_seed |
seed for that draw; |
|
| logical, | intent(in), | optional | :: | exact |
refuse a kind conversion that would lose a value; forwarded verbatim to %cast, whose own default applies when this is absent. |
%init_slice specific taking i64 row bounds; see the generic binding.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(inout) | :: | self |
the table to fill. |
||
| character(len=*), | intent(in) | :: | filename |
parquet file to open. |
||
| integer(kind=int64), | intent(in) | :: | row_lo |
first file row to cover (1-based). |
||
| integer(kind=int64), | intent(in) | :: | row_hi |
last file row to cover (inclusive). |
||
| character(len=*), | intent(in), | optional | :: | maml |
read-in (Role-B) MAML describing the file. |
|
| type(parquet_filter), | intent(in), | optional | :: | filter |
row filter, in INTERNAL column names. |
|
| type(parquet_read_qc), | intent(in), | optional | :: | qc |
read-time qc, in INTERNAL column names. |
|
| logical, | intent(in), | optional | :: | qc_soft |
warn on a qc violation instead of aborting. |
|
| logical, | intent(in), | optional | :: | use_threads |
forwarded to parquet_open_reader. |
|
| real(kind=real64), | intent(in), | optional | :: | sample_fraction |
keep each row with this probability. |
|
| integer(kind=int64), | intent(in), | optional | :: | sample_seed |
seed for that draw; |
|
| logical, | intent(in), | optional | :: | exact |
refuse a kind conversion that would lose a value; forwarded verbatim to %cast, whose own default applies when this is absent. |
Builds this table in memory, with no file behind it: every predefined column is created empty, or with nrows all-null
rows. The output-catalogue shape.
%init_empty specific taking no row count: every predefined column is created with zero rows, to be grown with %append.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(inout) | :: | self |
the table to build. |
%init_empty specific taking an i32 row count: every predefined column is created with nrows all-null rows, ready to be
filled in place.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(inout) | :: | self |
the table to build. |
||
| integer(kind=int32), | intent(in) | :: | nrows |
rows to create, all null. |
%init_empty specific taking an i64 row count: every predefined column is created with nrows all-null rows, ready to be
filled in place.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(inout) | :: | self |
the table to build. |
||
| integer(kind=int64), | intent(in) | :: | nrows |
rows to create, all null. |
Resets/initializes YOUR components.
Resets and initializes this type's own components. Called by every constructor, so whatever you write here happens exactly once however the table was built -- and so your own parameters must be set AFTER %init returns, not before.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(inout) | :: | self |
the table just constructed. |
Copies this type's own components on %clone/%clone_structure. Mostly written for you.
Copies this type's own components when the table is cloned. out is guaranteed to have the same dynamic type as self.
structure_only is .true. when called from %clone_structure, i.e. when out has the same columns but no rows.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in) | :: | self |
the table being copied. |
||
| class(parquet_table), | intent(inout) | :: | out |
the copy, already holding the base state. |
||
| logical, | intent(in) | :: | structure_only |
.true. when called from %clone_structure. |
Object ID field. (int64) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
Object ID field. (int64) Row i alone. Repeats the column lookup on every call -- take %uberid() once instead when
iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
Object ID field. (int64) Row i alone. Repeats the column lookup on every call -- take %uberid() once instead when
iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
Object ID field. (int64) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and invalidated
by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
Object ID field. (int64) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and invalidated
by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A plain int32 scalar column. (int32) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
A plain int32 scalar column. (int32) Row i alone. Repeats the column lookup on every call -- take %idx() once instead
when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A plain int32 scalar column. (int32) Row i alone. Repeats the column lookup on every call -- take %idx() once instead
when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A plain int32 scalar column. (int32) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and
invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A plain int32 scalar column. (int32) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and
invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A boolean scalar column. (boolean) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
A boolean scalar column. (boolean) Row i alone. Repeats the column lookup on every call -- take %flag() once instead when
iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A boolean scalar column. (boolean) Row i alone. Repeats the column lookup on every call -- take %flag() once instead when
iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A boolean scalar column. (boolean) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and
invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A boolean scalar column. (boolean) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and
invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
Name of the object. (string) The packed string store itself, not a character array -- read it and edit its values in place, but do not change its length or element count through it.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the packed store.
Name of the object. (string) A zero-copy handle to row i. Repeats the column lookup on every call.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
handle to that row's value.
Name of the object. (string) A zero-copy handle to row i. Repeats the column lookup on every call.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
handle to that row's value.
Name of the object. (string) One zero-copy handle per row of [lo, hi], in order.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
one handle per row.
Name of the object. (string) One zero-copy handle per row of [lo, hi], in order.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
one handle per row.
Name of the object. (string) Copied out as a character array sized to the longest value present.
Name of the object. (string) Copied out as a character array sized to the longest value present. A null element comes back blank -- gate on %is_null to tell a null from a genuinely empty string.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in) | :: | self |
the table. |
||
| character(len=:), | intent(out), | allocatable | :: | arr(:) |
one value per row. |
Right ascension. Unit: deg. (float64) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
Right ascension. Unit: deg. (float64) Row i alone. Repeats the column lookup on every call -- take %ra() once instead
when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
Right ascension. Unit: deg. (float64) Row i alone. Repeats the column lookup on every call -- take %ra() once instead
when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
Right ascension. Unit: deg. (float64) Rows lo through hi inclusive. Points into the live storage: zero copy, writable,
and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
Right ascension. Unit: deg. (float64) Rows lo through hi inclusive. Points into the live storage: zero copy, writable,
and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
Declination. Unit: deg. (float64) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
Declination. Unit: deg. (float64) Row i alone. Repeats the column lookup on every call -- take %dec() once instead when
iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
Declination. Unit: deg. (float64) Row i alone. Repeats the column lookup on every call -- take %dec() once instead when
iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
Declination. Unit: deg. (float64) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and
invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
Declination. Unit: deg. (float64) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and
invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
Comoving coordinates. Unit: Mpc. (float32, width 3) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
Comoving coordinates. Unit: Mpc. (float32, width 3) Row i's 3 values. Repeats the column lookup on every call -- take
%crd() once instead when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
Comoving coordinates. Unit: Mpc. (float32, width 3) Row i's 3 values. Repeats the column lookup on every call -- take
%crd() once instead when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
Comoving coordinates. Unit: Mpc. (float32, width 3) Rows lo through hi inclusive, full width. Points into the live
storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows,
%truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
Comoving coordinates. Unit: Mpc. (float32, width 3) Rows lo through hi inclusive, full width. Points into the live
storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows,
%truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
An int32 vector column. (int32, width 2) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
An int32 vector column. (int32, width 2) Row i's 2 values. Repeats the column lookup on every call -- take %counts() once
instead when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
An int32 vector column. (int32, width 2) Row i's 2 values. Repeats the column lookup on every call -- take %counts() once
instead when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
An int32 vector column. (int32, width 2) Rows lo through hi inclusive, full width. Points into the live storage: zero
copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate,
%append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
An int32 vector column. (int32, width 2) Rows lo through hi inclusive, full width. Points into the live storage: zero
copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate,
%append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A boolean vector column. (boolean, width 2) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
A boolean vector column. (boolean, width 2) Row i's 2 values. Repeats the column lookup on every call -- take %passed()
once instead when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A boolean vector column. (boolean, width 2) Row i's 2 values. Repeats the column lookup on every call -- take %passed()
once instead when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A boolean vector column. (boolean, width 2) Rows lo through hi inclusive, full width. Points into the live storage: zero
copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate,
%append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A boolean vector column. (boolean, width 2) Rows lo through hi inclusive, full width. Points into the live storage: zero
copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate,
%append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A date column. (date) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
A date column. (date) Row i alone. Repeats the column lookup on every call -- take %obsdate() once instead when
iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A date column. (date) Row i alone. Repeats the column lookup on every call -- take %obsdate() once instead when
iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A date column. (date) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and invalidated by
any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A date column. (date) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and invalidated by
any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A millisecond time column. (time) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
A millisecond time column. (time) Row i alone. Repeats the column lookup on every call -- take %obstime() once instead
when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A millisecond time column. (time) Row i alone. Repeats the column lookup on every call -- take %obstime() once instead
when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A millisecond time column. (time) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and
invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A millisecond time column. (time) Rows lo through hi inclusive. Points into the live storage: zero copy, writable, and
invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A UTC microsecond timestamp column. (timestamp) The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
A UTC microsecond timestamp column. (timestamp) Row i alone. Repeats the column lookup on every call -- take %obsstamp()
once instead when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A UTC microsecond timestamp column. (timestamp) Row i alone. Repeats the column lookup on every call -- take %obsstamp()
once instead when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
A UTC microsecond timestamp column. (timestamp) Rows lo through hi inclusive. Points into the live storage: zero copy,
writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A UTC microsecond timestamp column. (timestamp) Rows lo through hi inclusive. Points into the live storage: zero copy,
writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append,
%append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
A string vector column, which has only the character copy-out form. (string, width 2) Copied out as a character array sized to the longest value present.
A string vector column, which has only the character copy-out form. (string, width 2) Copied out as a character array sized to the longest value present. A null element comes back blank -- gate on %is_null to tell a null from a genuinely empty string.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in) | :: | self |
the table. |
||
| character(len=:), | intent(out), | allocatable | :: | arr(:,:) |
(element, row). |
Filled in by the program, never read from the file. Unit: Jy. (float64) Computed: no file column is read for it. The whole column. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation (%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
alias to the column's storage.
Filled in by the program, never read from the file. Unit: Jy. (float64) Computed: no file column is read for it. Row i
alone. Repeats the column lookup on every call -- take %flux() once instead when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
Filled in by the program, never read from the file. Unit: Jy. (float64) Computed: no file column is read for it. Row i
alone. Repeats the column lookup on every call -- take %flux() once instead when iterating.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | i |
1-based row index within this table. |
alias to that row's storage.
Filled in by the program, never read from the file. Unit: Jy. (float64) Computed: no file column is read for it. Rows lo
through hi inclusive. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation
(%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int32), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int32), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
Filled in by the program, never read from the file. Unit: Jy. (float64) Computed: no file column is read for it. Rows lo
through hi inclusive. Points into the live storage: zero copy, writable, and invalidated by any row-structural mutation
(%filter_rows, %sort_by, %top_n, %delete_rows, %truncate, %append, %append_null_rows).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(parquet_table_test), | intent(in), | target | :: | self |
the table. |
|
| integer(kind=int64), | intent(in) | :: | lo |
first row of the range (1-based). |
||
| integer(kind=int64), | intent(in) | :: | hi |
last row of the range (inclusive). |
alias to that range's storage.
type, extends(parquet_table) :: parquet_table_test ! Components you declare below are copied by %clone and reset by %init automatically: ! the generator writes those statements into clone_extra/init_extra for you. ! >>>>> USER SECTION (components) -- your own table parameters; preserved on regeneration !> A worked example of a user-added table parameter, and the thing that makes this !! module's clone_extra/init_extra statements non-trivial: the generator writes !! `out%zeropoint = self%zeropoint` and `self%zeropoint = 0.0_real64` from this !! declaration, and test/test_table_codegen.f90 checks that both happen. real(real64) :: zeropoint = 0.0_real64 ! >>>>> END USER SECTION (components) contains procedure :: init => parquet_table_test_init !! Opens a file and binds every predefined column. procedure, private :: parquet_table_test_init_slice_i32 !! %init_slice specific, int32 bounds. procedure, private :: parquet_table_test_init_slice_i64 !! %init_slice specific, int64 bounds. !> Opens one contiguous row range of a file, binding the same columns %init does. There is no `sort` argument: a sort !! reorders rows across the whole file, so a slice could not be cut along it. generic :: init_slice => parquet_table_test_init_slice_i32, parquet_table_test_init_slice_i64 procedure, private :: parquet_table_test_init_empty_none !! %init_empty specific, no row count. procedure, private :: parquet_table_test_init_empty_i32 !! %init_empty specific, int32 row count. procedure, private :: parquet_table_test_init_empty_i64 !! %init_empty specific, int64 row count. !> Builds this table in memory, with no file behind it: every predefined column is created empty, or with `nrows` all-null !! rows. The output-catalogue shape. generic :: init_empty => parquet_table_test_init_empty_none, parquet_table_test_init_empty_i32, & parquet_table_test_init_empty_i64 procedure :: init_extra => parquet_table_test_init_extra !! Resets/initializes YOUR components. !> Copies this type's own components on %clone/%clone_structure. Mostly written for you. procedure :: clone_extra => parquet_table_test_clone_extra !> Object ID field. (int64) `%uberid()` is the whole column, `%uberid(i)` row i, `%uberid(lo,hi)` a row range -- all zero !! copy. Take `%uberid()` once outside a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_uberid_all procedure, private :: parquet_table_test_uberid_at_i32 procedure, private :: parquet_table_test_uberid_at_i64 procedure, private :: parquet_table_test_uberid_rng_i32 procedure, private :: parquet_table_test_uberid_rng_i64 generic :: uberid => parquet_table_test_uberid_all, parquet_table_test_uberid_at_i32, parquet_table_test_uberid_at_i64, & parquet_table_test_uberid_rng_i32, parquet_table_test_uberid_rng_i64 !> A plain int32 scalar column. (int32) `%idx()` is the whole column, `%idx(i)` row i, `%idx(lo,hi)` a row range -- all zero !! copy. Take `%idx()` once outside a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_idx_all procedure, private :: parquet_table_test_idx_at_i32 procedure, private :: parquet_table_test_idx_at_i64 procedure, private :: parquet_table_test_idx_rng_i32 procedure, private :: parquet_table_test_idx_rng_i64 generic :: idx => parquet_table_test_idx_all, parquet_table_test_idx_at_i32, parquet_table_test_idx_at_i64, & parquet_table_test_idx_rng_i32, parquet_table_test_idx_rng_i64 !> A boolean scalar column. (boolean) `%flag()` is the whole column, `%flag(i)` row i, `%flag(lo,hi)` a row range -- all !! zero copy. Take `%flag()` once outside a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_flag_all procedure, private :: parquet_table_test_flag_at_i32 procedure, private :: parquet_table_test_flag_at_i64 procedure, private :: parquet_table_test_flag_rng_i32 procedure, private :: parquet_table_test_flag_rng_i64 generic :: flag => parquet_table_test_flag_all, parquet_table_test_flag_at_i32, parquet_table_test_flag_at_i64, & parquet_table_test_flag_rng_i32, parquet_table_test_flag_rng_i64 !> Name of the object. (string) `%name()` is the packed string store, `%name(i)` a handle to row i, `%name(lo,hi)` one !! handle per row of the range. procedure, private :: parquet_table_test_name_all procedure, private :: parquet_table_test_name_at_i32 procedure, private :: parquet_table_test_name_at_i64 procedure, private :: parquet_table_test_name_rng_i32 procedure, private :: parquet_table_test_name_rng_i64 generic :: name => parquet_table_test_name_all, parquet_table_test_name_at_i32, parquet_table_test_name_at_i64, & parquet_table_test_name_rng_i32, parquet_table_test_name_rng_i64 !> Name of the object. (string) Copied out as a character array sized to the longest value present. procedure :: name_chr => parquet_table_test_name_chr !> Right ascension. Unit: deg. (float64) `%ra()` is the whole column, `%ra(i)` row i, `%ra(lo,hi)` a row range -- all zero !! copy. Take `%ra()` once outside a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_ra_all procedure, private :: parquet_table_test_ra_at_i32 procedure, private :: parquet_table_test_ra_at_i64 procedure, private :: parquet_table_test_ra_rng_i32 procedure, private :: parquet_table_test_ra_rng_i64 generic :: ra => parquet_table_test_ra_all, parquet_table_test_ra_at_i32, parquet_table_test_ra_at_i64, & parquet_table_test_ra_rng_i32, parquet_table_test_ra_rng_i64 !> Declination. Unit: deg. (float64) `%dec()` is the whole column, `%dec(i)` row i, `%dec(lo,hi)` a row range -- all zero !! copy. Take `%dec()` once outside a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_dec_all procedure, private :: parquet_table_test_dec_at_i32 procedure, private :: parquet_table_test_dec_at_i64 procedure, private :: parquet_table_test_dec_rng_i32 procedure, private :: parquet_table_test_dec_rng_i64 generic :: dec => parquet_table_test_dec_all, parquet_table_test_dec_at_i32, parquet_table_test_dec_at_i64, & parquet_table_test_dec_rng_i32, parquet_table_test_dec_rng_i64 !> Comoving coordinates. Unit: Mpc. (float32, width 3) `%crd()` is the whole column, `%crd(i)` row i, `%crd(lo,hi)` a row !! range -- all zero copy. Take `%crd()` once outside a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_crd_all procedure, private :: parquet_table_test_crd_at_i32 procedure, private :: parquet_table_test_crd_at_i64 procedure, private :: parquet_table_test_crd_rng_i32 procedure, private :: parquet_table_test_crd_rng_i64 generic :: crd => parquet_table_test_crd_all, parquet_table_test_crd_at_i32, parquet_table_test_crd_at_i64, & parquet_table_test_crd_rng_i32, parquet_table_test_crd_rng_i64 !> An int32 vector column. (int32, width 2) `%counts()` is the whole column, `%counts(i)` row i, `%counts(lo,hi)` a row !! range -- all zero copy. Take `%counts()` once outside a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_counts_all procedure, private :: parquet_table_test_counts_at_i32 procedure, private :: parquet_table_test_counts_at_i64 procedure, private :: parquet_table_test_counts_rng_i32 procedure, private :: parquet_table_test_counts_rng_i64 generic :: counts => parquet_table_test_counts_all, parquet_table_test_counts_at_i32, parquet_table_test_counts_at_i64, & parquet_table_test_counts_rng_i32, parquet_table_test_counts_rng_i64 !> A boolean vector column. (boolean, width 2) `%passed()` is the whole column, `%passed(i)` row i, `%passed(lo,hi)` a row !! range -- all zero copy. Take `%passed()` once outside a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_passed_all procedure, private :: parquet_table_test_passed_at_i32 procedure, private :: parquet_table_test_passed_at_i64 procedure, private :: parquet_table_test_passed_rng_i32 procedure, private :: parquet_table_test_passed_rng_i64 generic :: passed => parquet_table_test_passed_all, parquet_table_test_passed_at_i32, parquet_table_test_passed_at_i64, & parquet_table_test_passed_rng_i32, parquet_table_test_passed_rng_i64 !> A date column. (date) `%obsdate()` is the whole column, `%obsdate(i)` row i, `%obsdate(lo,hi)` a row range -- all zero !! copy. Take `%obsdate()` once outside a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_obsdate_all procedure, private :: parquet_table_test_obsdate_at_i32 procedure, private :: parquet_table_test_obsdate_at_i64 procedure, private :: parquet_table_test_obsdate_rng_i32 procedure, private :: parquet_table_test_obsdate_rng_i64 generic :: obsdate => parquet_table_test_obsdate_all, parquet_table_test_obsdate_at_i32, & parquet_table_test_obsdate_at_i64, parquet_table_test_obsdate_rng_i32, parquet_table_test_obsdate_rng_i64 !> A millisecond time column. (time) `%obstime()` is the whole column, `%obstime(i)` row i, `%obstime(lo,hi)` a row range -- !! all zero copy. Take `%obstime()` once outside a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_obstime_all procedure, private :: parquet_table_test_obstime_at_i32 procedure, private :: parquet_table_test_obstime_at_i64 procedure, private :: parquet_table_test_obstime_rng_i32 procedure, private :: parquet_table_test_obstime_rng_i64 generic :: obstime => parquet_table_test_obstime_all, parquet_table_test_obstime_at_i32, & parquet_table_test_obstime_at_i64, parquet_table_test_obstime_rng_i32, parquet_table_test_obstime_rng_i64 !> A UTC microsecond timestamp column. (timestamp) `%obsstamp()` is the whole column, `%obsstamp(i)` row i, !! `%obsstamp(lo,hi)` a row range -- all zero copy. Take `%obsstamp()` once outside a loop; the indexed forms repeat the !! column lookup. procedure, private :: parquet_table_test_obsstamp_all procedure, private :: parquet_table_test_obsstamp_at_i32 procedure, private :: parquet_table_test_obsstamp_at_i64 procedure, private :: parquet_table_test_obsstamp_rng_i32 procedure, private :: parquet_table_test_obsstamp_rng_i64 generic :: obsstamp => parquet_table_test_obsstamp_all, parquet_table_test_obsstamp_at_i32, & parquet_table_test_obsstamp_at_i64, parquet_table_test_obsstamp_rng_i32, parquet_table_test_obsstamp_rng_i64 !> A string vector column, which has only the character copy-out form. (string, width 2) Copied out as a character array !! sized to the longest value present. procedure :: tags_chr => parquet_table_test_tags_chr !> Filled in by the program, never read from the file. Unit: Jy. (float64) Computed: no file column is read for it. !! `%flux()` is the whole column, `%flux(i)` row i, `%flux(lo,hi)` a row range -- all zero copy. Take `%flux()` once outside !! a loop; the indexed forms repeat the column lookup. procedure, private :: parquet_table_test_flux_all procedure, private :: parquet_table_test_flux_at_i32 procedure, private :: parquet_table_test_flux_at_i64 procedure, private :: parquet_table_test_flux_rng_i32 procedure, private :: parquet_table_test_flux_rng_i64 generic :: flux => parquet_table_test_flux_all, parquet_table_test_flux_at_i32, parquet_table_test_flux_at_i64, & parquet_table_test_flux_rng_i32, parquet_table_test_flux_rng_i64 ! >>>>> USER SECTION (bindings) -- your own type-bound procedures; preserved on regeneration ! >>>>> END USER SECTION (bindings) end type parquet_table_test