use super::{DimensionKeyFilter, Expr, KeyRange, LocalParquetSource};
pub trait LocalParquetPruningResolver {
fn dimension_scan_admitted(&self, source: &LocalParquetSource, max_dimension_rows: u64) -> bool;
fn dimension_key_filter(
&self,
source: &LocalParquetSource,
key_column: &str,
predicate: &Expr,
projection_indices: &[usize],
) -> Option<Option<DimensionKeyFilter>>;
fn target_row_group_key_ranges(
&self,
source: &LocalParquetSource,
key_column_index: usize,
) -> Option<Vec<Vec<Option<KeyRange>>>>;
fn filtered_i64_expr_range(
&self,
source: &LocalParquetSource,
expr: &Expr,
predicate: Option<&Expr>,
projection_indices: &[usize],
) -> Option<Option<KeyRange>>;
}
#[cfg(test)]
#[derive(Debug, Clone, Copy, Default)]
pub struct NoDimensionPruningFacts;
#[cfg(test)]
impl LocalParquetPruningResolver for NoDimensionPruningFacts {
fn dimension_scan_admitted(&self, _source: &LocalParquetSource, _max_dimension_rows: u64) -> bool {
false
}
fn dimension_key_filter(
&self,
_source: &LocalParquetSource,
_key_column: &str,
_predicate: &Expr,
_projection_indices: &[usize],
) -> Option<Option<DimensionKeyFilter>> {
None
}
fn target_row_group_key_ranges(
&self,
_source: &LocalParquetSource,
_key_column_index: usize,
) -> Option<Vec<Vec<Option<KeyRange>>>> {
None
}
fn filtered_i64_expr_range(
&self,
_source: &LocalParquetSource,
_expr: &Expr,
_predicate: Option<&Expr>,
_projection_indices: &[usize],
) -> Option<Option<KeyRange>> {
None
}
}