reifydb_catalog/system/
mod.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use 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	/// Create a new SystemCatalog with the provided
419	/// versions are set once at construction and never change
420	pub fn new(versions: Vec<SystemVersion>) -> Self {
421		Self(Arc::new(SystemCatalogInner {
422			versions,
423		}))
424	}
425
426	/// Get all system versions
427	pub fn get_system_versions(&self) -> &[SystemVersion] {
428		&self.0.versions
429	}
430
431	/// Get the sequences virtual table definition
432	pub fn get_system_sequences_table_def() -> Arc<TableVirtualDef> {
433		sequences()
434	}
435
436	/// Get the namespaces virtual table definition
437	pub fn get_system_namespaces_table_def() -> Arc<TableVirtualDef> {
438		namespaces()
439	}
440
441	/// Get the tables virtual table definition
442	pub fn get_system_tables_table_def() -> Arc<TableVirtualDef> {
443		tables()
444	}
445
446	/// Get the views virtual table definition
447	pub fn get_system_views_table_def() -> Arc<TableVirtualDef> {
448		views()
449	}
450
451	/// Get the flows virtual table definition
452	pub fn get_system_flows_table_def() -> Arc<TableVirtualDef> {
453		flows()
454	}
455
456	/// Get the columns virtual table definition
457	pub fn get_system_columns_table_def() -> Arc<TableVirtualDef> {
458		columns()
459	}
460
461	/// Get the primary_keys virtual table definition
462	pub fn get_system_primary_keys_table_def() -> Arc<TableVirtualDef> {
463		primary_keys()
464	}
465
466	/// Get the primary_key_columns virtual table definition
467	pub fn get_system_primary_key_columns_table_def() -> Arc<TableVirtualDef> {
468		primary_key_columns()
469	}
470
471	/// Get the column_policies virtual table definition
472	pub fn get_system_column_policies_table_def() -> Arc<TableVirtualDef> {
473		column_policies()
474	}
475
476	/// Get the system versions virtual table definition
477	pub fn get_system_versions_table_def() -> Arc<TableVirtualDef> {
478		versions()
479	}
480
481	/// Get the source_retention_policies virtual table definition
482	pub fn get_system_source_retention_policies_table_def() -> Arc<TableVirtualDef> {
483		source_retention_policies()
484	}
485
486	/// Get the operator_retention_policies virtual table definition
487	pub fn get_system_operator_retention_policies_table_def() -> Arc<TableVirtualDef> {
488		operator_retention_policies()
489	}
490
491	/// Get the cdc_consumers virtual table definition
492	pub fn get_system_cdc_consumers_table_def() -> Arc<TableVirtualDef> {
493		cdc_consumers()
494	}
495
496	/// Get the flow_operators virtual table definition
497	pub fn get_system_flow_operators_table_def() -> Arc<TableVirtualDef> {
498		flow_operators()
499	}
500
501	/// Get the flow_nodes virtual table definition
502	pub fn get_system_flow_nodes_table_def() -> Arc<TableVirtualDef> {
503		flow_nodes()
504	}
505
506	/// Get the flow_edges virtual table definition
507	pub fn get_system_flow_edges_table_def() -> Arc<TableVirtualDef> {
508		flow_edges()
509	}
510
511	/// Get the dictionaries virtual table definition
512	pub fn get_system_dictionaries_table_def() -> Arc<TableVirtualDef> {
513		dictionaries()
514	}
515
516	/// Get the virtual_tables virtual table definition
517	pub fn get_system_virtual_tables_table_def() -> Arc<TableVirtualDef> {
518		virtual_tables()
519	}
520
521	/// Get the types virtual table definition
522	pub fn get_system_types_table_def() -> Arc<TableVirtualDef> {
523		types()
524	}
525
526	/// Get the flow_node_types virtual table definition
527	pub fn get_system_flow_node_types_table_def() -> Arc<TableVirtualDef> {
528		flow_node_types()
529	}
530
531	/// Get the flow_operator_inputs virtual table definition
532	pub fn get_system_flow_operator_inputs_table_def() -> Arc<TableVirtualDef> {
533		flow_operator_inputs()
534	}
535
536	/// Get the flow_operator_outputs virtual table definition
537	pub fn get_system_flow_operator_outputs_table_def() -> Arc<TableVirtualDef> {
538		flow_operator_outputs()
539	}
540
541	/// Get the ringbuffers virtual table definition
542	pub fn get_system_ringbuffers_table_def() -> Arc<TableVirtualDef> {
543		ringbuffers()
544	}
545
546	/// Get the table_storage_stats virtual table definition
547	pub fn get_system_table_storage_stats_table_def() -> Arc<TableVirtualDef> {
548		table_storage_stats()
549	}
550
551	/// Get the view_storage_stats virtual table definition
552	pub fn get_system_view_storage_stats_table_def() -> Arc<TableVirtualDef> {
553		view_storage_stats()
554	}
555
556	/// Get the flow_storage_stats virtual table definition
557	pub fn get_system_flow_storage_stats_table_def() -> Arc<TableVirtualDef> {
558		flow_storage_stats()
559	}
560
561	/// Get the flow_node_storage_stats virtual table definition
562	pub fn get_system_flow_node_storage_stats_table_def() -> Arc<TableVirtualDef> {
563		flow_node_storage_stats()
564	}
565
566	/// Get the index_storage_stats virtual table definition
567	pub fn get_system_index_storage_stats_table_def() -> Arc<TableVirtualDef> {
568		index_storage_stats()
569	}
570
571	/// Get the ringbuffer_storage_stats virtual table definition
572	pub fn get_system_ringbuffer_storage_stats_table_def() -> Arc<TableVirtualDef> {
573		ringbuffer_storage_stats()
574	}
575
576	/// Get the dictionary_storage_stats virtual table definition
577	pub fn get_system_dictionary_storage_stats_table_def() -> Arc<TableVirtualDef> {
578		dictionary_storage_stats()
579	}
580}