use std::sync::Arc;
use super::config::CostModelConfig;
use crate::optimizer::stats::StatisticsManager;
#[derive(Debug, Clone)]
pub struct CostCalculator {
stats_manager: Arc<StatisticsManager>,
config: CostModelConfig,
}
impl CostCalculator {
pub fn new(stats_manager: Arc<StatisticsManager>) -> Self {
Self {
stats_manager,
config: CostModelConfig::default(),
}
}
pub fn with_config(stats_manager: Arc<StatisticsManager>, config: CostModelConfig) -> Self {
Self {
stats_manager,
config,
}
}
pub fn config(&self) -> &CostModelConfig {
&self.config
}
pub fn set_config(&mut self, config: CostModelConfig) {
self.config = config;
}
}
mod aggregate_sort;
mod helpers;
mod join;
mod scan;
mod traverse;
impl Default for CostCalculator {
fn default() -> Self {
Self {
stats_manager: Arc::new(StatisticsManager::new()),
config: CostModelConfig::default(),
}
}
}
#[cfg(test)]
mod tests;