reifydb-catalog 0.4.13

Database catalog and metadata management for ReifyDB
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2025 ReifyDB

use std::sync::{Arc, OnceLock};

use reifydb_core::interface::catalog::{
	column::{Column, ColumnIndex},
	id::NamespaceId,
	vtable::VTable,
};
use reifydb_type::value::{constraint::TypeConstraint, r#type::Type};

use super::ids::{columns::flow_operators::*, vtable::FLOW_OPERATORS};

/// Returns the static definition for the system.flow_operators virtual table
/// This table exposes information about loaded FFI operators from shared libraries
pub fn flow_operators() -> Arc<VTable> {
	static INSTANCE: OnceLock<Arc<VTable>> = OnceLock::new();

	INSTANCE.get_or_init(|| {
		Arc::new(VTable {
			id: FLOW_OPERATORS,
			namespace: NamespaceId::SYSTEM,
			name: "flow_operators".to_string(),
			columns: vec![
				Column {
					id: OPERATOR,
					name: "operator".to_string(),
					constraint: TypeConstraint::unconstrained(Type::Utf8),
					properties: vec![],
					index: ColumnIndex(0),
					auto_increment: false,
					dictionary_id: None,
				},
				Column {
					id: LIBRARY_PATH,
					name: "library_path".to_string(),
					constraint: TypeConstraint::unconstrained(Type::Utf8),
					properties: vec![],
					index: ColumnIndex(1),
					auto_increment: false,
					dictionary_id: None,
				},
				Column {
					id: API,
					name: "api".to_string(),
					constraint: TypeConstraint::unconstrained(Type::Uint4),
					properties: vec![],
					index: ColumnIndex(2),
					auto_increment: false,
					dictionary_id: None,
				},
				Column {
					id: CAP_INSERT,
					name: "cap_insert".to_string(),
					constraint: TypeConstraint::unconstrained(Type::Boolean),
					properties: vec![],
					index: ColumnIndex(3),
					auto_increment: false,
					dictionary_id: None,
				},
				Column {
					id: CAP_UPDATE,
					name: "cap_update".to_string(),
					constraint: TypeConstraint::unconstrained(Type::Boolean),
					properties: vec![],
					index: ColumnIndex(4),
					auto_increment: false,
					dictionary_id: None,
				},
				Column {
					id: CAP_DELETE,
					name: "cap_delete".to_string(),
					constraint: TypeConstraint::unconstrained(Type::Boolean),
					properties: vec![],
					index: ColumnIndex(5),
					auto_increment: false,
					dictionary_id: None,
				},
				Column {
					id: CAP_DROP,
					name: "cap_drop".to_string(),
					constraint: TypeConstraint::unconstrained(Type::Boolean),
					properties: vec![],
					index: ColumnIndex(6),
					auto_increment: false,
					dictionary_id: None,
				},
				Column {
					id: CAP_PULL,
					name: "cap_pull".to_string(),
					constraint: TypeConstraint::unconstrained(Type::Boolean),
					properties: vec![],
					index: ColumnIndex(7),
					auto_increment: false,
					dictionary_id: None,
				},
				Column {
					id: CAP_TICK,
					name: "cap_tick".to_string(),
					constraint: TypeConstraint::unconstrained(Type::Boolean),
					properties: vec![],
					index: ColumnIndex(8),
					auto_increment: false,
					dictionary_id: None,
				},
			],
		})
	})
	.clone()
}