Skip to main content

reifydb_transaction/transaction/catalog/
operator_settings.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use reifydb_core::{
5	interface::catalog::{change::CatalogTrackOperatorSettingsChangeOperations, flow::OperatorId},
6	row::OperatorSettings,
7};
8use reifydb_value::Result;
9
10use crate::{
11	change::{
12		Change,
13		OperationType::{Create, Delete},
14		TransactionalOperatorSettingsChanges,
15	},
16	transaction::admin::AdminTransaction,
17};
18
19impl CatalogTrackOperatorSettingsChangeOperations for AdminTransaction {
20	fn track_operator_settings_created(&mut self, operator: OperatorId, settings: OperatorSettings) -> Result<()> {
21		let change = Change {
22			pre: None,
23			post: Some((operator, settings)),
24			op: Create,
25		};
26		self.changes.add_operator_settings_change(change);
27		Ok(())
28	}
29}
30
31impl TransactionalOperatorSettingsChanges for AdminTransaction {
32	fn find_operator_settings(&self, operator: OperatorId) -> Option<&OperatorSettings> {
33		for change in self.changes.operator_settings.iter().rev() {
34			if let Some((o, settings)) = &change.post {
35				if *o == operator {
36					return Some(settings);
37				}
38			} else if let Some((o, _)) = &change.pre
39				&& *o == operator && change.op == Delete
40			{
41				return None;
42			}
43		}
44		None
45	}
46}