reifydb_catalog/store/view/
get.rs1use reifydb_core::{
5 Error,
6 interface::{QueryTransaction, ViewDef, ViewId},
7};
8use reifydb_type::internal;
9
10use crate::CatalogStore;
11
12impl CatalogStore {
13 pub async fn get_view(rx: &mut impl QueryTransaction, view: ViewId) -> crate::Result<ViewDef> {
14 CatalogStore::find_view(rx, view).await?.ok_or_else(|| {
15 Error(internal!(
16 "View with ID {:?} not found in catalog. This indicates a critical catalog inconsistency.",
17 view
18 ))
19 })
20 }
21}
22
23#[cfg(test)]
24mod tests {
25 use reifydb_core::interface::{NamespaceId, ViewId};
26 use reifydb_engine::test_utils::create_test_command_transaction;
27
28 use crate::{
29 CatalogStore,
30 test_utils::{create_namespace, create_view, 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_view(&mut txn, "namespace_one", "view_one", &[]).await;
42 create_view(&mut txn, "namespace_two", "view_two", &[]).await;
43 create_view(&mut txn, "namespace_three", "view_three", &[]).await;
44
45 let result = CatalogStore::get_view(&mut txn, ViewId(1026)).await.unwrap();
46
47 assert_eq!(result.id, ViewId(1026));
48 assert_eq!(result.namespace, NamespaceId(1027));
49 assert_eq!(result.name, "view_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_view(&mut txn, "namespace_one", "view_one", &[]).await;
61 create_view(&mut txn, "namespace_two", "view_two", &[]).await;
62 create_view(&mut txn, "namespace_three", "view_three", &[]).await;
63
64 let err = CatalogStore::get_view(&mut txn, ViewId(42)).await.unwrap_err();
65
66 assert_eq!(err.code, "INTERNAL_ERROR");
67 assert!(err.message.contains("ViewId(42)"));
68 assert!(err.message.contains("not found in catalog"));
69 }
70}