pub struct WindowState {
pub state: WindowAggState,
pub window_fn: WindowFn,
pub published: bool,
}Fields§
§state: WindowAggState§window_fn: WindowFn§published: boolTrue once Self::aggregate_state has been called on this entry.
Guards against a second destructive Accumulator::state read: the
method itself errors on second call, and the observer loop in
BoundedWindowAggStream::publish_finalized_states uses this as an
early-skip so it doesn’t attempt one. Independent of state.is_end,
which is a group-closed signal that the pruning path also reads.
Implementations§
Source§impl WindowState
impl WindowState
Sourcepub fn aggregate_state(&mut self) -> Result<Option<Vec<ScalarValue>>>
pub fn aggregate_state(&mut self) -> Result<Option<Vec<ScalarValue>>>
Accumulator::state if this window function is an aggregate, None
otherwise (built-in functions like row_number, rank, lead/lag
have no serializable accumulator state).
Accumulator::state takes &mut self and its trait doc calls out
that “this function should not be called twice, otherwise it will
result in potentially non-deterministic behavior.” Several built-in
impls (median, percentile_cont, string_agg,
min_max_bytes/min_max_struct) std::mem::take their internal
buffers on call — a second call returns empty state, not the same
state, so a downstream prefix-merge would silently lose every value
the accumulator had ingested.
Enforced at this layer: on first call we set Self::published and
return the state; any later call errors rather than performing a
destructive re-read.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for WindowState
impl !Sync for WindowState
impl !UnwindSafe for WindowState
impl Freeze for WindowState
impl Send for WindowState
impl Unpin for WindowState
impl UnsafeUnpin for WindowState
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> 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