reifydb_core/interface/transaction/
transaction.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use 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	/// Get reference to catalog changes for this transaction
26	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}