reifydb_engine/table_virtual/
mod.rs1use 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
25pub enum TableVirtualContext<'a> {
27 Basic {
28 params: Params,
30 },
31 PushDown {
32 filters: Vec<Expression<'a>>,
34 projections: Vec<Expression<'a>>,
37 order_by: Vec<SortKey>,
39 limit: Option<usize>,
41 params: Params,
43 },
44}
45
46pub trait TableVirtual<'a>: Send + Sync {
48 fn initialize(&mut self, txn: &mut StandardTransaction<'a>, ctx: TableVirtualContext<'a>) -> crate::Result<()>;
51
52 fn next(&mut self, txn: &mut StandardTransaction<'a>) -> crate::Result<Option<Batch<'a>>>;
54
55 fn definition(&self) -> &TableVirtualDef;
57}