1use reifydb_type::RowNumber;
5
6use crate::{
7 CommitVersion, TransactionId,
8 interceptor::{
9 Chain, NamespaceDefPostCreateInterceptor, NamespaceDefPostUpdateInterceptor,
10 NamespaceDefPreDeleteInterceptor, NamespaceDefPreUpdateInterceptor, PostCommitInterceptor,
11 PreCommitInterceptor, RingBufferDefPostCreateInterceptor, RingBufferDefPostUpdateInterceptor,
12 RingBufferDefPreDeleteInterceptor, RingBufferDefPreUpdateInterceptor, RingBufferPostDeleteInterceptor,
13 RingBufferPostInsertInterceptor, RingBufferPostUpdateInterceptor, RingBufferPreDeleteInterceptor,
14 RingBufferPreInsertInterceptor, RingBufferPreUpdateInterceptor, TableDefPostCreateInterceptor,
15 TableDefPostUpdateInterceptor, TableDefPreDeleteInterceptor, TableDefPreUpdateInterceptor,
16 TablePostDeleteInterceptor, TablePostInsertInterceptor, TablePostUpdateInterceptor,
17 TablePreDeleteInterceptor, TablePreInsertInterceptor, TablePreUpdateInterceptor,
18 ViewDefPostCreateInterceptor, ViewDefPostUpdateInterceptor, ViewDefPreDeleteInterceptor,
19 ViewDefPreUpdateInterceptor, ViewPostDeleteInterceptor, ViewPostInsertInterceptor,
20 ViewPostUpdateInterceptor, ViewPreDeleteInterceptor, ViewPreInsertInterceptor,
21 ViewPreUpdateInterceptor,
22 },
23 interface::{
24 CommandTransaction, NamespaceDef, RingBufferDef, RowChange, TableDef, ViewDef,
25 transaction::change::TransactionalDefChanges,
26 },
27 value::encoded::EncodedValues,
28};
29
30pub trait TableInterceptor<CT: CommandTransaction> {
31 fn pre_insert(&mut self, table: &TableDef, rn: RowNumber, row: &EncodedValues) -> crate::Result<()>;
33
34 fn post_insert(&mut self, table: &TableDef, id: RowNumber, row: &EncodedValues) -> crate::Result<()>;
36
37 fn pre_update(&mut self, table: &TableDef, id: RowNumber, row: &EncodedValues) -> crate::Result<()>;
39
40 fn post_update(
42 &mut self,
43 table: &TableDef,
44 id: RowNumber,
45 row: &EncodedValues,
46 old_row: &EncodedValues,
47 ) -> crate::Result<()>;
48
49 fn pre_delete(&mut self, table: &TableDef, id: RowNumber) -> crate::Result<()>;
51
52 fn post_delete(&mut self, table: &TableDef, id: RowNumber, deleted_row: &EncodedValues) -> crate::Result<()>;
54}
55
56pub trait RingBufferInterceptor<CT: CommandTransaction> {
57 fn pre_insert(&mut self, ring_buffer: &RingBufferDef, row: &EncodedValues) -> crate::Result<()>;
59
60 fn post_insert(&mut self, ring_buffer: &RingBufferDef, id: RowNumber, row: &EncodedValues)
62 -> crate::Result<()>;
63
64 fn pre_update(&mut self, ring_buffer: &RingBufferDef, id: RowNumber, row: &EncodedValues) -> crate::Result<()>;
66
67 fn post_update(
69 &mut self,
70 ring_buffer: &RingBufferDef,
71 id: RowNumber,
72 row: &EncodedValues,
73 old_row: &EncodedValues,
74 ) -> crate::Result<()>;
75
76 fn pre_delete(&mut self, ring_buffer: &RingBufferDef, id: RowNumber) -> crate::Result<()>;
78
79 fn post_delete(
81 &mut self,
82 ring_buffer: &RingBufferDef,
83 id: RowNumber,
84 deleted_row: &EncodedValues,
85 ) -> crate::Result<()>;
86}
87
88pub trait NamespaceDefInterceptor<CT: CommandTransaction> {
89 fn post_create(&mut self, post: &NamespaceDef) -> crate::Result<()>;
91
92 fn pre_update(&mut self, pre: &NamespaceDef) -> crate::Result<()>;
94
95 fn post_update(&mut self, pre: &NamespaceDef, post: &NamespaceDef) -> crate::Result<()>;
97
98 fn pre_delete(&mut self, pre: &NamespaceDef) -> crate::Result<()>;
100}
101
102pub trait TableDefInterceptor<CT: CommandTransaction> {
103 fn post_create(&mut self, post: &TableDef) -> crate::Result<()>;
105
106 fn pre_update(&mut self, pre: &TableDef) -> crate::Result<()>;
108
109 fn post_update(&mut self, pre: &TableDef, post: &TableDef) -> crate::Result<()>;
111
112 fn pre_delete(&mut self, pre: &TableDef) -> crate::Result<()>;
114}
115
116pub trait ViewDefInterceptor<CT: CommandTransaction> {
117 fn post_create(&mut self, post: &ViewDef) -> crate::Result<()>;
119
120 fn pre_update(&mut self, pre: &ViewDef) -> crate::Result<()>;
122
123 fn post_update(&mut self, pre: &ViewDef, post: &ViewDef) -> crate::Result<()>;
125
126 fn pre_delete(&mut self, pre: &ViewDef) -> crate::Result<()>;
128}
129
130pub trait RingBufferDefInterceptor<CT: CommandTransaction> {
131 fn post_create(&mut self, post: &RingBufferDef) -> crate::Result<()>;
133
134 fn pre_update(&mut self, pre: &RingBufferDef) -> crate::Result<()>;
136
137 fn post_update(&mut self, pre: &RingBufferDef, post: &RingBufferDef) -> crate::Result<()>;
139
140 fn pre_delete(&mut self, pre: &RingBufferDef) -> crate::Result<()>;
142}
143
144pub trait ViewInterceptor<CT: CommandTransaction> {
145 fn pre_insert(&mut self, view: &ViewDef, rn: RowNumber, row: &EncodedValues) -> crate::Result<()>;
147
148 fn post_insert(&mut self, view: &ViewDef, id: RowNumber, row: &EncodedValues) -> crate::Result<()>;
150
151 fn pre_update(&mut self, view: &ViewDef, id: RowNumber, row: &EncodedValues) -> crate::Result<()>;
153
154 fn post_update(
156 &mut self,
157 view: &ViewDef,
158 id: RowNumber,
159 row: &EncodedValues,
160 old_row: &EncodedValues,
161 ) -> crate::Result<()>;
162
163 fn pre_delete(&mut self, view: &ViewDef, id: RowNumber) -> crate::Result<()>;
165
166 fn post_delete(&mut self, view: &ViewDef, id: RowNumber, deleted_row: &EncodedValues) -> crate::Result<()>;
168}
169
170pub trait TransactionInterceptor<CT: CommandTransaction> {
171 fn pre_commit(&mut self) -> crate::Result<()>;
173
174 fn post_commit(
176 &mut self,
177 id: TransactionId,
178 version: CommitVersion,
179 changes: TransactionalDefChanges,
180 row_changes: Vec<RowChange>,
181 ) -> crate::Result<()>;
182}
183
184pub trait WithInterceptors<CT: CommandTransaction> {
186 fn table_pre_insert_interceptors(&mut self) -> &mut Chain<CT, dyn TablePreInsertInterceptor<CT>>;
188
189 fn table_post_insert_interceptors(&mut self) -> &mut Chain<CT, dyn TablePostInsertInterceptor<CT>>;
191
192 fn table_pre_update_interceptors(&mut self) -> &mut Chain<CT, dyn TablePreUpdateInterceptor<CT>>;
194
195 fn table_post_update_interceptors(&mut self) -> &mut Chain<CT, dyn TablePostUpdateInterceptor<CT>>;
197
198 fn table_pre_delete_interceptors(&mut self) -> &mut Chain<CT, dyn TablePreDeleteInterceptor<CT>>;
200
201 fn table_post_delete_interceptors(&mut self) -> &mut Chain<CT, dyn TablePostDeleteInterceptor<CT>>;
203
204 fn ring_buffer_pre_insert_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPreInsertInterceptor<CT>>;
206
207 fn ring_buffer_post_insert_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPostInsertInterceptor<CT>>;
209
210 fn ring_buffer_pre_update_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPreUpdateInterceptor<CT>>;
212
213 fn ring_buffer_post_update_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPostUpdateInterceptor<CT>>;
215
216 fn ring_buffer_pre_delete_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPreDeleteInterceptor<CT>>;
218
219 fn ring_buffer_post_delete_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPostDeleteInterceptor<CT>>;
221
222 fn pre_commit_interceptors(&mut self) -> &mut Chain<CT, dyn PreCommitInterceptor<CT>>;
224
225 fn post_commit_interceptors(&mut self) -> &mut Chain<CT, dyn PostCommitInterceptor<CT>>;
227
228 fn namespace_def_post_create_interceptors(
231 &mut self,
232 ) -> &mut Chain<CT, dyn NamespaceDefPostCreateInterceptor<CT>>;
233
234 fn namespace_def_pre_update_interceptors(&mut self)
236 -> &mut Chain<CT, dyn NamespaceDefPreUpdateInterceptor<CT>>;
237
238 fn namespace_def_post_update_interceptors(
240 &mut self,
241 ) -> &mut Chain<CT, dyn NamespaceDefPostUpdateInterceptor<CT>>;
242
243 fn namespace_def_pre_delete_interceptors(&mut self)
245 -> &mut Chain<CT, dyn NamespaceDefPreDeleteInterceptor<CT>>;
246
247 fn table_def_post_create_interceptors(&mut self) -> &mut Chain<CT, dyn TableDefPostCreateInterceptor<CT>>;
250
251 fn table_def_pre_update_interceptors(&mut self) -> &mut Chain<CT, dyn TableDefPreUpdateInterceptor<CT>>;
253
254 fn table_def_post_update_interceptors(&mut self) -> &mut Chain<CT, dyn TableDefPostUpdateInterceptor<CT>>;
256
257 fn table_def_pre_delete_interceptors(&mut self) -> &mut Chain<CT, dyn TableDefPreDeleteInterceptor<CT>>;
259
260 fn view_def_post_create_interceptors(&mut self) -> &mut Chain<CT, dyn ViewDefPostCreateInterceptor<CT>>;
263
264 fn view_def_pre_update_interceptors(&mut self) -> &mut Chain<CT, dyn ViewDefPreUpdateInterceptor<CT>>;
266
267 fn view_def_post_update_interceptors(&mut self) -> &mut Chain<CT, dyn ViewDefPostUpdateInterceptor<CT>>;
269
270 fn view_def_pre_delete_interceptors(&mut self) -> &mut Chain<CT, dyn ViewDefPreDeleteInterceptor<CT>>;
272
273 fn ring_buffer_def_post_create_interceptors(
276 &mut self,
277 ) -> &mut Chain<CT, dyn RingBufferDefPostCreateInterceptor<CT>>;
278
279 fn ring_buffer_def_pre_update_interceptors(
281 &mut self,
282 ) -> &mut Chain<CT, dyn RingBufferDefPreUpdateInterceptor<CT>>;
283
284 fn ring_buffer_def_post_update_interceptors(
286 &mut self,
287 ) -> &mut Chain<CT, dyn RingBufferDefPostUpdateInterceptor<CT>>;
288
289 fn ring_buffer_def_pre_delete_interceptors(
291 &mut self,
292 ) -> &mut Chain<CT, dyn RingBufferDefPreDeleteInterceptor<CT>>;
293
294 fn view_pre_insert_interceptors(&mut self) -> &mut Chain<CT, dyn ViewPreInsertInterceptor<CT>>;
297
298 fn view_post_insert_interceptors(&mut self) -> &mut Chain<CT, dyn ViewPostInsertInterceptor<CT>>;
300
301 fn view_pre_update_interceptors(&mut self) -> &mut Chain<CT, dyn ViewPreUpdateInterceptor<CT>>;
303
304 fn view_post_update_interceptors(&mut self) -> &mut Chain<CT, dyn ViewPostUpdateInterceptor<CT>>;
306
307 fn view_pre_delete_interceptors(&mut self) -> &mut Chain<CT, dyn ViewPreDeleteInterceptor<CT>>;
309
310 fn view_post_delete_interceptors(&mut self) -> &mut Chain<CT, dyn ViewPostDeleteInterceptor<CT>>;
312}