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