tiny.sql.WalReader
Defined in wal.
API (10)
Actions
Public operations.
Fields and members
Public fields and members.
Source
Source: lib/sql/src/wal.zig:1026
zig
pub const Reader = struct { data: []const u8, salt: Salt, checksum: Checksum, offset: usize = header_size, index: usize = 0, stopped: bool = false, pub fn init(data: []const u8) ReadError!Reader { return initControlled(data, .{}) catch |err| switch (err) { error.Interrupted => unreachable, else => return @errorCast(err), }; } pub fn initControlled(data: []const u8, control: Control) ControlledReadError!Reader { try control.check(); if (data.len < header_size) return error.InvalidWal; if (readU32(data[0..4]) != magic) return error.InvalidWal; if (readU32(data[4..8]) != format_version) return error.InvalidWal; if (readU32(data[8..12]) != page.size) return error.UnsupportedPageSize; var checksum: Checksum = .{}; checksum.update(data[0..24]); if (readU32(data[24..28]) != checksum.first) return error.InvalidChecksum; if (readU32(data[28..32]) != checksum.second) return error.InvalidChecksum; try control.check(); return .{ .data = data, .salt = .{ .first = readU32(data[16..20]), .second = readU32(data[20..24]), }, .checksum = checksum, }; } pub fn next(self: *Reader) ReadError!?Frame { return self.nextControlled(.{}) catch |err| switch (err) { error.Interrupted => unreachable, else => return @errorCast(err), }; } pub fn nextControlled(self: *Reader, control: Control) ControlledReadError!?Frame { const phase = trace.scope("wal.next"); defer phase.end(); try control.check(); if (self.stopped) return null; if (self.offset + frame_size > self.data.len) { self.stopped = true; return null; } const frame_header = self.data[self.offset..][0..frame_header_size]; const image = self.data[self.offset + frame_header_size ..][0..page.size]; if (readU32(frame_header[8..12]) != self.salt.first or readU32(frame_header[12..16]) != self.salt.second) { self.stopped = true; return null; } var checksum = self.checksum; checksum.update(frame_header[0..8]); checksum.update(image); if (readU32(frame_header[16..20]) != checksum.first or readU32(frame_header[20..24]) != checksum.second) { self.stopped = true; return null; } try control.check(); self.checksum = checksum; self.index += 1; self.offset += frame_size; return .{ .index = self.index, .page_id = readU32(frame_header[0..4]), .db_page_count = readU32(frame_header[4..8]), .image = image, }; }};Source: lib/sql/src/root.zig:304
zig
pub const WalReader = wal.Reader;Audit
| Definitions | 5 |
|---|---|
| Public names | 10 |
| Members | 6 |
| Version | 26.7.0 |
| Revision | daab053ee433 |