pub struct ScrollMaterialize<'a> { /* private fields */ }Expand description
Cache an operator’s output as it is first pulled forward, then expose the cached rows in either direction. This is the physical equivalent of PostgreSQL’s Material node: expressions below the boundary run once, while expressions in parents run again when a row is revisited.
Implementations§
Source§impl<'a> ScrollMaterialize<'a>
impl<'a> ScrollMaterialize<'a>
pub fn new(child: Box<dyn PhysicalOperator + 'a>) -> Self
Trait Implementations§
Source§impl PhysicalOperator for ScrollMaterialize<'_>
impl PhysicalOperator for ScrollMaterialize<'_>
Source§fn row_schema(&self) -> &RowSchema
fn row_schema(&self) -> &RowSchema
Complete logical-to-physical row layout emitted by this operator. Every
Batch returned by Self::next must carry this exact schema; operators must reject a child that violates that invariant.Source§fn estimated_cardinality(&self) -> Option<u64>
fn estimated_cardinality(&self) -> Option<u64>
Planner/runtime cardinality estimate for choosing physical strategies.
None means the operator cannot provide a useful estimate. The value
is advisory rather than a correctness bound.Source§fn output_ordering(&self) -> &[PhysicalOrder]
fn output_ordering(&self) -> &[PhysicalOrder]
Leading output ordering known to be preserved by this operator.
Source§fn backward_scan_support(&self) -> BackwardScanSupport
fn backward_scan_support(&self) -> BackwardScanSupport
Describe backwards-scan support without changing the operator tree. The default is deliberately conservative so a scrollable cursor freezes the complete output of unclassified plans.
fn open(&mut self) -> ExecResult<()>
fn next(&mut self) -> ExecResult<Option<Batch>>
Source§fn next_direction(
&mut self,
direction: PhysicalScanDirection,
) -> ExecResult<Option<Batch>>
fn next_direction( &mut self, direction: PhysicalScanDirection, ) -> ExecResult<Option<Batch>>
Pull one directional batch. Native backwards-capable pipelines keep batches to one row so a consumer can reverse direction between adjacent fetches.
Source§fn rewind(&mut self) -> ExecResult<()>
fn rewind(&mut self) -> ExecResult<()>
Rewind a native backwards-capable pipeline without recomputing rows held by semantic materialization boundaries.
fn close(&mut self) -> ExecResult<()>
Source§fn consume_into_aggregate(
&mut self,
_executor: &mut dyn AggregateExecutor,
) -> ExecResult<bool>
fn consume_into_aggregate( &mut self, _executor: &mut dyn AggregateExecutor, ) -> ExecResult<bool>
Let a leaf consume its native projected rows directly into an
aggregate executor. Returning
false promises that no input was
consumed, so the caller can fall back to ordinary Batch pulls.Auto Trait Implementations§
impl<'a> !RefUnwindSafe for ScrollMaterialize<'a>
impl<'a> !Sync for ScrollMaterialize<'a>
impl<'a> !UnwindSafe for ScrollMaterialize<'a>
impl<'a> Freeze for ScrollMaterialize<'a>
impl<'a> Send for ScrollMaterialize<'a>
impl<'a> Unpin for ScrollMaterialize<'a>
impl<'a> UnsafeUnpin for ScrollMaterialize<'a>
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
impl<T> ErasedDestructor for Twhere
T: 'static,
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