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 registry;
34
35// Native public paths alias the same portable modules and types (ADR 0077).
36pub use reddb_engine::query::engine::{binding, cancel, iterator, op, transform};
37
38pub use binding::{Binding, BindingBuilder, Var};
39pub use cancel::CancelToken;
40pub use iterator::{
41 BindingIterator, QueryIter, QueryIterBase, QueryIterFilter, QueryIterJoin, QueryIterProject,
42 QueryIterSlice, QueryIterSort, QueryIterUnion,
43};
44pub use op::{
45 Op, OpBGP, OpDisjunction, OpDistinct, OpExtend, OpFilter, OpGroup, OpJoin, OpLeftJoin, OpMinus,
46 OpNull, OpOrder, OpProject, OpReduced, OpSequence, OpSlice, OpTable, OpTriple, OpUnion,
47 Pattern, Triple,
48};
49pub use registry::{QueryEngine, QueryEngineFactory, QueryEngineRegistry};
50pub use transform::{OpTransform, OpVisitor, TransformCopy, TransformPushFilter};