quill_sql/expression/
literal.rs

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