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::{handler::Handler, id::HandlerId},
	return_internal_error,
};
use reifydb_transaction::transaction::Transaction;

use crate::{CatalogStore, Result};

impl CatalogStore {
	pub(crate) fn get_handler(rx: &mut Transaction<'_>, handler: HandlerId) -> Result<Handler> {
		match Self::find_handler(rx, handler)? {
			Some(def) => Ok(def),
			None => return_internal_error!("Handler with ID {:?} not found in catalog.", handler),
		}
	}
}

#[cfg(test)]
pub mod tests {
	use reifydb_core::interface::catalog::id::{HandlerId, NamespaceId};
	use reifydb_engine::test_harness::create_test_admin_transaction;
	use reifydb_transaction::transaction::Transaction;
	use reifydb_type::value::sumtype::{SumTypeId, VariantRef};

	use crate::{
		CatalogStore,
		test_utils::{create_handler, create_namespace, ensure_test_namespace},
	};

	#[test]
	fn test_ok() {
		let mut txn = create_test_admin_transaction();
		ensure_test_namespace(&mut txn);
		create_namespace(&mut txn, "namespace_one");
		create_namespace(&mut txn, "namespace_two");
		create_namespace(&mut txn, "namespace_three");

		create_handler(
			&mut txn,
			"namespace_one",
			"handler_one",
			VariantRef {
				sumtype_id: SumTypeId(0),
				variant_tag: 0,
			},
			"",
		);
		create_handler(
			&mut txn,
			"namespace_two",
			"handler_two",
			VariantRef {
				sumtype_id: SumTypeId(0),
				variant_tag: 0,
			},
			"",
		);
		create_handler(
			&mut txn,
			"namespace_three",
			"handler_three",
			VariantRef {
				sumtype_id: SumTypeId(0),
				variant_tag: 0,
			},
			"",
		);

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

		assert_eq!(result.id, HandlerId(16386));
		assert_eq!(result.namespace, NamespaceId(16387));
		assert_eq!(result.name, "handler_two");
	}

	#[test]
	fn test_not_found() {
		let mut txn = create_test_admin_transaction();
		ensure_test_namespace(&mut txn);
		create_namespace(&mut txn, "namespace_one");
		create_namespace(&mut txn, "namespace_two");
		create_namespace(&mut txn, "namespace_three");

		create_handler(
			&mut txn,
			"namespace_one",
			"handler_one",
			VariantRef {
				sumtype_id: SumTypeId(0),
				variant_tag: 0,
			},
			"",
		);
		create_handler(
			&mut txn,
			"namespace_two",
			"handler_two",
			VariantRef {
				sumtype_id: SumTypeId(0),
				variant_tag: 0,
			},
			"",
		);
		create_handler(
			&mut txn,
			"namespace_three",
			"handler_three",
			VariantRef {
				sumtype_id: SumTypeId(0),
				variant_tag: 0,
			},
			"",
		);

		let err = CatalogStore::get_handler(&mut Transaction::Admin(&mut txn), HandlerId(42)).unwrap_err();

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