reifydb_core/interface/transaction/
transaction.rs1use async_trait::async_trait;
5
6use super::change::TransactionalDefChanges;
7use crate::{
8 EncodedKey,
9 interface::{
10 CdcQueryTransaction, MultiVersionCommandTransaction, MultiVersionQueryTransaction,
11 SingleVersionCommandTransaction, SingleVersionQueryTransaction,
12 },
13};
14
15#[async_trait]
16pub trait CommandTransaction: MultiVersionCommandTransaction + QueryTransaction {
17 type SingleVersionCommand<'a>: SingleVersionCommandTransaction
18 where
19 Self: 'a;
20
21 async fn begin_single_command<'a, I>(&self, keys: I) -> crate::Result<Self::SingleVersionCommand<'_>>
22 where
23 I: IntoIterator<Item = &'a EncodedKey> + Send;
24
25 fn get_changes(&self) -> &TransactionalDefChanges;
27}
28
29#[async_trait]
30pub trait QueryTransaction: MultiVersionQueryTransaction {
31 type SingleVersionQuery<'a>: SingleVersionQueryTransaction
32 where
33 Self: 'a;
34
35 type CdcQuery<'a>: CdcQueryTransaction
36 where
37 Self: 'a;
38
39 async fn begin_single_query<'a, I>(&self, keys: I) -> crate::Result<Self::SingleVersionQuery<'_>>
40 where
41 I: IntoIterator<Item = &'a EncodedKey> + Send;
42
43 async fn begin_cdc_query(&self) -> crate::Result<Self::CdcQuery<'_>>;
44}