gluesql_core/plan/statement/
projection.rs1use {
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}