use std::sync::OnceLock;
use crate::plan::{ImplDefinedCaps, optimize::IndexCatalog};
#[non_exhaustive]
pub struct OptimizeContext<'a> {
pub impl_defined_caps: &'a ImplDefinedCaps,
pub index_catalog: Option<&'a dyn IndexCatalog>,
}
impl<'a> OptimizeContext<'a> {
#[must_use]
pub const fn new(impl_defined_caps: &'a ImplDefinedCaps) -> Self {
Self {
impl_defined_caps,
index_catalog: None,
}
}
#[must_use]
pub const fn with_index_catalog(mut self, catalog: &'a dyn IndexCatalog) -> Self {
self.index_catalog = Some(catalog);
self
}
}
static DEFAULT_CAPS: OnceLock<ImplDefinedCaps> = OnceLock::new();
fn default_caps() -> &'static ImplDefinedCaps {
DEFAULT_CAPS.get_or_init(ImplDefinedCaps::default)
}
impl Default for OptimizeContext<'static> {
fn default() -> Self {
Self::new(default_caps())
}
}