Skip to main content

ExecutionPlan

Struct ExecutionPlan 

Source
pub struct ExecutionPlan {
    pub sccs: Vec<Scc>,
    pub strata: Vec<Stratum>,
    pub rules_by_scc: Vec<Vec<CompiledRule>>,
    pub generated_query_rules: Vec<GeneratedQueryRuleProvenance>,
    pub est_memory_peak: u64,
    pub rel_arities: HashMap<RelId, usize>,
}
Expand description

Complete execution plan for a program

Fields§

§sccs: Vec<Scc>

SCCs in dependency order

§strata: Vec<Stratum>

Strata for negation ordering

§rules_by_scc: Vec<Vec<CompiledRule>>

Compiled rules grouped by SCC

§generated_query_rules: Vec<GeneratedQueryRuleProvenance>

Exact compiled rule positions originating from authored program queries. Manually assembled plans leave this empty unless they explicitly model generated-query semantics.

§est_memory_peak: u64

Total estimated memory peak (bytes)

§rel_arities: HashMap<RelId, usize>

Relation arities known at lowering time (every predicate the lowerer assigned a RelId). Consumed by shape promoters that must size Scan leaves without schema access (general Free Join multiway promotion).

Implementations§

Source§

impl ExecutionPlan

Source

pub fn new(sccs: Vec<Scc>) -> Self

Create a new execution plan from SCCs

Source

pub fn with_strata(self, strata: Vec<Stratum>) -> Self

Add strata to the plan

Source

pub fn recursive_scc_count(&self) -> usize

Get the number of recursive SCCs

Source

pub fn dependency_closed_subplan( &self, root_sccs: &[usize], defining_sccs: &HashMap<RelId, usize>, ) -> Option<Self>

Return the dependency-closed subplan for a set of root SCC positions.

defining_sccs maps derived relation IDs to the SCC that defines them. Relations absent from that map are treated as extensional inputs. The projection preserves source order, retains complete SCCs, and rewrites every positional index in the plan. None means the supplied plan or dependency proof is inconsistent, so callers must keep the original plan.

Source

pub fn has_recursion(&self) -> bool

Check if this plan has any recursion

Trait Implementations§

Source§

impl Clone for ExecutionPlan

Source§

fn clone(&self) -> ExecutionPlan

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ExecutionPlan

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.