reifydb_catalog/store/flow_node/
find.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 flow_node::LAYOUT;
5use reifydb_core::{
6	interface::{FlowId, FlowNodeDef, FlowNodeId, QueryTransaction},
7	key::FlowNodeKey,
8};
9
10use crate::{CatalogStore, store::flow_node::layout::flow_node};
11
12impl CatalogStore {
13	pub async fn find_flow_node(
14		txn: &mut impl QueryTransaction,
15		node_id: FlowNodeId,
16	) -> crate::Result<Option<FlowNodeDef>> {
17		let Some(multi) = txn.get(&FlowNodeKey::encoded(node_id)).await? else {
18			return Ok(None);
19		};
20
21		let row = multi.values;
22		let id = FlowNodeId(LAYOUT.get_u64(&row, flow_node::ID));
23		let flow = FlowId(LAYOUT.get_u64(&row, flow_node::FLOW));
24		let node_type = LAYOUT.get_u8(&row, flow_node::TYPE);
25		let data = LAYOUT.get_blob(&row, flow_node::DATA).clone();
26
27		Ok(Some(FlowNodeDef {
28			id,
29			flow,
30			node_type,
31			data,
32		}))
33	}
34}
35
36#[cfg(test)]
37mod tests {
38	use reifydb_core::interface::FlowNodeId;
39	use reifydb_engine::test_utils::create_test_command_transaction;
40
41	use crate::{
42		CatalogStore,
43		test_utils::{create_flow_node, create_namespace, ensure_test_flow},
44	};
45
46	#[tokio::test]
47	async fn test_find_flow_node_ok() {
48		let mut txn = create_test_command_transaction().await;
49		let _namespace = create_namespace(&mut txn, "test_namespace").await;
50		let flow = ensure_test_flow(&mut txn).await;
51
52		let node = create_flow_node(&mut txn, flow.id, 1, &[0x01, 0x02, 0x03]).await;
53
54		let result = CatalogStore::find_flow_node(&mut txn, node.id).await.unwrap();
55		assert!(result.is_some());
56		let found = result.unwrap();
57		assert_eq!(found.id, node.id);
58		assert_eq!(found.flow, flow.id);
59		assert_eq!(found.node_type, 1);
60	}
61
62	#[tokio::test]
63	async fn test_find_flow_node_not_found() {
64		let mut txn = create_test_command_transaction().await;
65
66		let result = CatalogStore::find_flow_node(&mut txn, FlowNodeId(999)).await.unwrap();
67		assert!(result.is_none());
68	}
69}