use std::{
collections::HashMap,
sync::{Arc, Mutex},
};
use crate::{
ast::TableConstraint,
catalog::objects::column::ColumnEntry,
common::symbol::Symbol,
storage::{BPlusTreeIndex, TableHeap},
};
#[derive(Clone)]
pub struct TableEntry {
pub oid: u32,
pub name: Symbol,
pub columns: Vec<ColumnEntry>,
pub constraints: Vec<TableConstraint>,
pub heap: Option<Arc<Mutex<TableHeap>>>,
pub indexes: HashMap<Symbol, Arc<Mutex<BPlusTreeIndex>>>,
}
impl TableEntry {
pub fn new(
oid: u32,
name: Symbol,
columns: Vec<ColumnEntry>,
constraints: Vec<TableConstraint>,
) -> Self {
Self {
oid,
name,
columns,
constraints,
heap: None,
indexes: HashMap::new(),
}
}
}
impl std::fmt::Debug for TableEntry {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("TableEntry")
.field("oid", &self.oid)
.field("name", &self.name)
.field("columns", &self.columns)
.field("constraints", &self.constraints)
.finish()
}
}