quill_sql/catalog/
registry.rs

1use std::sync::Arc;
2
3use dashmap::DashMap;
4
5use crate::storage::table_heap::TableHeap;
6use crate::utils::table_ref::TableReference;
7
8/// Registry of table heaps that may require background maintenance.
9#[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}