pub enum PlanTree {
Leaf(Stage),
Unary {
stage: Stage,
input: Box<PlanTree>,
},
Binary {
stage: Stage,
left: Box<PlanTree>,
right: Box<PlanTree>,
},
}Expand description
The pipeline as a TREE, which is what it actually is.
Every stage has one input except a join, which has two. Tests assert over
this rather than over rendered text, because the bug that shipped in the
first EXPLAIN was a TOPOLOGY bug: a join’s two scans were printed at
different depths, so pg_class read as a child of the scan of
pg_namespace. Every assertion at the time checked content — which
relation, how many rows — and content was correct. Structure was not.
Join is NOT Join
├── Scan A └── Scan A
└── Scan B └── Scan BA string assertion can be made to pass by either shape. A tree assertion cannot.
Variants§
Implementations§
Trait Implementations§
impl Eq for PlanTree
impl StructuralPartialEq for PlanTree
Auto Trait Implementations§
impl Freeze for PlanTree
impl RefUnwindSafe for PlanTree
impl Send for PlanTree
impl Sync for PlanTree
impl Unpin for PlanTree
impl UnsafeUnpin for PlanTree
impl UnwindSafe for PlanTree
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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 more