tiny.sql.LeafPage
Defined in page.
API (17)
Actions
Public operations.
cellCountcopyTodeletefirstKeyfreeBytesfromValidated: Wraps a leaf image thatloadvalidated, without walking its cells again.generationgetidinitlastKeyloadputrangesplitPutusedBytes
Fields and members
Public fields and members.
Source
Source: lib/sql/src/page.zig:102
zig
pub const Leaf = struct { bytes: *[size]u8, pub fn init(bytes: *[size]u8, page_id: u64) Leaf { var leaf = Leaf{ .bytes = bytes }; @memset(leaf.bytes, 0); @memcpy(leaf.bytes[magic_offset..][0..magic.len], magic[0..]); leaf.bytes[version_offset] = format_version; leaf.bytes[kind_offset] = leaf_kind; leaf.writeU16(flags_offset, 0); leaf.writeU64(id_offset, page_id); leaf.writeU64(generation_offset, 0); leaf.writeU16(lower_offset, header_size); leaf.writeU16(upper_offset, size); leaf.writeU16(cells_offset, 0); leaf.writeU16(reserved_offset, 0); return leaf; } pub fn load(bytes: *[size]u8) Error!Leaf { const leaf = Leaf{ .bytes = bytes }; try leaf.validate(); return leaf; } /// Wraps a leaf image that `load` validated, without walking its cells /// again. The image must be unchanged since that `load`. A reader that /// returns to one leaf once per cell validates it once through `load` and /// resumes through this. pub fn fromValidated(bytes: *[size]u8) Leaf { std.debug.assert(bytes[kind_offset] == leaf_kind); return .{ .bytes = bytes }; } pub fn id(self: *const Leaf) u64 { return self.readU64(id_offset); } pub fn generation(self: *const Leaf) u64 { return self.readU64(generation_offset); } pub fn cellCount(self: *const Leaf) usize { return self.readU16(cells_offset); } pub fn firstKey(self: *const Leaf) ?[]const u8 { if (self.cellCount() == 0) return null; return self.keyAt(0); } pub fn freeBytes(self: *const Leaf) usize { const lower_bound = self.lower(); const upper_bound = self.upper(); if (upper_bound < lower_bound) return 0; return upper_bound - lower_bound; } pub fn usedBytes(self: *const Leaf) usize { return size - self.freeBytes(); } pub fn get(self: *const Leaf, key: []const u8) ?[]const u8 { const phase = trace.scope("page.leaf.get"); defer phase.end(); const index = self.lowerBound(key); if (index < self.cellCount() and std.mem.eql(u8, self.keyAt(index), key)) return self.valueAt(index); return null; } pub fn put(self: *Leaf, key: []const u8, value: []const u8) Error!void { const phase = trace.scope("page.leaf.put"); defer phase.end(); try checkLengths(key, value); const next_generation = try self.nextGeneration(); const existing_index = self.lowerBound(key); if (existing_index == self.cellCount() or !std.mem.eql(u8, self.keyAt(existing_index), key)) { try self.cells().insert(existing_index, key, value); self.writeU64(generation_offset, next_generation); trace.progress("page.leaf.put.insert.complete"); return; } const slot = self.slotAt(existing_index); if (value.len == slot.value_len) { const value_offset: usize = slot.offset + slot.key_len; @memcpy(self.bytes[value_offset..][0..value.len], value); self.writeU64(generation_offset, next_generation); trace.progress("page.leaf.put.inplace.complete"); return; } var scratch: [size]u8 = undefined; var rebuilt = Leaf.init(&scratch, self.id()); rebuilt.writeU64(generation_offset, next_generation); var inserted = false; var index: usize = 0; while (index < self.cellCount()) : (index += 1) { const entry = self.entryAt(index); switch (simd.order(Bytes, entry.key, key)) { .lt => try rebuilt.appendEntry(entry.key, entry.value), .eq => { if (!inserted) { try rebuilt.appendEntry(key, value); inserted = true; } }, .gt => { if (!inserted) { try rebuilt.appendEntry(key, value); inserted = true; } try rebuilt.appendEntry(entry.key, entry.value); }, } } if (!inserted) try rebuilt.appendEntry(key, value); self.bytes.* = scratch; trace.progress("page.leaf.put.complete"); } pub fn delete(self: *Leaf, key: []const u8) Error!void { const phase = trace.scope("page.leaf.delete"); defer phase.end(); const next_generation = try self.nextGeneration(); const index = self.lowerBound(key); if (index == self.cellCount() or !std.mem.eql(u8, self.keyAt(index), key)) { return error.KeyNotFound; } self.cells().remove(index); self.writeU64(generation_offset, next_generation); trace.progress("page.leaf.delete.complete"); } pub fn range(self: *const Leaf, start: ?[]const u8, end: ?[]const u8) Error!Range { if (start) |lower_key| { if (end) |upper_key| { if (simd.order(Bytes, lower_key, upper_key) == .gt) return error.InvalidRange; } } return .{ .leaf = self, .end = end, .index = if (start) |key| self.lowerBound(key) else 0, }; } pub fn splitPut(self: *const Leaf, left: *Leaf, right: *Leaf, key: []const u8, value: []const u8) Error![]const u8 { const phase = trace.scope("page.leaf.split_put"); defer phase.end(); try checkLengths(key, value); const next_generation = try self.nextGeneration(); left.writeU64(generation_offset, next_generation); right.writeU64(generation_offset, next_generation); var replacement = false; var index: usize = 0; while (index < self.cellCount()) : (index += 1) { if (std.mem.eql(u8, self.keyAt(index), key)) replacement = true; } const total = self.cellCount() + if (replacement) @as(usize, 0) else 1; const split_index = try splitIndexFor(self, key, value.len, total); var ordinal: usize = 0; var inserted = false; index = 0; while (index < self.cellCount()) : (index += 1) { const entry = self.entryAt(index); switch (simd.order(Bytes, entry.key, key)) { .lt => { try appendSplitEntry(left, right, split_index, &ordinal, entry.key, entry.value); }, .eq => { if (!inserted) { try appendSplitEntry(left, right, split_index, &ordinal, key, value); inserted = true; } }, .gt => { if (!inserted) { try appendSplitEntry(left, right, split_index, &ordinal, key, value); inserted = true; } try appendSplitEntry(left, right, split_index, &ordinal, entry.key, entry.value); }, } } if (!inserted) try appendSplitEntry(left, right, split_index, &ordinal, key, value); return right.firstKey() orelse error.InvalidPage; } pub fn copyTo(self: *const Leaf, target: *Leaf) Error!void { target.writeU64(generation_offset, self.generation()); var index: usize = 0; while (index < self.cellCount()) : (index += 1) { const entry = self.entryAt(index); try target.appendEntry(entry.key, entry.value); } } fn validate(self: *const Leaf) Error!void { if (!std.mem.eql(u8, self.bytes[magic_offset..][0..magic.len], magic[0..])) return error.InvalidPage; if (self.bytes[version_offset] != format_version) return error.InvalidPage; if (self.bytes[kind_offset] != leaf_kind) return error.InvalidPage; if (self.readU16(flags_offset) != 0) return error.InvalidPage; if (self.readU16(reserved_offset) != 0) return error.InvalidPage; const count = self.cellCount(); if (count > (size - header_size) / slot_size) return error.InvalidPage; const lower_bound = self.lower(); const upper_bound = self.upper(); if (lower_bound != header_size + count * slot_size) return error.InvalidPage; if (upper_bound < lower_bound or upper_bound > size) return error.InvalidPage; var index: usize = 0; while (index < count) : (index += 1) { const slot = self.slotAt(index); const offset: usize = slot.offset; const payload_end = offset + @as(usize, slot.key_len) + @as(usize, slot.value_len); if (offset < upper_bound or payload_end > size) return error.InvalidPage; if (slot.flags != 0) return error.InvalidPage; if (index > 0 and simd.order(Bytes, self.keyAt(index - 1), self.keyAt(index)) != .lt) return error.InvalidPage; } } fn appendEntry(self: *Leaf, key: []const u8, value: []const u8) Error!void { try self.cells().insert(self.cellCount(), key, value); } fn cells(self: *Leaf) Cells { return .{ .bytes = self.bytes }; } fn lowerBound(self: *const Leaf, key: []const u8) usize { var low: usize = 0; var high = self.cellCount(); while (low < high) { const mid = low + (high - low) / 2; switch (simd.order(Bytes, self.keyAt(mid), key)) { .lt => low = mid + 1, .eq, .gt => high = mid, } } return low; } fn nextGeneration(self: *const Leaf) Error!u64 { const current = self.generation(); if (current == std.math.maxInt(u64)) return error.GenerationOverflow; return current + 1; } pub fn lastKey(self: *const Leaf) ?[]const u8 { const count = self.cellCount(); if (count == 0) return null; return self.keyAt(count - 1); } fn entryAt(self: *const Leaf, index: usize) Entry { return .{ .key = self.keyAt(index), .value = self.valueAt(index) }; } fn keyAt(self: *const Leaf, index: usize) []const u8 { const slot = self.slotAt(index); const start: usize = slot.offset; return self.bytes[start..][0..slot.key_len]; } fn valueAt(self: *const Leaf, index: usize) []const u8 { const slot = self.slotAt(index); const start: usize = slot.offset + slot.key_len; return self.bytes[start..][0..slot.value_len]; } fn slotAt(self: *const Leaf, index: usize) Slot { const offset = header_size + index * slot_size; return .{ .offset = self.readU16(offset), .key_len = self.readU16(offset + 2), .value_len = self.readU16(offset + 4), .flags = self.readU16(offset + 6), }; } fn lower(self: *const Leaf) usize { return self.readU16(lower_offset); } fn upper(self: *const Leaf) usize { return self.readU16(upper_offset); } fn readU16(self: *const Leaf, offset: usize) u16 { return std.mem.readInt(u16, self.bytes[offset..][0..2], .big); } fn readU64(self: *const Leaf, offset: usize) u64 { return std.mem.readInt(u64, self.bytes[offset..][0..8], .big); } fn writeU16(self: *Leaf, offset: usize, value: u16) void { std.mem.writeInt(u16, self.bytes[offset..][0..2], value, .big); } fn writeU64(self: *Leaf, offset: usize, value: u64) void { std.mem.writeInt(u64, self.bytes[offset..][0..8], value, .big); }};Source: lib/sql/src/root.zig:56
zig
pub const LeafPage = page.Leaf;Complete caller list for LeafPage.cellCount
16 direct callers.
lib.sql.src.page.Leaf.appendEntry[method] — private source atlib/sql/src/page.zig:330in nearest public ownertiny.sql.pagetiny.sql.LeafPage.copyTo[method] atlib/sql/src/page.zig:297tiny.sql.LeafPage.delete[method] atlib/sql/src/page.zig:227tiny.sql.LeafPage.firstKey[method] atlib/sql/src/page.zig:148tiny.sql.LeafPage.get[method] atlib/sql/src/page.zig:164tiny.sql.LeafPage.lastKey[method] atlib/sql/src/page.zig:357lib.sql.src.page.Leaf.lowerBound[method] — private source atlib/sql/src/page.zig:338in nearest public ownertiny.sql.pagetiny.sql.LeafPage.put[method] atlib/sql/src/page.zig:172tiny.sql.LeafPage.splitPut[method] atlib/sql/src/page.zig:253lib.sql.src.page.Leaf.validate[method] — private source atlib/sql/src/page.zig:306in nearest public ownertiny.sql.pagetiny.sql.page.Range.next[method] atlib/sql/src/page.zig:1054lib.sql.src.page.test_leaf_page_initializes_a_stable_header[function] — test source atlib/sql/src/page.zig:1251in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_inserts_between_cells_without_moving_them[function] — test source atlib/sql/src/page.zig:1358in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_replacement_and_deletion_compact_payload_bytes[function] — test source atlib/sql/src/page.zig:1290in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_split_balances_uneven_value_sizes[function] — test source atlib/sql/src/page.zig:1420in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_stores_byte_keys_in_sorted_order[function] — test source atlib/sql/src/page.zig:1265in nearest public ownertiny.sql.page
Complete call list for LeafPage.delete
7 direct calls.
tiny.sql.LeafPage.cellCount[method] atlib/sql/src/page.zig:144lib.sql.src.page.Leaf.cells[method] — private source atlib/sql/src/page.zig:334in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.keyAt[method] — private source atlib/sql/src/page.zig:367in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.lowerBound[method] — private source atlib/sql/src/page.zig:338in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.nextGeneration[method] — private source atlib/sql/src/page.zig:351in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.writeU64[method] — private source atlib/sql/src/page.zig:409in nearest public ownertiny.sql.pagetiny.sql.trace.progress[function] atlib/sql/src/trace.zig:7
Complete caller list for LeafPage.generation
7 direct callers.
tiny.sql.LeafPage.copyTo[method] atlib/sql/src/page.zig:297lib.sql.src.page.Leaf.nextGeneration[method] — private source atlib/sql/src/page.zig:351in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_deletion_closes_the_gap_and_zeroes_the_freed_bytes[function] — test source atlib/sql/src/page.zig:1377in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_initializes_a_stable_header[function] — test source atlib/sql/src/page.zig:1251in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_inserts_between_cells_without_moving_them[function] — test source atlib/sql/src/page.zig:1358in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_replacement_and_deletion_compact_payload_bytes[function] — test source atlib/sql/src/page.zig:1290in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_same_size_replacement_updates_cell_in_place[function] — test source atlib/sql/src/page.zig:1308in nearest public ownertiny.sql.page
Complete caller list for LeafPage.get
7 direct callers.
lib.sql.src.page.test_leaf_page_deletion_closes_the_gap_and_zeroes_the_freed_bytes[function] — test source atlib/sql/src/page.zig:1377in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_failed_writes_leave_existing_bytes_intact[function] — test source atlib/sql/src/page.zig:1344in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_inserts_between_cells_without_moving_them[function] — test source atlib/sql/src/page.zig:1358in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_replacement_and_deletion_compact_payload_bytes[function] — test source atlib/sql/src/page.zig:1290in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_same_size_replacement_updates_cell_in_place[function] — test source atlib/sql/src/page.zig:1308in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_split_balances_uneven_value_sizes[function] — test source atlib/sql/src/page.zig:1420in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_stores_byte_keys_in_sorted_order[function] — test source atlib/sql/src/page.zig:1265in nearest public ownertiny.sql.page
Complete caller list for LeafPage.init
26 direct callers.
tiny.sql.LeafPage.put[method] atlib/sql/src/page.zig:172lib.sql.src.page.test_leaf_page_deletion_closes_the_gap_and_zeroes_the_freed_bytes[function] — test source atlib/sql/src/page.zig:1377in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_failed_writes_leave_existing_bytes_intact[function] — test source atlib/sql/src/page.zig:1344in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_initializes_a_stable_header[function] — test source atlib/sql/src/page.zig:1251in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_insert_into_a_full_page_leaves_it_unchanged[function] — test source atlib/sql/src/page.zig:1403in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_inserts_between_cells_without_moving_them[function] — test source atlib/sql/src/page.zig:1358in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_range_scans_honor_half_open_bounds[function] — test source atlib/sql/src/page.zig:1326in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_replacement_and_deletion_compact_payload_bytes[function] — test source atlib/sql/src/page.zig:1290in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_same_size_replacement_updates_cell_in_place[function] — test source atlib/sql/src/page.zig:1308in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_split_balances_uneven_value_sizes[function] — test source atlib/sql/src/page.zig:1420in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_stores_byte_keys_in_sorted_order[function] — test source atlib/sql/src/page.zig:1265in nearest public ownertiny.sql.pagelib.sql.src.page.test_pages_copy_entries_into_a_new_page_identity[function] — test source atlib/sql/src/page.zig:1622in nearest public ownertiny.sql.pagelib.sql.src.properties.page.LeafProperty.property[function] — private source atlib/sql/src/properties/page.zig:71in nearest public ownerlib.sql.src.properties.pagelib.sql.src.properties.page.expectLeaf[function] — private source atlib/sql/src/properties/page.zig:41in nearest public ownerlib.sql.src.properties.pagelib.sql.src.tree.Tree.clearInWrite[method] — private source atlib/sql/src/tree.zig:1097in nearest public ownertiny.sql.treelib.sql.src.tree.Tree.deleteRootBranch[method] — private source atlib/sql/src/tree.zig:1362in nearest public ownertiny.sql.treelib.sql.src.tree.Tree.putLeaf[method] — private source atlib/sql/src/tree.zig:1290in nearest public ownertiny.sql.treelib.sql.src.tree.Tree.putRootLeaf[method] — private source atlib/sql/src/tree.zig:1195in nearest public ownertiny.sql.treelib.sql.src.tree.Write.readRoot[method] — private source atlib/sql/src/tree.zig:586in nearest public ownertiny.sql.treelib.sql.src.tree.Write.readRootPage[method] — private source atlib/sql/src/tree.zig:620in nearest public ownertiny.sql.treelib.sql.src.tree.copyRootPage[function] — private source atlib/sql/src/tree.zig:2202in nearest public ownertiny.sql.treelib.sql.src.tree.readRoot[function] — private source atlib/sql/src/tree.zig:674in nearest public ownertiny.sql.treelib.sql.src.tree.test_allocated_roots_clear_recycled_page_images[function] — test source atlib/sql/src/tree.zig:3029in nearest public ownertiny.sql.treelib.sql.src.tree.test_tree_delete_retains_a_safe_lower_bound_when_exact_replacement_does_not_fit[function] — test source atlib/sql/src/tree.zig:2861in nearest public ownertiny.sql.treelib.sql.src.tree.test_tree_scan_projection_controls_overflow_materialization[function] — test source atlib/sql/src/tree.zig:3354in nearest public ownertiny.sql.treelib.sql.src.tree.test_tree_write_trusts_a_snapshot_page_only_after_validating_it[function] — test source atlib/sql/src/tree.zig:3913in nearest public ownertiny.sql.tree
Complete caller list for LeafPage.load
17 direct callers.
lib.sql.src.page.test_leaf_page_deletion_closes_the_gap_and_zeroes_the_freed_bytes[function] — test source atlib/sql/src/page.zig:1377in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_initializes_a_stable_header[function] — test source atlib/sql/src/page.zig:1251in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_inserts_between_cells_without_moving_them[function] — test source atlib/sql/src/page.zig:1358in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_same_size_replacement_updates_cell_in_place[function] — test source atlib/sql/src/page.zig:1308in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_split_balances_uneven_value_sizes[function] — test source atlib/sql/src/page.zig:1420in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_stores_byte_keys_in_sorted_order[function] — test source atlib/sql/src/page.zig:1265in nearest public ownertiny.sql.pagelib.sql.src.page.test_pages_copy_entries_into_a_new_page_identity[function] — test source atlib/sql/src/page.zig:1622in nearest public ownertiny.sql.pagelib.sql.src.properties.page.LeafProperty.property[function] — private source atlib/sql/src/properties/page.zig:71in nearest public ownerlib.sql.src.properties.pagelib.sql.src.tree.RootBuild.finishLeaf[method] — private source atlib/sql/src/tree.zig:1835in nearest public ownertiny.sql.treelib.sql.src.tree.Tree.collectReleasedPages[method] — private source atlib/sql/src/tree.zig:1495in nearest public ownertiny.sql.treelib.sql.src.tree.copyRootPage[function] — private source atlib/sql/src/tree.zig:2202in nearest public ownertiny.sql.treelib.sql.src.tree.corruptLastLeaf[function] — private source atlib/sql/src/tree.zig:4009in nearest public ownertiny.sql.treelib.sql.src.tree.loadTreePage[function] — private source atlib/sql/src/tree.zig:1998in nearest public ownertiny.sql.treelib.sql.src.tree.summarizePage[function] — private source atlib/sql/src/tree.zig:2043in nearest public ownertiny.sql.treelib.sql.src.tree.test_tree_delete_compacts_recursive_branches_back_to_a_root_leaf[function] — test source atlib/sql/src/tree.zig:2914in nearest public ownertiny.sql.treelib.sql.src.tree.test_tree_delete_removes_empty_child_and_collapses_root_branch[function] — test source atlib/sql/src/tree.zig:2807in nearest public ownertiny.sql.treelib.sql.src.tree.validTreePage[function] — private source atlib/sql/src/tree.zig:2018in nearest public ownertiny.sql.tree
Complete caller list for LeafPage.put
15 direct callers.
lib.sql.src.page.test_leaf_page_deletion_closes_the_gap_and_zeroes_the_freed_bytes[function] — test source atlib/sql/src/page.zig:1377in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_failed_writes_leave_existing_bytes_intact[function] — test source atlib/sql/src/page.zig:1344in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_insert_into_a_full_page_leaves_it_unchanged[function] — test source atlib/sql/src/page.zig:1403in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_inserts_between_cells_without_moving_them[function] — test source atlib/sql/src/page.zig:1358in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_range_scans_honor_half_open_bounds[function] — test source atlib/sql/src/page.zig:1326in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_replacement_and_deletion_compact_payload_bytes[function] — test source atlib/sql/src/page.zig:1290in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_same_size_replacement_updates_cell_in_place[function] — test source atlib/sql/src/page.zig:1308in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_split_balances_uneven_value_sizes[function] — test source atlib/sql/src/page.zig:1420in nearest public ownertiny.sql.pagelib.sql.src.page.test_leaf_page_stores_byte_keys_in_sorted_order[function] — test source atlib/sql/src/page.zig:1265in nearest public ownertiny.sql.pagelib.sql.src.page.test_pages_copy_entries_into_a_new_page_identity[function] — test source atlib/sql/src/page.zig:1622in nearest public ownertiny.sql.pagelib.sql.src.properties.page.LeafProperty.property[function] — private source atlib/sql/src/properties/page.zig:71in nearest public ownerlib.sql.src.properties.pagelib.sql.src.properties.page.expectLeaf[function] — private source atlib/sql/src/properties/page.zig:41in nearest public ownerlib.sql.src.properties.pagelib.sql.src.tree.test_tree_delete_retains_a_safe_lower_bound_when_exact_replacement_does_not_fit[function] — test source atlib/sql/src/tree.zig:2861in nearest public ownertiny.sql.treelib.sql.src.tree.test_tree_scan_projection_controls_overflow_materialization[function] — test source atlib/sql/src/tree.zig:3354in nearest public ownertiny.sql.treelib.sql.src.tree.test_tree_write_trusts_a_snapshot_page_only_after_validating_it[function] — test source atlib/sql/src/tree.zig:3913in nearest public ownertiny.sql.tree
Complete call list for LeafPage.put
13 direct calls.
lib.sql.src.page.Leaf.appendEntry[method] — private source atlib/sql/src/page.zig:330in nearest public ownertiny.sql.pagetiny.sql.LeafPage.cellCount[method] atlib/sql/src/page.zig:144lib.sql.src.page.Leaf.cells[method] — private source atlib/sql/src/page.zig:334in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.entryAt[method] — private source atlib/sql/src/page.zig:363in nearest public ownertiny.sql.pagetiny.sql.LeafPage.id[method] atlib/sql/src/page.zig:136tiny.sql.LeafPage.init[function] atlib/sql/src/page.zig:105lib.sql.src.page.Leaf.keyAt[method] — private source atlib/sql/src/page.zig:367in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.lowerBound[method] — private source atlib/sql/src/page.zig:338in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.nextGeneration[method] — private source atlib/sql/src/page.zig:351in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.slotAt[method] — private source atlib/sql/src/page.zig:379in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.writeU64[method] — private source atlib/sql/src/page.zig:409in nearest public ownertiny.sql.pagelib.sql.src.page.checkLengths[function] — private source atlib/sql/src/page.zig:1067in nearest public ownertiny.sql.pagetiny.sql.trace.progress[function] atlib/sql/src/trace.zig:7
Complete call list for LeafPage.splitPut
7 direct calls.
tiny.sql.LeafPage.cellCount[method] atlib/sql/src/page.zig:144lib.sql.src.page.Leaf.entryAt[method] — private source atlib/sql/src/page.zig:363in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.keyAt[method] — private source atlib/sql/src/page.zig:367in nearest public ownertiny.sql.pagelib.sql.src.page.Leaf.nextGeneration[method] — private source atlib/sql/src/page.zig:351in nearest public ownertiny.sql.pagelib.sql.src.page.appendSplitEntry[function] — private source atlib/sql/src/page.zig:1150in nearest public ownertiny.sql.pagelib.sql.src.page.checkLengths[function] — private source atlib/sql/src/page.zig:1067in nearest public ownertiny.sql.pagelib.sql.src.page.splitIndexFor[function] — private source atlib/sql/src/page.zig:1171in nearest public ownertiny.sql.page
Audit
| Definitions | 17 |
|---|---|
| Public names | 34 |
| Members | 1 |
| Version | 26.7.0 |
| Revision | daab053ee433 |