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