Skip to content

Commit d5fd921

Browse files
committed
Fixes to SQL runner
Signed-off-by: worksofliam <[email protected]>
1 parent d26d39f commit d5fd921

File tree

3 files changed

+64
-3
lines changed

3 files changed

+64
-3
lines changed

.vscode/launch.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"type": "npm",
4040
"script": "compile:tests"
4141
},
42-
"args": [],
42+
"args": ["sqlRunner1"],
4343
"env": {
4444
"INCLUDE_DIR": "${workspaceFolder}"
4545
}

language/linter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ export default class Linter {
733733

734734
if (rules.SQLRunner) {
735735
// For running SQL statements
736-
const validStatements = [`declare`, `with`, `select`].includes(statement[2].value.toLowerCase());
736+
const validStatements = [`declare`, `with`, `select`, `merge`, `update`].includes(statement.find((t, i) => i >= 2 && t.type !== `newline`)?.value.toLowerCase());
737737
if (validStatements) {
738738
errors.push({
739739
type: `SQLRunner`,

tests/suite/linter.js

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3493,4 +3493,65 @@ exports.range_1 = async () => {
34933493
{ position: 235, end: 236 },
34943494
{ position: 241, end: 242 }
34953495
]);
3496-
}
3496+
}
3497+
3498+
exports.sqlRunner1_1 = async () => {
3499+
const lines = [
3500+
`**free`,
3501+
`EXEC SQL`,
3502+
` DECLARE CUSCUR CURSOR FOR`,
3503+
` SELECT CUSNO FROM CUSTOMER;`,
3504+
``,
3505+
`EXEC SQL`,
3506+
` OPEN CUSCUR;`,
3507+
``,
3508+
`EXEC SQL`,
3509+
` FETCH NEXT FROM CUSCUR INTO :cust.CUSNO;`,
3510+
``,
3511+
`EXEC SQL`,
3512+
` CLOSE CUSCUR;`,
3513+
``,
3514+
].join(`\n`);
3515+
3516+
const cache = await parser.getDocs(uri, lines, {ignoreCache: true, withIncludes: true});
3517+
const { errors } = Linter.getErrors({ uri, content: lines }, {
3518+
SQLRunner: true
3519+
}, cache);
3520+
3521+
assert.strictEqual(errors.length, 1);
3522+
assert.deepStrictEqual(errors[0], {
3523+
type: 'SQLRunner',
3524+
offset: { position: 7, end: 74 },
3525+
newValue: 'EXEC SQL\n DECLARE CUSCUR CURSOR FOR\n SELECT CUSNO FROM CUSTOMER'
3526+
});
3527+
};
3528+
3529+
exports.sqlRunner1_b = async () => {
3530+
const lines = [
3531+
`**free`,
3532+
`EXEC SQL DECLARE CUSCUR CURSOR FOR`,
3533+
` SELECT CUSNO FROM CUSTOMER;`,
3534+
``,
3535+
`EXEC SQL`,
3536+
` OPEN CUSCUR;`,
3537+
``,
3538+
`EXEC SQL`,
3539+
` FETCH NEXT FROM CUSCUR INTO :cust.CUSNO;`,
3540+
``,
3541+
`EXEC SQL`,
3542+
` CLOSE CUSCUR;`,
3543+
``,
3544+
].join(`\n`);
3545+
3546+
const cache = await parser.getDocs(uri, lines, {ignoreCache: true, withIncludes: true});
3547+
const { errors } = Linter.getErrors({ uri, content: lines }, {
3548+
SQLRunner: true
3549+
}, cache);
3550+
3551+
assert.strictEqual(errors.length, 1);
3552+
assert.deepStrictEqual(errors[0], {
3553+
type: 'SQLRunner',
3554+
offset: { position: 7, end: 72 },
3555+
newValue: 'EXEC SQL DECLARE CUSCUR CURSOR FOR\n SELECT CUSNO FROM CUSTOMER'
3556+
});
3557+
};

0 commit comments

Comments
 (0)