44
55from sqlglot import exp
66from sqlglot .dialects .dialect import Dialect , DialectType
7- from sqlglot .helper import name_sequence , seq_get
7+ from sqlglot .helper import name_sequence , seq_get , ensure_list
88from sqlglot .optimizer .normalize_identifiers import normalize_identifiers
99from sqlglot .optimizer .scope import Scope , traverse_scope
1010
@@ -79,6 +79,7 @@ def _set_alias(
7979 target_alias : t .Optional [str ] = None ,
8080 scope : t .Optional [Scope ] = None ,
8181 normalize : bool = False ,
82+ columns : t .Optional [t .List [t .Union [str , exp .Identifier ]]] = None ,
8283 ) -> None :
8384 alias = expression .args .get ("alias" ) or exp .TableAlias ()
8485
@@ -96,6 +97,10 @@ def _set_alias(
9697 quoted = True if canonicalize_table_aliases or not target_alias else None
9798
9899 alias .set ("this" , exp .to_identifier (new_alias_name , quoted = quoted ))
100+
101+ if columns :
102+ alias .set ("columns" , [exp .to_identifier (c ) for c in columns ])
103+
99104 expression .set ("alias" , alias )
100105
101106 if scope :
@@ -132,11 +137,27 @@ def _set_alias(
132137 if pivot := seq_get (source .args .get ("pivots" ) or [], 0 ):
133138 name = source .name
134139
140+ table_this = source .this
141+ table_alias = source .args .get ("alias" )
142+ function_columns : t .List [t .Union [str , exp .Identifier ]] = []
143+ if isinstance (table_this , exp .Func ):
144+ if not table_alias :
145+ function_columns = ensure_list (
146+ dialect .DEFAULT_FUNCTIONS_COLUMN_NAMES .get (type (table_this ))
147+ )
148+ elif columns := table_alias .columns :
149+ function_columns = columns
150+ elif type (table_this ) in dialect .DEFAULT_FUNCTIONS_COLUMN_NAMES :
151+ function_columns = ensure_list (source .alias_or_name )
152+ source .set ("alias" , None )
153+ name = None
154+
135155 _set_alias (
136156 source ,
137157 canonical_aliases ,
138158 target_alias = name or source .name or None ,
139159 normalize = True ,
160+ columns = function_columns ,
140161 )
141162
142163 source_fqn = "." .join (p .name for p in source .parts )
0 commit comments