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(&mut self, range: EncodedKeyRange, batch_size: u64) -> Result<BoxedMultiVersionIter, Error> {
57 let iter = QueryTransaction::range_batched(self, range, batch_size)?;
58 Ok(Box::new(iter.into_iter()))
59 }
60
61 fn range_rev_batched(
62 &mut self,
63 range: EncodedKeyRange,
64 batch_size: u64,
65 ) -> Result<BoxedMultiVersionIter, Error> {
66 let iter = QueryTransaction::range_rev_batched(self, range, batch_size)?;
67 Ok(Box::new(iter.into_iter()))
68 }
69
70 fn prefix(&mut self, prefix: &EncodedKey) -> Result<BoxedMultiVersionIter, Error> {
71 let iter = QueryTransaction::prefix(self, prefix)?;
72 Ok(Box::new(iter.into_iter()))
73 }
74
75 fn prefix_rev(&mut self, prefix: &EncodedKey) -> Result<BoxedMultiVersionIter, Error> {
76 let iter = QueryTransaction::prefix_rev(self, prefix)?;
77 Ok(Box::new(iter.into_iter()))
78 }
79
80 fn read_as_of_version_exclusive(&mut self, version: CommitVersion) -> Result<(), Error> {
81 QueryTransaction::read_as_of_version_exclusive(self, version);
82 Ok(())
83 }
84}
85
86impl MultiVersionQueryTransaction for CommandTransaction {
87 fn version(&self) -> CommitVersion {
88 self.tm.version()
89 }
90
91 fn id(&self) -> TransactionId {
92 self.tm.id()
93 }
94
95 fn get(&mut self, key: &EncodedKey) -> Result<Option<MultiVersionValues>, Error> {
96 Ok(CommandTransaction::get(self, key)?.map(|tv| MultiVersionValues {
97 key: tv.key().clone(),
98 values: tv.values().clone(),
99 version: tv.version(),
100 }))
101 }
102
103 fn contains_key(&mut self, key: &EncodedKey) -> Result<bool, Error> {
104 Ok(CommandTransaction::contains_key(self, key)?)
105 }
106
107 fn range_batched(&mut self, range: EncodedKeyRange, batch_size: u64) -> Result<BoxedMultiVersionIter, Error> {
108 let iter = self.range_batched(range, batch_size)?.map(|tv| MultiVersionValues {
109 key: tv.key().clone(),
110 values: tv.values().clone(),
111 version: tv.version(),
112 });
113
114 Ok(Box::new(iter))
115 }
116
117 fn range_rev_batched(
118 &mut self,
119 range: EncodedKeyRange,
120 batch_size: u64,
121 ) -> Result<BoxedMultiVersionIter, Error> {
122 let iter = self.range_rev_batched(range, batch_size)?.map(|tv| MultiVersionValues {
123 key: tv.key().clone(),
124 values: tv.values().clone(),
125 version: tv.version(),
126 });
127
128 Ok(Box::new(iter))
129 }
130
131 fn prefix(&mut self, prefix: &EncodedKey) -> Result<BoxedMultiVersionIter, Error> {
132 let iter = self.prefix(prefix)?.map(|tv| MultiVersionValues {
133 key: tv.key().clone(),
134 values: tv.values().clone(),
135 version: tv.version(),
136 });
137
138 Ok(Box::new(iter))
139 }
140
141 fn prefix_rev(&mut self, prefix: &EncodedKey) -> Result<BoxedMultiVersionIter, Error> {
142 let iter = self.prefix_rev(prefix)?.map(|tv| MultiVersionValues {
143 key: tv.key().clone(),
144 values: tv.values().clone(),
145 version: tv.version(),
146 });
147
148 Ok(Box::new(iter))
149 }
150
151 fn read_as_of_version_exclusive(&mut self, version: CommitVersion) -> Result<(), Error> {
152 CommandTransaction::read_as_of_version_exclusive(self, version);
153 Ok(())
154 }
155}
156
157impl MultiVersionCommandTransaction for CommandTransaction {
158 fn set(&mut self, key: &EncodedKey, values: EncodedValues) -> Result<(), Error> {
159 CommandTransaction::set(self, key, values)?;
160 Ok(())
161 }
162
163 fn remove(&mut self, key: &EncodedKey) -> Result<(), Error> {
164 CommandTransaction::remove(self, key)?;
165 Ok(())
166 }
167
168 fn commit(mut self) -> Result<CommitVersion, Error> {
169 let version = CommandTransaction::commit(&mut self)?;
170 Ok(version)
171 }
172
173 fn rollback(mut self) -> Result<(), Error> {
174 CommandTransaction::rollback(&mut self)?;
175 Ok(())
176 }
177}