reifydb_core/interface/transaction/
interceptor.rs1use reifydb_type::RowNumber;
5
6use crate::{
7 CommitVersion, TransactionId,
8 interceptor::{
9 Chain, NamespaceDefPostCreateInterceptor, NamespaceDefPostUpdateInterceptor,
10 NamespaceDefPreDeleteInterceptor, NamespaceDefPreUpdateInterceptor, PostCommitInterceptor,
11 PreCommitInterceptor, RingBufferPostDeleteInterceptor, RingBufferPostInsertInterceptor,
12 RingBufferPostUpdateInterceptor, RingBufferPreDeleteInterceptor, RingBufferPreInsertInterceptor,
13 RingBufferPreUpdateInterceptor, TableDefPostCreateInterceptor, TableDefPostUpdateInterceptor,
14 TableDefPreDeleteInterceptor, TableDefPreUpdateInterceptor, TablePostDeleteInterceptor,
15 TablePostInsertInterceptor, TablePostUpdateInterceptor, TablePreDeleteInterceptor,
16 TablePreInsertInterceptor, TablePreUpdateInterceptor, ViewDefPostCreateInterceptor,
17 ViewDefPostUpdateInterceptor, ViewDefPreDeleteInterceptor, ViewDefPreUpdateInterceptor,
18 },
19 interface::{
20 CommandTransaction, NamespaceDef, RingBufferDef, TableDef, ViewDef,
21 transaction::change::TransactionalDefChanges,
22 },
23 value::encoded::EncodedValues,
24};
25
26pub trait TableInterceptor<CT: CommandTransaction> {
27 fn pre_insert(&mut self, table: &TableDef, row: &EncodedValues) -> crate::Result<()>;
29
30 fn post_insert(&mut self, table: &TableDef, id: RowNumber, row: &EncodedValues) -> crate::Result<()>;
32
33 fn pre_update(&mut self, table: &TableDef, id: RowNumber, row: &EncodedValues) -> crate::Result<()>;
35
36 fn post_update(
38 &mut self,
39 table: &TableDef,
40 id: RowNumber,
41 row: &EncodedValues,
42 old_row: &EncodedValues,
43 ) -> crate::Result<()>;
44
45 fn pre_delete(&mut self, table: &TableDef, id: RowNumber) -> crate::Result<()>;
47
48 fn post_delete(&mut self, table: &TableDef, id: RowNumber, deleted_row: &EncodedValues) -> crate::Result<()>;
50}
51
52pub trait RingBufferInterceptor<CT: CommandTransaction> {
53 fn pre_insert(&mut self, ring_buffer: &RingBufferDef, row: &EncodedValues) -> crate::Result<()>;
55
56 fn post_insert(&mut self, ring_buffer: &RingBufferDef, id: RowNumber, row: &EncodedValues)
58 -> crate::Result<()>;
59
60 fn pre_update(&mut self, ring_buffer: &RingBufferDef, id: RowNumber, row: &EncodedValues) -> crate::Result<()>;
62
63 fn post_update(
65 &mut self,
66 ring_buffer: &RingBufferDef,
67 id: RowNumber,
68 row: &EncodedValues,
69 old_row: &EncodedValues,
70 ) -> crate::Result<()>;
71
72 fn pre_delete(&mut self, ring_buffer: &RingBufferDef, id: RowNumber) -> crate::Result<()>;
74
75 fn post_delete(
77 &mut self,
78 ring_buffer: &RingBufferDef,
79 id: RowNumber,
80 deleted_row: &EncodedValues,
81 ) -> crate::Result<()>;
82}
83
84pub trait NamespaceDefInterceptor<CT: CommandTransaction> {
85 fn post_create(&mut self, post: &NamespaceDef) -> crate::Result<()>;
87
88 fn pre_update(&mut self, pre: &NamespaceDef) -> crate::Result<()>;
90
91 fn post_update(&mut self, pre: &NamespaceDef, post: &NamespaceDef) -> crate::Result<()>;
93
94 fn pre_delete(&mut self, pre: &NamespaceDef) -> crate::Result<()>;
96}
97
98pub trait TableDefInterceptor<CT: CommandTransaction> {
99 fn post_create(&mut self, post: &TableDef) -> crate::Result<()>;
101
102 fn pre_update(&mut self, pre: &TableDef) -> crate::Result<()>;
104
105 fn post_update(&mut self, pre: &TableDef, post: &TableDef) -> crate::Result<()>;
107
108 fn pre_delete(&mut self, pre: &TableDef) -> crate::Result<()>;
110}
111
112pub trait ViewDefInterceptor<CT: CommandTransaction> {
113 fn post_create(&mut self, post: &ViewDef) -> crate::Result<()>;
115
116 fn pre_update(&mut self, pre: &ViewDef) -> crate::Result<()>;
118
119 fn post_update(&mut self, pre: &ViewDef, post: &ViewDef) -> crate::Result<()>;
121
122 fn pre_delete(&mut self, pre: &ViewDef) -> crate::Result<()>;
124}
125
126pub trait TransactionInterceptor<CT: CommandTransaction> {
127 fn pre_commit(&mut self) -> crate::Result<()>;
129
130 fn post_commit(
132 &mut self,
133 id: TransactionId,
134 version: CommitVersion,
135 changes: TransactionalDefChanges,
136 ) -> crate::Result<()>;
137}
138
139pub trait WithInterceptors<CT: CommandTransaction> {
141 fn table_pre_insert_interceptors(&mut self) -> &mut Chain<CT, dyn TablePreInsertInterceptor<CT>>;
143
144 fn table_post_insert_interceptors(&mut self) -> &mut Chain<CT, dyn TablePostInsertInterceptor<CT>>;
146
147 fn table_pre_update_interceptors(&mut self) -> &mut Chain<CT, dyn TablePreUpdateInterceptor<CT>>;
149
150 fn table_post_update_interceptors(&mut self) -> &mut Chain<CT, dyn TablePostUpdateInterceptor<CT>>;
152
153 fn table_pre_delete_interceptors(&mut self) -> &mut Chain<CT, dyn TablePreDeleteInterceptor<CT>>;
155
156 fn table_post_delete_interceptors(&mut self) -> &mut Chain<CT, dyn TablePostDeleteInterceptor<CT>>;
158
159 fn ring_buffer_pre_insert_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPreInsertInterceptor<CT>>;
161
162 fn ring_buffer_post_insert_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPostInsertInterceptor<CT>>;
164
165 fn ring_buffer_pre_update_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPreUpdateInterceptor<CT>>;
167
168 fn ring_buffer_post_update_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPostUpdateInterceptor<CT>>;
170
171 fn ring_buffer_pre_delete_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPreDeleteInterceptor<CT>>;
173
174 fn ring_buffer_post_delete_interceptors(&mut self) -> &mut Chain<CT, dyn RingBufferPostDeleteInterceptor<CT>>;
176
177 fn pre_commit_interceptors(&mut self) -> &mut Chain<CT, dyn PreCommitInterceptor<CT>>;
179
180 fn post_commit_interceptors(&mut self) -> &mut Chain<CT, dyn PostCommitInterceptor<CT>>;
182
183 fn namespace_def_post_create_interceptors(
186 &mut self,
187 ) -> &mut Chain<CT, dyn NamespaceDefPostCreateInterceptor<CT>>;
188
189 fn namespace_def_pre_update_interceptors(&mut self)
191 -> &mut Chain<CT, dyn NamespaceDefPreUpdateInterceptor<CT>>;
192
193 fn namespace_def_post_update_interceptors(
195 &mut self,
196 ) -> &mut Chain<CT, dyn NamespaceDefPostUpdateInterceptor<CT>>;
197
198 fn namespace_def_pre_delete_interceptors(&mut self)
200 -> &mut Chain<CT, dyn NamespaceDefPreDeleteInterceptor<CT>>;
201
202 fn table_def_post_create_interceptors(&mut self) -> &mut Chain<CT, dyn TableDefPostCreateInterceptor<CT>>;
205
206 fn table_def_pre_update_interceptors(&mut self) -> &mut Chain<CT, dyn TableDefPreUpdateInterceptor<CT>>;
208
209 fn table_def_post_update_interceptors(&mut self) -> &mut Chain<CT, dyn TableDefPostUpdateInterceptor<CT>>;
211
212 fn table_def_pre_delete_interceptors(&mut self) -> &mut Chain<CT, dyn TableDefPreDeleteInterceptor<CT>>;
214
215 fn view_def_post_create_interceptors(&mut self) -> &mut Chain<CT, dyn ViewDefPostCreateInterceptor<CT>>;
218
219 fn view_def_pre_update_interceptors(&mut self) -> &mut Chain<CT, dyn ViewDefPreUpdateInterceptor<CT>>;
221
222 fn view_def_post_update_interceptors(&mut self) -> &mut Chain<CT, dyn ViewDefPostUpdateInterceptor<CT>>;
224
225 fn view_def_pre_delete_interceptors(&mut self) -> &mut Chain<CT, dyn ViewDefPreDeleteInterceptor<CT>>;
227}