tiny.sql.LifecycleSparseReadSession
Defined in lifecycle.
API (7)
Actions
Public operations.
Fields and members
Public fields and members.
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;Audit
| Definitions | 5 |
|---|---|
| Public names | 10 |
| Members | 3 |
| Version | 26.7.0 |
| Revision | daab053ee433 |