reifydb_catalog/store/table/
get.rs1use reifydb_core::{
5 Error,
6 interface::{QueryTransaction, TableDef, TableId},
7};
8use reifydb_type::internal;
9
10use crate::CatalogStore;
11
12impl CatalogStore {
13 pub async fn get_table(rx: &mut impl QueryTransaction, table: TableId) -> crate::Result<TableDef> {
14 CatalogStore::find_table(rx, table).await?.ok_or_else(|| {
15 Error(internal!(
16 "Table with ID {:?} not found in catalog. This indicates a critical catalog inconsistency.",
17 table
18 ))
19 })
20 }
21}
22
23#[cfg(test)]
24mod tests {
25 use reifydb_core::interface::{NamespaceId, TableId};
26 use reifydb_engine::test_utils::create_test_command_transaction;
27
28 use crate::{
29 CatalogStore,
30 test_utils::{create_namespace, create_table, ensure_test_namespace},
31 };
32
33 #[tokio::test]
34 async fn test_ok() {
35 let mut txn = create_test_command_transaction().await;
36 ensure_test_namespace(&mut txn).await;
37 create_namespace(&mut txn, "namespace_one").await;
38 create_namespace(&mut txn, "namespace_two").await;
39 create_namespace(&mut txn, "namespace_three").await;
40
41 create_table(&mut txn, "namespace_one", "table_one", &[]).await;
42 create_table(&mut txn, "namespace_two", "table_two", &[]).await;
43 create_table(&mut txn, "namespace_three", "table_three", &[]).await;
44
45 let result = CatalogStore::get_table(&mut txn, TableId(1026)).await.unwrap();
46
47 assert_eq!(result.id, TableId(1026));
48 assert_eq!(result.namespace, NamespaceId(1027));
49 assert_eq!(result.name, "table_two");
50 }
51
52 #[tokio::test]
53 async fn test_not_found() {
54 let mut txn = create_test_command_transaction().await;
55 ensure_test_namespace(&mut txn).await;
56 create_namespace(&mut txn, "namespace_one").await;
57 create_namespace(&mut txn, "namespace_two").await;
58 create_namespace(&mut txn, "namespace_three").await;
59
60 create_table(&mut txn, "namespace_one", "table_one", &[]).await;
61 create_table(&mut txn, "namespace_two", "table_two", &[]).await;
62 create_table(&mut txn, "namespace_three", "table_three", &[]).await;
63
64 let err = CatalogStore::get_table(&mut txn, TableId(42)).await.unwrap_err();
65
66 assert_eq!(err.code, "INTERNAL_ERROR");
67 assert!(err.message.contains("TableId(42)"));
68 assert!(err.message.contains("not found in catalog"));
69 }
70}