quill_sql/expression/
alias.rs

1use crate::catalog::Schema;
2use crate::catalog::{Column, DataType};
3use crate::error::QuillSQLResult;
4use crate::expression::{Expr, ExprTrait};
5use crate::storage::tuple::Tuple;
6use crate::utils::scalar::ScalarValue;
7
8#[derive(Clone, PartialEq, Eq, Debug)]
9pub struct Alias {
10    pub expr: Box<Expr>,
11    pub name: String,
12}
13
14impl ExprTrait for Alias {
15    fn data_type(&self, input_schema: &Schema) -> QuillSQLResult<DataType> {
16        self.expr.data_type(input_schema)
17    }
18
19    fn nullable(&self, input_schema: &Schema) -> QuillSQLResult<bool> {
20        self.expr.nullable(input_schema)
21    }
22
23    fn evaluate(&self, tuple: &Tuple) -> QuillSQLResult<ScalarValue> {
24        self.expr.evaluate(tuple)
25    }
26
27    fn to_column(&self, input_schema: &Schema) -> QuillSQLResult<Column> {
28        Ok(Column::new(
29            self.name.clone(),
30            self.data_type(input_schema)?,
31            self.nullable(input_schema)?,
32        ))
33    }
34}
35
36impl std::fmt::Display for Alias {
37    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
38        write!(f, "{} AS {}", self.expr, self.name)
39    }
40}