reifydb-catalog 0.4.13

Database catalog and metadata management for ReifyDB
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2025 ReifyDB

use reifydb_core::{
	interface::catalog::{id::NamespaceId, namespace::Namespace},
	internal,
};
use reifydb_transaction::transaction::Transaction;
use reifydb_type::error::Error;

use crate::{CatalogStore, Result};

impl CatalogStore {
	pub(crate) fn get_namespace(rx: &mut Transaction<'_>, namespace: NamespaceId) -> Result<Namespace> {
		CatalogStore::find_namespace(rx, namespace)?.ok_or_else(|| {
			Error(Box::new(internal!(
				"Namespace with ID {:?} not found in catalog. This indicates a critical catalog inconsistency.",
				namespace
			)))
		})
	}
}

#[cfg(test)]
pub mod tests {
	use reifydb_engine::test_harness::create_test_admin_transaction;
	use reifydb_transaction::transaction::Transaction;

	use crate::{CatalogStore, store::namespace::NamespaceId, test_utils::create_namespace};

	#[test]
	fn test_ok() {
		let mut txn = create_test_admin_transaction();

		create_namespace(&mut txn, "namespace_one");
		create_namespace(&mut txn, "namespace_two");
		create_namespace(&mut txn, "namespace_three");

		let result =
			CatalogStore::get_namespace(&mut Transaction::Admin(&mut txn), NamespaceId(16386)).unwrap();

		assert_eq!(result.id(), NamespaceId(16386));
		assert_eq!(result.name(), "namespace_two");
	}

	#[test]
	fn test_not_found() {
		let mut txn = create_test_admin_transaction();

		create_namespace(&mut txn, "namespace_one");
		create_namespace(&mut txn, "namespace_two");
		create_namespace(&mut txn, "namespace_three");

		let err = CatalogStore::get_namespace(&mut Transaction::Admin(&mut txn), NamespaceId(23)).unwrap_err();

		assert_eq!(err.code, "INTERNAL_ERROR");
		assert!(err.message.contains("NamespaceId(23)"));
		assert!(err.message.contains("not found in catalog"));
	}
}