diff --git a/sqlparser/lib/src/analysis/steps/column_resolver.dart b/sqlparser/lib/src/analysis/steps/column_resolver.dart index 3e4af5a6..8dd86431 100644 --- a/sqlparser/lib/src/analysis/steps/column_resolver.dart +++ b/sqlparser/lib/src/analysis/steps/column_resolver.dart @@ -83,8 +83,12 @@ class ColumnResolver extends RecursiveVisitor { final column = ExpressionColumn(name: name, expression: resultColumn.expression); - availableColumns.add(column); usedColumns.add(column); + + // make this column available if there is no other with the same name + if (!availableColumns.any((c) => c.name == name)) { + availableColumns.add(column); + } } } diff --git a/sqlparser/test/analysis/reference_resolver_test.dart b/sqlparser/test/analysis/reference_resolver_test.dart index 7ac1b278..2b255686 100644 --- a/sqlparser/test/analysis/reference_resolver_test.dart +++ b/sqlparser/test/analysis/reference_resolver_test.dart @@ -58,4 +58,13 @@ void main() { ), ); }); + + test('resolves sub-queries', () { + final engine = SqlEngine()..registerTable(demoTable); + + final context = engine.analyze( + 'SELECT d.*, (SELECT id FROM demo WHERE id = d.id) FROM demo d;'); + + expect(context.errors, isEmpty); + }); }