reifydb_catalog/store/view/
get.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::{
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}