Skip to main content

ColumnStore

Struct ColumnStore 

Source
pub struct ColumnStore { /* private fields */ }
Expand description

Column store for high-performance filtering.

Implementations§

Source§

impl ColumnStore

Source

pub fn batch_update(&mut self, updates: &[BatchUpdate]) -> BatchUpdateResult

Performs batch updates with optimized cache locality.

Source

pub fn batch_update_same_value( &mut self, pks: &[i64], column: &str, value: &ColumnValue, ) -> BatchUpdateResult

Batch update with same value for multiple primary keys.

Source

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.

Source

pub fn expire_rows(&mut self) -> ExpireResult

Expires all rows that have passed their TTL.

Source

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.

Source

pub fn batch_upsert( &mut self, rows: &[Vec<(&str, ColumnValue)>], ) -> BatchUpsertResult

Batch upsert: inserts or updates multiple rows.

Source§

impl ColumnStore

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

pub fn count_eq_string(&self, column: &str, value: &str) -> usize

Counts rows matching equality on a string column. Excludes deleted rows.

Source

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).

Source

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.

Source

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.

Source

pub fn bitmap_and(a: &RoaringBitmap, b: &RoaringBitmap) -> RoaringBitmap

Combines two filter results using AND.

Returns indices that are in both bitmaps.

Source

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

Source

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.

Source

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)
Source

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.

Source

pub fn live_row_indices(&self) -> impl Iterator<Item = usize> + '_

Returns an iterator over live (non-deleted) row indices.

Uses RoaringBitmap for efficient filtering.

Source

pub fn deletion_bitmap(&self) -> &RoaringBitmap

Returns the deletion bitmap for advanced filtering operations.

Source

pub fn deleted_count_bitmap(&self) -> u64

Returns the number of deleted rows using the bitmap (O(1)).

Source§

impl ColumnStore

Source

pub fn new() -> Self

Creates a new empty column store.

Source

pub fn with_schema(fields: &[(&str, ColumnType)]) -> Self

Creates a column store with pre-defined indexed fields.

Source

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.

Source

pub fn primary_key_column(&self) -> Option<&str>

Returns the primary key column name if set.

Source

pub fn add_column(&mut self, name: &str, col_type: ColumnType)

Adds a new column to the store.

Source

pub fn row_count(&self) -> usize

Returns the total number of rows in the store (including deleted/tombstoned rows).

Source

pub fn active_row_count(&self) -> usize

Returns the number of active (non-deleted) rows in the store.

Source

pub fn deleted_row_count(&self) -> usize

Returns the number of deleted (tombstoned) rows.

Source

pub fn string_table(&self) -> &StringTable

Returns the string table for string interning.

Source

pub fn string_table_mut(&mut self) -> &mut StringTable

Returns a mutable reference to the string table.

Source

pub fn push_row_unchecked(&mut self, values: &[(&str, ColumnValue)])

Pushes values for a new row (low-level, no validation).

Source

pub fn push_row(&mut self, values: &[(&str, ColumnValue)])

Convenience alias for push_row_unchecked().

Source

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.

Source

pub fn get_row_idx_by_pk(&self, pk: i64) -> Option<usize>

Gets the row index by primary key value - O(1) lookup.

Source

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).

Source

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.

Source

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.

Source

pub fn get_column(&self, name: &str) -> Option<&TypedColumn>

Gets a column by name.

Source

pub fn column_names(&self) -> impl Iterator<Item = &str>

Returns an iterator over column names.

Source

pub fn get_value_as_json(&self, column: &str, row_idx: usize) -> Option<Value>

Gets a value from a column at a specific row index as JSON.

Trait Implementations§

Source§

impl Debug for ColumnStore

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ColumnStore

Source§

fn default() -> ColumnStore

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Paint for T
where T: ?Sized,

Source§

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 primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

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>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

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 bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

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 mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
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.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

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§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more