use crate::catalog::{TableCatalog, TableName};
use crate::expression::simplify::ConstantBinary;
use crate::expression::ScalarExpression;
use crate::planner::LogicalPlan;
use crate::storage::Bounds;
use crate::types::index::IndexMetaRef;
use itertools::Itertools;
use super::Operator;
#[derive(Debug, PartialEq, Eq, Clone, Hash)]
pub struct ScanOperator {
pub index_metas: Vec<IndexMetaRef>,
pub table_name: TableName,
pub columns: Vec<ScalarExpression>,
pub limit: Bounds,
pub index_by: Option<(IndexMetaRef, Vec<ConstantBinary>)>,
}
impl ScanOperator {
pub fn build(table_name: TableName, table_catalog: &TableCatalog) -> LogicalPlan {
let columns = table_catalog
.all_columns()
.into_iter()
.map(ScalarExpression::ColumnRef)
.collect_vec();
LogicalPlan {
operator: Operator::Scan(ScanOperator {
index_metas: table_catalog.indexes.clone(),
table_name,
columns,
limit: (None, None),
index_by: None,
}),
childrens: vec![],
}
}
}