mirror of https://github.com/AMT-Cheif/drift.git
Fix sqlparser crashes related to unknown tables
This commit is contained in:
parent
5c9c175c85
commit
c342b29b33
|
@ -44,7 +44,7 @@ class ReferenceScope {
|
|||
if (_availableColumns != null) return _availableColumns;
|
||||
if (inheritAvailableColumns) return parent.availableColumns;
|
||||
|
||||
return null;
|
||||
return const [];
|
||||
}
|
||||
|
||||
set availableColumns(List<Column> value) {
|
||||
|
|
|
@ -63,25 +63,28 @@ class ColumnResolver extends RecursiveVisitor<void, void> {
|
|||
visitChildren(e, arg);
|
||||
}
|
||||
|
||||
void _addIfResolved(AstNode node, TableReference ref) {
|
||||
final table = _resolveTableReference(ref);
|
||||
if (table != null) {
|
||||
node.scope.availableColumns = table.resolvedColumns;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void visitUpdateStatement(UpdateStatement e, void arg) {
|
||||
final table = _resolveTableReference(e.table);
|
||||
e.scope.availableColumns = table.resolvedColumns;
|
||||
_addIfResolved(e, e.table);
|
||||
visitChildren(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
void visitInsertStatement(InsertStatement e, void arg) {
|
||||
final table = _resolveTableReference(e.table);
|
||||
visitChildren(e, arg);
|
||||
e.scope.availableColumns = table.resolvedColumns;
|
||||
_addIfResolved(e, e.table);
|
||||
visitChildren(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
void visitDeleteStatement(DeleteStatement e, void arg) {
|
||||
final table = _resolveTableReference(e.from);
|
||||
e.scope.availableColumns = table.resolvedColumns;
|
||||
_addIfResolved(e, e.from);
|
||||
visitChildren(e, arg);
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ class ReferencedTablesVisitor extends RecursiveVisitor<void, void> {
|
|||
}
|
||||
|
||||
NamedResultSet /*?*/ _toResultSetOrNull(ResolvesToResultSet resultSet) {
|
||||
var resolved = resultSet.resultSet;
|
||||
var resolved = resultSet?.resultSet;
|
||||
|
||||
while (resolved != null && resolved is TableAlias) {
|
||||
resolved = (resolved as TableAlias).delegate;
|
||||
|
|
|
@ -57,4 +57,11 @@ void main() {
|
|||
expect(
|
||||
findWrittenTables(ctx.root), {TableWrite(logins, UpdateKind.insert)});
|
||||
});
|
||||
|
||||
test('ignores unresolved references', () {
|
||||
final ctx = engine.analyze('UPDATE xzy SET foo = bar');
|
||||
|
||||
expect(findWrittenTables(ctx.root), isEmpty);
|
||||
expect(ctx.errors, hasLength(3)); // unknown table, two unknown references
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue