quill_sql/catalog/
registry.rs1use std::sync::Arc;
2
3use dashmap::DashMap;
4
5use crate::storage::table_heap::TableHeap;
6use crate::utils::table_ref::TableReference;
7
8#[derive(Debug, Default)]
10pub struct TableRegistry {
11 inner: DashMap<TableReference, Arc<TableHeap>>,
12}
13
14impl TableRegistry {
15 pub fn new() -> Self {
16 Self {
17 inner: DashMap::new(),
18 }
19 }
20
21 pub fn register(&self, table: TableReference, heap: Arc<TableHeap>) {
22 self.inner.insert(table, heap);
23 }
24
25 pub fn unregister(&self, table: &TableReference) {
26 self.inner.remove(table);
27 }
28
29 pub fn iter_tables(&self) -> impl Iterator<Item = (TableReference, Arc<TableHeap>)> + '_ {
30 self.inner
31 .iter()
32 .map(|entry| (entry.key().clone(), entry.value().clone()))
33 }
34}