Struct datafusion::optimizer::decorrelate::PullUpCorrelatedExpr
source · pub struct PullUpCorrelatedExpr {
pub join_filters: Vec<Expr>,
pub correlated_subquery_cols_map: HashMap<LogicalPlan, BTreeSet<Column>>,
pub in_predicate_opt: Option<Expr>,
pub exists_sub_query: bool,
pub can_pull_up: bool,
pub need_handle_count_bug: bool,
pub collected_count_expr_map: HashMap<LogicalPlan, HashMap<String, Expr>>,
pub pull_up_having_expr: Option<Expr>,
}
Expand description
This struct rewrite the sub query plan by pull up the correlated expressions(contains outer reference columns) from the inner subquery’s ‘Filter’. It adds the inner reference columns to the ‘Projection’ or ‘Aggregate’ of the subquery if they are missing, so that they can be evaluated by the parent operator as the join condition.
Fields§
§join_filters: Vec<Expr>
§in_predicate_opt: Option<Expr>
§exists_sub_query: bool
§can_pull_up: bool
§need_handle_count_bug: bool
§collected_count_expr_map: HashMap<LogicalPlan, HashMap<String, Expr>>
§pull_up_having_expr: Option<Expr>
Trait Implementations§
§type Node = LogicalPlan
type Node = LogicalPlan
The node type which is rewritable.
source§fn f_down(
&mut self,
plan: LogicalPlan
) -> Result<Transformed<LogicalPlan>, DataFusionError>
fn f_down( &mut self, plan: LogicalPlan ) -> Result<Transformed<LogicalPlan>, DataFusionError>
Invoked while traversing down the tree before any children are rewritten.
Default implementation returns the node as is and continues recursion.
source§fn f_up(
&mut self,
plan: LogicalPlan
) -> Result<Transformed<LogicalPlan>, DataFusionError>
fn f_up( &mut self, plan: LogicalPlan ) -> Result<Transformed<LogicalPlan>, DataFusionError>
Invoked while traversing up the tree after all children have been rewritten.
Default implementation returns the node as is and continues recursion.
Auto Trait Implementations§
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> 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