Skip to main content

gluesql_core/plan/statement/
projection.rs

1use {
2    super::ExprPlan,
3    crate::ast,
4    serde::{Deserialize, Serialize},
5};
6
7#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
8pub enum ProjectionPlan {
9    SelectItems(Vec<SelectItemPlan>),
10    SchemalessMap,
11}
12
13#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
14pub enum SelectItemPlan {
15    Expr { expr: ExprPlan, label: String },
16    QualifiedWildcard(String),
17    Wildcard,
18}
19
20impl From<ast::Projection> for ProjectionPlan {
21    fn from(projection: ast::Projection) -> Self {
22        match projection {
23            ast::Projection::SelectItems(items) => {
24                Self::SelectItems(items.into_iter().map(Into::into).collect())
25            }
26        }
27    }
28}
29
30impl From<ast::SelectItem> for SelectItemPlan {
31    fn from(select_item: ast::SelectItem) -> Self {
32        match select_item {
33            ast::SelectItem::Expr { expr, label } => Self::Expr {
34                expr: expr.into(),
35                label,
36            },
37            ast::SelectItem::QualifiedWildcard(table_alias) => Self::QualifiedWildcard(table_alias),
38            ast::SelectItem::Wildcard => Self::Wildcard,
39        }
40    }
41}