Skip to main content

reifydb_transaction/transaction/catalog/
column_snapshot.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use reifydb_core::interface::catalog::{
5	change::CatalogTrackColumnSnapshotChangeOperations, column_snapshot::ColumnSnapshot, id::ColumnSnapshotId,
6};
7use reifydb_value::Result;
8
9use crate::{
10	change::{
11		Change,
12		OperationType::{Create, Delete, Update},
13		TransactionalColumnSnapshotChanges,
14	},
15	transaction::admin::AdminTransaction,
16};
17
18impl CatalogTrackColumnSnapshotChangeOperations for AdminTransaction {
19	fn track_column_snapshot_created(&mut self, snapshot: ColumnSnapshot) -> Result<()> {
20		let change = Change {
21			pre: None,
22			post: Some(snapshot),
23			op: Create,
24		};
25		self.changes.add_column_snapshot_change(change);
26		Ok(())
27	}
28
29	fn track_column_snapshot_updated(&mut self, pre: ColumnSnapshot, post: ColumnSnapshot) -> Result<()> {
30		let change = Change {
31			pre: Some(pre),
32			post: Some(post),
33			op: Update,
34		};
35		self.changes.add_column_snapshot_change(change);
36		Ok(())
37	}
38
39	fn track_column_snapshot_deleted(&mut self, snapshot: ColumnSnapshot) -> Result<()> {
40		let change = Change {
41			pre: Some(snapshot),
42			post: None,
43			op: Delete,
44		};
45		self.changes.add_column_snapshot_change(change);
46		Ok(())
47	}
48}
49
50impl TransactionalColumnSnapshotChanges for AdminTransaction {
51	fn find_column_snapshot(&self, id: ColumnSnapshotId) -> Option<&ColumnSnapshot> {
52		for change in self.changes.column_snapshot.iter().rev() {
53			if let Some(snapshot) = &change.post {
54				if snapshot.id == id {
55					return Some(snapshot);
56				}
57			} else if let Some(snapshot) = &change.pre
58				&& snapshot.id == id && change.op == Delete
59			{
60				return None;
61			}
62		}
63		None
64	}
65
66	fn is_column_snapshot_deleted(&self, id: ColumnSnapshotId) -> bool {
67		self.changes
68			.column_snapshot
69			.iter()
70			.rev()
71			.any(|change| change.op == Delete && change.pre.as_ref().map(|s| s.id) == Some(id))
72	}
73}