@askdb/core 1.0.0-beta.42 → 1.0.0-beta.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -8
- package/dist/ask.d.ts +101 -4
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +243 -25
- package/dist/ask.js.map +1 -1
- package/dist/enrichment/suggest.d.ts.map +1 -1
- package/dist/enrichment/suggest.js +3 -1
- package/dist/enrichment/suggest.js.map +1 -1
- package/dist/errors.d.ts +41 -5
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +9 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/retrieval/synthesize-ddl.d.ts +4 -0
- package/dist/retrieval/synthesize-ddl.d.ts.map +1 -1
- package/dist/retrieval/synthesize-ddl.js +5 -3
- package/dist/retrieval/synthesize-ddl.js.map +1 -1
- package/dist/schema/normalize.d.ts +10 -0
- package/dist/schema/normalize.d.ts.map +1 -1
- package/dist/schema/normalize.js.map +1 -1
- package/dist/schema/v2/format.d.ts +7 -0
- package/dist/schema/v2/format.d.ts.map +1 -1
- package/dist/schema/v2/format.js +20 -7
- package/dist/schema/v2/format.js.map +1 -1
- package/dist/schema/v2/index.d.ts +3 -1
- package/dist/schema/v2/index.d.ts.map +1 -1
- package/dist/schema/v2/index.js +1 -0
- package/dist/schema/v2/index.js.map +1 -1
- package/dist/schema/v2/loader.d.ts +32 -1
- package/dist/schema/v2/loader.d.ts.map +1 -1
- package/dist/schema/v2/loader.js +173 -49
- package/dist/schema/v2/loader.js.map +1 -1
- package/dist/schema/v2/mentions.d.ts +31 -0
- package/dist/schema/v2/mentions.d.ts.map +1 -0
- package/dist/schema/v2/mentions.js +47 -0
- package/dist/schema/v2/mentions.js.map +1 -0
- package/dist/schema/v2/normalized.d.ts +38 -0
- package/dist/schema/v2/normalized.d.ts.map +1 -1
- package/dist/schema/v2/parser.d.ts +9 -0
- package/dist/schema/v2/parser.d.ts.map +1 -1
- package/dist/schema/v2/parser.js +18 -2
- package/dist/schema/v2/parser.js.map +1 -1
- package/dist/schema/v2/tenant-policy-loader.d.ts.map +1 -1
- package/dist/schema/v2/tenant-policy-loader.js +7 -3
- package/dist/schema/v2/tenant-policy-loader.js.map +1 -1
- package/dist/schema/v2/tenant-policy.d.ts +28 -21
- package/dist/schema/v2/tenant-policy.d.ts.map +1 -1
- package/dist/schema/v2/tenant-policy.js +67 -11
- package/dist/schema/v2/tenant-policy.js.map +1 -1
- package/dist/sql/bind.d.ts +17 -15
- package/dist/sql/bind.d.ts.map +1 -1
- package/dist/sql/bind.js +38 -173
- package/dist/sql/bind.js.map +1 -1
- package/dist/sql/dialect-spec.d.ts +48 -3
- package/dist/sql/dialect-spec.d.ts.map +1 -1
- package/dist/sql/dialect-spec.js +89 -3
- package/dist/sql/dialect-spec.js.map +1 -1
- package/dist/sql/generate.d.ts +14 -0
- package/dist/sql/generate.d.ts.map +1 -1
- package/dist/sql/generate.js +31 -17
- package/dist/sql/generate.js.map +1 -1
- package/dist/sql/index.d.ts +2 -1
- package/dist/sql/index.d.ts.map +1 -1
- package/dist/sql/index.js +2 -1
- package/dist/sql/index.js.map +1 -1
- package/dist/sql/lexer.d.ts +114 -0
- package/dist/sql/lexer.d.ts.map +1 -0
- package/dist/sql/lexer.js +397 -0
- package/dist/sql/lexer.js.map +1 -0
- package/dist/sql/prompt-identifiers.d.ts +20 -0
- package/dist/sql/prompt-identifiers.d.ts.map +1 -0
- package/dist/sql/prompt-identifiers.js +64 -0
- package/dist/sql/prompt-identifiers.js.map +1 -0
- package/dist/sql/prompt.d.ts +7 -1
- package/dist/sql/prompt.d.ts.map +1 -1
- package/dist/sql/prompt.js +22 -2
- package/dist/sql/prompt.js.map +1 -1
- package/dist/sql/reserved-words.d.ts +15 -0
- package/dist/sql/reserved-words.d.ts.map +1 -0
- package/dist/sql/reserved-words.js +102 -0
- package/dist/sql/reserved-words.js.map +1 -0
- package/dist/sql/sensitive-guardrail.d.ts +18 -3
- package/dist/sql/sensitive-guardrail.d.ts.map +1 -1
- package/dist/sql/sensitive-guardrail.js +446 -157
- package/dist/sql/sensitive-guardrail.js.map +1 -1
- package/dist/sql/tenant-guardrail.d.ts +70 -8
- package/dist/sql/tenant-guardrail.d.ts.map +1 -1
- package/dist/sql/tenant-guardrail.js +799 -52
- package/dist/sql/tenant-guardrail.js.map +1 -1
- package/dist/sql/tenant-hierarchy.d.ts +19 -0
- package/dist/sql/tenant-hierarchy.d.ts.map +1 -0
- package/dist/sql/tenant-hierarchy.js +53 -0
- package/dist/sql/tenant-hierarchy.js.map +1 -0
- package/dist/sql/tenant-placeholders.d.ts +47 -19
- package/dist/sql/tenant-placeholders.d.ts.map +1 -1
- package/dist/sql/tenant-placeholders.js +229 -58
- package/dist/sql/tenant-placeholders.js.map +1 -1
- package/dist/sql/tenant-prompt.d.ts +4 -0
- package/dist/sql/tenant-prompt.d.ts.map +1 -1
- package/dist/sql/tenant-prompt.js +79 -11
- package/dist/sql/tenant-prompt.js.map +1 -1
- package/dist/sql/tenant-scope-validate.d.ts +3 -1
- package/dist/sql/tenant-scope-validate.d.ts.map +1 -1
- package/dist/sql/tenant-scope-validate.js +5 -2
- package/dist/sql/tenant-scope-validate.js.map +1 -1
- package/dist/sql/validate.d.ts +34 -4
- package/dist/sql/validate.d.ts.map +1 -1
- package/dist/sql/validate.js +138 -37
- package/dist/sql/validate.js.map +1 -1
- package/package.json +11 -7
- package/dist/exec/postgres.d.ts +0 -6
- package/dist/exec/postgres.d.ts.map +0 -1
- package/dist/exec/postgres.js +0 -30
- package/dist/exec/postgres.js.map +0 -1
- package/dist/modes/post-execute-log.d.ts +0 -9
- package/dist/modes/post-execute-log.d.ts.map +0 -1
- package/dist/modes/post-execute-log.js +0 -26
- package/dist/modes/post-execute-log.js.map +0 -1
package/dist/sql/generate.js
CHANGED
|
@@ -5,14 +5,31 @@ import { extractSqlFromModelText, extractUnboundSqlFromModelText } from "./extra
|
|
|
5
5
|
import { crossValidateManifestAgainstSql, parseParameterManifest, } from "./parameter-manifest.js";
|
|
6
6
|
import { buildNlToSqlSystemPrompt, buildNlToSqlUserPrompt } from "./prompt.js";
|
|
7
7
|
import { assertNlToSqlInputs, nlToSqlAmbiguityNotes } from "./schema-question-precheck.js";
|
|
8
|
-
import {
|
|
8
|
+
import { enforceTenantGuardrails } from "./tenant-guardrail.js";
|
|
9
9
|
import { buildSelectGuardrailExplanation, validateSelectSql, } from "./validate.js";
|
|
10
10
|
/**
|
|
11
11
|
* Dialect-parameterized NL→SQL generator. Validates inputs, builds the user/system
|
|
12
12
|
* prompt with the dialect's syntax brief, calls the model, extracts the fenced SQL,
|
|
13
13
|
* and runs the shared read-only validator (plus any dialect-specific `extraValidate`).
|
|
14
|
+
*
|
|
15
|
+
* When `deps.tenantPolicy` and `deps.tenantScope` are supplied, the tenant guardrail
|
|
16
|
+
* runs on the returned `sql` (and on `unboundNamedSql` when that is returned too);
|
|
17
|
+
* `strict` policies throw `TenantGuardrailError`. Tenant placeholders are left in
|
|
18
|
+
* place — `ask()` substitutes them and re-checks the final SQL.
|
|
14
19
|
*/
|
|
15
20
|
export async function generateSelectSql(dialect, question, schema, model, deps = {}) {
|
|
21
|
+
return runGenerateSelectSql(dialect, question, schema, model, deps, true);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Internal entry used by `ask()`: identical to {@link generateSelectSql} but skips the
|
|
25
|
+
* tenant guardrail, because `ask()` runs it once on the final SQL — after tenant
|
|
26
|
+
* placeholder substitution and the unbound/bound consistency check. Not exported
|
|
27
|
+
* from the package index.
|
|
28
|
+
*/
|
|
29
|
+
export async function generateSelectSqlWithoutTenantGuardrail(dialect, question, schema, model, deps = {}) {
|
|
30
|
+
return runGenerateSelectSql(dialect, question, schema, model, deps, false);
|
|
31
|
+
}
|
|
32
|
+
async function runGenerateSelectSql(dialect, question, schema, model, deps, runTenantGuardrail) {
|
|
16
33
|
assertNlToSqlInputs(schema, question);
|
|
17
34
|
const ambiguityNotes = nlToSqlAmbiguityNotes(question, schema);
|
|
18
35
|
const generateText = deps.generateText ?? defaultGenerateText;
|
|
@@ -32,7 +49,12 @@ export async function generateSelectSql(dialect, question, schema, model, deps =
|
|
|
32
49
|
try {
|
|
33
50
|
const result = await generateText({
|
|
34
51
|
model,
|
|
35
|
-
instructions:
|
|
52
|
+
// `system` (not `instructions`) on purpose: `ai` is a peer dependency
|
|
53
|
+
// (`^6 || ^7`). AI SDK 6 only reads `system`; AI SDK 7 renamed it to
|
|
54
|
+
// `instructions` but still honors `system` as a deprecated alias
|
|
55
|
+
// (`instructions = system` in its prompt standardization). Passing
|
|
56
|
+
// `instructions` would be silently dropped on AI SDK 6.
|
|
57
|
+
system: buildNlToSqlSystemPrompt(dialect),
|
|
36
58
|
prompt: buildNlToSqlUserPrompt(dialect, question, schema, ambiguityNotes, logger, nlToSqlSchemaOptions, deps.prebuiltDdl, deps.tenantPolicy, deps.tenantScope, parameterize || undefined),
|
|
37
59
|
temperature: 0,
|
|
38
60
|
// Cast: AskDB's public `providerOptions` type is a plain opaque bag
|
|
@@ -41,6 +63,7 @@ export async function generateSelectSql(dialect, question, schema, model, deps =
|
|
|
41
63
|
...(deps.providerOptions
|
|
42
64
|
? { providerOptions: deps.providerOptions }
|
|
43
65
|
: {}),
|
|
66
|
+
...(deps.abortSignal ? { abortSignal: deps.abortSignal } : {}),
|
|
44
67
|
});
|
|
45
68
|
text = result.text;
|
|
46
69
|
const u = result.usage;
|
|
@@ -69,22 +92,13 @@ export async function generateSelectSql(dialect, question, schema, model, deps =
|
|
|
69
92
|
unboundNamedSql = extras.unboundNamedSql;
|
|
70
93
|
parameterManifest = extras.parameterManifest;
|
|
71
94
|
}
|
|
72
|
-
// Tenant guardrail
|
|
73
|
-
//
|
|
95
|
+
// Tenant guardrail: check every SQL form this function returns — the bound
|
|
96
|
+
// `sql` callers execute, plus the unbound form when it is returned too. Never
|
|
97
|
+
// check only the unbound form: both blocks come from the model and can
|
|
98
|
+
// disagree (e.g. a scoped unbound block next to an unscoped bound one).
|
|
74
99
|
let tenantGuardrail;
|
|
75
|
-
if (deps.tenantPolicy && deps.tenantScope) {
|
|
76
|
-
|
|
77
|
-
tenantGuardrail = validateTenantGuardrails(guardrailSql, deps.tenantPolicy, deps.tenantScope);
|
|
78
|
-
if (tenantGuardrail.passed) {
|
|
79
|
-
logger?.info({ event: AskDbLogEvent.TenantGuardrailPassed }, "tenant guardrail validation passed");
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
logger?.info({
|
|
83
|
-
event: AskDbLogEvent.TenantGuardrailFailed,
|
|
84
|
-
warningCount: tenantGuardrail.warnings.length,
|
|
85
|
-
enforcement: deps.tenantPolicy.enforcement,
|
|
86
|
-
}, "tenant guardrail validation found issues");
|
|
87
|
-
}
|
|
100
|
+
if (runTenantGuardrail && deps.tenantPolicy && deps.tenantScope) {
|
|
101
|
+
tenantGuardrail = enforceTenantGuardrails([sql, unboundNamedSql], deps.tenantPolicy, deps.tenantScope, logger, undefined, dialect);
|
|
88
102
|
}
|
|
89
103
|
const explain = deps.explain ? buildSelectGuardrailExplanation(sql) : undefined;
|
|
90
104
|
logger?.info({
|
package/dist/sql/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/sql/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,IAAI,CAAC;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/sql/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/sql/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { parseParameterManifest, type ParameterManifest, type ManifestParameter,
|
|
|
4
4
|
export { generateSelectSql, type GenerateSelectSqlResult, type GenerateSqlDeps, } from "./generate.js";
|
|
5
5
|
export { validateSelectSql, buildSelectGuardrailExplanation, type SelectGuardrailExplain, } from "./validate.js";
|
|
6
6
|
export { buildNlToSqlUserPrompt, buildNlToSqlSystemPrompt, } from "./prompt.js";
|
|
7
|
+
export { promptIdentifierQuoter } from "./prompt-identifiers.js";
|
|
7
8
|
export { assertNlToSqlInputs, nlToSqlAmbiguityNotes, } from "./schema-question-precheck.js";
|
|
8
|
-
export { type DialectId, type DialectSpec, type BuiltInDialectId, POSTGRES_DIALECT, COCKROACHDB_DIALECT, MYSQL_DIALECT, MARIADB_DIALECT, SQLITE_DIALECT, SQLSERVER_DIALECT, BUILT_IN_DIALECTS, SUPPORTED_DIALECT_IDS, isBuiltInDialectId, getDialectSpec, } from "./dialect-spec.js";
|
|
9
|
+
export { type DialectId, type DialectSpec, type BuiltInDialectId, POSTGRES_DIALECT, COCKROACHDB_DIALECT, MYSQL_DIALECT, MARIADB_DIALECT, SQLITE_DIALECT, SQLSERVER_DIALECT, SINGLE_NAMESPACE_LABEL, BUILT_IN_DIALECTS, SUPPORTED_DIALECT_IDS, isBuiltInDialectId, getDialectSpec, } from "./dialect-spec.js";
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/sql/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,+BAA+B,EAC/B,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,GACf,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,+BAA+B,EAC/B,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,GACf,MAAM,mBAAmB,CAAC"}
|
package/dist/sql/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export { parseParameterManifest, } from "./parameter-manifest.js";
|
|
|
4
4
|
export { generateSelectSql, } from "./generate.js";
|
|
5
5
|
export { validateSelectSql, buildSelectGuardrailExplanation, } from "./validate.js";
|
|
6
6
|
export { buildNlToSqlUserPrompt, buildNlToSqlSystemPrompt, } from "./prompt.js";
|
|
7
|
+
export { promptIdentifierQuoter } from "./prompt-identifiers.js";
|
|
7
8
|
export { assertNlToSqlInputs, nlToSqlAmbiguityNotes, } from "./schema-question-precheck.js";
|
|
8
|
-
export { POSTGRES_DIALECT, COCKROACHDB_DIALECT, MYSQL_DIALECT, MARIADB_DIALECT, SQLITE_DIALECT, SQLSERVER_DIALECT, BUILT_IN_DIALECTS, SUPPORTED_DIALECT_IDS, isBuiltInDialectId, getDialectSpec, } from "./dialect-spec.js";
|
|
9
|
+
export { POSTGRES_DIALECT, COCKROACHDB_DIALECT, MYSQL_DIALECT, MARIADB_DIALECT, SQLITE_DIALECT, SQLSERVER_DIALECT, SINGLE_NAMESPACE_LABEL, BUILT_IN_DIALECTS, SUPPORTED_DIALECT_IDS, isBuiltInDialectId, getDialectSpec, } from "./dialect-spec.js";
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
package/dist/sql/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAOjB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,sBAAsB,GAGvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,GAGlB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,+BAA+B,GAEhC,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAIL,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,GACf,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAOjB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,sBAAsB,GAGvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,GAGlB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,+BAA+B,GAEhC,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAIL,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,GACf,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dialect-aware SQL lexer shared by the read-only validator, the sensitive-identifier
|
|
3
|
+
* guardrail, and the placeholder scanner.
|
|
4
|
+
*
|
|
5
|
+
* It only splits SQL into tokens — it does not parse. Its job is to agree with the
|
|
6
|
+
* target engine about where strings, quoted identifiers, and comments begin and end,
|
|
7
|
+
* because every downstream check ("is there a second statement?", "is `DELETE` a
|
|
8
|
+
* keyword here?", "is `ssn` a column reference?") depends on that boundary. Rules per
|
|
9
|
+
* engine:
|
|
10
|
+
*
|
|
11
|
+
* | Construct | Postgres | MySQL/MariaDB | SQL Server | SQLite |
|
|
12
|
+
* |---------------------------|----------|------------------------|------------|--------|
|
|
13
|
+
* | `'…'` backslash escapes | no | yes (`backslashEscapes`) | no | no |
|
|
14
|
+
* | `E'…'` backslash escapes | yes | — | — | — |
|
|
15
|
+
* | `$tag$…$tag$` | yes | — | — | — |
|
|
16
|
+
* | `"…"` | ident | string | ident | ident |
|
|
17
|
+
* | `` `…` `` | — | ident | — | ident |
|
|
18
|
+
* | `[…]` | — | — | ident (`]]`) | ident |
|
|
19
|
+
* | `#` line comment | — | yes | — | — |
|
|
20
|
+
* | `--` line comment | yes | only before whitespace | yes | yes |
|
|
21
|
+
* | nested `/* … *\/` | yes | no (`/*! … *\/` runs) | yes | no |
|
|
22
|
+
*
|
|
23
|
+
* The lexer never throws: a string, quoted identifier, or comment that runs off the end
|
|
24
|
+
* of the input is returned with `unterminated: true` so callers can fail closed.
|
|
25
|
+
*/
|
|
26
|
+
import type { DialectSpec } from "./dialect-spec.js";
|
|
27
|
+
export type SqlLexerProfileId = "postgres" | "mysql" | "sqlserver" | "sqlite" | "generic";
|
|
28
|
+
export type SqlLexerProfile = {
|
|
29
|
+
id: SqlLexerProfileId;
|
|
30
|
+
/** `'…'` (and MySQL `"…"`) treat backslash as an escape character. */
|
|
31
|
+
backslashEscapes: boolean;
|
|
32
|
+
/** Whether `"…"` is a quoted identifier (ANSI) or a string literal (MySQL default mode). */
|
|
33
|
+
doubleQuote: "identifier" | "string";
|
|
34
|
+
backtickIdentifiers: boolean;
|
|
35
|
+
/** `[…]` quoted identifiers. `"doubled"` accepts `]]` as an escaped `]` (SQL Server). */
|
|
36
|
+
bracketIdentifiers: false | "simple" | "doubled";
|
|
37
|
+
/** Postgres `$tag$ … $tag$` strings. */
|
|
38
|
+
dollarQuotes: boolean;
|
|
39
|
+
/** Postgres `E'…'` strings with backslash escapes. */
|
|
40
|
+
escapeStrings: boolean;
|
|
41
|
+
/** MySQL `#` line comments. */
|
|
42
|
+
hashComments: boolean;
|
|
43
|
+
/** MySQL: `--` starts a comment only when followed by whitespace, a control char, or EOF. */
|
|
44
|
+
dashCommentNeedsSpace: boolean;
|
|
45
|
+
nestedBlockComments: boolean;
|
|
46
|
+
/** MySQL/MariaDB `/*! … *\/` and `/*M! … *\/`: the body is executed, so it is lexed as code. */
|
|
47
|
+
executableComments: boolean;
|
|
48
|
+
/** `@name` / `@@name` variables and parameters. Off for Postgres, where `@` is an operator. */
|
|
49
|
+
atVariables: boolean;
|
|
50
|
+
/** SQL Server `#temp` / `##temp` table names. */
|
|
51
|
+
hashIdentifiers: boolean;
|
|
52
|
+
};
|
|
53
|
+
export declare const POSTGRES_LEXER: SqlLexerProfile;
|
|
54
|
+
export declare const MYSQL_LEXER: SqlLexerProfile;
|
|
55
|
+
export declare const SQLSERVER_LEXER: SqlLexerProfile;
|
|
56
|
+
export declare const SQLITE_LEXER: SqlLexerProfile;
|
|
57
|
+
/**
|
|
58
|
+
* Dialect-agnostic profile for callers that have no dialect (the tenant placeholder
|
|
59
|
+
* path, the sensitive guardrail when no dialect is supplied). Recognizes the union of
|
|
60
|
+
* quoting forms — `'…'`, `E'…'`, `$tag$…$tag$`, `"…"`, `` `…` ``, `[…]` — with the
|
|
61
|
+
* escape rules the owning engine uses, and standard `--` / `/* *\/` comments.
|
|
62
|
+
*/
|
|
63
|
+
export declare const GENERIC_LEXER: SqlLexerProfile;
|
|
64
|
+
/** Every engine-specific profile. Used when the dialect is unknown and each reading must be safe. */
|
|
65
|
+
export declare const ENGINE_LEXER_PROFILES: readonly SqlLexerProfile[];
|
|
66
|
+
/**
|
|
67
|
+
* The lexer profile for a dialect, or `undefined` when the id is not a built-in engine
|
|
68
|
+
* family (callers should then check every profile in {@link ENGINE_LEXER_PROFILES}).
|
|
69
|
+
*
|
|
70
|
+
* `backslashEscapes` on the spec is honored: MySQL with `NO_BACKSLASH_ESCAPES` sets it
|
|
71
|
+
* to `false`; Postgres with `standard_conforming_strings = off` sets it to `true`.
|
|
72
|
+
* An unset value on a MySQL-family spec means the server default (escapes on).
|
|
73
|
+
*/
|
|
74
|
+
export declare function lexerProfileFor(dialect: Pick<DialectSpec, "id" | "backslashEscapes">): SqlLexerProfile | undefined;
|
|
75
|
+
export type SqlTokenKind =
|
|
76
|
+
/** Unquoted identifier or keyword. */
|
|
77
|
+
"word" | "quoted_identifier" | "string" | "number"
|
|
78
|
+
/** `$1`, `:name`, `@name`, `@@name`. */
|
|
79
|
+
| "parameter"
|
|
80
|
+
/** Any other single character, plus `::`. Includes `(`, `)`, `,`, `.`, `;`. */
|
|
81
|
+
| "punct" | "comment";
|
|
82
|
+
export type SqlToken = {
|
|
83
|
+
kind: SqlTokenKind;
|
|
84
|
+
/** Exact source text of the token. */
|
|
85
|
+
text: string;
|
|
86
|
+
/**
|
|
87
|
+
* `word`: the text as written. `quoted_identifier`: the unescaped name.
|
|
88
|
+
* Everything else: same as `text`.
|
|
89
|
+
*/
|
|
90
|
+
value: string;
|
|
91
|
+
/** Lower-cased `value`, for case-insensitive keyword and name matching. */
|
|
92
|
+
lower: string;
|
|
93
|
+
start: number;
|
|
94
|
+
end: number;
|
|
95
|
+
/** Opening delimiter for strings and quoted identifiers (`'`, `"`, `` ` ``, `[`, `$tag$`). */
|
|
96
|
+
quote?: string;
|
|
97
|
+
/**
|
|
98
|
+
* The closing delimiter was never found; the token runs to the end of the input. On a
|
|
99
|
+
* MySQL `/*!` opener it means the matching `*\/` never came (the body is still lexed
|
|
100
|
+
* as code after it).
|
|
101
|
+
*/
|
|
102
|
+
unterminated?: true;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Whether the `--` at `i` starts a line comment. It always does, except on MySQL/MariaDB
|
|
106
|
+
* (`needsSpace`), where it must be followed by whitespace, a control character, or the end
|
|
107
|
+
* of the statement: there `--1` is two minus signs and a number.
|
|
108
|
+
*/
|
|
109
|
+
export declare function startsDashComment(sql: string, i: number, needsSpace: boolean): boolean;
|
|
110
|
+
/** Split `sql` into tokens under `profile`. Whitespace is dropped; comments are kept. */
|
|
111
|
+
export declare function lexSql(sql: string, profile: SqlLexerProfile): SqlToken[];
|
|
112
|
+
/** True when any token ran off the end of the input. */
|
|
113
|
+
export declare function hasUnterminatedToken(tokens: readonly SqlToken[]): boolean;
|
|
114
|
+
//# sourceMappingURL=lexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/sql/lexer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1F,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,iBAAiB,CAAC;IACtB,sEAAsE;IACtE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4FAA4F;IAC5F,WAAW,EAAE,YAAY,GAAG,QAAQ,CAAC;IACrC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yFAAyF;IACzF,kBAAkB,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACjD,wCAAwC;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,aAAa,EAAE,OAAO,CAAC;IACvB,+BAA+B;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,6FAA6F;IAC7F,qBAAqB,EAAE,OAAO,CAAC;IAC/B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gGAAgG;IAChG,kBAAkB,EAAE,OAAO,CAAC;IAC5B,+FAA+F;IAC/F,WAAW,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAc5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,eAczB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAc7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAc1B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,eAc3B,CAAC;AAEF,qGAAqG;AACrG,eAAO,MAAM,qBAAqB,EAAE,SAAS,eAAe,EAK3D,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,kBAAkB,CAAC,GACpD,eAAe,GAAG,SAAS,CAmB7B;AAED,MAAM,MAAM,YAAY;AACtB,sCAAsC;AACpC,MAAM,GACN,mBAAmB,GACnB,QAAQ,GACR,QAAQ;AACV,wCAAwC;GACtC,WAAW;AACb,+EAA+E;GAC7E,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,YAAY,CAAC;IACnB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB,CAAC;AAQF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAItF;AAED,yFAAyF;AACzF,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,QAAQ,EAAE,CAsQxE;AAED,wDAAwD;AACxD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,OAAO,CAEzE"}
|