quill_sql/expression/
alias.rs1use 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}