Skip to documentation
SLOP

tiny.sql.LifecycleSparseReadSession

Reference tiny.sql LifecycleSparseReadSession

Defined in lifecycle.

API (7)

Actions

Public operations.

Fields and members

Public fields and members.

No direct callersNo direct callslifecycleSparseReadSession
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Source: lib/sql/src/lifecycle.zig:339

zig
pub const SparseReadSession = struct {    workspace: wal.Scanner.Workspace,    file: file_mod.SparseReadOnlyDatabase = undefined,    file_live: bool = false,    pub fn init(self: *SparseReadSession, workspace: wal.Scanner.Workspace) void {        self.* = .{ .workspace = workspace };    }    pub fn deinit(self: *SparseReadSession) void {        self.resetFile();        self.* = undefined;    }    pub fn begin(        self: *SparseReadSession,        allocator: Allocator,        dir: std.Io.Dir,        options: SparseReadOptions,    ) Error!SparseReadBeginResult {        try options.control.check();        const branch_state = switch (try loadSparseBranch(allocator, dir, options.read, options.control)) {            .ready => |ready| ready,            .repair_required => |reason| return .{ .repair_required = reason },        };        switch (try self.refreshFile(dir, options)) {            .ready => {},            .repair_required => |reason| return .{ .repair_required = reason },        }        try options.control.check();        const catalog = catalog_mod.Reader.open(self.file.snapshot(), .{}) catch |err| {            if (err == error.RecoveryRequired) {                self.resetFile();                return .moved;            }            return err;        };        var live_root = version.readDatabaseRootMaintained(            allocator,            &catalog,            branch_state.conflicts,        ) catch |err| {            if (err == error.RecoveryRequired) {                self.resetFile();                return .moved;            }            return err;        };        defer live_root.deinit();        try options.control.check();        return .{ .ready = .{            .catalog = catalog,            .head = branch_state.head,            .root = branch_state.root,            .branch = branch_state,            .live_root = live_root.hash,        } };    }    pub fn finish(        self: *SparseReadSession,        allocator: Allocator,        dir: std.Io.Dir,        assessment: SparseReadAssessment,        options: SparseReadOptions,    ) Error!SparseReadFinishResult {        try options.control.check();        const file_moved = switch (try self.refreshFile(dir, options)) {            .ready => |state| state == .refreshed,            .repair_required => |reason| return .{ .repair_required = reason },        };        const branch_state = switch (try loadSparseBranch(allocator, dir, options.read, options.control)) {            .ready => |ready| ready,            .repair_required => |reason| return .{ .repair_required = reason },        };        const catalog = catalog_mod.Reader.open(self.file.snapshot(), .{}) catch |err| {            if (err == error.RecoveryRequired) {                self.resetFile();                return .moved;            }            return err;        };        var live_root = version.readDatabaseRootMaintained(            allocator,            &catalog,            branch_state.conflicts,        ) catch |err| {            if (err == error.RecoveryRequired) {                self.resetFile();                return .moved;            }            return err;        };        defer live_root.deinit();        try options.control.check();        if (file_moved or            !std.meta.eql(branch_state, assessment.branch) or            !version.same(live_root.hash, assessment.live_root))        {            return .moved;        }        if (!version.same(live_root.hash, branch_state.root)) {            return .{ .repair_required = .root_mismatch };        }        return .stable;    }    fn refreshFile(        self: *SparseReadSession,        dir: std.Io.Dir,        options: SparseReadOptions,    ) Error!SparseRefreshResult {        if (!self.file_live) {            const opened = file_mod.SparseReadOnlyDatabase.openExisting(dir, .{                .io = options.read.io,                .paths = options.read.paths,                .workspace = self.workspace,                .control = options.control,            }) catch |err| {                self.resetFile();                return err;            };            switch (opened) {                .ready => |ready| {                    self.file = ready;                    self.file_live = true;                    return .{ .ready = .refreshed };                },                .repair_required => |reason| return .{                    .repair_required = .{ .file = reason },                },            }        }        const refreshed = self.file.refresh(dir, .{            .paths = options.read.paths,            .control = options.control,        }) catch |err| {            self.resetFile();            return err;        };        return switch (refreshed) {            .unchanged => .{ .ready = .unchanged },            .refreshed => .{ .ready = .refreshed },            .repair_required => |reason| repair: {                self.resetFile();                break :repair .{ .repair_required = .{ .file = reason } };            },        };    }    fn resetFile(self: *SparseReadSession) void {        if (self.file_live) self.file.deinit();        self.file_live = false;    }};

Source: lib/sql/src/root.zig:100

zig
pub const LifecycleSparseReadSession = lifecycle.SparseReadSession;
Called byCallsNo direct callersprivate sourcelib.sql.src.lifecycle.SparseReadSessionrefreshFileprivate sourcelib.sql.src.lifecycle.SparseReadSessionresetFileprivate sourcelib.sql.src.lifecycleloadSparseBranchversionreadDatabaseRootMaintainedLifecycleSparseReadSessionbegin
Static calls · unresolved targets: 0 · external targets: 4.
Called byCallsNo direct callersprivate sourcelib.sql.src.lifecycle.SparseReadSessionresetFileLifecycleSparseReadSessiondeinit
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callersprivate sourcelib.sql.src.lifecycle.SparseReadSessionrefreshFileprivate sourcelib.sql.src.lifecycle.SparseReadSessionresetFileprivate sourcelib.sql.src.lifecycleloadSparseBranchversionreadDatabaseRootMaintainedversionsameLifecycleSparseReadSessionfinish
Static calls · unresolved targets: 0 · external targets: 4.

Audit

Definitions5
Public names10
Members3
Version26.7.0
Revisiondaab053ee433