25 lines
996 B
Rust
25 lines
996 B
Rust
//! Physical operators for a small query-plan executor.
|
|
//!
|
|
//! Three operators are in scope:
|
|
//!
|
|
//! - [`atom::scan_atom`] scans a [`Table`](storage::table::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))`.
|
|
//!
|
|
//! Foundational types [`Value`](storage::value::Value) and
|
|
//! [`Table`](storage::table::Table) live in `storage`, the
|
|
//! storage-layer crate this crate is built on; storage backends produce
|
|
//! `Table`s that operators here consume.
|
|
|
|
pub mod atom;
|
|
pub mod join;
|
|
pub mod relation;
|