@@ -790,8 +790,9 @@ final class SQLContextAnalyzer {
790790 }
791791
792792 /// Attach derived-table columns to references and add any derived table or
793- /// CTE not already in scope. A derived alias wins over a plain reference of
794- /// the same identifier (e.g. a CTE used directly in a FROM clause).
793+ /// CTE not already in scope. Columns attach to a matching reference (e.g. a
794+ /// CTE aliased in a FROM clause), and the derived table or CTE is still
795+ /// registered under its own name so it resolves by either identifier.
795796 private func mergeDerivedTables(
796797 _ derivedTables: [ DerivedTable ] ,
797798 cteNames: [ String ] ,
@@ -802,20 +803,18 @@ final class SQLContextAnalyzer {
802803 uniquingKeysWith: { first, _ in first }
803804 )
804805
805- var consumed = Set < String > ( )
806806 for index in references. indices {
807807 let ref = references [ index]
808808 for key in [ ref. tableName. lowercased ( ) , ref. identifier. lowercased ( ) ] {
809809 guard let columns = derivedColumnsByAlias [ key] else { continue }
810- consumed. insert ( key)
811810 references [ index] = TableReference (
812811 tableName: ref. tableName, alias: ref. alias, schema: ref. schema, derivedColumns: columns
813812 )
814813 break
815814 }
816815 }
817816
818- var present = Set ( references. map { $0. identifier. lowercased ( ) } ) . union ( consumed )
817+ var present = Set ( references. map { $0. identifier. lowercased ( ) } )
819818 for derived in derivedTables where present. insert ( derived. alias. lowercased ( ) ) . inserted {
820819 references. append (
821820 TableReference ( tableName: derived. alias, alias: derived. alias, derivedColumns: derived. columns)
0 commit comments