<!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **Related issue:** Resolves #34635 # Details This PR switches us to a [fork of node-sql-parser](https://github.com/sgress454/node-sql-parser) that I'm maintaining to fast-track fixes to the SQLite implementation. The first published version of the fork is 5.4.0-fork.1 (forked from v5.4.0 of the upstream), and includes fixes for #34635 and #30109 that haven't made it to the upstream yet. Fixes in 5.4.0-fork.1: * https://github.com/sgress454/node-sql-parser/pull/7 * https://github.com/sgress454/node-sql-parser/pull/5 * https://github.com/sgress454/node-sql-parser/pull/4 # Checklist for submitter If some of the following don't apply, delete the relevant line. - [X] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files) for more information. ## Testing - [X] Added/updated automated tests - Granular tests are added [in the package itself](https://github.com/sgress454/node-sql-parser/blob/5.4.0-fork.1/test/sqlite.spec.js), and new regression tests for the Fleet issues are added in the Fleet. - [X] QA'd all new/changed functionality manually - Pasted the offending queries into the editor and saw no syntax errors
24 lines
681 B
TypeScript
24 lines
681 B
TypeScript
import { Parser } from "node-sql-parser";
|
|
|
|
export const EMPTY_QUERY_ERR = "Query text must be present";
|
|
export const INVALID_SYNTAX_ERR = "Syntax error. Please review before saving.";
|
|
|
|
const invalidQueryResponse = (message: string) => {
|
|
return { valid: false, error: message };
|
|
};
|
|
const validQueryResponse = { valid: true, error: null };
|
|
const parser = new Parser();
|
|
|
|
export const validateQuery = (queryText?: string) => {
|
|
if (!queryText?.trim()) {
|
|
return invalidQueryResponse(EMPTY_QUERY_ERR);
|
|
}
|
|
|
|
try {
|
|
parser.astify(queryText, { database: "sqlite" });
|
|
return validQueryResponse;
|
|
} catch (error) {
|
|
return invalidQueryResponse(INVALID_SYNTAX_ERR);
|
|
}
|
|
};
|