pub struct FilterPushdownPropagation<T> {
pub filters: Vec<PushedDown>,
pub updated_node: Option<T>,
}Expand description
The result of pushing down filters into a node.
Returned from ExecutionPlan::handle_child_pushdown_result to communicate
to the optimizer:
- What to do with any parent filters that were could not be pushed down into the children.
- If the node needs to be replaced in the execution plan with a new node or not.
Fields§
§filters: Vec<PushedDown>What filters were pushed into the parent node.
updated_node: Option<T>The updated node, if it was updated during pushdown
Implementations§
Source§impl<T> FilterPushdownPropagation<T>
impl<T> FilterPushdownPropagation<T>
Sourcepub fn if_all(child_pushdown_result: ChildPushdownResult) -> Self
pub fn if_all(child_pushdown_result: ChildPushdownResult) -> Self
Create a new FilterPushdownPropagation that tells the parent node that each parent filter
is supported if it was supported by all children.
Sourcepub fn if_any(child_pushdown_result: ChildPushdownResult) -> Self
pub fn if_any(child_pushdown_result: ChildPushdownResult) -> Self
Create a new FilterPushdownPropagation that tells the parent node that each parent filter
is supported if it was supported by any child.
Sourcepub fn all_unsupported(child_pushdown_result: ChildPushdownResult) -> Self
pub fn all_unsupported(child_pushdown_result: ChildPushdownResult) -> Self
Create a new FilterPushdownPropagation that tells the parent node that no filters were pushed down regardless of the child results.
Sourcepub fn with_parent_pushdown_result(filters: Vec<PushedDown>) -> Self
pub fn with_parent_pushdown_result(filters: Vec<PushedDown>) -> Self
Create a new FilterPushdownPropagation with the specified filter support.
This transmits up to our parent node what the result of pushing down the filters into our node and possibly our subtree was.
Sourcepub fn with_updated_node(self, updated_node: T) -> Self
pub fn with_updated_node(self, updated_node: T) -> Self
Bind an updated node to the FilterPushdownPropagation.
Use this when the current node wants to update itself in the tree or replace itself with a new node (e.g. one of it’s children).
You do not need to call this if one of the children of the current node may have updated itself, that is handled by the optimizer.
Trait Implementations§
Source§impl<T: Clone> Clone for FilterPushdownPropagation<T>
impl<T: Clone> Clone for FilterPushdownPropagation<T>
Source§fn clone(&self) -> FilterPushdownPropagation<T>
fn clone(&self) -> FilterPushdownPropagation<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<T> Freeze for FilterPushdownPropagation<T>where
T: Freeze,
impl<T> RefUnwindSafe for FilterPushdownPropagation<T>where
T: RefUnwindSafe,
impl<T> Send for FilterPushdownPropagation<T>where
T: Send,
impl<T> Sync for FilterPushdownPropagation<T>where
T: Sync,
impl<T> Unpin for FilterPushdownPropagation<T>where
T: Unpin,
impl<T> UnwindSafe for FilterPushdownPropagation<T>where
T: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
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>
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