reifydb_store_transaction/
single.rs1use async_trait::async_trait;
5use reifydb_core::{
6 CowVec, EncodedKey, EncodedKeyRange, delta::Delta, interface::SingleVersionValues,
7 value::encoded::EncodedValues,
8};
9
10pub trait SingleVersionStore:
12 Send
13 + Sync
14 + Clone
15 + SingleVersionCommit
16 + SingleVersionGet
17 + SingleVersionContains
18 + SingleVersionSet
19 + SingleVersionRemove
20 + SingleVersionRange
21 + SingleVersionRangeRev
22 + 'static
23{
24}
25
26#[derive(Debug, Clone)]
28pub struct SingleVersionBatch {
29 pub items: Vec<SingleVersionValues>,
31 pub has_more: bool,
33}
34
35impl SingleVersionBatch {
36 pub fn empty() -> Self {
38 Self {
39 items: Vec::new(),
40 has_more: false,
41 }
42 }
43
44 pub fn is_empty(&self) -> bool {
46 self.items.is_empty()
47 }
48}
49
50#[async_trait]
52pub trait SingleVersionCommit: Send + Sync {
53 async fn commit(&mut self, deltas: CowVec<Delta>) -> crate::Result<()>;
55}
56
57#[async_trait]
59pub trait SingleVersionGet: Send + Sync {
60 async fn get(&self, key: &EncodedKey) -> crate::Result<Option<SingleVersionValues>>;
62}
63
64#[async_trait]
66pub trait SingleVersionContains: Send + Sync {
67 async fn contains(&self, key: &EncodedKey) -> crate::Result<bool>;
69}
70
71#[async_trait]
73pub trait SingleVersionSet: SingleVersionCommit {
74 async fn set(&mut self, key: &EncodedKey, values: EncodedValues) -> crate::Result<()> {
76 Self::commit(
77 self,
78 CowVec::new(vec![Delta::Set {
79 key: key.clone(),
80 values: values.clone(),
81 }]),
82 )
83 .await
84 }
85}
86
87#[async_trait]
89pub trait SingleVersionRemove: SingleVersionCommit {
90 async fn remove(&mut self, key: &EncodedKey) -> crate::Result<()> {
92 Self::commit(
93 self,
94 CowVec::new(vec![Delta::Remove {
95 key: key.clone(),
96 }]),
97 )
98 .await
99 }
100}
101
102#[async_trait]
104pub trait SingleVersionRange: Send + Sync {
105 async fn range_batch(&self, range: EncodedKeyRange, batch_size: u64) -> crate::Result<SingleVersionBatch>;
107
108 async fn range(&self, range: EncodedKeyRange) -> crate::Result<SingleVersionBatch> {
110 self.range_batch(range, 1024).await
111 }
112
113 async fn prefix(&self, prefix: &EncodedKey) -> crate::Result<SingleVersionBatch> {
115 self.range(EncodedKeyRange::prefix(prefix)).await
116 }
117}
118
119#[async_trait]
121pub trait SingleVersionRangeRev: Send + Sync {
122 async fn range_rev_batch(&self, range: EncodedKeyRange, batch_size: u64) -> crate::Result<SingleVersionBatch>;
124
125 async fn range_rev(&self, range: EncodedKeyRange) -> crate::Result<SingleVersionBatch> {
127 self.range_rev_batch(range, 1024).await
128 }
129
130 async fn prefix_rev(&self, prefix: &EncodedKey) -> crate::Result<SingleVersionBatch> {
132 self.range_rev(EncodedKeyRange::prefix(prefix)).await
133 }
134}