Path: blob/main/crates/polars-plan/src/plans/optimizer/cse/mod.rs
7889 views
mod cache_states;1mod csee;2mod cspe;34use cache_states::set_cache_states;5pub(super) use csee::CommonSubExprOptimizer;6pub use csee::NaiveExprMerger;7use cspe::elim_cmn_subplans;89use super::*;1011type Accepted = Option<(VisitRecursion, bool)>;12// Don't allow this node in a cse.13const REFUSE_NO_MEMBER: Accepted = Some((VisitRecursion::Continue, false));14// Don't allow this node, but allow as a member of a cse.15const REFUSE_ALLOW_MEMBER: Accepted = Some((VisitRecursion::Continue, true));16const REFUSE_SKIP: Accepted = Some((VisitRecursion::Skip, false));17// Accept this node.18const ACCEPT: Accepted = None;1920pub(super) struct CommonSubPlanOptimizer {}2122impl CommonSubPlanOptimizer {23pub fn new() -> Self {24Self {}25}2627#[allow(clippy::too_many_arguments)]28pub fn optimize(29&mut self,30root: Node,31ir_arena: &mut Arena<IR>,32expr_arena: &mut Arena<AExpr>,33pushdown_maintain_errors: bool,34opt_flags: &OptFlags,35verbose: bool,36scratch: &mut Vec<Node>,37) -> PolarsResult<Node> {38let (root, inserted_cache, _) = cse::elim_cmn_subplans(root, ir_arena, expr_arena);3940run_projection_predicate_pushdown(41root,42ir_arena,43expr_arena,44pushdown_maintain_errors,45opt_flags,46)?;4748if inserted_cache {49// We only want to run this on cse inserted caches50cse::set_cache_states(51root,52ir_arena,53expr_arena,54scratch,55verbose,56pushdown_maintain_errors,57opt_flags.new_streaming(),58)?;59}6061Ok(root)62}63}646566