Files
dbonk/src/table.rs
2023-08-13 13:17:09 +02:00

39 lines
941 B
Rust

use crate::{cursor::Position, layout::*, pager::Pager};
pub struct Table {
pub row_count: usize,
pub pager: Pager,
}
impl Table {
pub fn new(pager: Pager) -> Self {
let row_count = pager.file_len() / ROW_SIZE;
Self { row_count, pager }
}
pub fn row_slot(&self, index: usize) -> Position {
self.pager.row_location(index)
}
pub fn close(&mut self) {
let total_pages = self.row_count / ROWS_PER_PAGE;
for i in 0..total_pages {
let page = self.pager.pages[i];
if page.is_none() {
continue;
}
self.pager.flush_page(i).unwrap();
}
let added_rows = self.row_count % ROWS_PER_PAGE;
if added_rows > 0 {
let page_num = total_pages;
if self.pager.pages[page_num].is_some() {
self.pager.flush_page(page_num).unwrap();
}
}
}
}