1use std::sync::Arc;
5
6use reifydb_core::interface::{TableVirtualDef, version::SystemVersion};
7
8mod cdc_consumers;
9mod column_policies;
10mod columns;
11mod dictionaries;
12mod flow_edges;
13mod flow_node_types;
14mod flow_nodes;
15mod flow_operator_inputs;
16mod flow_operator_outputs;
17mod flow_operators;
18mod flows;
19mod namespaces;
20mod operator_retention_policies;
21mod primary_key_columns;
22mod primary_keys;
23mod ringbuffers;
24mod sequence;
25mod source_retention_policies;
26mod storage_stats_dictionary;
27mod storage_stats_flow;
28mod storage_stats_flow_node;
29mod storage_stats_index;
30mod storage_stats_ringbuffer;
31mod storage_stats_table;
32mod storage_stats_view;
33mod tables;
34mod tables_virtual;
35mod types;
36mod versions;
37mod views;
38
39use cdc_consumers::cdc_consumers;
40use column_policies::column_policies;
41use columns::columns;
42use dictionaries::dictionaries;
43use flow_edges::flow_edges;
44use flow_node_types::flow_node_types;
45use flow_nodes::flow_nodes;
46use flow_operator_inputs::flow_operator_inputs;
47use flow_operator_outputs::flow_operator_outputs;
48use flow_operators::flow_operators;
49use flows::flows;
50use namespaces::namespaces;
51use operator_retention_policies::operator_retention_policies;
52use primary_key_columns::primary_key_columns;
53use primary_keys::primary_keys;
54use sequence::sequences;
55use source_retention_policies::source_retention_policies;
56use storage_stats_dictionary::dictionary_storage_stats;
57use storage_stats_flow::flow_storage_stats;
58use storage_stats_flow_node::flow_node_storage_stats;
59use storage_stats_index::index_storage_stats;
60use storage_stats_ringbuffer::ringbuffer_storage_stats;
61use storage_stats_table::table_storage_stats;
62use storage_stats_view::view_storage_stats;
63use tables::tables;
64use tables_virtual::virtual_tables;
65use types::types;
66use versions::versions;
67use views::views;
68
69use crate::system::ringbuffers::ringbuffers;
70
71pub mod ids {
72 pub mod columns {
73 pub mod cdc_consumers {
74 use reifydb_core::interface::ColumnId;
75
76 pub const CONSUMER_ID: ColumnId = ColumnId(1);
77 pub const CHECKPOINT: ColumnId = ColumnId(2);
78
79 pub const ALL: [ColumnId; 2] = [CONSUMER_ID, CHECKPOINT];
80 }
81
82 pub mod sequences {
83 use reifydb_core::interface::ColumnId;
84
85 pub const ID: ColumnId = ColumnId(1);
86 pub const NAMESPACE_ID: ColumnId = ColumnId(2);
87 pub const NAME: ColumnId = ColumnId(3);
88 pub const VALUE: ColumnId = ColumnId(5);
89
90 pub const ALL: [ColumnId; 4] = [ID, NAMESPACE_ID, NAME, VALUE];
91 }
92
93 pub mod namespaces {
94 use reifydb_core::interface::ColumnId;
95
96 pub const ID: ColumnId = ColumnId(1);
97 pub const NAME: ColumnId = ColumnId(2);
98
99 pub const ALL: [ColumnId; 2] = [ID, NAME];
100 }
101
102 pub mod tables {
103 use reifydb_core::interface::ColumnId;
104
105 pub const ID: ColumnId = ColumnId(1);
106 pub const NAMESPACE_ID: ColumnId = ColumnId(2);
107 pub const NAME: ColumnId = ColumnId(3);
108 pub const PRIMARY_KEY_ID: ColumnId = ColumnId(4);
109
110 pub const ALL: [ColumnId; 4] = [ID, NAMESPACE_ID, NAME, PRIMARY_KEY_ID];
111 }
112
113 pub mod views {
114 use reifydb_core::interface::ColumnId;
115
116 pub const ID: ColumnId = ColumnId(1);
117 pub const NAMESPACE_ID: ColumnId = ColumnId(2);
118 pub const NAME: ColumnId = ColumnId(3);
119 pub const KIND: ColumnId = ColumnId(4);
120 pub const PRIMARY_KEY_ID: ColumnId = ColumnId(5);
121
122 pub const ALL: [ColumnId; 5] = [ID, NAMESPACE_ID, NAME, KIND, PRIMARY_KEY_ID];
123 }
124
125 pub mod flows {
126 use reifydb_core::interface::ColumnId;
127
128 pub const ID: ColumnId = ColumnId(1);
129 pub const NAMESPACE_ID: ColumnId = ColumnId(2);
130 pub const NAME: ColumnId = ColumnId(3);
131 pub const STATUS: ColumnId = ColumnId(4);
132
133 pub const ALL: [ColumnId; 4] = [ID, NAMESPACE_ID, NAME, STATUS];
134 }
135
136 pub mod flow_nodes {
137 use reifydb_core::interface::ColumnId;
138
139 pub const ID: ColumnId = ColumnId(1);
140 pub const FLOW_ID: ColumnId = ColumnId(2);
141 pub const NODE_TYPE: ColumnId = ColumnId(3);
142 pub const DATA: ColumnId = ColumnId(4);
143
144 pub const ALL: [ColumnId; 4] = [ID, FLOW_ID, NODE_TYPE, DATA];
145 }
146
147 pub mod flow_edges {
148 use reifydb_core::interface::ColumnId;
149
150 pub const ID: ColumnId = ColumnId(1);
151 pub const FLOW_ID: ColumnId = ColumnId(2);
152 pub const SOURCE: ColumnId = ColumnId(3);
153 pub const TARGET: ColumnId = ColumnId(4);
154
155 pub const ALL: [ColumnId; 4] = [ID, FLOW_ID, SOURCE, TARGET];
156 }
157
158 pub mod columns {
159 use reifydb_core::interface::ColumnId;
160
161 pub const ID: ColumnId = ColumnId(1);
162 pub const SOURCE_ID: ColumnId = ColumnId(2);
163 pub const SOURCE_TYPE: ColumnId = ColumnId(3);
164 pub const NAME: ColumnId = ColumnId(4);
165 pub const TYPE: ColumnId = ColumnId(5);
166 pub const POSITION: ColumnId = ColumnId(6);
167 pub const AUTO_INCREMENT: ColumnId = ColumnId(7);
168 pub const DICTIONARY_ID: ColumnId = ColumnId(8);
169
170 pub const ALL: [ColumnId; 8] =
171 [ID, SOURCE_ID, SOURCE_TYPE, NAME, TYPE, POSITION, AUTO_INCREMENT, DICTIONARY_ID];
172 }
173
174 pub mod dictionaries {
175 use reifydb_core::interface::ColumnId;
176
177 pub const ID: ColumnId = ColumnId(1);
178 pub const NAMESPACE_ID: ColumnId = ColumnId(2);
179 pub const NAME: ColumnId = ColumnId(3);
180 pub const VALUE_TYPE: ColumnId = ColumnId(4);
181 pub const ID_TYPE: ColumnId = ColumnId(5);
182
183 pub const ALL: [ColumnId; 5] = [ID, NAMESPACE_ID, NAME, VALUE_TYPE, ID_TYPE];
184 }
185
186 pub mod primary_keys {
187 use reifydb_core::interface::ColumnId;
188
189 pub const ID: ColumnId = ColumnId(1);
190 pub const SOURCE_ID: ColumnId = ColumnId(2);
191
192 pub const ALL: [ColumnId; 2] = [ID, SOURCE_ID];
193 }
194
195 pub mod ringbuffers {
196 use reifydb_core::interface::ColumnId;
197
198 pub const ID: ColumnId = ColumnId(1);
199 pub const NAMESPACE_ID: ColumnId = ColumnId(2);
200 pub const NAME: ColumnId = ColumnId(3);
201 pub const CAPACITY: ColumnId = ColumnId(4);
202 pub const PRIMARY_KEY_ID: ColumnId = ColumnId(5);
203
204 pub const ALL: [ColumnId; 5] = [ID, NAMESPACE_ID, NAME, CAPACITY, PRIMARY_KEY_ID];
205 }
206
207 pub mod primary_key_columns {
208 use reifydb_core::interface::ColumnId;
209
210 pub const PRIMARY_KEY_ID: ColumnId = ColumnId(1);
211 pub const COLUMN_ID: ColumnId = ColumnId(2);
212 pub const POSITION: ColumnId = ColumnId(3);
213
214 pub const ALL: [ColumnId; 3] = [PRIMARY_KEY_ID, COLUMN_ID, POSITION];
215 }
216
217 pub mod column_policies {
218 use reifydb_core::interface::ColumnId;
219
220 pub const ID: ColumnId = ColumnId(1);
221 pub const COLUMN_ID: ColumnId = ColumnId(2);
222 pub const TYPE: ColumnId = ColumnId(3);
223 pub const VALUE: ColumnId = ColumnId(4);
224
225 pub const ALL: [ColumnId; 4] = [ID, COLUMN_ID, TYPE, VALUE];
226 }
227
228 pub mod versions {
229 use reifydb_core::interface::ColumnId;
230
231 pub const NAME: ColumnId = ColumnId(1);
232 pub const VERSION: ColumnId = ColumnId(2);
233 pub const DESCRIPTION: ColumnId = ColumnId(3);
234 pub const TYPE: ColumnId = ColumnId(4);
235
236 pub const ALL: [ColumnId; 4] = [NAME, VERSION, DESCRIPTION, TYPE];
237 }
238
239 pub mod source_retention_policies {
240 use reifydb_core::interface::ColumnId;
241
242 pub const SOURCE_ID: ColumnId = ColumnId(1);
243 pub const SOURCE_TYPE: ColumnId = ColumnId(2);
244 pub const POLICY_TYPE: ColumnId = ColumnId(3);
245 pub const CLEANUP_MODE: ColumnId = ColumnId(4);
246 pub const VALUE: ColumnId = ColumnId(5);
247
248 pub const ALL: [ColumnId; 5] = [SOURCE_ID, SOURCE_TYPE, POLICY_TYPE, CLEANUP_MODE, VALUE];
249 }
250
251 pub mod operator_retention_policies {
252 use reifydb_core::interface::ColumnId;
253
254 pub const OPERATOR_ID: ColumnId = ColumnId(1);
255 pub const POLICY_TYPE: ColumnId = ColumnId(2);
256 pub const CLEANUP_MODE: ColumnId = ColumnId(3);
257 pub const VALUE: ColumnId = ColumnId(4);
258
259 pub const ALL: [ColumnId; 4] = [OPERATOR_ID, POLICY_TYPE, CLEANUP_MODE, VALUE];
260 }
261
262 pub mod flow_operators {
263 use reifydb_core::interface::ColumnId;
264
265 pub const OPERATOR: ColumnId = ColumnId(1);
266 pub const LIBRARY_PATH: ColumnId = ColumnId(2);
267 pub const API: ColumnId = ColumnId(3);
268 pub const CAP_INSERT: ColumnId = ColumnId(4);
269 pub const CAP_UPDATE: ColumnId = ColumnId(5);
270 pub const CAP_DELETE: ColumnId = ColumnId(6);
271 pub const CAP_DROP: ColumnId = ColumnId(7);
272 pub const CAP_GET_ROWS: ColumnId = ColumnId(8);
273 pub const CAP_TICK: ColumnId = ColumnId(9);
274
275 pub const ALL: [ColumnId; 9] = [
276 OPERATOR,
277 LIBRARY_PATH,
278 API,
279 CAP_INSERT,
280 CAP_UPDATE,
281 CAP_DELETE,
282 CAP_GET_ROWS,
283 CAP_DROP,
284 CAP_TICK,
285 ];
286 }
287
288 pub mod flow_operator_inputs {
289 use reifydb_core::interface::ColumnId;
290
291 pub const OPERATOR: ColumnId = ColumnId(1);
292 pub const POSITION: ColumnId = ColumnId(2);
293 pub const NAME: ColumnId = ColumnId(3);
294 pub const TYPE: ColumnId = ColumnId(4);
295 pub const DESCRIPTION: ColumnId = ColumnId(5);
296
297 pub const ALL: [ColumnId; 5] = [OPERATOR, POSITION, NAME, TYPE, DESCRIPTION];
298 }
299
300 pub mod flow_operator_outputs {
301 use reifydb_core::interface::ColumnId;
302
303 pub const OPERATOR: ColumnId = ColumnId(1);
304 pub const POSITION: ColumnId = ColumnId(2);
305 pub const NAME: ColumnId = ColumnId(3);
306 pub const TYPE: ColumnId = ColumnId(4);
307 pub const DESCRIPTION: ColumnId = ColumnId(5);
308
309 pub const ALL: [ColumnId; 5] = [OPERATOR, POSITION, NAME, TYPE, DESCRIPTION];
310 }
311
312 pub mod virtual_tables {
313 use reifydb_core::interface::ColumnId;
314
315 pub const ID: ColumnId = ColumnId(1);
316 pub const NAMESPACE_ID: ColumnId = ColumnId(2);
317 pub const NAME: ColumnId = ColumnId(3);
318 pub const KIND: ColumnId = ColumnId(4);
319
320 pub const ALL: [ColumnId; 4] = [ID, NAMESPACE_ID, NAME, KIND];
321 }
322 }
323
324 pub mod sequences {
325 use reifydb_core::interface::SequenceId;
326
327 pub const NAMESPACE: SequenceId = SequenceId(1);
328 pub const SOURCE: SequenceId = SequenceId(2);
329 pub const COLUMN: SequenceId = SequenceId(3);
330 pub const COLUMN_POLICY: SequenceId = SequenceId(4);
331 pub const FLOW: SequenceId = SequenceId(5);
332 pub const FLOW_NODE: SequenceId = SequenceId(6);
333 pub const FLOW_EDGE: SequenceId = SequenceId(7);
334 pub const PRIMARY_KEY: SequenceId = SequenceId(8);
335
336 pub const ALL: [SequenceId; 8] =
337 [NAMESPACE, SOURCE, COLUMN, COLUMN_POLICY, FLOW, FLOW_NODE, FLOW_EDGE, PRIMARY_KEY];
338 }
339
340 pub mod table_virtual {
341 use reifydb_core::interface::TableVirtualId;
342
343 pub const SEQUENCES: TableVirtualId = TableVirtualId(1);
344 pub const NAMESPACES: TableVirtualId = TableVirtualId(2);
345 pub const TABLES: TableVirtualId = TableVirtualId(3);
346 pub const VIEWS: TableVirtualId = TableVirtualId(4);
347 pub const FLOWS: TableVirtualId = TableVirtualId(13);
348 pub const COLUMNS: TableVirtualId = TableVirtualId(5);
349 pub const COLUMN_POLICIES: TableVirtualId = TableVirtualId(6);
350 pub const PRIMARY_KEYS: TableVirtualId = TableVirtualId(7);
351 pub const PRIMARY_KEY_COLUMNS: TableVirtualId = TableVirtualId(8);
352 pub const VERSIONS: TableVirtualId = TableVirtualId(9);
353 pub const SOURCE_RETENTION_POLICIES: TableVirtualId = TableVirtualId(10);
354 pub const OPERATOR_RETENTION_POLICIES: TableVirtualId = TableVirtualId(11);
355 pub const CDC_CONSUMERS: TableVirtualId = TableVirtualId(12);
356 pub const FLOW_OPERATORS: TableVirtualId = TableVirtualId(14);
357 pub const FLOW_NODES: TableVirtualId = TableVirtualId(15);
358 pub const FLOW_EDGES: TableVirtualId = TableVirtualId(16);
359 pub const DICTIONARIES: TableVirtualId = TableVirtualId(17);
360 pub const VIRTUAL_TABLES: TableVirtualId = TableVirtualId(18);
361 pub const TYPES: TableVirtualId = TableVirtualId(19);
362 pub const FLOW_NODE_TYPES: TableVirtualId = TableVirtualId(20);
363 pub const FLOW_OPERATOR_INPUTS: TableVirtualId = TableVirtualId(21);
364 pub const FLOW_OPERATOR_OUTPUTS: TableVirtualId = TableVirtualId(22);
365 pub const RINGBUFFERS: TableVirtualId = TableVirtualId(23);
366 pub const TABLE_STORAGE_STATS: TableVirtualId = TableVirtualId(24);
367 pub const VIEW_STORAGE_STATS: TableVirtualId = TableVirtualId(25);
368 pub const FLOW_STORAGE_STATS: TableVirtualId = TableVirtualId(26);
369 pub const FLOW_NODE_STORAGE_STATS: TableVirtualId = TableVirtualId(27);
370 pub const INDEX_STORAGE_STATS: TableVirtualId = TableVirtualId(28);
371 pub const RINGBUFFER_STORAGE_STATS: TableVirtualId = TableVirtualId(29);
372 pub const DICTIONARY_STORAGE_STATS: TableVirtualId = TableVirtualId(30);
373
374 pub const ALL: [TableVirtualId; 30] = [
375 SEQUENCES,
376 NAMESPACES,
377 TABLES,
378 VIEWS,
379 FLOWS,
380 COLUMNS,
381 COLUMN_POLICIES,
382 PRIMARY_KEYS,
383 PRIMARY_KEY_COLUMNS,
384 VERSIONS,
385 SOURCE_RETENTION_POLICIES,
386 OPERATOR_RETENTION_POLICIES,
387 CDC_CONSUMERS,
388 FLOW_OPERATORS,
389 FLOW_NODES,
390 FLOW_EDGES,
391 DICTIONARIES,
392 VIRTUAL_TABLES,
393 TYPES,
394 FLOW_NODE_TYPES,
395 FLOW_OPERATOR_INPUTS,
396 FLOW_OPERATOR_OUTPUTS,
397 RINGBUFFERS,
398 TABLE_STORAGE_STATS,
399 VIEW_STORAGE_STATS,
400 FLOW_STORAGE_STATS,
401 FLOW_NODE_STORAGE_STATS,
402 INDEX_STORAGE_STATS,
403 RINGBUFFER_STORAGE_STATS,
404 DICTIONARY_STORAGE_STATS,
405 ];
406 }
407}
408
409#[derive(Clone, Debug)]
410pub struct SystemCatalog(Arc<SystemCatalogInner>);
411
412#[derive(Debug)]
413struct SystemCatalogInner {
414 versions: Vec<SystemVersion>,
415}
416
417impl SystemCatalog {
418 pub fn new(versions: Vec<SystemVersion>) -> Self {
421 Self(Arc::new(SystemCatalogInner {
422 versions,
423 }))
424 }
425
426 pub fn get_system_versions(&self) -> &[SystemVersion] {
428 &self.0.versions
429 }
430
431 pub fn get_system_sequences_table_def() -> Arc<TableVirtualDef> {
433 sequences()
434 }
435
436 pub fn get_system_namespaces_table_def() -> Arc<TableVirtualDef> {
438 namespaces()
439 }
440
441 pub fn get_system_tables_table_def() -> Arc<TableVirtualDef> {
443 tables()
444 }
445
446 pub fn get_system_views_table_def() -> Arc<TableVirtualDef> {
448 views()
449 }
450
451 pub fn get_system_flows_table_def() -> Arc<TableVirtualDef> {
453 flows()
454 }
455
456 pub fn get_system_columns_table_def() -> Arc<TableVirtualDef> {
458 columns()
459 }
460
461 pub fn get_system_primary_keys_table_def() -> Arc<TableVirtualDef> {
463 primary_keys()
464 }
465
466 pub fn get_system_primary_key_columns_table_def() -> Arc<TableVirtualDef> {
468 primary_key_columns()
469 }
470
471 pub fn get_system_column_policies_table_def() -> Arc<TableVirtualDef> {
473 column_policies()
474 }
475
476 pub fn get_system_versions_table_def() -> Arc<TableVirtualDef> {
478 versions()
479 }
480
481 pub fn get_system_source_retention_policies_table_def() -> Arc<TableVirtualDef> {
483 source_retention_policies()
484 }
485
486 pub fn get_system_operator_retention_policies_table_def() -> Arc<TableVirtualDef> {
488 operator_retention_policies()
489 }
490
491 pub fn get_system_cdc_consumers_table_def() -> Arc<TableVirtualDef> {
493 cdc_consumers()
494 }
495
496 pub fn get_system_flow_operators_table_def() -> Arc<TableVirtualDef> {
498 flow_operators()
499 }
500
501 pub fn get_system_flow_nodes_table_def() -> Arc<TableVirtualDef> {
503 flow_nodes()
504 }
505
506 pub fn get_system_flow_edges_table_def() -> Arc<TableVirtualDef> {
508 flow_edges()
509 }
510
511 pub fn get_system_dictionaries_table_def() -> Arc<TableVirtualDef> {
513 dictionaries()
514 }
515
516 pub fn get_system_virtual_tables_table_def() -> Arc<TableVirtualDef> {
518 virtual_tables()
519 }
520
521 pub fn get_system_types_table_def() -> Arc<TableVirtualDef> {
523 types()
524 }
525
526 pub fn get_system_flow_node_types_table_def() -> Arc<TableVirtualDef> {
528 flow_node_types()
529 }
530
531 pub fn get_system_flow_operator_inputs_table_def() -> Arc<TableVirtualDef> {
533 flow_operator_inputs()
534 }
535
536 pub fn get_system_flow_operator_outputs_table_def() -> Arc<TableVirtualDef> {
538 flow_operator_outputs()
539 }
540
541 pub fn get_system_ringbuffers_table_def() -> Arc<TableVirtualDef> {
543 ringbuffers()
544 }
545
546 pub fn get_system_table_storage_stats_table_def() -> Arc<TableVirtualDef> {
548 table_storage_stats()
549 }
550
551 pub fn get_system_view_storage_stats_table_def() -> Arc<TableVirtualDef> {
553 view_storage_stats()
554 }
555
556 pub fn get_system_flow_storage_stats_table_def() -> Arc<TableVirtualDef> {
558 flow_storage_stats()
559 }
560
561 pub fn get_system_flow_node_storage_stats_table_def() -> Arc<TableVirtualDef> {
563 flow_node_storage_stats()
564 }
565
566 pub fn get_system_index_storage_stats_table_def() -> Arc<TableVirtualDef> {
568 index_storage_stats()
569 }
570
571 pub fn get_system_ringbuffer_storage_stats_table_def() -> Arc<TableVirtualDef> {
573 ringbuffer_storage_stats()
574 }
575
576 pub fn get_system_dictionary_storage_stats_table_def() -> Arc<TableVirtualDef> {
578 dictionary_storage_stats()
579 }
580}