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, ExprResultMap>,
    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>§correlated_subquery_cols_map: HashMap<LogicalPlan, BTreeSet<Column>>§in_predicate_opt: Option<Expr>§exists_sub_query: bool§can_pull_up: bool§need_handle_count_bug: bool§collected_count_expr_map: HashMap<LogicalPlan, ExprResultMap>§pull_up_having_expr: Option<Expr>

Trait Implementations§

source§

impl TreeNodeRewriter for PullUpCorrelatedExpr

§

type N = LogicalPlan

The node type which is rewritable.
source§

fn pre_visit(&mut self, plan: &LogicalPlan) -> Result<RewriteRecursion>

Invoked before (Preorder) any children of node are rewritten / visited. Default implementation returns Ok(Recursion::Continue)
source§

fn mutate(&mut self, plan: LogicalPlan) -> Result<LogicalPlan>

Invoked after (Postorder) all children of node have been mutated and returns a potentially modified node.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V