reifydb_core/interface/transaction/
transaction.rs1use super::change::TransactionalDefChanges;
5use crate::{
6 EncodedKey,
7 interface::{
8 CdcQueryTransaction, MultiVersionCommandTransaction, MultiVersionQueryTransaction,
9 SingleVersionCommandTransaction, SingleVersionQueryTransaction,
10 },
11};
12
13pub trait CommandTransaction: MultiVersionCommandTransaction + QueryTransaction {
14 type SingleVersionCommand<'a>: SingleVersionCommandTransaction
15 where
16 Self: 'a;
17
18 fn begin_single_command<'a, I>(&self, keys: I) -> crate::Result<Self::SingleVersionCommand<'_>>
19 where
20 I: IntoIterator<Item = &'a EncodedKey>;
21
22 fn with_single_command<'a, I, F, R>(&self, keys: I, f: F) -> crate::Result<R>
23 where
24 I: IntoIterator<Item = &'a EncodedKey>,
25 F: FnOnce(&mut Self::SingleVersionCommand<'_>) -> crate::Result<R>,
26 {
27 let mut tx = self.begin_single_command(keys)?;
28 let result = f(&mut tx)?;
29 tx.commit()?;
30 Ok(result)
31 }
32
33 fn get_changes(&self) -> &TransactionalDefChanges;
35}
36
37pub trait QueryTransaction: MultiVersionQueryTransaction {
38 type SingleVersionQuery<'a>: SingleVersionQueryTransaction
39 where
40 Self: 'a;
41
42 type CdcQuery<'a>: CdcQueryTransaction
43 where
44 Self: 'a;
45
46 fn begin_single_query<'a, I>(&self, keys: I) -> crate::Result<Self::SingleVersionQuery<'_>>
47 where
48 I: IntoIterator<Item = &'a EncodedKey>;
49
50 fn begin_cdc_query(&self) -> crate::Result<Self::CdcQuery<'_>>;
51
52 fn with_single_query<'a, I, F, R>(&self, keys: I, f: F) -> crate::Result<R>
53 where
54 I: IntoIterator<Item = &'a EncodedKey>,
55 F: FnOnce(&mut Self::SingleVersionQuery<'_>) -> crate::Result<R>,
56 {
57 let mut tx = self.begin_single_query(keys)?;
58 let result = f(&mut tx)?;
59 Ok(result)
60 }
61
62 fn with_cdc_query<F, R>(&self, f: F) -> crate::Result<R>
63 where
64 F: FnOnce(&mut Self::CdcQuery<'_>) -> crate::Result<R>,
65 {
66 let mut tx = self.begin_cdc_query()?;
67 let result = f(&mut tx)?;
68 Ok(result)
69 }
70}