storage_manager/backend/table/
table_file.rs

1use std::fs::File;
2use std::io::{self, Read, Seek, SeekFrom};
3
4/// Page ID reserved for table metadata
5pub const TABLE_HEADER_PAGE_ID: u32 = 0;
6
7// Size of a single page
8pub const TABLE_HEADER_SIZE: u32 = 8192;
9
10// Physical page buffer
11pub struct Table {
12    // Raw page bytes
13    pub data: Vec<u8>,
14}
15
16impl Table {
17    // Create an empty page buffer
18    pub fn new() -> Self {
19        Self {
20            data: vec![0; TABLE_HEADER_SIZE as usize],
21        }
22    }
23}
24
25// Table metadata stored inside the header page
26pub struct TableHeader {
27    // Total number of pages in the table
28    pub page_count: u32,
29}
30
31// Read page count from page 0
32pub fn page_count(file: &mut File) -> io::Result<u32> {
33    // Page 0 starts at offset 0
34    file.seek(SeekFrom::Start(0))?;
35
36    // First 4 bytes store page count
37    let mut buffer = [0u8; 4];
38    file.read_exact(&mut buffer)?;
39
40    Ok(u32::from_le_bytes(buffer))
41}