pub struct ColumnarEngine<S: StorageEngine> { /* private fields */ }Expand description
Manages all columnar collections for a NodeDbLite instance.
Implementations§
Source§impl<S: StorageEngine> ColumnarEngine<S>
impl<S: StorageEngine> ColumnarEngine<S>
Sourcepub async fn try_compact_collection(
&self,
collection: &str,
) -> Result<bool, LiteError>
pub async fn try_compact_collection( &self, collection: &str, ) -> Result<bool, LiteError>
Check if any segments need compaction and run it.
Sourcepub async fn purge_bitemporal_before(
&self,
collection: &str,
cutoff_ms: i64,
) -> Result<u64, LiteError>
pub async fn purge_bitemporal_before( &self, collection: &str, cutoff_ms: i64, ) -> Result<u64, LiteError>
Purge fully-deleted segment tombstones for a bitemporal collection where
fully_deleted_at_ms < cutoff_ms. Non-bitemporal collections always
return rows_affected: 0 — they have no tombstones.
Returns the number of tombstoned segment entries removed.
Source§impl<S: StorageEngine> ColumnarEngine<S>
impl<S: StorageEngine> ColumnarEngine<S>
Source§impl<S: StorageEngine> ColumnarEngine<S>
impl<S: StorageEngine> ColumnarEngine<S>
Sourcepub fn new(storage: Arc<S>, memory: ScopedMemory) -> Self
pub fn new(storage: Arc<S>, memory: ScopedMemory) -> Self
Create a new empty columnar engine.
Sourcepub fn set_outbound(&mut self, outbound: Arc<ColumnarOutbound<S>>)
pub fn set_outbound(&mut self, outbound: Arc<ColumnarOutbound<S>>)
Attach a sync outbound queue for plain columnar collections.
Must be called before any inserts if columnar sync is desired.
Sourcepub fn set_timeseries_outbound(&mut self, outbound: Arc<TimeseriesOutbound<S>>)
pub fn set_timeseries_outbound(&mut self, outbound: Arc<TimeseriesOutbound<S>>)
Attach a sync outbound queue for timeseries-profile collections.
When set, inserts into collections with ColumnarProfile::Timeseries
are routed here instead of outbound, so the transport can send them
as TimeseriesPush frames to Origin’s timeseries engine.
Source§impl<S: StorageEngine> ColumnarEngine<S>
impl<S: StorageEngine> ColumnarEngine<S>
Sourcepub fn insert(
&self,
collection: &str,
values: &[Value],
) -> Result<(), LiteError>
pub fn insert( &self, collection: &str, values: &[Value], ) -> Result<(), LiteError>
Insert a row into a columnar collection’s memtable.
This is a pure in-memory operation. Call [enqueue_outbound] from
an async context after inserting to durably enqueue the row for
replication to Origin.
Sourcepub async fn enqueue_outbound(
&self,
collection: &str,
rows: &[Vec<Value>],
) -> Result<(), LiteError>
pub async fn enqueue_outbound( &self, collection: &str, rows: &[Vec<Value>], ) -> Result<(), LiteError>
Durably enqueue a batch of inserted rows for replication to Origin.
Must be called from an async context after one or more successful
[insert] calls. Timeseries-profile collections are routed to the
timeseries_outbound queue; all other columnar collections use the
plain outbound queue.
Returns LiteError::Backpressure when the queue is at cap so the
caller can propagate back-pressure. Other enqueue errors are logged as
warnings (the local insert already succeeded) and Ok(()) is returned.
Source§impl<S: StorageEngine> ColumnarEngine<S>
impl<S: StorageEngine> ColumnarEngine<S>
Sourcepub async fn list_rows(
&self,
collection: &str,
) -> Result<Vec<Vec<Value>>, LiteError>
pub async fn list_rows( &self, collection: &str, ) -> Result<Vec<Vec<Value>>, LiteError>
Scan all rows in a columnar collection, returning them in schema column order.
Reads memtable rows first, then flushed segments. Each row is a
Vec<Value> whose entries correspond 1-to-1 with schema().columns.
Sourcepub async fn read_segments(
&self,
collection: &str,
) -> Result<Vec<(u32, Vec<u8>)>, LiteError>
pub async fn read_segments( &self, collection: &str, ) -> Result<Vec<(u32, Vec<u8>)>, LiteError>
Read all segment bytes for a collection (for the table provider).
Sourcepub fn delete_bitmap(
&self,
collection: &str,
segment_id: u32,
) -> Option<DeleteBitmap>
pub fn delete_bitmap( &self, collection: &str, segment_id: u32, ) -> Option<DeleteBitmap>
Get the delete bitmap for a segment (returns a clone).
Sourcepub fn row_count(&self, collection: &str) -> usize
pub fn row_count(&self, collection: &str) -> usize
Row count across all segments + memtable for a collection.
Sourcepub fn is_bitemporal(&self, collection: &str) -> bool
pub fn is_bitemporal(&self, collection: &str) -> bool
Whether a collection has bitemporal tracking enabled.
Source§impl<S: StorageEngine> ColumnarEngine<S>
impl<S: StorageEngine> ColumnarEngine<S>
Sourcepub async fn create_collection(
&self,
name: &str,
schema: ColumnarSchema,
profile: ColumnarProfile,
bitemporal: bool,
) -> Result<(), LiteError>
pub async fn create_collection( &self, name: &str, schema: ColumnarSchema, profile: ColumnarProfile, bitemporal: bool, ) -> Result<(), LiteError>
Create a new columnar collection.
Sourcepub async fn drop_collection(&self, name: &str) -> Result<(), LiteError>
pub async fn drop_collection(&self, name: &str) -> Result<(), LiteError>
Drop a columnar collection and all its data.
Sourcepub async fn alter_add_column(
&self,
name: &str,
column: ColumnDef,
) -> Result<(), LiteError>
pub async fn alter_add_column( &self, name: &str, column: ColumnDef, ) -> Result<(), LiteError>
Add a column to an existing columnar collection.
Sourcepub fn schema(&self, name: &str) -> Option<ColumnarSchema>
pub fn schema(&self, name: &str) -> Option<ColumnarSchema>
Get the schema for a collection (returns a clone).
Sourcepub fn profile(&self, name: &str) -> Option<ColumnarProfile>
pub fn profile(&self, name: &str) -> Option<ColumnarProfile>
Get the profile for a collection (returns a clone).
Sourcepub fn collection_names(&self) -> Vec<String>
pub fn collection_names(&self) -> Vec<String>
List all columnar collection names.
Source§impl<S: StorageEngine> ColumnarEngine<S>
impl<S: StorageEngine> ColumnarEngine<S>
Sourcepub async fn truncate(&self, collection: &str) -> Result<usize, LiteError>
pub async fn truncate(&self, collection: &str) -> Result<usize, LiteError>
Remove every row of collection: the memtable, the primary-key
index, every delete bitmap, every bitemporal version, and every
flushed segment with its metadata. Returns the number of rows that
existed across the memtable and live segments.
Errors when collection is not a columnar collection.
Auto Trait Implementations§
impl<S> !Freeze for ColumnarEngine<S>
impl<S> !RefUnwindSafe for ColumnarEngine<S>
impl<S> !UnwindSafe for ColumnarEngine<S>
impl<S> Send for ColumnarEngine<S>where
Arc<S>: Send,
Option<Arc<ColumnarOutbound<S>>>: Send,
Option<Arc<TimeseriesOutbound<S>>>: Send,
impl<S> Sync for ColumnarEngine<S>where
Arc<S>: Sync,
Option<Arc<ColumnarOutbound<S>>>: Sync,
Option<Arc<TimeseriesOutbound<S>>>: Sync,
impl<S> Unpin for ColumnarEngine<S>where
Arc<S>: Unpin,
Option<Arc<ColumnarOutbound<S>>>: Unpin,
Option<Arc<TimeseriesOutbound<S>>>: Unpin,
impl<S> UnsafeUnpin for ColumnarEngine<S>where
Arc<S>: UnsafeUnpin,
Option<Arc<ColumnarOutbound<S>>>: UnsafeUnpin,
Option<Arc<TimeseriesOutbound<S>>>: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ErasedDestructor for Twhere
T: 'static,
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.impl<T> NodeDbMarker for 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
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.