Skip to main content

reddb_server/storage/query/engine/
mod.rs

1//! Query Execution Engine
2//!
3//! Jena-inspired algebraic query execution with pluggable engines.
4//!
5//! # Architecture
6//!
7//! ```text
8//! QueryExpr (AST) → Op (Algebra) → Plan → Iterator<Binding>
9//!
10//! ┌─────────────────────────────────────────────────────────────┐
11//! │                        QueryEngine                          │
12//! ├─────────────────────────────────────────────────────────────┤
13//! │  compile(QueryExpr) → Op                                    │
14//! │  optimize(Op) → Op                                          │
15//! │  execute(Op) → BindingIterator                              │
16//! └─────────────────────────────────────────────────────────────┘
17//!                              │
18//!          ┌──────────────────┼──────────────────┐
19//!          ▼                  ▼                  ▼
20//!      OpBGP              OpJoin            OpFilter
21//!   (BasicPattern)     (Join two Ops)    (Filter Op)
22//! ```
23//!
24//! # Components
25//!
26//! - **Op**: Algebraic operators (scan, filter, join, union, etc.)
27//! - **Transform**: Visitors that transform Op trees
28//! - **Binding**: Variable -> Value mapping
29//! - **BindingIterator**: Lazy result stream
30//! - **QueryEngine**: Compiles, optimizes, and executes queries
31
32pub mod aggregates_extra;
33pub mod binding;
34pub mod cancel;
35pub mod iterator;
36pub mod op;
37pub mod registry;
38pub mod transform;
39
40pub use binding::{Binding, BindingBuilder, Var};
41pub use cancel::CancelToken;
42pub use iterator::{
43    BindingIterator, QueryIter, QueryIterBase, QueryIterFilter, QueryIterJoin, QueryIterProject,
44    QueryIterSlice, QueryIterSort, QueryIterUnion,
45};
46pub use op::{
47    Op, OpBGP, OpDisjunction, OpDistinct, OpExtend, OpFilter, OpGroup, OpJoin, OpLeftJoin, OpMinus,
48    OpNull, OpOrder, OpProject, OpReduced, OpSequence, OpSlice, OpTable, OpTriple, OpUnion,
49    Pattern, Triple,
50};
51pub use registry::{QueryEngine, QueryEngineFactory, QueryEngineRegistry};
52pub use transform::{OpTransform, OpVisitor, TransformCopy, TransformPushFilter};