Skip to content

Commit ea9aa99

Browse files
committed
Add maximum statement count limit to SQL syntax checker
Signed-off-by: worksofliam <[email protected]>
1 parent 8fd09c6 commit ea9aa99

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/connection/syntaxChecker/checker.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export const VALIDATOR_NAME = `VALIDATE_STATEMENT`;
22
export const WRAPPER_NAME = `CHECKSTMTWRAPPED`;
33
export const VALID_STATEMENT_LENGTH = 32740;
4+
export const MAX_STATEMENT_COUNT = 2000;
45

56
export function getValidatorSource(schema: string, version: number) {
67
return /*sql*/`

src/language/providers/problemProvider.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { remoteAssistIsEnabled } from "./logic/available";
66
import Configuration from "../../configuration";
77
import { SQLStatementChecker, SqlSyntaxError } from "../../connection/syntaxChecker";
88
import { StatementGroup, StatementType } from "../sql/types";
9-
import { VALID_STATEMENT_LENGTH } from "../../connection/syntaxChecker/checker";
9+
import { MAX_STATEMENT_COUNT, VALID_STATEMENT_LENGTH } from "../../connection/syntaxChecker/checker";
1010
import { getSqlDocument, isSafeDocument } from "./logic/parse";
1111
import path from "path";
1212

@@ -125,8 +125,8 @@ async function validateSqlDocument(document: TextDocument, specificStatement?: n
125125
const sqlDocument = getSqlDocument(document);
126126

127127
if (sqlDocument) {
128-
129128
const allGroups = sqlDocument.getStatementGroups();
129+
130130
let statementRanges: StatementRange[] = [];
131131

132132
for (let i = 0; i < allGroups.length; i++) {
@@ -165,6 +165,13 @@ async function validateSqlDocument(document: TextDocument, specificStatement?: n
165165

166166
if (statementRanges.length > 0) {
167167
const validStatements = statementRanges.filter(r => r.validate);
168+
169+
if (validStatements.length > MAX_STATEMENT_COUNT) {
170+
const basename = document.fileName ? path.basename(document.fileName) : `Untitled`;
171+
window.showWarningMessage(`${basename}: the SQL syntax checker cannot run because the statement limit has been reached (${validStatements.length} of ${MAX_STATEMENT_COUNT} max).`);
172+
return;
173+
}
174+
168175
const invalidStatements = statementRanges.filter(r => !r.validate);
169176
const sqlStatementContents = validStatements.map(range => sqlDocument.content.substring(range.start, range.end));
170177

0 commit comments

Comments
 (0)