* Collects aliases used for DIRECT collection references (not subqueries). * Used to validate that subqueries don't reuse parent query collection aliases. * Only direct CollectionRef aliases matter - QueryRef aliases don't cause conflicts.
(query: QueryIR)
| 959 | * Only direct CollectionRef aliases matter - QueryRef aliases don't cause conflicts. |
| 960 | */ |
| 961 | function collectDirectCollectionAliases(query: QueryIR): Set<string> { |
| 962 | const aliases = new Set<string>() |
| 963 | |
| 964 | // Collect FROM alias only if it's a direct collection reference |
| 965 | for (const source of getFromSources(query.from)) { |
| 966 | if (source.type === `collectionRef`) { |
| 967 | aliases.add(source.alias) |
| 968 | } |
| 969 | } |
| 970 | |
| 971 | // Collect JOIN aliases only for direct collection references |
| 972 | if (query.join) { |
| 973 | for (const joinClause of query.join) { |
| 974 | if (joinClause.from.type === `collectionRef`) { |
| 975 | aliases.add(joinClause.from.alias) |
| 976 | } |
| 977 | } |
| 978 | } |
| 979 | |
| 980 | return aliases |
| 981 | } |
| 982 | |
| 983 | /** |
| 984 | * Validates the structure of a query and its subqueries. |
no test coverage detected