reifydb_catalog/store/table/
list.rs1use reifydb_core::interface::{Key, NamespaceId, QueryTransaction, TableDef, TableKey};
5
6use crate::{CatalogStore, store::table::layout::table};
7
8impl CatalogStore {
9 pub async fn list_tables_all(rx: &mut impl QueryTransaction) -> crate::Result<Vec<TableDef>> {
10 let mut result = Vec::new();
11
12 let batch = rx.range(TableKey::full_scan()).await?;
13
14 for entry in batch.items {
15 if let Some(key) = Key::decode(&entry.key) {
16 if let Key::Table(table_key) = key {
17 let table_id = table_key.table;
18
19 let namespace_id =
20 NamespaceId(table::LAYOUT.get_u64(&entry.values, table::NAMESPACE));
21
22 let name = table::LAYOUT.get_utf8(&entry.values, table::NAME).to_string();
23
24 let primary_key = Self::find_primary_key(rx, table_id).await?;
25 let columns = Self::list_columns(rx, table_id).await?;
26
27 let table_def = TableDef {
28 id: table_id,
29 namespace: namespace_id,
30 name,
31 columns,
32 primary_key,
33 };
34
35 result.push(table_def);
36 }
37 }
38 }
39
40 Ok(result)
41 }
42}