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_write,
6    decode_payload as decode_wal_payload, decode_transaction, encode_frame,
7    heap_record_kind_to_info, CheckpointPayload, ClrPayload, PageWritePayload, ResourceManagerId,
8    TransactionPayload, TransactionRecordKind, WalFrame, WAL_CRC_LEN, WAL_HEADER_LEN, WAL_MAGIC,
9    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, RelationIdent, TupleMetaRepr,
15};
16pub use crate::storage::index::wal_codec::{
17    decode_index_record as decode_index, encode_index_record as encode_index,
18    IndexInternalEntryPayload, IndexInternalMergePayload, IndexInternalRedistributePayload,
19    IndexInternalSplitPayload, IndexLeafDeletePayload, IndexLeafInsertPayload,
20    IndexLeafMergePayload, IndexLeafRedistributePayload, IndexLeafSplitEntryPayload,
21    IndexLeafSplitPayload, IndexParentDeletePayload, IndexParentInsertPayload,
22    IndexParentUpdatePayload, IndexRecordPayload, IndexRelationIdent, IndexRootAdoptPayload,
23    IndexRootInstallInternalPayload, IndexRootInstallLeafPayload, IndexRootResetPayload,
24};
25
26#[derive(Debug, Clone)]
27pub enum WalRecordPayload {
28    PageWrite(PageWritePayload),
29    Transaction(TransactionPayload),
30    Heap(HeapRecordPayload),
31    Index(IndexRecordPayload),
32    Checkpoint(CheckpointPayload),
33    /// Compensation log record: documents an UNDO action; redo is a no-op.
34    Clr(ClrPayload),
35}
36
37impl WalRecordPayload {
38    pub fn encode(&self, lsn: Lsn, prev_lsn: Lsn) -> Vec<u8> {
39        codec::encode_frame(lsn, prev_lsn, self)
40    }
41}