reifydb_store_transaction/
multi.rs1use async_trait::async_trait;
5use reifydb_core::{CommitVersion, CowVec, EncodedKey, EncodedKeyRange, delta::Delta, interface::MultiVersionValues};
6
7pub trait MultiVersionStore:
9 Send
10 + Sync
11 + Clone
12 + MultiVersionCommit
13 + MultiVersionGet
14 + MultiVersionContains
15 + MultiVersionRange
16 + MultiVersionRangeRev
17 + 'static
18{
19}
20
21#[derive(Debug, Clone)]
23pub struct MultiVersionBatch {
24 pub items: Vec<MultiVersionValues>,
26 pub has_more: bool,
28}
29
30impl MultiVersionBatch {
31 pub fn empty() -> Self {
33 Self {
34 items: Vec::new(),
35 has_more: false,
36 }
37 }
38
39 pub fn is_empty(&self) -> bool {
41 self.items.is_empty()
42 }
43}
44
45#[async_trait]
47pub trait MultiVersionCommit: Send + Sync {
48 async fn commit(&self, deltas: CowVec<Delta>, version: CommitVersion) -> crate::Result<()>;
50}
51
52#[async_trait]
54pub trait MultiVersionGet: Send + Sync {
55 async fn get(&self, key: &EncodedKey, version: CommitVersion) -> crate::Result<Option<MultiVersionValues>>;
57}
58
59#[async_trait]
61pub trait MultiVersionContains: Send + Sync {
62 async fn contains(&self, key: &EncodedKey, version: CommitVersion) -> crate::Result<bool>;
64}
65
66#[async_trait]
68pub trait MultiVersionRange: Send + Sync {
69 async fn range_batch(
74 &self,
75 range: EncodedKeyRange,
76 version: CommitVersion,
77 batch_size: u64,
78 ) -> crate::Result<MultiVersionBatch>;
79
80 async fn range(&self, range: EncodedKeyRange, version: CommitVersion) -> crate::Result<MultiVersionBatch> {
82 self.range_batch(range, version, 1024).await
83 }
84
85 async fn prefix(&self, prefix: &EncodedKey, version: CommitVersion) -> crate::Result<MultiVersionBatch> {
87 self.range(EncodedKeyRange::prefix(prefix), version).await
88 }
89}
90
91#[async_trait]
93pub trait MultiVersionRangeRev: Send + Sync {
94 async fn range_rev_batch(
99 &self,
100 range: EncodedKeyRange,
101 version: CommitVersion,
102 batch_size: u64,
103 ) -> crate::Result<MultiVersionBatch>;
104
105 async fn range_rev(&self, range: EncodedKeyRange, version: CommitVersion) -> crate::Result<MultiVersionBatch> {
107 self.range_rev_batch(range, version, 1024).await
108 }
109
110 async fn prefix_rev(&self, prefix: &EncodedKey, version: CommitVersion) -> crate::Result<MultiVersionBatch> {
112 self.range_rev(EncodedKeyRange::prefix(prefix), version).await
113 }
114}