sql_fun_sqlast/sem/scalar_expr/column_ref/
cte_column_ref.rs1use crate::sem::{
2 ColumnDefinition, ColumnName, CteName, Nullable, TypeReference, data_source::AliasName,
3};
4
5#[derive(Debug, Clone, Eq, Hash, PartialEq, serde::Serialize, serde::Deserialize)]
7pub struct CteColumnRef {
8 alias: AliasName,
9 cte_name: CteName,
10 column_name: ColumnName,
11 column_def: Option<ColumnDefinition>,
12 source_nullable: Nullable,
13}
14
15impl super::ColumnReference for CteColumnRef {
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.source_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_name
42 }
43}
44
45impl CteColumnRef {
46 #[must_use]
48 pub fn new(
49 alias: &AliasName,
50 cte_name: &CteName,
51 column_name: &ColumnName,
52 column_def: Option<&ColumnDefinition>,
53 source_nullable: Nullable,
54 ) -> Self {
55 Self {
56 alias: alias.clone(),
57 cte_name: cte_name.clone(),
58 column_name: column_name.clone(),
59 column_def: column_def.cloned(),
60 source_nullable,
61 }
62 }
63}