Skip to main content

Module vector

Module vector 

Source
Expand description

The vector itself.

spec/07-execution.md section 7.1 calls this the widest interface in the system, says every operator depends on it, and says changing it after twenty operators exist is expensive. So it is written before the first operator rather than after the fifth.

A vector is a type, a length of at most VECTOR_SIZE, a physical form, a validity representation and some data. Four of the forms are the ones in spec/04-architecture.md section 4.3: flat, constant, sequence and dictionary. Run length is the fifth and it is the first of the encoded ones, which arrive one at a time with the kernels that read them rather than all at once ahead of anything that can use them.

Dictionary and run length are the pair worth understanding together, because they answer different questions about the same column. A dictionary says which distinct values there are, so it wins on low cardinality however the rows are ordered. Run length says where the values stop, so it wins on a clustered column however many distinct values it has. A column can want either one without wanting the other, and hits has columns of both kinds.

What is not here yet. Buffers are owned. Section 7.1 says a vector borrowed from a buffer managed page carries a pin, and there is no buffer manager until M2, so there is nothing to pin and pretending otherwise would be an interface built against an imaginary caller. Nested types are not stored yet either, for the same reason: a LIST(STRUCT(...)) is offsets plus child column chunks, and child column chunks are storage.

Structs§

Packed
The bits of a packed vector and what they mean, for a kernel that wants to stay in code space.
Vector
A type, a length, a validity representation and some data.

Enums§

Data
The values of a flat vector, one Rust vector per physical type.
Form
Which physical form a vector is in.

Constants§

PACKED_WIDTH_MAX
The widest a packed code is allowed to be.
PACKING_PAYS_AT
How much smaller packing has to be before it is worth the shift and the mask on every read.
VECTOR_SIZE
How many values are in a full vector.