reifydb_engine/table_virtual/
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 reifydb_core::{
5	SortKey,
6	interface::{Params, TableVirtualDef},
7};
8use reifydb_rql::expression::Expression;
9
10use crate::{execute::Batch, transaction::StandardTransaction};
11
12mod adapter;
13mod factory;
14mod registry;
15pub(crate) mod system;
16pub mod user;
17
18pub use factory::VirtualTableFactory;
19pub(crate) use factory::extend_virtual_table_lifetime;
20pub use registry::{IteratorVirtualTableFactory, SimpleVirtualTableFactory, TableVirtualUserRegistry};
21pub use user::{
22	TableVirtualUser, TableVirtualUserColumnDef, TableVirtualUserIterator, TableVirtualUserPushdownContext,
23};
24
25/// Context passed to virtual table queries
26pub enum TableVirtualContext<'a> {
27	Basic {
28		/// Query parameters
29		params: Params,
30	},
31	PushDown {
32		/// Filter conditions from filter operations
33		filters: Vec<Expression<'a>>,
34		/// Projection expressions from map operations (empty = select
35		/// all)
36		projections: Vec<Expression<'a>>,
37		/// Sort keys from order operations
38		order_by: Vec<SortKey>,
39		/// Limit from take operations
40		limit: Option<usize>,
41		/// Query parameters
42		params: Params,
43	},
44}
45
46/// Trait for virtual table instances that follow the volcano iterator pattern
47pub trait TableVirtual<'a>: Send + Sync {
48	/// Initialize the virtual table iterator with context
49	/// Called once before iteration begins
50	fn initialize(&mut self, txn: &mut StandardTransaction<'a>, ctx: TableVirtualContext<'a>) -> crate::Result<()>;
51
52	/// Get the next batch of results (volcano iterator pattern)
53	fn next(&mut self, txn: &mut StandardTransaction<'a>) -> crate::Result<Option<Batch<'a>>>;
54
55	/// Get the table definition
56	fn definition(&self) -> &TableVirtualDef;
57}