use std::collections::BTreeMap;
#[derive(Debug, Clone, Default)]
pub struct CanonicalLogicalPlan {
pub root: CanonicalLogicalNode,
}
#[derive(Debug, Clone, Default)]
pub struct CanonicalLogicalNode {
pub operator: String,
pub source: Option<String>,
pub details: BTreeMap<String, String>,
pub estimated_rows: f64,
pub estimated_selectivity: f64,
pub estimated_confidence: f64,
pub operator_cost: f64,
pub children: Vec<CanonicalLogicalNode>,
}
#[derive(Debug, Clone, Default)]
pub struct CardinalityEstimate {
pub rows: f64,
pub selectivity: f64,
pub confidence: f64,
}
impl CardinalityEstimate {
pub fn new(rows: f64, selectivity: f64) -> Self {
Self {
rows,
selectivity,
confidence: 1.0,
}
}
pub fn full_scan(table_size: f64) -> Self {
Self {
rows: table_size,
selectivity: 1.0,
confidence: 1.0,
}
}
pub fn with_filter(mut self, filter_selectivity: f64) -> Self {
self.rows *= filter_selectivity;
self.selectivity *= filter_selectivity;
self.confidence *= 0.9; self
}
}
#[derive(Debug, Clone)]
pub struct AccessPathDecision {
pub path: &'static str,
pub index_hint: Option<String>,
pub reason: String,
pub warning: Option<String>,
}