pub struct ColumnStore { /* private fields */ }Expand description
Column store for high-performance filtering.
Implementations§
Source§impl ColumnStore
impl ColumnStore
Sourcepub fn batch_update(&mut self, updates: &[BatchUpdate]) -> BatchUpdateResult
pub fn batch_update(&mut self, updates: &[BatchUpdate]) -> BatchUpdateResult
Performs batch updates with optimized cache locality.
Sourcepub fn batch_update_same_value(
&mut self,
pks: &[i64],
column: &str,
value: &ColumnValue,
) -> BatchUpdateResult
pub fn batch_update_same_value( &mut self, pks: &[i64], column: &str, value: &ColumnValue, ) -> BatchUpdateResult
Batch update with same value for multiple primary keys.
Sourcepub fn set_ttl(
&mut self,
pk: i64,
ttl_seconds: u64,
) -> Result<(), ColumnStoreError>
pub fn set_ttl( &mut self, pk: i64, ttl_seconds: u64, ) -> Result<(), ColumnStoreError>
Sets a TTL (Time To Live) on a row.
§Errors
Returns an error when pk is missing or points to a deleted row.
Sourcepub fn expire_rows(&mut self) -> ExpireResult
pub fn expire_rows(&mut self) -> ExpireResult
Expires all rows that have passed their TTL.
Sourcepub fn upsert(
&mut self,
values: &[(&str, ColumnValue)],
) -> Result<UpsertResult, ColumnStoreError>
pub fn upsert( &mut self, values: &[(&str, ColumnValue)], ) -> Result<UpsertResult, ColumnStoreError>
Upsert: inserts a new row or updates an existing one.
§Errors
Returns an error when primary key constraints are violated, when a referenced column does not exist, or when types mismatch.
Sourcepub fn batch_upsert(
&mut self,
rows: &[Vec<(&str, ColumnValue)>],
) -> BatchUpsertResult
pub fn batch_upsert( &mut self, rows: &[Vec<(&str, ColumnValue)>], ) -> BatchUpsertResult
Batch upsert: inserts or updates multiple rows.
Source§impl ColumnStore
impl ColumnStore
Sourcepub fn filter_eq_int(&self, column: &str, value: i64) -> Vec<usize>
pub fn filter_eq_int(&self, column: &str, value: i64) -> Vec<usize>
Filters rows by equality on an integer column.
Returns a vector of row indices that match. Excludes deleted rows.
Sourcepub fn filter_eq_string(&self, column: &str, value: &str) -> Vec<usize>
pub fn filter_eq_string(&self, column: &str, value: &str) -> Vec<usize>
Filters rows by equality on a string column.
Returns a vector of row indices that match. Excludes deleted rows.
Sourcepub fn filter_gt_int(&self, column: &str, threshold: i64) -> Vec<usize>
pub fn filter_gt_int(&self, column: &str, threshold: i64) -> Vec<usize>
Filters rows by range on an integer column (value > threshold).
Returns a vector of row indices that match. Excludes deleted rows.
Sourcepub fn filter_lt_int(&self, column: &str, threshold: i64) -> Vec<usize>
pub fn filter_lt_int(&self, column: &str, threshold: i64) -> Vec<usize>
Filters rows by range on an integer column (value < threshold).
Excludes deleted rows.
Sourcepub fn filter_range_int(&self, column: &str, low: i64, high: i64) -> Vec<usize>
pub fn filter_range_int(&self, column: &str, low: i64, high: i64) -> Vec<usize>
Filters rows by range on an integer column (low < value < high).
Excludes deleted rows.
Sourcepub fn filter_in_string(&self, column: &str, values: &[&str]) -> Vec<usize>
pub fn filter_in_string(&self, column: &str, values: &[&str]) -> Vec<usize>
Filters rows by IN clause on a string column.
Returns a vector of row indices that match any of the values. Excludes deleted rows.
Sourcepub fn count_eq_int(&self, column: &str, value: i64) -> usize
pub fn count_eq_int(&self, column: &str, value: i64) -> usize
Counts rows matching equality on an integer column.
More efficient than filter_eq_int().len() as it doesn’t allocate. Excludes deleted rows.
Sourcepub fn count_eq_string(&self, column: &str, value: &str) -> usize
pub fn count_eq_string(&self, column: &str, value: &str) -> usize
Counts rows matching equality on a string column. Excludes deleted rows.
Sourcepub fn filter_eq_int_bitmap(&self, column: &str, value: i64) -> RoaringBitmap
pub fn filter_eq_int_bitmap(&self, column: &str, value: i64) -> RoaringBitmap
Filters rows by equality on an integer column, returning a bitmap.
Uses RoaringBitmap for memory-efficient storage of matching indices.
Useful for combining multiple filters with AND/OR operations.
§Note
Row indices are safely converted to u32 for RoaringBitmap. This limits stores to ~4B rows. Indices >= u32::MAX are safely skipped (not truncated).
Sourcepub fn filter_eq_string_bitmap(
&self,
column: &str,
value: &str,
) -> RoaringBitmap
pub fn filter_eq_string_bitmap( &self, column: &str, value: &str, ) -> RoaringBitmap
Filters rows by equality on a string column, returning a bitmap.
Indices >= u32::MAX are safely skipped.
Sourcepub fn filter_range_int_bitmap(
&self,
column: &str,
low: i64,
high: i64,
) -> RoaringBitmap
pub fn filter_range_int_bitmap( &self, column: &str, low: i64, high: i64, ) -> RoaringBitmap
Filters rows by range on an integer column, returning a bitmap.
Indices >= u32::MAX are safely skipped.
Sourcepub fn bitmap_and(a: &RoaringBitmap, b: &RoaringBitmap) -> RoaringBitmap
pub fn bitmap_and(a: &RoaringBitmap, b: &RoaringBitmap) -> RoaringBitmap
Combines two filter results using AND.
Returns indices that are in both bitmaps.
Sourcepub fn bitmap_or(a: &RoaringBitmap, b: &RoaringBitmap) -> RoaringBitmap
pub fn bitmap_or(a: &RoaringBitmap, b: &RoaringBitmap) -> RoaringBitmap
Combines two filter results using OR.
Returns indices that are in either bitmap.
Source§impl ColumnStore
impl ColumnStore
Sourcepub fn vacuum(&mut self, _config: VacuumConfig) -> VacuumStats
pub fn vacuum(&mut self, _config: VacuumConfig) -> VacuumStats
Runs vacuum to remove tombstones and compact data.
This operation removes deleted rows from the column store, reclaiming space and improving query performance. The operation is done in-place by building new column vectors without the deleted rows.
§Arguments
_config- Vacuum configuration (batch_size, sync options)
§Returns
Statistics about the vacuum operation.
Sourcepub fn should_vacuum(&self, threshold: f64) -> bool
pub fn should_vacuum(&self, threshold: f64) -> bool
Returns whether vacuum is recommended based on tombstone ratio.
§Arguments
threshold- Ratio of deleted rows to trigger vacuum (0.0-1.0)
Sourcepub fn is_row_deleted_bitmap(&self, row_idx: usize) -> bool
pub fn is_row_deleted_bitmap(&self, row_idx: usize) -> bool
Checks if a row is deleted using RoaringBitmap (O(1) lookup).
This is faster than FxHashSet for large deletion sets.
Sourcepub fn live_row_indices(&self) -> impl Iterator<Item = usize> + '_
pub fn live_row_indices(&self) -> impl Iterator<Item = usize> + '_
Returns an iterator over live (non-deleted) row indices.
Uses RoaringBitmap for efficient filtering.
Sourcepub fn deletion_bitmap(&self) -> &RoaringBitmap
pub fn deletion_bitmap(&self) -> &RoaringBitmap
Returns the deletion bitmap for advanced filtering operations.
Sourcepub fn deleted_count_bitmap(&self) -> u64
pub fn deleted_count_bitmap(&self) -> u64
Returns the number of deleted rows using the bitmap (O(1)).
Source§impl ColumnStore
impl ColumnStore
Sourcepub fn with_schema(fields: &[(&str, ColumnType)]) -> Self
pub fn with_schema(fields: &[(&str, ColumnType)]) -> Self
Creates a column store with pre-defined indexed fields.
Sourcepub fn with_primary_key(
fields: &[(&str, ColumnType)],
pk_column: &str,
) -> Result<Self>
pub fn with_primary_key( fields: &[(&str, ColumnType)], pk_column: &str, ) -> Result<Self>
Creates a column store with a primary key for O(1) lookups.
§Errors
Returns Error::ColumnStoreError if pk_column is not found in fields
or is not of type Int.
Sourcepub fn primary_key_column(&self) -> Option<&str>
pub fn primary_key_column(&self) -> Option<&str>
Returns the primary key column name if set.
Sourcepub fn add_column(&mut self, name: &str, col_type: ColumnType)
pub fn add_column(&mut self, name: &str, col_type: ColumnType)
Adds a new column to the store.
Sourcepub fn row_count(&self) -> usize
pub fn row_count(&self) -> usize
Returns the total number of rows in the store (including deleted/tombstoned rows).
Sourcepub fn active_row_count(&self) -> usize
pub fn active_row_count(&self) -> usize
Returns the number of active (non-deleted) rows in the store.
Sourcepub fn deleted_row_count(&self) -> usize
pub fn deleted_row_count(&self) -> usize
Returns the number of deleted (tombstoned) rows.
Sourcepub fn string_table(&self) -> &StringTable
pub fn string_table(&self) -> &StringTable
Returns the string table for string interning.
Sourcepub fn string_table_mut(&mut self) -> &mut StringTable
pub fn string_table_mut(&mut self) -> &mut StringTable
Returns a mutable reference to the string table.
Sourcepub fn push_row_unchecked(&mut self, values: &[(&str, ColumnValue)])
pub fn push_row_unchecked(&mut self, values: &[(&str, ColumnValue)])
Pushes values for a new row (low-level, no validation).
Sourcepub fn push_row(&mut self, values: &[(&str, ColumnValue)])
pub fn push_row(&mut self, values: &[(&str, ColumnValue)])
Convenience alias for push_row_unchecked().
Sourcepub fn insert_row(
&mut self,
values: &[(&str, ColumnValue)],
) -> Result<usize, ColumnStoreError>
pub fn insert_row( &mut self, values: &[(&str, ColumnValue)], ) -> Result<usize, ColumnStoreError>
Inserts a row with primary key validation and index update.
§Errors
Returns an error if the primary key is missing, duplicated, or any provided value does not match the target column type.
Sourcepub fn get_row_idx_by_pk(&self, pk: i64) -> Option<usize>
pub fn get_row_idx_by_pk(&self, pk: i64) -> Option<usize>
Gets the row index by primary key value - O(1) lookup.
Sourcepub fn delete_by_pk(&mut self, pk: i64) -> bool
pub fn delete_by_pk(&mut self, pk: i64) -> bool
Deletes a row by primary key value.
Also clears any TTL metadata to prevent false-positive expirations. Updates both FxHashSet and RoaringBitmap (EPIC-043 US-002).
Sourcepub fn update_by_pk(
&mut self,
pk: i64,
column: &str,
value: ColumnValue,
) -> Result<(), ColumnStoreError>
pub fn update_by_pk( &mut self, pk: i64, column: &str, value: ColumnValue, ) -> Result<(), ColumnStoreError>
Updates a single column value for a row identified by primary key - O(1).
§Errors
Returns an error if the row does not exist, the column does not exist, the update targets the primary-key column, or the value type mismatches the column type.
Sourcepub fn update_multi_by_pk(
&mut self,
pk: i64,
updates: &[(&str, ColumnValue)],
) -> Result<(), ColumnStoreError>
pub fn update_multi_by_pk( &mut self, pk: i64, updates: &[(&str, ColumnValue)], ) -> Result<(), ColumnStoreError>
Updates multiple columns atomically for a row identified by primary key.
§Panics
This function will not panic under normal operation. The internal expect is guarded by prior validation that all columns exist.
§Errors
Returns an error if the row does not exist, one of the columns does not exist, one update attempts to modify the primary key, or a value type mismatches its target column type.
Sourcepub fn get_column(&self, name: &str) -> Option<&TypedColumn>
pub fn get_column(&self, name: &str) -> Option<&TypedColumn>
Gets a column by name.
Sourcepub fn column_names(&self) -> impl Iterator<Item = &str>
pub fn column_names(&self) -> impl Iterator<Item = &str>
Returns an iterator over column names.
Trait Implementations§
Source§impl Debug for ColumnStore
impl Debug for ColumnStore
Source§impl Default for ColumnStore
impl Default for ColumnStore
Source§fn default() -> ColumnStore
fn default() -> ColumnStore
Auto Trait Implementations§
impl Freeze for ColumnStore
impl RefUnwindSafe for ColumnStore
impl Send for ColumnStore
impl Sync for ColumnStore
impl Unpin for ColumnStore
impl UnsafeUnpin for ColumnStore
impl UnwindSafe for ColumnStore
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> 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> 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>
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);