reifydb_core/interceptor/
table.rs

1use std::marker::PhantomData;
2
3use reifydb_type::RowNumber;
4
5use crate::{
6	define_api_function, define_closure_interceptor, define_interceptor, impl_register_interceptor,
7	interface::TableDef, value::encoded::EncodedValues,
8};
9
10// PRE INSERT
11define_interceptor!(
12	context: TablePreInsertContext<T>,
13	trait: TablePreInsertInterceptor,
14	fields: {
15		txn: &'a mut T,
16		table: &'a TableDef,
17		row: &'a EncodedValues}
18);
19
20define_closure_interceptor!(
21	ClosureTablePreInsertInterceptor,
22	TablePreInsertInterceptor,
23	TablePreInsertContext,
24	with_transaction
25);
26
27define_api_function!(
28	table_pre_insert,
29	ClosureTablePreInsertInterceptor<T, F>,
30	TablePreInsertContext<T>
31);
32
33// POST INSERT
34define_interceptor!(
35	context: TablePostInsertContext<T>,
36	trait: TablePostInsertInterceptor,
37	fields: {
38		txn: &'a mut T,
39		table: &'a TableDef,
40		id: RowNumber,
41		row: &'a EncodedValues}
42);
43
44define_closure_interceptor!(
45	ClosureTablePostInsertInterceptor,
46	TablePostInsertInterceptor,
47	TablePostInsertContext,
48	with_transaction
49);
50
51define_api_function!(
52	table_post_insert,
53	ClosureTablePostInsertInterceptor<T, F>,
54	TablePostInsertContext<T>
55);
56
57// PRE UPDATE
58define_interceptor!(
59	context: TablePreUpdateContext<T>,
60	trait: TablePreUpdateInterceptor,
61	fields: {
62		txn: &'a mut T,
63		table: &'a TableDef,
64		id: RowNumber,
65		row: &'a EncodedValues}
66);
67
68define_closure_interceptor!(
69	ClosureTablePreUpdateInterceptor,
70	TablePreUpdateInterceptor,
71	TablePreUpdateContext,
72	with_transaction
73);
74
75define_api_function!(
76	table_pre_update,
77	ClosureTablePreUpdateInterceptor<T, F>,
78	TablePreUpdateContext<T>
79);
80
81// POST UPDATE
82define_interceptor!(
83	context: TablePostUpdateContext<T>,
84	trait: TablePostUpdateInterceptor,
85	fields: {
86		txn: &'a mut T,
87		table: &'a TableDef,
88		id: RowNumber,
89		row: &'a EncodedValues,
90		old_row: &'a EncodedValues}
91);
92
93define_closure_interceptor!(
94	ClosureTablePostUpdateInterceptor,
95	TablePostUpdateInterceptor,
96	TablePostUpdateContext,
97	with_transaction
98);
99
100define_api_function!(
101	table_post_update,
102	ClosureTablePostUpdateInterceptor<T, F>,
103	TablePostUpdateContext<T>
104);
105
106// PRE DELETE
107define_interceptor!(
108	context: TablePreDeleteContext<T>,
109	trait: TablePreDeleteInterceptor,
110	fields: {
111		txn: &'a mut T,
112		table: &'a TableDef,
113		id: RowNumber}
114);
115
116define_closure_interceptor!(
117	ClosureTablePreDeleteInterceptor,
118	TablePreDeleteInterceptor,
119	TablePreDeleteContext,
120	with_transaction
121);
122
123define_api_function!(
124	table_pre_delete,
125	ClosureTablePreDeleteInterceptor<T, F>,
126	TablePreDeleteContext<T>
127);
128
129// POST DELETE
130define_interceptor!(
131	context: TablePostDeleteContext<T>,
132	trait: TablePostDeleteInterceptor,
133	fields: {
134		txn: &'a mut T,
135		table: &'a TableDef,
136		id: RowNumber,
137		deleted_row: &'a EncodedValues}
138);
139
140define_closure_interceptor!(
141	ClosureTablePostDeleteInterceptor,
142	TablePostDeleteInterceptor,
143	TablePostDeleteContext,
144	with_transaction
145);
146
147define_api_function!(
148	table_post_delete,
149	ClosureTablePostDeleteInterceptor<T, F>,
150	TablePostDeleteContext<T>
151);
152
153impl_register_interceptor!(
154	ClosureTablePreInsertInterceptor<T, F>,
155	TablePreInsertContext<T>,
156	TablePreInsertInterceptor,
157	table_pre_insert
158);
159
160impl_register_interceptor!(
161	ClosureTablePostInsertInterceptor<T, F>,
162	TablePostInsertContext<T>,
163	TablePostInsertInterceptor,
164	table_post_insert
165);
166
167impl_register_interceptor!(
168	ClosureTablePreUpdateInterceptor<T, F>,
169	TablePreUpdateContext<T>,
170	TablePreUpdateInterceptor,
171	table_pre_update
172);
173
174impl_register_interceptor!(
175	ClosureTablePostUpdateInterceptor<T, F>,
176	TablePostUpdateContext<T>,
177	TablePostUpdateInterceptor,
178	table_post_update
179);
180
181impl_register_interceptor!(
182	ClosureTablePreDeleteInterceptor<T, F>,
183	TablePreDeleteContext<T>,
184	TablePreDeleteInterceptor,
185	table_pre_delete
186);
187
188impl_register_interceptor!(
189	ClosureTablePostDeleteInterceptor<T, F>,
190	TablePostDeleteContext<T>,
191	TablePostDeleteInterceptor,
192	table_post_delete
193);