Files
fleet/frontend/components/forms/validators/validate_query/index.ts
T
Scott Gress efe266b026 Use forked node-sql-parser, fix CTE issues in parsed SQL (#38744)
<!-- 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
2026-01-28 16:08:33 -06:00

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);
}
};