quill_sql/storage/
record.rs1use std::fmt::{Display, Formatter};
2
3use crate::transaction::{CommandId, TransactionId, INVALID_COMMAND_ID};
4
5pub type PageId = u32;
6pub const INVALID_PAGE_ID: PageId = 0;
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub struct TupleMeta {
10 pub insert_txn_id: TransactionId,
11 pub insert_cid: CommandId,
12 pub delete_txn_id: TransactionId,
13 pub delete_cid: CommandId,
14 pub is_deleted: bool,
15 pub next_version: Option<RecordId>,
16 pub prev_version: Option<RecordId>,
17}
18
19impl TupleMeta {
20 pub fn new(insert_txn_id: TransactionId, insert_cid: CommandId) -> Self {
21 Self {
22 insert_txn_id,
23 insert_cid,
24 delete_txn_id: 0,
25 delete_cid: INVALID_COMMAND_ID,
26 is_deleted: false,
27 next_version: None,
28 prev_version: None,
29 }
30 }
31
32 pub fn mark_deleted(&mut self, txn_id: TransactionId, delete_cid: CommandId) {
33 self.is_deleted = true;
34 self.delete_txn_id = txn_id;
35 self.delete_cid = delete_cid;
36 }
37
38 pub fn clear_delete(&mut self) {
39 self.is_deleted = false;
40 self.delete_txn_id = 0;
41 self.delete_cid = INVALID_COMMAND_ID;
42 }
43
44 pub fn set_next_version(&mut self, next: Option<RecordId>) {
45 self.next_version = next;
46 }
47
48 pub fn set_prev_version(&mut self, prev: Option<RecordId>) {
49 self.prev_version = prev;
50 }
51
52 pub fn clear_chain(&mut self) {
53 self.next_version = None;
54 self.prev_version = None;
55 }
56}
57
58pub const EMPTY_TUPLE_META: TupleMeta = TupleMeta {
59 insert_txn_id: 0,
60 insert_cid: 0,
61 delete_txn_id: 0,
62 delete_cid: INVALID_COMMAND_ID,
63 is_deleted: false,
64 next_version: None,
65 prev_version: None,
66};
67
68pub const INVALID_RID: RecordId = RecordId {
69 page_id: INVALID_PAGE_ID,
70 slot_num: 0,
71};
72
73#[derive(derive_new::new, Debug, Clone, Copy, PartialEq, Eq, Hash)]
74pub struct RecordId {
75 pub page_id: PageId,
76 pub slot_num: u32,
77}
78
79impl Display for RecordId {
80 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
81 write!(f, "{}-{}", self.page_id, self.slot_num)
82 }
83}