reifydb_transaction/multi/
serializable.rs1use reifydb_core::{
5 CommitVersion, EncodedKey, EncodedKeyRange, Error,
6 event::EventBus,
7 interface::{
8 BoxedMultiVersionIter, MultiVersionCommandTransaction, MultiVersionQueryTransaction,
9 MultiVersionTransaction, MultiVersionValues, TransactionId, WithEventBus,
10 },
11 value::encoded::EncodedValues,
12};
13
14use crate::multi::transaction::serializable::{CommandTransaction, QueryTransaction, TransactionSerializable};
15
16impl WithEventBus for TransactionSerializable {
17 fn event_bus(&self) -> &EventBus {
18 &self.event_bus
19 }
20}
21
22impl MultiVersionTransaction for TransactionSerializable {
23 type Query = QueryTransaction;
24 type Command = CommandTransaction;
25
26 fn begin_query(&self) -> Result<Self::Query, Error> {
27 self.begin_query()
28 }
29
30 fn begin_command(&self) -> Result<Self::Command, Error> {
31 self.begin_command()
32 }
33}
34
35impl MultiVersionQueryTransaction for QueryTransaction {
36 fn version(&self) -> CommitVersion {
37 self.tm.version()
38 }
39
40 fn id(&self) -> TransactionId {
41 self.tm.id()
42 }
43
44 fn get(&mut self, key: &EncodedKey) -> Result<Option<MultiVersionValues>, Error> {
45 Ok(QueryTransaction::get(self, key)?.map(|tv| MultiVersionValues {
46 key: tv.key().clone(),
47 values: tv.values().clone(),
48 version: tv.version(),
49 }))
50 }
51
52 fn contains_key(&mut self, key: &EncodedKey) -> Result<bool, Error> {
53 QueryTransaction::contains_key(self, key)
54 }
55
56 fn range_batched(
57 &mut self,
58 range: EncodedKeyRange,
59 batch_size: u64,
60 ) -> Result<BoxedMultiVersionIter<'_>, Error> {
61 let iter = QueryTransaction::range_batched(self, range, batch_size)?;
62 Ok(Box::new(iter.into_iter()))
63 }
64
65 fn range_rev_batched(
66 &mut self,
67 range: EncodedKeyRange,
68 batch_size: u64,
69 ) -> Result<BoxedMultiVersionIter<'_>, Error> {
70 let iter = QueryTransaction::range_rev_batched(self, range, batch_size)?;
71 Ok(Box::new(iter.into_iter()))
72 }
73
74 fn prefix(&mut self, prefix: &EncodedKey) -> Result<BoxedMultiVersionIter<'_>, Error> {
75 let iter = QueryTransaction::prefix(self, prefix)?;
76 Ok(Box::new(iter.into_iter()))
77 }
78
79 fn prefix_rev(&mut self, prefix: &EncodedKey) -> Result<BoxedMultiVersionIter<'_>, Error> {
80 let iter = QueryTransaction::prefix_rev(self, prefix)?;
81 Ok(Box::new(iter.into_iter()))
82 }
83
84 fn read_as_of_version_exclusive(&mut self, version: CommitVersion) -> Result<(), Error> {
85 QueryTransaction::read_as_of_version_exclusive(self, version);
86 Ok(())
87 }
88}
89
90impl MultiVersionQueryTransaction for CommandTransaction {
91 fn version(&self) -> CommitVersion {
92 self.tm.version()
93 }
94
95 fn id(&self) -> TransactionId {
96 self.tm.id()
97 }
98
99 fn get(&mut self, key: &EncodedKey) -> Result<Option<MultiVersionValues>, Error> {
100 Ok(CommandTransaction::get(self, key)?.map(|tv| MultiVersionValues {
101 key: tv.key().clone(),
102 values: tv.values().clone(),
103 version: tv.version(),
104 }))
105 }
106
107 fn contains_key(&mut self, key: &EncodedKey) -> Result<bool, Error> {
108 Ok(CommandTransaction::contains_key(self, key)?)
109 }
110
111 fn range_batched(
112 &mut self,
113 range: EncodedKeyRange,
114 batch_size: u64,
115 ) -> Result<BoxedMultiVersionIter<'_>, Error> {
116 let iter = self.range_batched(range, batch_size)?.map(|tv| MultiVersionValues {
117 key: tv.key().clone(),
118 values: tv.values().clone(),
119 version: tv.version(),
120 });
121
122 Ok(Box::new(iter))
123 }
124
125 fn range_rev_batched(
126 &mut self,
127 range: EncodedKeyRange,
128 batch_size: u64,
129 ) -> Result<BoxedMultiVersionIter<'_>, Error> {
130 let iter = self.range_rev_batched(range, batch_size)?.map(|tv| MultiVersionValues {
131 key: tv.key().clone(),
132 values: tv.values().clone(),
133 version: tv.version(),
134 });
135
136 Ok(Box::new(iter))
137 }
138
139 fn prefix(&mut self, prefix: &EncodedKey) -> Result<BoxedMultiVersionIter<'_>, Error> {
140 let iter = self.prefix(prefix)?.map(|tv| MultiVersionValues {
141 key: tv.key().clone(),
142 values: tv.values().clone(),
143 version: tv.version(),
144 });
145
146 Ok(Box::new(iter))
147 }
148
149 fn prefix_rev(&mut self, prefix: &EncodedKey) -> Result<BoxedMultiVersionIter<'_>, Error> {
150 let iter = self.prefix_rev(prefix)?.map(|tv| MultiVersionValues {
151 key: tv.key().clone(),
152 values: tv.values().clone(),
153 version: tv.version(),
154 });
155
156 Ok(Box::new(iter))
157 }
158
159 fn read_as_of_version_exclusive(&mut self, version: CommitVersion) -> Result<(), Error> {
160 CommandTransaction::read_as_of_version_exclusive(self, version);
161 Ok(())
162 }
163}
164
165impl MultiVersionCommandTransaction for CommandTransaction {
166 fn set(&mut self, key: &EncodedKey, values: EncodedValues) -> Result<(), Error> {
167 CommandTransaction::set(self, key, values)?;
168 Ok(())
169 }
170
171 fn remove(&mut self, key: &EncodedKey) -> Result<(), Error> {
172 CommandTransaction::remove(self, key)?;
173 Ok(())
174 }
175
176 fn commit(mut self) -> Result<CommitVersion, Error> {
177 let version = CommandTransaction::commit(&mut self)?;
178 Ok(version)
179 }
180
181 fn rollback(mut self) -> Result<(), Error> {
182 CommandTransaction::rollback(&mut self)?;
183 Ok(())
184 }
185}