quill_sql/recovery/
wal_record.rs

1use crate::recovery::wal::codec;
2use crate::recovery::Lsn;
3
4pub use crate::recovery::wal::codec::{
5    decode_checkpoint, decode_clr, decode_frame, decode_page_delta, decode_page_write,
6    decode_payload as decode_wal_payload, decode_transaction, encode_frame,
7    heap_record_kind_to_info, CheckpointPayload, ClrPayload, PageDeltaPayload, PageWritePayload,
8    ResourceManagerId, TransactionPayload, TransactionRecordKind, WalFrame, WAL_CRC_LEN,
9    WAL_HEADER_LEN, WAL_MAGIC, WAL_VERSION, WAL_VERSION_V1,
10};
11
12pub use crate::storage::heap::wal_codec::{
13    decode_heap_record as decode_heap, encode_heap_record as encode_heap, HeapDeletePayload,
14    HeapInsertPayload, HeapRecordKind, HeapRecordPayload, HeapUpdatePayload, RelationIdent,
15    TupleMetaRepr,
16};
17
18#[derive(Debug, Clone)]
19pub enum WalRecordPayload {
20    PageWrite(PageWritePayload),
21    /// Apply a byte-range delta to a page (physiological logging)
22    PageDelta(PageDeltaPayload),
23    Transaction(TransactionPayload),
24    Heap(HeapRecordPayload),
25    Checkpoint(CheckpointPayload),
26    /// Compensation log record: documents an UNDO action; redo is a no-op.
27    Clr(ClrPayload),
28}
29
30impl WalRecordPayload {
31    pub fn encode(&self, lsn: Lsn, prev_lsn: Lsn) -> Vec<u8> {
32        codec::encode_frame(lsn, prev_lsn, self)
33    }
34}