23 lines
853 B
Rust
23 lines
853 B
Rust
//! Physical operators for a small query-plan executor.
|
|
//!
|
|
//! Three operators are in scope:
|
|
//!
|
|
//! - [`atom::scan_atom`] scans a [`Table`] under an [`atom::AtomPattern`],
|
|
//! filtering for repeated-variable equality and literal equality, and
|
|
//! outputs a binding [`relation::Relation`].
|
|
//! - [`join::semijoin`] keeps rows of one relation whose shared-column values
|
|
//! appear in another.
|
|
//! - [`join::natural_join`] combines rows that agree on shared columns,
|
|
//! emitting the union of their columns.
|
|
//!
|
|
//! Operators compose by function application; a "query plan written by hand"
|
|
//! is just an expression like
|
|
//! `natural_join(&semijoin(&a, &b), &scan_atom(&t, &p))`.
|
|
//!
|
|
//! `Value` and `Table` live in the `storage` crate; consumers that build
|
|
//! inputs depend on `storage` directly.
|
|
|
|
pub mod atom;
|
|
pub mod join;
|
|
pub mod relation;
|