pub struct SamkhyaTableProvider { /* private fields */ }Expand description
A TableProvider wrapper that overrides statistics() with
samkhya-corrected column statistics while delegating every other method
to the inner provider.
§Builder
use std::sync::Arc;
use samkhya_datafusion::SamkhyaTableProvider;
use samkhya_core::stats::ColumnStats;
let wrapped = SamkhyaTableProvider::new(Arc::new(inner))
.with_column_stats(0, ColumnStats::new().with_row_count(999).with_distinct_count(42));§Stats fold semantics
statistics() builds a Statistics whose per-column entries come from
the samkhya override map where present, falling back to the inner
provider’s stats (or ColumnStatistics::new_unknown() if the inner
provider returns None). Table-level num_rows is taken from the
override map’s most authoritative row_count: the maximum across all
override entries, since samkhya’s per-column stats describe the same
underlying relation. If no override carries a row count, the inner
provider’s num_rows is preserved.
Implementations§
Source§impl SamkhyaTableProvider
impl SamkhyaTableProvider
Sourcepub fn new(inner: Arc<dyn TableProvider>) -> Self
pub fn new(inner: Arc<dyn TableProvider>) -> Self
Wrap an existing provider. No overrides are installed until
Self::with_column_stats is called.
Sourcepub fn with_column_stats(self, col_idx: usize, stats: ColumnStats) -> Self
pub fn with_column_stats(self, col_idx: usize, stats: ColumnStats) -> Self
Install a samkhya override for the column at col_idx.
Indices refer to positions in the inner provider’s SchemaRef.
Existing overrides for the same index are replaced.
Sourcepub fn stats_call_count(&self) -> usize
pub fn stats_call_count(&self) -> usize
Number of times statistics() has been called on this wrapper.
Useful for assertions in integration tests that verify the planner actually consulted the corrected stats.
Sourcepub fn overrides(&self) -> &HashMap<usize, ColumnStats>
pub fn overrides(&self) -> &HashMap<usize, ColumnStats>
Borrow the override map. Read-only access for diagnostics.
Trait Implementations§
Source§impl Debug for SamkhyaTableProvider
impl Debug for SamkhyaTableProvider
Source§impl TableProvider for SamkhyaTableProvider
impl TableProvider for SamkhyaTableProvider
Source§fn statistics(&self) -> Option<Statistics>
fn statistics(&self) -> Option<Statistics>
Fold samkhya overrides into the inner provider’s Statistics.
Schema order is preserved: column i in the returned
column_statistics corresponds to field i of self.schema().
Source§fn as_any(&self) -> &dyn Any
fn as_any(&self) -> &dyn Any
Any so that it can be
downcast to a specific implementation.Source§fn constraints(&self) -> Option<&Constraints>
fn constraints(&self) -> Option<&Constraints>
Source§fn table_type(&self) -> TableType
fn table_type(&self) -> TableType
Source§fn get_table_definition(&self) -> Option<&str>
fn get_table_definition(&self) -> Option<&str>
Source§fn get_logical_plan(&self) -> Option<Cow<'_, LogicalPlan>>
fn get_logical_plan(&self) -> Option<Cow<'_, LogicalPlan>>
LogicalPlan of this table, if available.Source§fn get_column_default(&self, column: &str) -> Option<&Expr>
fn get_column_default(&self, column: &str) -> Option<&Expr>
Source§fn scan<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
state: &'life1 dyn Session,
projection: Option<&'life2 Vec<usize>>,
filters: &'life3 [Expr],
limit: Option<usize>,
) -> Pin<Box<dyn Future<Output = Result<Arc<dyn ExecutionPlan>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn scan<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
state: &'life1 dyn Session,
projection: Option<&'life2 Vec<usize>>,
filters: &'life3 [Expr],
limit: Option<usize>,
) -> Pin<Box<dyn Future<Output = Result<Arc<dyn ExecutionPlan>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
ExecutionPlan for scanning the table with optionally
specified projection, filter and limit, described below. Read moreSource§fn supports_filters_pushdown(
&self,
filters: &[&Expr],
) -> Result<Vec<TableProviderFilterPushDown>>
fn supports_filters_pushdown( &self, filters: &[&Expr], ) -> Result<Vec<TableProviderFilterPushDown>>
Source§fn insert_into<'life0, 'life1, 'async_trait>(
&'life0 self,
state: &'life1 dyn Session,
input: Arc<dyn ExecutionPlan>,
insert_op: InsertOp,
) -> Pin<Box<dyn Future<Output = Result<Arc<dyn ExecutionPlan>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn insert_into<'life0, 'life1, 'async_trait>(
&'life0 self,
state: &'life1 dyn Session,
input: Arc<dyn ExecutionPlan>,
insert_op: InsertOp,
) -> Pin<Box<dyn Future<Output = Result<Arc<dyn ExecutionPlan>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
ExecutionPlan to insert data into this table, if
supported. Read moreAuto Trait Implementations§
impl !Freeze for SamkhyaTableProvider
impl !RefUnwindSafe for SamkhyaTableProvider
impl Send for SamkhyaTableProvider
impl Sync for SamkhyaTableProvider
impl Unpin for SamkhyaTableProvider
impl UnsafeUnpin for SamkhyaTableProvider
impl !UnwindSafe for SamkhyaTableProvider
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> 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 more