quill_sql/expression/
util.rs1use crate::catalog::SchemaRef;
2use crate::error::QuillSQLResult;
3use crate::expression::{Alias, Cast, ColumnExpr, Expr};
4
5pub fn columnize_expr(e: &Expr, input_schema: &SchemaRef) -> QuillSQLResult<Expr> {
7 match e {
8 Expr::Column(_) => Ok(e.clone()),
9 Expr::Alias(Alias { expr, name }) => Ok(Expr::Alias(Alias {
10 expr: Box::new(columnize_expr(expr, input_schema)?),
11 name: name.clone(),
12 })),
13 Expr::Cast(Cast { expr, data_type }) => Ok(Expr::Cast(Cast {
14 expr: Box::new(columnize_expr(expr, input_schema)?),
15 data_type: *data_type,
16 })),
17 _ => {
18 let name = e.to_string();
19 let idx = input_schema.index_of(None, name.as_str())?;
20 let col = input_schema.column_with_index(idx)?;
21 Ok(Expr::Column(ColumnExpr {
22 relation: col.relation.clone(),
23 name,
24 }))
25 }
26 }
27}