Version check for new joins

This commit is contained in:
Simon Binder 2022-05-26 23:29:58 +02:00
parent 098fcc2d1b
commit a6b7bf9aaa
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
2 changed files with 28 additions and 0 deletions

View File

@ -276,6 +276,21 @@ class LintingVisitor extends RecursiveVisitor<void, void> {
visitChildren(e, arg);
}
@override
void visitJoinOperator(JoinOperator e, void arg) {
if ((e.operator == JoinOperatorKind.right ||
e.operator == JoinOperatorKind.full) &&
options.version < SqliteVersion.v3_39) {
context.reportError(
AnalysisError(
type: AnalysisErrorType.notSupportedInDesiredVersion,
message: '`RIGHT` and `FULL` joins require sqlite 3.39.',
relevantNode: e,
),
);
}
}
@override
void visitRaiseExpression(RaiseExpression e, void arg) {
if (_isTopLevelStatement) {

View File

@ -118,4 +118,17 @@ void main() {
currentEngine.analyze(sql).expectNoError();
currentEngine.analyze(notSql).expectNoError();
});
test('warns about right and full joins', () {
const right = 'SELECT * FROM demo RIGHT JOIN demo';
const full = 'SELECT * FROM demo NATURAL FULL JOIN demo';
minimumEngine.analyze(right).expectError('RIGHT JOIN',
type: AnalysisErrorType.notSupportedInDesiredVersion);
minimumEngine.analyze(full).expectError('NATURAL FULL JOIN',
type: AnalysisErrorType.notSupportedInDesiredVersion);
currentEngine.analyze(right).expectNoError();
currentEngine.analyze(full).expectNoError();
});
}