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