pub struct PredicatePushdownRule;Expand description
Push Filter predicates down into TableScan nodes.
Walks the logical plan looking for Filter nodes and decomposes each
filter’s predicate into AND-conjuncts. Conjuncts that reference only
columns present in one scan’s output schema are pushed into that scan
node’s filters list. If all conjuncts are pushed the Filter node is
removed; remaining cross-join conjuncts stay in place.
Two patterns are handled:
- Filter-above-Scan: filter’s direct input is a scan.
- Filter-above-Join: filter sits above a join; each conjunct is tested against the left and right scan inputs independently and pushed as far down as it can go. Cross-join predicates (referencing both sides) remain in the filter.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for PredicatePushdownRule
impl RefUnwindSafe for PredicatePushdownRule
impl Send for PredicatePushdownRule
impl Sync for PredicatePushdownRule
impl Unpin for PredicatePushdownRule
impl UnsafeUnpin for PredicatePushdownRule
impl UnwindSafe for PredicatePushdownRule
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request