Secondary discriminator: how a column physically stores its data.
'packed' — a single flat typed-array buffer (or dictionary +
indices for StringColumn, or array of cells for ArrayColumn).
Reducers and other hot-path callers can dereference the kind-
specific field (e.g. Float64Column._values) directly after
narrowing on kindandstorage === 'packed'.
'chunked' — a sequence of packed chunks concatenated logically
via chunkOffsets. Reads/scans route through chunk lookup; the
per-chunk hot-path fields are not surfaced at the top level.
Callers that need a flat buffer call materialize first.
The same kind covers both: e.g. Float64Column and
ChunkedFloat64Column both have kind: 'number'. Adding the
storage discriminator at sub-step 1g lets the Column union
widen to include chunked variants without breaking kind-based
narrowing in code that doesn't touch hot-path fields.
Secondary discriminator: how a column physically stores its data.
'packed'— a single flat typed-array buffer (or dictionary + indices forStringColumn, or array of cells forArrayColumn). Reducers and other hot-path callers can dereference the kind- specific field (e.g.Float64Column._values) directly after narrowing onkindandstorage === 'packed'.'chunked'— a sequence of packed chunks concatenated logically viachunkOffsets. Reads/scans route through chunk lookup; the per-chunk hot-path fields are not surfaced at the top level. Callers that need a flat buffer callmaterializefirst.The same
kindcovers both: e.g.Float64ColumnandChunkedFloat64Columnboth havekind: 'number'. Adding thestoragediscriminator at sub-step 1g lets theColumnunion widen to include chunked variants without breaking kind-based narrowing in code that doesn't touch hot-path fields.