reifydb_transaction/single/
mod.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4mod svl;
5
6use reifydb_core::{
7	EncodedKey,
8	event::EventBus,
9	interface::{SingleVersionTransaction, WithEventBus},
10};
11use reifydb_store_transaction::TransactionStore;
12pub use svl::{SvlCommandTransaction, SvlQueryTransaction, TransactionSvl};
13
14#[repr(u8)]
15#[derive(Clone)]
16pub enum TransactionSingleVersion {
17	SingleVersionLock(TransactionSvl) = 0,
18}
19
20impl TransactionSingleVersion {
21	pub fn svl(store: TransactionStore, bus: EventBus) -> Self {
22		Self::SingleVersionLock(TransactionSvl::new(store, bus))
23	}
24}
25
26impl TransactionSingleVersion {
27	pub fn testing() -> Self {
28		Self::SingleVersionLock(TransactionSvl::new(TransactionStore::testing_memory(), EventBus::default()))
29	}
30}
31
32impl WithEventBus for TransactionSingleVersion {
33	fn event_bus(&self) -> &EventBus {
34		match self {
35			TransactionSingleVersion::SingleVersionLock(t) => t.event_bus(),
36		}
37	}
38}
39
40impl SingleVersionTransaction for TransactionSingleVersion {
41	type Query<'a> = SvlQueryTransaction<'a>;
42	type Command<'a> = SvlCommandTransaction<'a>;
43
44	#[inline]
45	fn begin_query<'a, I>(&self, keys: I) -> reifydb_core::Result<Self::Query<'_>>
46	where
47		I: IntoIterator<Item = &'a EncodedKey>,
48	{
49		match self {
50			TransactionSingleVersion::SingleVersionLock(t) => t.begin_query(keys),
51		}
52	}
53
54	#[inline]
55	fn begin_command<'a, I>(&self, keys: I) -> reifydb_core::Result<Self::Command<'_>>
56	where
57		I: IntoIterator<Item = &'a EncodedKey>,
58	{
59		match self {
60			TransactionSingleVersion::SingleVersionLock(t) => t.begin_command(keys),
61		}
62	}
63}