pub struct CommonSubexprEliminate { /* private fields */ }Expand description
Performs Common Sub-expression Elimination optimization.
This optimization improves query performance by computing expressions that appear more than once and reusing those results rather than re-computing the same value
Currently only common sub-expressions within a single LogicalPlan are
eliminated.
§Example
Given a projection that computes the same expensive expression
multiple times such as parsing as string as a date with to_date twice:
ProjectionExec(expr=[extract (day from to_date(c1)), extract (year from to_date(c1))])
This optimization will rewrite the plan to compute the common expression once
using a new ProjectionExec and then rewrite the original expressions to
refer to that new column.
ProjectionExec(exprs=[extract (day from new_col), extract (year from new_col)]) <-- reuse here
ProjectionExec(exprs=[to_date(c1) as new_col]) <-- compute to_date once
Implementations§
source§impl CommonSubexprEliminate
impl CommonSubexprEliminate
pub fn new() -> CommonSubexprEliminate
Trait Implementations§
source§impl Default for CommonSubexprEliminate
impl Default for CommonSubexprEliminate
source§fn default() -> CommonSubexprEliminate
fn default() -> CommonSubexprEliminate
Returns the “default value” for a type. Read more
source§impl OptimizerRule for CommonSubexprEliminate
impl OptimizerRule for CommonSubexprEliminate
source§fn supports_rewrite(&self) -> bool
fn supports_rewrite(&self) -> bool
Does this rule support rewriting owned plans (rather than by reference)?
source§fn apply_order(&self) -> Option<ApplyOrder>
fn apply_order(&self) -> Option<ApplyOrder>
How should the rule be applied by the optimizer? See comments on
ApplyOrder for details. Read moresource§fn rewrite(
&self,
plan: LogicalPlan,
config: &dyn OptimizerConfig,
) -> Result<Transformed<LogicalPlan>, DataFusionError>
fn rewrite( &self, plan: LogicalPlan, config: &dyn OptimizerConfig, ) -> Result<Transformed<LogicalPlan>, DataFusionError>
Try to rewrite
plan to an optimized form, returning Transformed::yes
if the plan was rewritten and Transformed::no if it was not. Read moresource§fn try_optimize(
&self,
_plan: &LogicalPlan,
_config: &dyn OptimizerConfig,
) -> Result<Option<LogicalPlan>, DataFusionError>
fn try_optimize( &self, _plan: &LogicalPlan, _config: &dyn OptimizerConfig, ) -> Result<Option<LogicalPlan>, DataFusionError>
👎Deprecated since 40.0.0: please implement supports_rewrite and rewrite instead
Try and rewrite
plan to an optimized form, returning None if the plan
cannot be optimized by this rule. Read moreAuto Trait Implementations§
impl Freeze for CommonSubexprEliminate
impl RefUnwindSafe for CommonSubexprEliminate
impl Send for CommonSubexprEliminate
impl Sync for CommonSubexprEliminate
impl Unpin for CommonSubexprEliminate
impl UnwindSafe for CommonSubexprEliminate
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more