use crate::row_group_filter::RowGroupAccessPlanFilter;
#[derive(Debug)]
pub(crate) enum ExpectedPruning {
All,
Some(Vec<usize>),
None,
}
impl ExpectedPruning {
pub(crate) fn assert(&self, row_groups: &RowGroupAccessPlanFilter) {
let access_plan = row_groups.access_plan();
let num_row_groups = access_plan.len();
assert!(num_row_groups > 0);
let num_pruned = (0..num_row_groups)
.filter_map(|i| {
if access_plan.should_scan(i) {
None
} else {
Some(1)
}
})
.sum::<usize>();
match self {
Self::All => {
assert_eq!(
num_row_groups, num_pruned,
"Expected all row groups to be pruned, but got {row_groups:?}"
);
}
ExpectedPruning::None => {
assert_eq!(
num_pruned, 0,
"Expected no row groups to be pruned, but got {row_groups:?}"
);
}
ExpectedPruning::Some(expected) => {
let actual = access_plan.row_group_indexes();
assert_eq!(
expected, &actual,
"Unexpected row groups pruned. Expected {expected:?}, got {actual:?}"
);
}
}
}
}