reifydb_catalog/store/namespace/
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::{NamespaceDef, NamespaceId, QueryTransaction},
7};
8use reifydb_type::internal;
9
10use crate::CatalogStore;
11
12impl CatalogStore {
13	pub async fn get_namespace(
14		rx: &mut impl QueryTransaction,
15		namespace: NamespaceId,
16	) -> crate::Result<NamespaceDef> {
17		CatalogStore::find_namespace(rx, namespace).await?.ok_or_else(|| {
18			Error(internal!(
19				"Namespace with ID {:?} not found in catalog. This indicates a critical catalog inconsistency.",
20				namespace
21			))
22		})
23	}
24}
25
26#[cfg(test)]
27mod tests {
28	use reifydb_engine::test_utils::create_test_command_transaction;
29
30	use crate::{CatalogStore, store::namespace::NamespaceId, test_utils::create_namespace};
31
32	#[tokio::test]
33	async fn test_ok() {
34		let mut txn = create_test_command_transaction().await;
35
36		create_namespace(&mut txn, "namespace_one").await;
37		create_namespace(&mut txn, "namespace_two").await;
38		create_namespace(&mut txn, "namespace_three").await;
39
40		let result = CatalogStore::get_namespace(&mut txn, NamespaceId(1026)).await.unwrap();
41
42		assert_eq!(result.id, NamespaceId(1026));
43		assert_eq!(result.name, "namespace_two");
44	}
45
46	#[tokio::test]
47	async fn test_not_found() {
48		let mut txn = create_test_command_transaction().await;
49
50		create_namespace(&mut txn, "namespace_one").await;
51		create_namespace(&mut txn, "namespace_two").await;
52		create_namespace(&mut txn, "namespace_three").await;
53
54		let err = CatalogStore::get_namespace(&mut txn, NamespaceId(23)).await.unwrap_err();
55
56		assert_eq!(err.code, "INTERNAL_ERROR");
57		assert!(err.message.contains("NamespaceId(23)"));
58		assert!(err.message.contains("not found in catalog"));
59	}
60}