1111"""
1212
1313from __future__ import annotations
14+
1415import datetime
1516import math
1617import numbers
3738
3839if t .TYPE_CHECKING :
3940 from typing_extensions import Self
41+
4042 from sqlglot ._typing import E , Lit
4143 from sqlglot .dialects .dialect import DialectType
4244
@@ -8494,7 +8496,7 @@ def _replace_placeholders(node: Expression, args, **kwargs) -> Expression:
84948496
84958497def expand (
84968498 expression : Expression ,
8497- sources : t .Dict [str , Query ] | t .Callable [[str ], t . Optional [ Query ]],
8499+ sources : t .Dict [str , Query | t .Callable [[], Query ]],
84988500 dialect : DialectType = None ,
84998501 copy : bool = True ,
85008502) -> Expression :
@@ -8517,27 +8519,17 @@ def expand(
85178519 Returns:
85188520 The transformed expression.
85198521 """
8522+ normalized_sources = {normalize_table_name (k , dialect = dialect ): v for k , v in sources .items ()}
85208523 # Create a query provider based on the sources parameter
8521- if callable (sources ):
8522- get_source = sources
8523- else :
8524- # Pre-normalize table names in sources dictionary for consistent lookups
8525- normalized_sources = {
8526- normalize_table_name (k , dialect = dialect ): v for k , v in sources .items ()
8527- }
8528-
8529- def _get_source (name : str ) -> t .Optional [Query ]:
8530- return normalized_sources .get (name )
8531-
8532- get_source = _get_source
85338524
85348525 def _expand (node : Expression ):
85358526 if isinstance (node , Table ):
85368527 name = normalize_table_name (node , dialect = dialect )
8537- source = get_source (name )
8528+ source = normalized_sources . get (name )
85388529 if source :
85398530 # Create a subquery with the same alias (or table name if no alias)
8540- subquery = source .subquery (node .alias or name )
8531+ parsed_source = source () if callable (source ) else source
8532+ subquery = parsed_source .subquery (node .alias or name )
85418533 subquery .comments = [f"source: { name } " ]
85428534 # Continue expanding within the subquery
85438535 return subquery .transform (_expand , copy = False )
0 commit comments