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