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 first = _peek;
|
||||||
final statements = <Statement>[];
|
final statements = <Statement>[];
|
||||||
while (!_isAtEnd) {
|
while (!_isAtEnd) {
|
||||||
|
final firstForStatement = _peek;
|
||||||
final statement = _parseAsStatement(_statementWithoutSemicolon);
|
final statement = _parseAsStatement(_statementWithoutSemicolon);
|
||||||
|
|
||||||
if (statement != null) {
|
if (statement != null) {
|
||||||
statements.add(statement);
|
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