1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
pub mod executors; pub mod expressions; pub mod planner; pub(crate) mod state; use crate::physical_plan::state::ExecutionState; use crate::prelude::*; use polars_core::prelude::*; use polars_io::PhysicalIoExpr; /// A type that implements this transforms a LogicalPlan to a physical plan. /// /// We could produce different physical plans with different goals in mind, e.g. memory optimized /// performance optimized, out of core, etc. pub trait PhysicalPlanner { fn create_physical_plan( &self, root: Node, lp_arena: &mut Arena<ALogicalPlan>, expr_arena: &mut Arena<AExpr>, ) -> Result<Box<dyn Executor>>; } // Executor are the executors of the physical plan and produce DataFrames. They // combine physical expressions, which produce Series. /// Executors will evaluate physical expressions and collect them in a DataFrame. /// /// Executors have other executors as input. By having a tree of executors we can execute the /// physical plan until the last executor is evaluated. pub trait Executor: Send + Sync { fn execute(&mut self, cache: &ExecutionState) -> Result<DataFrame>; }