use crate::ast::Expr;

use super::model::BoundTable;

#[derive(Debug, Clone)]
pub(crate) enum ScanStrategy {
    TableScan,
    IndexSeek { index_id: u32 },
    IndexScan { index_id: u32 },
}

#[derive(Debug, Clone)]
pub(crate) struct PhysicalScan {
    pub(crate) bound: BoundTable,
    pub(crate) strategy: ScanStrategy,
    pub(crate) pushed_predicate: Option<Expr>,
}

#[derive(Debug, Clone)]
pub(crate) struct PhysicalPivot {
    pub(crate) spec: crate::ast::PivotSpec,
    pub(crate) alias: String,
}

#[derive(Debug, Clone)]
pub(crate) struct PhysicalUnpivot {
    pub(crate) spec: crate::ast::UnpivotSpec,
    pub(crate) alias: String,
    pub(crate) source_aliases: Vec<String>,
}
