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.
Sourcepub fn filter_in_string_bitmap(
&self,
column: &str,
values: &[&str],
) -> RoaringBitmap
pub fn filter_in_string_bitmap( &self, column: &str, values: &[&str], ) -> RoaringBitmap
Returns a RoaringBitmap of row indices matching any value in the IN list.
Reuses scan_string_column_in infrastructure, converting Vec<usize> to bitmap.
Excludes deleted rows. Returns empty bitmap for missing/mismatched columns.
Time complexity: O(rows) — full column scan with HashSet lookup per row.
Sourcepub fn filter_in_int_bitmap(
&self,
column: &str,
values: &[i64],
) -> RoaringBitmap
pub fn filter_in_int_bitmap( &self, column: &str, values: &[i64], ) -> RoaringBitmap
Returns a RoaringBitmap of row indices matching any i64 value in the IN list.
Uses FxHashSet for O(1) per-row membership test when values.len() > 16,
linear scan otherwise. Excludes deleted rows.
Time complexity: O(rows) — full column scan.
Source§impl ColumnStore
impl ColumnStore
Sourcepub fn filter_contains(&self, column: &str, value: &ColumnValue) -> Vec<usize>
pub fn filter_contains(&self, column: &str, value: &ColumnValue) -> Vec<usize>
Returns row indices where the array column contains value.
Returns empty results for non-existent or non-array columns. Excludes deleted rows and null arrays.
Sourcepub fn filter_contains_any(
&self,
column: &str,
values: &[ColumnValue],
) -> Vec<usize>
pub fn filter_contains_any( &self, column: &str, values: &[ColumnValue], ) -> Vec<usize>
Returns row indices where the array contains at least one of values.
Returns empty results for non-existent or non-array columns.
Sourcepub fn filter_contains_all(
&self,
column: &str,
values: &[ColumnValue],
) -> Vec<usize>
pub fn filter_contains_all( &self, column: &str, values: &[ColumnValue], ) -> Vec<usize>
Returns row indices where the array contains every value in values.
Returns empty results for non-existent or non-array columns.
Sourcepub fn filter_contains_bitmap(
&self,
column: &str,
value: &ColumnValue,
) -> RoaringBitmap
pub fn filter_contains_bitmap( &self, column: &str, value: &ColumnValue, ) -> RoaringBitmap
Bitmap variant of Self::filter_contains.
Safely skips indices exceeding u32::MAX.
Sourcepub fn filter_contains_any_bitmap(
&self,
column: &str,
values: &[ColumnValue],
) -> RoaringBitmap
pub fn filter_contains_any_bitmap( &self, column: &str, values: &[ColumnValue], ) -> RoaringBitmap
Bitmap variant of Self::filter_contains_any.
Safely skips indices exceeding u32::MAX.
Sourcepub fn filter_contains_all_bitmap(
&self,
column: &str,
values: &[ColumnValue],
) -> RoaringBitmap
pub fn filter_contains_all_bitmap( &self, column: &str, values: &[ColumnValue], ) -> RoaringBitmap
Bitmap variant of Self::filter_contains_all.
Safely skips indices exceeding u32::MAX.
Source§impl ColumnStore
impl ColumnStore
Sourcepub fn filter_geo_distance(&self, params: &GeoDistanceParams<'_>) -> Vec<usize>
pub fn filter_geo_distance(&self, params: &GeoDistanceParams<'_>) -> Vec<usize>
Returns row indices where the Haversine distance satisfies the comparison.
Returns empty results for non-existent or non-GeoPoint columns. Excludes deleted rows and null values.
Sourcepub fn filter_geo_distance_bitmap(
&self,
params: &GeoDistanceParams<'_>,
) -> RoaringBitmap
pub fn filter_geo_distance_bitmap( &self, params: &GeoDistanceParams<'_>, ) -> RoaringBitmap
Bitmap variant of filter_geo_distance.
Safely skips indices exceeding u32::MAX.
Sourcepub fn filter_geo_bbox(&self, params: &GeoBboxParams<'_>) -> Vec<usize>
pub fn filter_geo_bbox(&self, params: &GeoBboxParams<'_>) -> Vec<usize>
Returns row indices where the GeoPoint falls within the bounding box (inclusive).
Returns empty results for non-existent or non-GeoPoint columns,
or when lat_min > lat_max or lng_min > lng_max.
Sourcepub fn filter_geo_bbox_bitmap(
&self,
params: &GeoBboxParams<'_>,
) -> RoaringBitmap
pub fn filter_geo_bbox_bitmap( &self, params: &GeoBboxParams<'_>, ) -> RoaringBitmap
Bitmap variant of filter_geo_bbox.
Safely skips indices exceeding u32::MAX.
Source§impl ColumnStore
impl ColumnStore
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.
Type checking is not enforced on the fresh-insert path: a value
that does not match the target column type is silently stored as
NULL (push_typed fallback). Use set_column_value for validated
writes.
§Errors
Returns an error if the primary key is missing or duplicated (when a
duplicate row is live), or if GeoPoint coordinates are out of range.
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.
Tombstones the row in the deletion_bitmap (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.
§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.
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. Currently ignored: the vacuum runs as a single in-memory pass (batch_size,sync, andyield_interval_mshave no effect).
§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).
Single source of truth for deletion state. Indices >= u32::MAX cannot
be tombstoned (the bitmap is u32-indexed) and are reported as live.
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_schema_validated(
fields: &[(&str, ColumnType)],
) -> Result<Self, ColumnStoreError>
pub fn with_schema_validated( fields: &[(&str, ColumnType)], ) -> Result<Self, ColumnStoreError>
Creates a column store with validated schema (rejects nested arrays).
§Errors
Returns ColumnStoreError::TypeMismatch if any column uses nested arrays.
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.
Warning: this does not backfill nulls for rows that already
exist, so the new column would be shorter than row_count and
desynchronized from every other column. It is only sound to call this
while the store is empty (row_count == 0, i.e. schema-definition
time). Use ColumnStore::add_column_backfilled to add a column once
rows exist.
Nested arrays are silently treated as scalar arrays; use
with_schema_validated for strict schema validation.
§Panics
In debug builds, panics if the store already contains rows
(row_count > 0). Release builds skip the check for performance, but
such a call remains a logic error.
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 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>
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);