pub struct Places { /* private fields */ }Expand description
The per-part row count prefix sum of one table, built once at open.
Sixty four u32 per stripe plus a u64 per stripe, which for a hundred million rows is about
four hundred kilobytes. Section 4.2 of spec/graph/04-in-memory.md says it is built at open
rather than walked per lookup, and the reason is arithmetic rather than taste: a join gathers
millions of times and an open happens once.
Implementations§
Source§impl Places
impl Places
Sourcepub fn build(per_stripe: &[Vec<u32>]) -> Result<Self>
pub fn build(per_stripe: &[Vec<u32>]) -> Result<Self>
Builds the prefix sum from the per-part row counts of every stripe, in stripe order.
§Errors
If a stripe holds more than STRIPE_PARTS parts, if a part is wider than PART_ROWS,
if a part other than the last of its stripe is short, or if the total overflows a u64.
Every one of those is a malformed directory rather than a usage error, and the reason they
are checked here rather than trusted is that this structure is what a link join indexes
with: a prefix sum that is wrong by one resolves every rid past the fault to the wrong
row, and a wrong row is a wrong answer rather than a slow one.
Sourcepub fn place(&self, rid: Rid) -> Option<Place>
pub fn place(&self, rid: Rid) -> Option<Place>
Resolves a rid to its physical position, or None when it is past the end of the table.
None rather than an error because a link may legitimately point past the end: a forward
link built against one generation and read against another is stale, and section 3.1 of
spec/graph/03-the-file-format.md wants a stale section ignored rather than raised. The
generation check is what catches that case first; this is the second line.
Sourcepub fn rid(&self, place: Place) -> Option<Rid>
pub fn rid(&self, place: Place) -> Option<Rid>
The rid of a physical position, which is Places::place backwards.
The forward link build needs this: it walks the parent table in physical order and has to
record what each row’s rid is.
None when the position is not in the table.
Sourcepub fn stripe_rows(&self, stripe: u32) -> Option<u64>
pub fn stripe_rows(&self, stripe: u32) -> Option<u64>
Rows in one stripe, or None when there is no such stripe.