small_db/btree/page/
base_page.rs1use super::{BTreePage, BTreePageID, PageCategory};
2use crate::btree::{page_cache::PageCache, tuple::Schema};
3
4const EMPTY_PAGE_TOKEN: [u8; 4] = [55, 55, 55, 55];
5
6pub struct BTreeBasePage {
7 pid: BTreePageID,
8 parent_page_index: u32,
9}
10
11impl BTreeBasePage {
12 pub fn new(pid: &BTreePageID) -> BTreeBasePage {
13 BTreeBasePage {
14 pid: pid.clone(),
15 parent_page_index: 0,
16 }
17 }
18
19 pub fn empty_page_data() -> Vec<u8> {
30 let mut data: Vec<u8> = vec![0; PageCache::get_page_size()];
31
32 data[0..4].copy_from_slice(&EMPTY_PAGE_TOKEN);
34
35 data
36 }
37
38 pub fn is_empty_page(bytes: &[u8]) -> bool {
39 bytes[0..4] == EMPTY_PAGE_TOKEN
40 }
41}
42
43impl BTreePage for BTreeBasePage {
44 fn new(
45 pid: &BTreePageID,
46 _bytes: &[u8],
47 _tuple_scheme: &Schema,
48 _key_field: usize,
49 ) -> Self {
50 Self::new(pid)
51 }
52
53 fn get_pid(&self) -> BTreePageID {
54 self.pid
55 }
56
57 fn get_parent_pid(&self) -> BTreePageID {
58 let category: PageCategory;
59 if self.parent_page_index == 0 {
60 category = PageCategory::RootPointer;
61 } else {
62 category = PageCategory::Internal;
63 }
64 BTreePageID::new(
65 category,
66 self.pid.get_table_id(),
67 self.parent_page_index,
68 )
69 }
70
71 fn set_parent_pid(&mut self, pid: &BTreePageID) {
72 self.parent_page_index = pid.page_index;
73 }
74
75 fn get_page_data(&self) -> Vec<u8> {
76 unimplemented!()
77 }
78
79 fn set_before_image(&mut self) {
80 unimplemented!()
81 }
82
83 fn get_before_image(&self) -> Vec<u8> {
84 unimplemented!()
85 }
86
87 fn peek(&self) {
88 unimplemented!()
89 }
90}