use std::collections::HashMap;
use crate::optimizer::cost::SelectivityEstimator;
use crate::optimizer::stats::StatsView;
use crate::planning::plan::PlanNodeEnum;
mod cardinality;
mod logical;
mod physical;
mod stats;
pub(crate) use cardinality::register_plan_estimates;
pub use logical::estimate_node_output_rows_logical;
pub use physical::{estimate_node_output_rows, estimate_node_output_rows_corrected};
pub fn collect_node_row_estimates(
root: &PlanNodeEnum,
stats: &StatsView,
selectivity: &SelectivityEstimator,
) -> HashMap<i64, u64> {
let mut estimates = HashMap::new();
collect_node_row_estimates_recursive(root, stats, selectivity, &mut estimates);
estimates
}
fn collect_node_row_estimates_recursive(
node: &PlanNodeEnum,
stats: &StatsView,
selectivity: &SelectivityEstimator,
estimates: &mut HashMap<i64, u64>,
) {
for child in node.children() {
collect_node_row_estimates_recursive(child, stats, selectivity, estimates);
}
let estimate = estimate_node_output_rows(node, stats, selectivity);
estimates.insert(node.id(), estimate);
}
#[cfg(test)]
mod tests;