tiny.sql.record
Defined in tiny.sql.
API (12)
Actions
Public operations.
Types and contracts
Public types and contracts.
Values and defaults
Public values and defaults.
Source
Source: lib/sql/src/record.zig
zig
const std = @import("std");pub const Error = error{ InvalidRecord, ValueTooLarge,};pub const Kind = enum { inline_value, overflow,};pub const Overflow = struct { len: u64, first_page: u32,};pub const inline_tag: u8 = 0;pub const overflow_tag: u8 = 1;pub const overflow_size: usize = 13;pub fn inlineSize(value: []const u8) Error!usize { if (value.len == std.math.maxInt(usize)) return error.ValueTooLarge; return value.len + 1;}pub fn encodeInline(target: []u8, value: []const u8) Error![]const u8 { const len = try inlineSize(value); if (target.len < len) return error.ValueTooLarge; target[0] = inline_tag; @memcpy(target[1..][0..value.len], value); return target[0..len];}pub fn encodeOverflow(target: *[overflow_size]u8, value: Overflow) Error![]const u8 { if (value.len == 0 or value.first_page == 0) return error.InvalidRecord; target[0] = overflow_tag; std.mem.writeInt(u64, target[1..][0..8], value.len, .big); std.mem.writeInt(u32, target[9..][0..4], value.first_page, .big); return target[0..];}pub fn kind(bytes: []const u8) Error!Kind { if (bytes.len == 0) return error.InvalidRecord; return switch (bytes[0]) { inline_tag => .inline_value, overflow_tag => .overflow, else => error.InvalidRecord, };}pub fn inlineValue(bytes: []const u8) Error![]const u8 { if (bytes.len == 0 or bytes[0] != inline_tag) return error.InvalidRecord; return bytes[1..];}pub fn overflow(bytes: []const u8) Error!Overflow { if (bytes.len != overflow_size) return error.InvalidRecord; if (bytes[0] != overflow_tag) return error.InvalidRecord; const value = Overflow{ .len = std.mem.readInt(u64, bytes[1..][0..8], .big), .first_page = std.mem.readInt(u32, bytes[9..][0..4], .big), }; if (value.len == 0 or value.first_page == 0) return error.InvalidRecord; return value;}test "record encodes inline values" { var bytes: [16]u8 = undefined; const encoded = try encodeInline(&bytes, "value"); try std.testing.expectEqual(Kind.inline_value, try kind(encoded)); try std.testing.expectEqualStrings("value", try inlineValue(encoded)); try std.testing.expectError(error.InvalidRecord, overflow(encoded));}test "record encodes overflow references" { var bytes: [overflow_size]u8 = undefined; const encoded = try encodeOverflow(&bytes, .{ .len = 9000, .first_page = 42, }); const decoded = try overflow(encoded); try std.testing.expectEqual(Kind.overflow, try kind(encoded)); try std.testing.expectEqual(@as(u64, 9000), decoded.len); try std.testing.expectEqual(@as(u32, 42), decoded.first_page); try std.testing.expectError(error.InvalidRecord, inlineValue(encoded));}Source: lib/sql/src/root.zig:34
zig
pub const record = @import("record.zig");Complete caller list for record.inlineValue
8 direct callers.
lib.sql.src.record.test_record_encodes_inline_values[function] — test source atlib/sql/src/record.zig:68in nearest public ownertiny.sql.recordlib.sql.src.record.test_record_encodes_overflow_references[function] — test source atlib/sql/src/record.zig:77in nearest public ownertiny.sql.recordlib.sql.src.tree.HashBuilder.recordValue[method] — private source atlib/sql/src/tree.zig:1935in nearest public ownertiny.sql.treelib.sql.src.tree.Tree.entryStateFromRecord[method] — private source atlib/sql/src/tree.zig:1026in nearest public ownertiny.sql.treelib.sql.src.tree.latticeEntryFromRecord[function] — private source atlib/sql/src/tree.zig:2175in nearest public ownertiny.sql.treelib.sql.src.tree.readValueRecordInto[function] — private source atlib/sql/src/tree.zig:2143in nearest public ownertiny.sql.treelib.sql.src.tree.summarizeEntry[function] — private source atlib/sql/src/tree.zig:2077in nearest public ownertiny.sql.treelib.sql.src.tree.valueRecordLength[function] — private source atlib/sql/src/tree.zig:2136in nearest public ownertiny.sql.tree
Complete caller list for record.kind
9 direct callers.
lib.sql.src.record.test_record_encodes_inline_values[function] — test source atlib/sql/src/record.zig:68in nearest public ownertiny.sql.recordlib.sql.src.record.test_record_encodes_overflow_references[function] — test source atlib/sql/src/record.zig:77in nearest public ownertiny.sql.recordlib.sql.src.tree.HashBuilder.recordValue[method] — private source atlib/sql/src/tree.zig:1935in nearest public ownertiny.sql.treelib.sql.src.tree.Tree.entryStateFromRecord[method] — private source atlib/sql/src/tree.zig:1026in nearest public ownertiny.sql.treelib.sql.src.tree.latticeEntryFromRecord[function] — private source atlib/sql/src/tree.zig:2175in nearest public ownertiny.sql.treelib.sql.src.tree.overflowRefOrNull[function] — private source atlib/sql/src/tree.zig:2119in nearest public ownertiny.sql.treelib.sql.src.tree.readValueRecordInto[function] — private source atlib/sql/src/tree.zig:2143in nearest public ownertiny.sql.treelib.sql.src.tree.summarizeEntry[function] — private source atlib/sql/src/tree.zig:2077in nearest public ownertiny.sql.treelib.sql.src.tree.valueRecordLength[function] — private source atlib/sql/src/tree.zig:2136in nearest public ownertiny.sql.tree
Complete caller list for record.overflow
11 direct callers.
lib.sql.src.record.test_record_encodes_inline_values[function] — test source atlib/sql/src/record.zig:68in nearest public ownertiny.sql.recordlib.sql.src.record.test_record_encodes_overflow_references[function] — test source atlib/sql/src/record.zig:77in nearest public ownertiny.sql.recordlib.sql.src.tree.HashBuilder.recordValue[method] — private source atlib/sql/src/tree.zig:1935in nearest public ownertiny.sql.treelib.sql.src.tree.Scan.valueFor[method] — private source atlib/sql/src/tree.zig:1655in nearest public ownertiny.sql.treelib.sql.src.tree.Tree.entryStateFromRecord[method] — private source atlib/sql/src/tree.zig:1026in nearest public ownertiny.sql.treelib.sql.src.tree.latticeEntryFromRecord[function] — private source atlib/sql/src/tree.zig:2175in nearest public ownertiny.sql.treelib.sql.src.tree.overflowRefOrNull[function] — private source atlib/sql/src/tree.zig:2119in nearest public ownertiny.sql.treelib.sql.src.tree.readValueRecordInto[function] — private source atlib/sql/src/tree.zig:2143in nearest public ownertiny.sql.treelib.sql.src.tree.summarizeEntry[function] — private source atlib/sql/src/tree.zig:2077in 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.valueRecordLength[function] — private source atlib/sql/src/tree.zig:2136in nearest public ownertiny.sql.tree
Audit
| Definitions | 13 |
|---|---|
| Public names | 13 |
| Members | 6 |
| Version | 26.7.0 |
| Revision | daab053ee433 |