reifydb_catalog/store/sequence/
find.rs1use reifydb_core::{
5 interface::{NamespaceId, QueryTransaction, SequenceId, SystemSequenceKey},
6 return_internal_error,
7};
8
9use crate::{
10 CatalogStore,
11 store::sequence::{
12 Sequence,
13 layout::sequence::{LAYOUT, VALUE},
14 },
15};
16
17impl CatalogStore {
18 pub async fn find_sequence(
19 rx: &mut impl QueryTransaction,
20 sequence_id: SequenceId,
21 ) -> crate::Result<Option<Sequence>> {
22 let (namespace, name) = match sequence_id {
23 crate::system::ids::sequences::NAMESPACE => (NamespaceId(1), "namespace"),
24 crate::system::ids::sequences::SOURCE => (NamespaceId(1), "source"),
25 crate::system::ids::sequences::COLUMN => (NamespaceId(1), "column"),
26 crate::system::ids::sequences::COLUMN_POLICY => (NamespaceId(1), "column_policy"),
27 crate::system::ids::sequences::FLOW => (NamespaceId(1), "flow"),
28 crate::system::ids::sequences::FLOW_NODE => (NamespaceId(1), "flow_node"),
29 crate::system::ids::sequences::FLOW_EDGE => (NamespaceId(1), "flow_edge"),
30 crate::system::ids::sequences::PRIMARY_KEY => (NamespaceId(1), "primary_key"),
31 _ => return_internal_error!(
32 "Sequence with ID {:?} not found in catalog. This indicates a critical catalog inconsistency.",
33 sequence_id
34 ),
35 };
36
37 let sequence_key = SystemSequenceKey::encoded(sequence_id);
39
40 let value = match rx.get(&sequence_key).await? {
41 Some(row) => LAYOUT.get_u64(&row.values, VALUE),
42 None => 0,
43 };
44
45 Ok(Some(Sequence {
46 id: sequence_id,
47 namespace,
48 name: name.to_string(),
49 value,
50 }))
51 }
52}