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
12pub(crate) mod system;
13
14pub enum TableVirtualContext<'a> {
16 Basic {
17 params: Params,
19 },
20 PushDown {
21 filters: Vec<Expression<'a>>,
23 projections: Vec<Expression<'a>>,
26 order_by: Vec<SortKey>,
28 limit: Option<usize>,
30 params: Params,
32 },
33}
34
35pub trait TableVirtual<'a>: Send + Sync {
37 fn initialize(&mut self, txn: &mut StandardTransaction<'a>, ctx: TableVirtualContext<'a>) -> crate::Result<()>;
40
41 fn next(&mut self, txn: &mut StandardTransaction<'a>) -> crate::Result<Option<Batch<'a>>>;
43
44 fn definition(&self) -> &TableVirtualDef;
46}