sql_fun_sqlast/sem/scalar_expr/column_ref/
table_column_ref.rs1use crate::sem::{
2 ColumnDefinition, ColumnName, Nullable, TableName, TypeReference, data_source::AliasName,
3};
4
5#[derive(Debug, Clone, Eq, Hash, PartialEq, serde::Serialize, serde::Deserialize)]
7pub struct TableColumnRef {
8 alias: AliasName,
9 column: ColumnName,
10 table_name: TableName,
11 column_def: Option<ColumnDefinition>,
12 datasource_nullable: Nullable,
13}
14
15impl super::ColumnReference for TableColumnRef {
16 fn get_type(&self) -> Option<TypeReference> {
17 if let Some(col_def) = &self.column_def {
18 col_def.get_type()
19 } else {
20 None
21 }
22 }
23
24 fn is_not_null(&self) -> Option<bool> {
25 if self.datasource_nullable {
26 return Some(false);
27 }
28 let Some(column_def) = &self.column_def else {
29 return None;
31 };
32 column_def.is_not_null()
34 }
35
36 fn get_column_def(&self) -> &Option<ColumnDefinition> {
37 &self.column_def
38 }
39
40 fn get_column_name(&self) -> &ColumnName {
41 &self.column
42 }
43}
44
45impl TableColumnRef {
46 #[must_use]
48 pub fn new(
49 alias: &AliasName,
50 column: &ColumnName,
51 table_name: &TableName,
52 column_def: Option<&ColumnDefinition>,
53 datasource_nullable: Nullable,
54 ) -> Self {
55 Self {
56 alias: alias.clone(),
57 column: column.clone(),
58 table_name: table_name.clone(),
59 column_def: column_def.cloned(),
60 datasource_nullable,
61 }
62 }
63}