reifydb_catalog/store/table/
list.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use 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}