mirror of https://github.com/AMT-Cheif/drift.git
Report invalid statements in parseMultiple
This commit is contained in:
parent
ca67b8c4ed
commit
cc83a58d89
|
@ -189,9 +189,14 @@ class Parser {
|
|||
final first = _peek;
|
||||
final statements = <Statement>[];
|
||||
while (!_isAtEnd) {
|
||||
final firstForStatement = _peek;
|
||||
final statement = _parseAsStatement(_statementWithoutSemicolon);
|
||||
|
||||
if (statement != null) {
|
||||
statements.add(statement);
|
||||
} else {
|
||||
statements
|
||||
.add(InvalidStatement()..setSpan(firstForStatement, _previous));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -143,4 +143,35 @@ void main() {
|
|||
),
|
||||
);
|
||||
});
|
||||
|
||||
test('parseMultiple reports spans for invalid statements', () {
|
||||
const sql = '''
|
||||
UPDATE users SET foo = bar;
|
||||
ALTER TABLE this syntax is not yet supported;
|
||||
SELECT * FROM users;
|
||||
''';
|
||||
|
||||
final engine = SqlEngine();
|
||||
final ast = engine.parseMultiple(sql).rootNode;
|
||||
enforceHasSpan(ast);
|
||||
|
||||
final statements = ast.childNodes.toList();
|
||||
expect(statements, hasLength(3));
|
||||
|
||||
expect(
|
||||
statements[0],
|
||||
isA<UpdateStatement>()
|
||||
.having((e) => e.span?.text, 'span', 'UPDATE users SET foo = bar;'),
|
||||
);
|
||||
expect(
|
||||
statements[1],
|
||||
isA<InvalidStatement>().having((e) => e.span?.text, 'span',
|
||||
'ALTER TABLE this syntax is not yet supported;'),
|
||||
);
|
||||
expect(
|
||||
statements[2],
|
||||
isA<SelectStatement>()
|
||||
.having((e) => e.span?.text, 'span', 'SELECT * FROM users;'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue