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 async_trait::async_trait;
5use reifydb_core::{
6	SortKey,
7	interface::{Params, TableVirtualDef},
8};
9use reifydb_rql::expression::Expression;
10
11use crate::{execute::Batch, transaction::StandardTransaction};
12
13mod adapter;
14mod factory;
15mod registry;
16pub(crate) mod system;
17pub mod user;
18
19pub use factory::VirtualTableFactory;
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 {
27	Basic {
28		/// Query parameters
29		params: Params,
30	},
31	PushDown {
32		/// Filter conditions from filter operations
33		filters: Vec<Expression>,
34		/// Projection expressions from map operations (empty = select
35		/// all)
36		projections: Vec<Expression>,
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
47#[async_trait]
48pub trait TableVirtual: Send + Sync {
49	/// Initialize the virtual table iterator with context
50	/// Called once before iteration begins
51	async fn initialize<'a>(
52		&mut self,
53		txn: &mut StandardTransaction<'a>,
54		ctx: TableVirtualContext,
55	) -> crate::Result<()>;
56
57	/// Get the next batch of results (volcano iterator pattern)
58	async fn next<'a>(&mut self, txn: &mut StandardTransaction<'a>) -> crate::Result<Option<Batch>>;
59
60	/// Get the table definition
61	fn definition(&self) -> &TableVirtualDef;
62}