pub struct UnwrapCastInComparison {}
Expand description
UnwrapCastInComparison
attempts to remove casts from
comparisons to literals (ScalarValue
s) by applying the casts
to the literals if possible. It is inspired by the optimizer rule
UnwrapCastInBinaryComparison
of Spark.
Removing casts often improves performance because:
- The cast is done once (to the literal) rather than to every value
- Can enable other optimizations such as predicate pushdown that don’t support casting
The rule is applied to expressions of the following forms:
cast(left_expr as data_type) comparison_op literal_expr
literal_expr comparison_op cast(left_expr as data_type)
cast(literal_expr) IN (expr1, expr2, ...)
literal_expr IN (cast(expr1) , cast(expr2), ...)
If the expression matches one of the forms above, the rule will
ensure the value of literal
is in range(min, max) of the
expr’s data_type, and if the scalar is within range, the literal
will be casted to the data type of expr on the other side, and the
cast will be removed from the other side.
Example
If the DataType of c1 is INT32. Given the filter
Filter: cast(c1 as INT64) > INT64(10)`
This rule will remove the cast and rewrite the expression to:
Filter: c1 > INT32(10)
Implementations§
Trait Implementations§
source§impl Default for UnwrapCastInComparison
impl Default for UnwrapCastInComparison
source§fn default() -> UnwrapCastInComparison
fn default() -> UnwrapCastInComparison
Returns the “default value” for a type. Read more
source§impl OptimizerRule for UnwrapCastInComparison
impl OptimizerRule for UnwrapCastInComparison
source§fn try_optimize(
&self,
plan: &LogicalPlan,
_config: &dyn OptimizerConfig
) -> Result<Option<LogicalPlan>>
fn try_optimize( &self, plan: &LogicalPlan, _config: &dyn OptimizerConfig ) -> Result<Option<LogicalPlan>>
Try and rewrite
plan
to an optimized form, returning None if the plan cannot be
optimized by this rule.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 moreAuto Trait Implementations§
impl RefUnwindSafe for UnwrapCastInComparison
impl Send for UnwrapCastInComparison
impl Sync for UnwrapCastInComparison
impl Unpin for UnwrapCastInComparison
impl UnwindSafe for UnwrapCastInComparison
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