pub struct DatumContainer {
codec: Option<ColumnsCodec>,
inner: BytesContainer,
staging: Vec<u8>,
stats: Option<ColumnsCodec>,
}Fields§
§codec: Option<ColumnsCodec>Encoder/decoder used to translate between row bytes and the stored bytes.
None until enough pushes have been observed (or if compression is disabled).
inner: BytesContainerThe stored, possibly-encoded, row bytes.
staging: Vec<u8>Staging buffer for ingested Row types.
stats: Option<ColumnsCodec>Statistics gatherer, used to build a safe codec after enough pushes.
None once the codec has been installed or if compression is disabled.
Implementations§
Source§impl DatumContainer
impl DatumContainer
Sourcepub fn heap_size(&self, callback: impl FnMut(usize, usize))
pub fn heap_size(&self, callback: impl FnMut(usize, usize))
Visit contained allocations to determine their size and capacity.
Sourcepub(crate) fn promote_stats_to_codec(&mut self)
pub(crate) fn promote_stats_to_codec(&mut self)
Promote a gathered-but-uninstalled statistics summary into the codec slot.
A container filled via the builder’s push/done path — as the reduce
operator does, building batches with Builder::new() + push + done
rather than seal — gathers statistics on every push but never reaches
seal’s codec install, and only crosses the mid-formation
STATS_THRESHOLD install if it grows past it. A smaller such container
would otherwise be finalized with no codec at all, even with the flag on.
That is a problem not because this batch needs compressing — its rows are
already stored raw and we deliberately do not re-encode them here — but
because a codec-less batch poisons future merges: Self::merge_capacity
keys off the presence of a codec, so a codec-less input forces the merged
container onto the uncompressed path. Moving the gathered statistics into
the codec slot leaves the batch carrying a codec whose retained heavy-hitter
summary a later merge can rebuild from via ColumnsCodec::new_from, while
installing no dictionary: the empty decode map resolves every stored
(raw) column through the literal-datum fall-through, so reads stay correct.
We move the summary as-is rather than building a dictionary via new_safe
/ new_from (which reset the summary): unlike seal and the mid-formation
install, done has no further rows to re-observe, so a reset summary would
leave the eventual merge nothing to rebuild from.
Trait Implementations§
Source§impl BatchContainer for DatumContainer
impl BatchContainer for DatumContainer
Source§fn with_capacity(size: usize) -> Self
fn with_capacity(size: usize) -> Self
Source§fn merge_capacity(cont1: &Self, cont2: &Self) -> Self
fn merge_capacity(cont1: &Self, cont2: &Self) -> Self
Source§fn index(&self, index: usize) -> Self::ReadItem<'_>
fn index(&self, index: usize) -> Self::ReadItem<'_>
Source§fn reborrow<'b, 'a: 'b>(item: Self::ReadItem<'a>) -> Self::ReadItem<'b>
fn reborrow<'b, 'a: 'b>(item: Self::ReadItem<'a>) -> Self::ReadItem<'b>
Source§fn into_owned<'a>(item: Self::ReadItem<'a>) -> Self::Owned
fn into_owned<'a>(item: Self::ReadItem<'a>) -> Self::Owned
Source§fn clone_onto<'a>(item: Self::ReadItem<'a>, other: &mut Self::Owned)
fn clone_onto<'a>(item: Self::ReadItem<'a>, other: &mut Self::Owned)
self onto an existing instance of the owned type.Source§fn get(&self, index: usize) -> Option<Self::ReadItem<'_>>
fn get(&self, index: usize) -> Option<Self::ReadItem<'_>>
Source§impl PushInto<&Row> for DatumContainer
impl PushInto<&Row> for DatumContainer
Source§impl PushInto<&RowRef> for DatumContainer
impl PushInto<&RowRef> for DatumContainer
Source§impl PushInto<DatumSeq<'_>> for DatumContainer
impl PushInto<DatumSeq<'_>> for DatumContainer
Auto Trait Implementations§
impl Freeze for DatumContainer
impl RefUnwindSafe for DatumContainer
impl Send for DatumContainer
impl Sync for DatumContainer
impl Unpin for DatumContainer
impl UnsafeUnpin for DatumContainer
impl UnwindSafe for DatumContainer
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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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>
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 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>
T in a tonic::RequestSource§impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
Source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
RustType::from_proto.Source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
RustType::into_proto.Source§impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
Source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
std::ops::AddAssign, for types that do not implement AddAssign.