@askdb/core 1.0.0-beta.48 → 1.0.0-beta.50
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 +2 -2
- package/dist/ask.d.ts +20 -16
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +70 -107
- package/dist/ask.js.map +1 -1
- package/dist/errors.d.ts +51 -9
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +4 -1
- package/dist/errors.js.map +1 -1
- package/dist/retrieval/synthesize-ddl.d.ts +2 -0
- package/dist/retrieval/synthesize-ddl.d.ts.map +1 -1
- package/dist/retrieval/synthesize-ddl.js +4 -3
- package/dist/retrieval/synthesize-ddl.js.map +1 -1
- package/dist/schema/v2/loader.js +21 -0
- package/dist/schema/v2/loader.js.map +1 -1
- package/dist/schema/v2/tracked.d.ts +8 -0
- package/dist/schema/v2/tracked.d.ts.map +1 -0
- package/dist/schema/v2/tracked.js +9 -0
- package/dist/schema/v2/tracked.js.map +1 -0
- package/dist/sql/bind.d.ts +12 -1
- package/dist/sql/bind.d.ts.map +1 -1
- package/dist/sql/bind.js +30 -0
- package/dist/sql/bind.js.map +1 -1
- package/dist/sql/checked-statement.d.ts +83 -0
- package/dist/sql/checked-statement.d.ts.map +1 -0
- package/dist/sql/checked-statement.js +204 -0
- package/dist/sql/checked-statement.js.map +1 -0
- package/dist/sql/dialect-spec.d.ts.map +1 -1
- package/dist/sql/dialect-spec.js +3 -0
- package/dist/sql/dialect-spec.js.map +1 -1
- package/dist/sql/failure-reason.d.ts +15 -0
- package/dist/sql/failure-reason.d.ts.map +1 -0
- package/dist/sql/failure-reason.js +78 -0
- package/dist/sql/failure-reason.js.map +1 -0
- package/dist/sql/generate.d.ts +5 -0
- package/dist/sql/generate.d.ts.map +1 -1
- package/dist/sql/generate.js +4 -3
- package/dist/sql/generate.js.map +1 -1
- package/dist/sql/lexer.d.ts +38 -0
- package/dist/sql/lexer.d.ts.map +1 -1
- package/dist/sql/lexer.js +61 -18
- package/dist/sql/lexer.js.map +1 -1
- package/dist/sql/parameter-manifest.d.ts.map +1 -1
- package/dist/sql/parameter-manifest.js +3 -3
- package/dist/sql/parameter-manifest.js.map +1 -1
- package/dist/sql/prompt.d.ts +7 -1
- package/dist/sql/prompt.d.ts.map +1 -1
- package/dist/sql/prompt.js +16 -2
- package/dist/sql/prompt.js.map +1 -1
- package/dist/sql/rebind.d.ts +8 -28
- package/dist/sql/rebind.d.ts.map +1 -1
- package/dist/sql/rebind.js +26 -140
- package/dist/sql/rebind.js.map +1 -1
- package/dist/sql/schema-question-precheck.d.ts +5 -0
- package/dist/sql/schema-question-precheck.d.ts.map +1 -1
- package/dist/sql/schema-question-precheck.js +12 -6
- package/dist/sql/schema-question-precheck.js.map +1 -1
- package/dist/sql/sensitive-guardrail.d.ts.map +1 -1
- package/dist/sql/sensitive-guardrail.js +33 -10
- package/dist/sql/sensitive-guardrail.js.map +1 -1
- package/dist/sql/tenant-guardrail.d.ts.map +1 -1
- package/dist/sql/tenant-guardrail.js +60 -38
- package/dist/sql/tenant-guardrail.js.map +1 -1
- package/dist/sql/tenant-prompt.d.ts +13 -1
- package/dist/sql/tenant-prompt.d.ts.map +1 -1
- package/dist/sql/tenant-prompt.js +76 -19
- package/dist/sql/tenant-prompt.js.map +1 -1
- package/dist/sql/validate.d.ts +7 -5
- package/dist/sql/validate.d.ts.map +1 -1
- package/dist/sql/validate.js +35 -9
- package/dist/sql/validate.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { QueryParameterError } from "../errors.js";
|
|
2
|
+
import { isTenantPlaceholderName, markerStyleForDialect, renderPreparedQuery, scanPlaceholders, scanTenantPlaceholders, } from "./bind.js";
|
|
3
|
+
import { BUILT_IN_DIALECTS, isBuiltInDialectId } from "./dialect-spec.js";
|
|
4
|
+
import { assertTenantSqlMode, DEFAULT_TENANT_SQL_MODE, resolveTenantSql, } from "./tenant-placeholders.js";
|
|
5
|
+
import { validateSelectSql } from "./validate.js";
|
|
6
|
+
/**
|
|
7
|
+
* One renderer for a checked statement (ADR 0010): the template `ask()` stores, and the forms
|
|
8
|
+
* `ask()` and `bindPreparedQuery()` render from a template or a model's SQL. Both callers run
|
|
9
|
+
* their guardrails on the unrendered forms first; rendering here only swaps placeholders for
|
|
10
|
+
* literals or driver markers, and refuses a result that does more. Internal to `@askdb/core`:
|
|
11
|
+
* it sits above the mechanical renderer (`bind.ts`) and tenant substitution, and below
|
|
12
|
+
* `ask.ts` and `rebind.ts`.
|
|
13
|
+
*/
|
|
14
|
+
/** The template `ask()` stores (PreparedQuery v1), with `dialectRules` set from the spec it ran under. */
|
|
15
|
+
export function writePreparedQuery(namedSql, manifest, dialect) {
|
|
16
|
+
return {
|
|
17
|
+
version: 1,
|
|
18
|
+
dialect: dialect.id,
|
|
19
|
+
dialectRules: dialect === BUILT_IN_DIALECTS[dialect.id] ? "builtin" : "host",
|
|
20
|
+
namedSql,
|
|
21
|
+
parameters: [
|
|
22
|
+
...manifest.parameters.map((p) => ({
|
|
23
|
+
name: p.name,
|
|
24
|
+
placeholder: `:${p.name}`,
|
|
25
|
+
type: p.type,
|
|
26
|
+
cardinality: p.cardinality,
|
|
27
|
+
description: p.description,
|
|
28
|
+
source: "question",
|
|
29
|
+
})),
|
|
30
|
+
...tenantDecls(namedSql, dialect),
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** A declaration per distinct `:tenant_<root>_ids` placeholder in the template. */
|
|
35
|
+
function tenantDecls(namedSql, dialect) {
|
|
36
|
+
const names = new Set(scanTenantPlaceholders(namedSql, dialect).map((p) => p.name));
|
|
37
|
+
return [...names].map((name) => ({
|
|
38
|
+
name,
|
|
39
|
+
placeholder: `:${name}`,
|
|
40
|
+
type: "string",
|
|
41
|
+
cardinality: "many",
|
|
42
|
+
source: "tenant",
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The spec a stored template renders under (ADR 0032). A `"builtin"` template uses its built-in
|
|
47
|
+
* spec unless the host passes one. A `"host"` template, or one stored without `dialectRules`,
|
|
48
|
+
* has rules AskDB can't recover, so it needs the host's spec rather than a guess. Throws
|
|
49
|
+
* `QueryParameterError`: `DIALECT_SPEC_REQUIRED` without the spec it needs,
|
|
50
|
+
* `DIALECT_UNSUPPORTED` for a spec whose id isn't the template's dialect.
|
|
51
|
+
*/
|
|
52
|
+
export function readPreparedQueryDialect(prepared, dialect) {
|
|
53
|
+
if (dialect === undefined) {
|
|
54
|
+
if (prepared.dialectRules === "builtin")
|
|
55
|
+
return BUILT_IN_DIALECTS[prepared.dialect];
|
|
56
|
+
const fix = `Pass guardrails.dialect: the DialectSpec ask() ran with, or the built-in id '${prepared.dialect}' ` +
|
|
57
|
+
"if it ran with the built-in rules.";
|
|
58
|
+
const rules = prepared.dialectRules;
|
|
59
|
+
throw new QueryParameterError(rules === "host"
|
|
60
|
+
? "This template was made by ask() under a host's DialectSpec (dialectRules: 'host'), so " +
|
|
61
|
+
`bindPreparedQuery() checks and renders it only under that spec. ${fix} A constant from another ` +
|
|
62
|
+
"copy of @askdb/core counts as a host's spec."
|
|
63
|
+
: rules === undefined || rules === null
|
|
64
|
+
? "This template has no dialectRules: it was stored before AskDB recorded which dialect rules ask() " +
|
|
65
|
+
`used, so bindPreparedQuery() won't guess. ${fix}`
|
|
66
|
+
: `This template has dialectRules ${JSON.stringify(rules).replace(/"/g, "'")}, which is neither 'builtin' ` +
|
|
67
|
+
`nor 'host', so bindPreparedQuery() won't guess. ${fix}`, "DIALECT_SPEC_REQUIRED");
|
|
68
|
+
}
|
|
69
|
+
const spec = typeof dialect === "string" ? (isBuiltInDialectId(dialect) ? BUILT_IN_DIALECTS[dialect] : undefined) : dialect;
|
|
70
|
+
if (spec?.id !== prepared.dialect) {
|
|
71
|
+
throw new QueryParameterError(`guardrails.dialect must have the template's dialect id '${prepared.dialect}'.`, "DIALECT_UNSUPPORTED");
|
|
72
|
+
}
|
|
73
|
+
return spec;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* `tenantSqlMode` defaulted (`DEFAULT_TENANT_SQL_MODE`) and checked once, for `caller`: a mode
|
|
77
|
+
* that is neither `"sql-params"` nor `"sql-only"` throws `TenantScopeError`
|
|
78
|
+
* (`TENANT_SQL_MODE_REQUIRED`), with or without a policy. Returns undefined without a policy or
|
|
79
|
+
* a scope: nothing renders tenant IDs then. The caller validates the scope.
|
|
80
|
+
*/
|
|
81
|
+
export function tenantRendering(policy, scope, mode, caller) {
|
|
82
|
+
const resolved = mode ?? DEFAULT_TENANT_SQL_MODE;
|
|
83
|
+
assertTenantSqlMode(resolved, caller);
|
|
84
|
+
return policy && scope ? { policy, scope, mode: resolved } : undefined;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Both forms of a checked template. Binds the business values from `values`, then, with a
|
|
88
|
+
* tenant rendering, the tenant IDs into `unboundSql` as driver markers (`unboundSql` always
|
|
89
|
+
* binds them; `tenant.mode` governs only the bound form, through {@link renderTenantSql}).
|
|
90
|
+
*
|
|
91
|
+
* Then asserts that rendering only swapped placeholders (ADR 0010, decision 0): no
|
|
92
|
+
* placeholder is left in either form, except the tenant placeholders `businessSql` keeps for
|
|
93
|
+
* {@link renderTenantSql}, and both forms pass `validateSelectSql`.
|
|
94
|
+
*
|
|
95
|
+
* Throws on any failure: the renderer's `QueryParameterError` (with its reason), a
|
|
96
|
+
* `TenantScopeError` from tenant substitution, `QueryParameterError` with
|
|
97
|
+
* `UNRESOLVED_PLACEHOLDER` for a leftover placeholder or `TENANT_PARAM_ALIGNMENT` when the
|
|
98
|
+
* tenant markers can't be aligned with the business params, and `SqlValidationError` from
|
|
99
|
+
* the read-only check.
|
|
100
|
+
*/
|
|
101
|
+
export function renderTemplate(prepared, values, dialect, tenant) {
|
|
102
|
+
const business = renderPreparedQuery(prepared, values, { skipTenantPlaceholders: true, dialect });
|
|
103
|
+
const unbound = tenant ? bindTenantIntoUnboundSql(business, prepared.namedSql, tenant, dialect) : business;
|
|
104
|
+
if (!unbound) {
|
|
105
|
+
throw new QueryParameterError("The template's tenant markers can't be aligned with its business parameters in unboundSql.", "TENANT_PARAM_ALIGNMENT");
|
|
106
|
+
}
|
|
107
|
+
assertRenderedSql(business.sql, dialect, tenant !== undefined);
|
|
108
|
+
assertRenderedSql(unbound.unboundSql, dialect);
|
|
109
|
+
return { businessSql: business.sql, unboundSql: unbound.unboundSql, params: unbound.params, bindings: unbound.bindings };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Assert a rendered form holds no placeholder (`QueryParameterError`,
|
|
113
|
+
* `UNRESOLVED_PLACEHOLDER`), apart from tenant placeholders when `keepTenantPlaceholders`
|
|
114
|
+
* says a later step renders them, and passes `validateSelectSql` (`SqlValidationError`).
|
|
115
|
+
*/
|
|
116
|
+
export function assertRenderedSql(sql, dialect, keepTenantPlaceholders = false) {
|
|
117
|
+
const left = scanPlaceholders(sql, dialect).filter((p) => !(keepTenantPlaceholders && isTenantPlaceholderName(p.name)));
|
|
118
|
+
if (left.length > 0) {
|
|
119
|
+
throw new QueryParameterError("One or more placeholders remain after binding.", "UNRESOLVED_PLACEHOLDER");
|
|
120
|
+
}
|
|
121
|
+
validateSelectSql(dialect, sql);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* A statement's tenant placeholders rendered from `tenant`: driver markers numbered from the
|
|
125
|
+
* first slot, with the IDs in `tenantParams` (`"sql-params"`), or escaped literals
|
|
126
|
+
* (`"sql-only"`). `sql`'s business values are already literals, so its only markers are
|
|
127
|
+
* tenant markers: `sql` + `tenantParams` is an executable pair on its own (ADR 0024).
|
|
128
|
+
* `dialect` is undefined for a custom `AskDialect`, which gets `$N` markers. Throws what
|
|
129
|
+
* `resolveTenantSql()` throws (`TenantScopeError`, `SchemaParseError`).
|
|
130
|
+
*/
|
|
131
|
+
export function renderTenantSql(sql, dialect, tenant) {
|
|
132
|
+
const resolved = resolveTenantSql(sql, tenant.policy, tenant.scope, tenant.mode, 1, dialect);
|
|
133
|
+
const tenantParams = resolved.mode === "sql-params" && resolved.params.length > 0 ? resolved.params : undefined;
|
|
134
|
+
return { sql: resolved.sql, ...(tenantParams ? { tenantParams } : {}), tenantBindings: resolved.bindings };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Substitute tenant placeholders in a rendered `unboundSql` (business markers bound,
|
|
138
|
+
* `:tenant_*` placeholders still in place) with driver markers, and fold their values into
|
|
139
|
+
* `params`, so `unboundSql` + `params` is a single executable pair.
|
|
140
|
+
*
|
|
141
|
+
* - `$N` / `@pN` dialects: markers are explicitly numbered, so tenant markers continue
|
|
142
|
+
* after the business slots and tenant values are appended.
|
|
143
|
+
* - `?` dialects: markers are positional, so `params` must follow source order. Business
|
|
144
|
+
* and tenant values are interleaved by walking the named template in order, and
|
|
145
|
+
* `bindings[].indices` are remapped to the new positions.
|
|
146
|
+
*
|
|
147
|
+
* Returns undefined when the business binding and the tenant substitution disagree about
|
|
148
|
+
* the statement's shape, rather than misaligned params.
|
|
149
|
+
*/
|
|
150
|
+
function bindTenantIntoUnboundSql(bound,
|
|
151
|
+
/** The template, with business and tenant placeholders. */
|
|
152
|
+
namedSql, tenant, dialect) {
|
|
153
|
+
const business = bound.params;
|
|
154
|
+
const unbound = resolveTenantSql(bound.unboundSql, tenant.policy, tenant.scope, "sql-params", business.length + 1, dialect);
|
|
155
|
+
if (unbound.mode !== "sql-params")
|
|
156
|
+
return undefined;
|
|
157
|
+
const tenantValues = unbound.params;
|
|
158
|
+
const style = isBuiltInDialectId(dialect.id) ? markerStyleForDialect(dialect.id) : "dollar";
|
|
159
|
+
if (style !== "question") {
|
|
160
|
+
return { unboundSql: unbound.sql, params: [...business, ...tenantValues], bindings: bound.bindings };
|
|
161
|
+
}
|
|
162
|
+
const idsByPlaceholder = new Map(unbound.bindings.map((b) => [b.placeholder, b.ids]));
|
|
163
|
+
const bindingByName = new Map(bound.bindings.map((b) => [b.name, b]));
|
|
164
|
+
// Same lexer reading as the renderer and the tenant substitution above.
|
|
165
|
+
const occurrences = scanPlaceholders(namedSql, dialect);
|
|
166
|
+
const occurrenceCount = new Map();
|
|
167
|
+
for (const occ of occurrences) {
|
|
168
|
+
occurrenceCount.set(occ.name, (occurrenceCount.get(occ.name) ?? 0) + 1);
|
|
169
|
+
}
|
|
170
|
+
const combined = [];
|
|
171
|
+
const indexMap = new Map();
|
|
172
|
+
const seen = new Map();
|
|
173
|
+
for (const occ of occurrences) {
|
|
174
|
+
const tenantIds = idsByPlaceholder.get(occ.placeholder);
|
|
175
|
+
if (tenantIds) {
|
|
176
|
+
combined.push(...tenantIds);
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
// The renderer pushes each occurrence's values contiguously, in source order, so
|
|
180
|
+
// occurrence k of a name owns the k-th equal slice of its indices.
|
|
181
|
+
const binding = bindingByName.get(occ.name);
|
|
182
|
+
const total = occurrenceCount.get(occ.name);
|
|
183
|
+
if (!binding || binding.indices.length % total !== 0)
|
|
184
|
+
return undefined;
|
|
185
|
+
const per = binding.indices.length / total;
|
|
186
|
+
const k = seen.get(occ.name) ?? 0;
|
|
187
|
+
seen.set(occ.name, k + 1);
|
|
188
|
+
for (const idx of binding.indices.slice(k * per, (k + 1) * per)) {
|
|
189
|
+
if (idx >= business.length || indexMap.has(idx))
|
|
190
|
+
return undefined;
|
|
191
|
+
indexMap.set(idx, combined.length);
|
|
192
|
+
combined.push(business[idx]);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (indexMap.size !== business.length || combined.length !== business.length + tenantValues.length) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
const bindings = bound.bindings.map((b) => ({
|
|
199
|
+
...b,
|
|
200
|
+
indices: b.indices.map((i) => indexMap.get(i)),
|
|
201
|
+
}));
|
|
202
|
+
return { unboundSql: unbound.sql, params: combined, bindings };
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=checked-statement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checked-statement.js","sourceRoot":"","sources":["../../src/sql/checked-statement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialect-spec.d.ts","sourceRoot":"","sources":["../../src/sql/dialect-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAUH,gHAAgH;AAChH,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,aAAa,GACb,OAAO,GACP,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AAEhB;;;GAGG;AACH,eAAO,MAAM,sBAAsB,WAAW,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,SAAS,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,eAAe,EAAE,GAAG,GAAG,GAAG,CAAC;IAC3B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,mGAAmG;IACnG,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,uFAAuF;IACvF,WAAW,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACjC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AA8CF,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,EAAE,WAY9B,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,EAAE,WAKjC,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"dialect-spec.d.ts","sourceRoot":"","sources":["../../src/sql/dialect-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAUH,gHAAgH;AAChH,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,aAAa,GACb,OAAO,GACP,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AAEhB;;;GAGG;AACH,eAAO,MAAM,sBAAsB,WAAW,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,SAAS,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,eAAe,EAAE,GAAG,GAAG,GAAG,CAAC;IAC3B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,mGAAmG;IACnG,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,uFAAuF;IACvF,WAAW,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACjC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AA8CF,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,EAAE,WAY9B,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,EAAE,WAKjC,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,aAAa,EAAE,WA0B3B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,cAAc,EAAE,WAoB5B,CAAC;AAEF,oCAAoC;AACpC,eAAO,MAAM,iBAAiB,EAAE,WA6B/B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;CAOqB,CAAC;AAEpD,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAE9D,eAAO,MAAM,qBAAqB,EAAE,SAAS,gBAAgB,EAE7B,CAAC;AAEjC,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,gBAAgB,GAAG,WAAW,CAQhE"}
|
package/dist/sql/dialect-spec.js
CHANGED
|
@@ -109,6 +109,9 @@ export const MYSQL_DIALECT = {
|
|
|
109
109
|
"load_file", "sleep", "benchmark", "get_lock", "release_lock", "release_all_locks",
|
|
110
110
|
"master_pos_wait", "source_pos_wait", "wait_for_executed_gtid_set",
|
|
111
111
|
"wait_until_sql_thread_after_gtids", "sys_exec", "sys_eval",
|
|
112
|
+
// MariaDB sequences advance or set a sequence from a SELECT, outside the transaction's
|
|
113
|
+
// rollback (#825). MySQL has none. LASTVAL() only reads, so it stays allowed.
|
|
114
|
+
"nextval", "setval",
|
|
112
115
|
],
|
|
113
116
|
listBinding: "expand",
|
|
114
117
|
backslashEscapes: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialect-spec.js","sourceRoot":"","sources":["../../src/sql/dialect-spec.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dialect-spec.js","sourceRoot":"","sources":["../../src/sql/dialect-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A thrown value's message for an error report, with the reason added when the message stops
|
|
3
|
+
* before giving one. A refused connection reaches the model call as the AI SDK's
|
|
4
|
+
* `Cannot connect to API: ` (the cause's empty message) over a message-less `AggregateError`,
|
|
5
|
+
* often inside the retry's `Last error: …`, so the text ends at a colon.
|
|
6
|
+
*
|
|
7
|
+
* The reason comes from the errors under it: an `AggregateError`'s errors, a retry error's
|
|
8
|
+
* `lastError`, else `cause`. Each one that gives no reason itself is read as its `code` with
|
|
9
|
+
* the `address` (or `hostname`) and `port` it names, else its `name`. Unlike the `askdb` CLI's
|
|
10
|
+
* `errorMessage()`, it never copies their message text, which can quote a URL with credentials:
|
|
11
|
+
* shown text is built from allowlisted parts, the rule ADR 0011 sets for connection labels.
|
|
12
|
+
* A message that already gives its reason is returned unchanged. It never throws.
|
|
13
|
+
*/
|
|
14
|
+
export declare function failureMessage(error: unknown): string;
|
|
15
|
+
//# sourceMappingURL=failure-reason.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-reason.d.ts","sourceRoot":"","sources":["../../src/sql/failure-reason.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQrD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A thrown value's message for an error report, with the reason added when the message stops
|
|
3
|
+
* before giving one. A refused connection reaches the model call as the AI SDK's
|
|
4
|
+
* `Cannot connect to API: ` (the cause's empty message) over a message-less `AggregateError`,
|
|
5
|
+
* often inside the retry's `Last error: …`, so the text ends at a colon.
|
|
6
|
+
*
|
|
7
|
+
* The reason comes from the errors under it: an `AggregateError`'s errors, a retry error's
|
|
8
|
+
* `lastError`, else `cause`. Each one that gives no reason itself is read as its `code` with
|
|
9
|
+
* the `address` (or `hostname`) and `port` it names, else its `name`. Unlike the `askdb` CLI's
|
|
10
|
+
* `errorMessage()`, it never copies their message text, which can quote a URL with credentials:
|
|
11
|
+
* shown text is built from allowlisted parts, the rule ADR 0011 sets for connection labels.
|
|
12
|
+
* A message that already gives its reason is returned unchanged. It never throws.
|
|
13
|
+
*/
|
|
14
|
+
export function failureMessage(error) {
|
|
15
|
+
if (!(error instanceof Error))
|
|
16
|
+
return String(error);
|
|
17
|
+
const message = messageOf(error);
|
|
18
|
+
if (!stopsBeforeReason(message))
|
|
19
|
+
return message;
|
|
20
|
+
const reasons = [...new Set(reasonsUnder(error, new Set([error]), 0))].join("; ");
|
|
21
|
+
const text = message.trimEnd();
|
|
22
|
+
if (!reasons)
|
|
23
|
+
return text || ownReason(error);
|
|
24
|
+
return text ? `${text} ${reasons}` : reasons;
|
|
25
|
+
}
|
|
26
|
+
const MAX_DEPTH = 8;
|
|
27
|
+
const CODE = /^[A-Z][A-Z0-9_]*$/;
|
|
28
|
+
const NAME = /^[A-Za-z_$][\w$]*$/;
|
|
29
|
+
const IPV4 = /^\d{1,3}(?:\.\d{1,3}){3}$/;
|
|
30
|
+
const IPV6 = /^[0-9A-Fa-f:.]*:[0-9A-Fa-f:.]*$/;
|
|
31
|
+
const HOSTNAME = /^[A-Za-z0-9](?:[A-Za-z0-9.-]{0,251}[A-Za-z0-9])?$/;
|
|
32
|
+
/** `error.message` as a string: a host-built error can set it to anything. */
|
|
33
|
+
function messageOf(error) {
|
|
34
|
+
return typeof error.message === "string" ? error.message : String(error.message);
|
|
35
|
+
}
|
|
36
|
+
function stopsBeforeReason(message) {
|
|
37
|
+
const text = message.trimEnd();
|
|
38
|
+
return text === "" || text.endsWith(":");
|
|
39
|
+
}
|
|
40
|
+
/** The reasons found below `error`, which gave none of its own. */
|
|
41
|
+
function reasonsUnder(error, seen, depth) {
|
|
42
|
+
const { lastError, cause } = error;
|
|
43
|
+
const errors = error instanceof AggregateError ? error.errors : undefined;
|
|
44
|
+
const below = Array.isArray(errors) ? errors : lastError !== undefined ? [lastError] : cause !== undefined ? [cause] : [];
|
|
45
|
+
return below.flatMap((child) => reasonsFor(child, seen, depth + 1));
|
|
46
|
+
}
|
|
47
|
+
/** One error's reason: what lies below it when it stops before giving one, else its own parts. */
|
|
48
|
+
function reasonsFor(error, seen, depth) {
|
|
49
|
+
if (!(error instanceof Error) || seen.has(error) || depth > MAX_DEPTH)
|
|
50
|
+
return [];
|
|
51
|
+
seen.add(error);
|
|
52
|
+
if (stopsBeforeReason(messageOf(error))) {
|
|
53
|
+
const below = reasonsUnder(error, seen, depth);
|
|
54
|
+
if (below.length > 0)
|
|
55
|
+
return below;
|
|
56
|
+
}
|
|
57
|
+
return [ownReason(error)];
|
|
58
|
+
}
|
|
59
|
+
/** `ECONNREFUSED 127.0.0.1:11434`, `ECONNREFUSED`, or the error's name: never its message. */
|
|
60
|
+
function ownReason(error) {
|
|
61
|
+
const { code, address, hostname, port, name } = error;
|
|
62
|
+
if (typeof code !== "string" || !CODE.test(code))
|
|
63
|
+
return typeof name === "string" && NAME.test(name) ? name : "Error";
|
|
64
|
+
const host = hostOf(address) ?? hostOf(hostname);
|
|
65
|
+
if (!host)
|
|
66
|
+
return code;
|
|
67
|
+
return typeof port === "number" && Number.isInteger(port) && port > 0 && port < 65536 ? `${code} ${host}:${port}` : `${code} ${host}`;
|
|
68
|
+
}
|
|
69
|
+
function hostOf(value) {
|
|
70
|
+
if (typeof value !== "string")
|
|
71
|
+
return undefined;
|
|
72
|
+
if (IPV4.test(value) || HOSTNAME.test(value))
|
|
73
|
+
return value;
|
|
74
|
+
if (IPV6.test(value))
|
|
75
|
+
return `[${value}]`;
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=failure-reason.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-reason.js","sourceRoot":"","sources":["../../src/sql/failure-reason.ts"],"names":[],"mappings":"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"}
|
package/dist/sql/generate.d.ts
CHANGED
|
@@ -25,6 +25,11 @@ export type GenerateSqlDeps = {
|
|
|
25
25
|
* directly.
|
|
26
26
|
*/
|
|
27
27
|
prebuiltDdl?: string;
|
|
28
|
+
/**
|
|
29
|
+
* The ids of the tables `prebuiltDdl` shows, so the prompt's tenant block names no other
|
|
30
|
+
* (#771). Set by `ask({ retriever })` with `prebuiltDdl`.
|
|
31
|
+
*/
|
|
32
|
+
promptTableIds?: readonly string[];
|
|
28
33
|
/** Normalized tenant policy from the schema artifact. Forwarded from ask(). */
|
|
29
34
|
tenantPolicy?: NormalizedTenantPolicy;
|
|
30
35
|
/** Validated tenant scope from the host. Forwarded from ask(). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/sql/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAA0C,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/sql/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAA0C,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE,OAAO,mBAAmB,CAAC;IAC1C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qGAAqG;IACrG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,yCAAyC,CAAC,EAAE,OAAO,CAAC;IACpD;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,kEAAkE;IAClE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,+FAA+F;IAC/F,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,2GAA2G;AAC3G,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,2FAA2F;IAC3F,OAAO,EAAE,gBAAgB,CAAC;IAC1B,qGAAqG;IACrG,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,iGAAiG;IACjG,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACrG,wFAAwF;IACxF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,kBAAkB,EACzB,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CAclC;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,kBAAkB,EACzB,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC,CAEnD"}
|
package/dist/sql/generate.js
CHANGED
|
@@ -3,6 +3,7 @@ import { SqlGenerationError, SqlValidationError } from "../errors.js";
|
|
|
3
3
|
import { AskDbLogEvent } from "../logging/log-events.js";
|
|
4
4
|
import { extractSqlFromModelText, extractUnboundSqlFromModelText } from "./extract-sql.js";
|
|
5
5
|
import { crossValidateManifestAgainstSql, parseParameterManifest, } from "./parameter-manifest.js";
|
|
6
|
+
import { failureMessage } from "./failure-reason.js";
|
|
6
7
|
import { buildNlToSqlSystemPrompt, buildNlToSqlUserPrompt } from "./prompt.js";
|
|
7
8
|
import { assertNlToSqlInputs, nlToSqlAmbiguityNotes } from "./schema-question-precheck.js";
|
|
8
9
|
import { enforceGuardrails } from "./guardrails.js";
|
|
@@ -69,7 +70,7 @@ async function runGenerateSelectSql(dialect, question, schema, model, deps) {
|
|
|
69
70
|
// (`instructions = system` in its prompt standardization). Passing
|
|
70
71
|
// `instructions` would be silently dropped on AI SDK 6.
|
|
71
72
|
system: buildNlToSqlSystemPrompt(dialect),
|
|
72
|
-
prompt: buildNlToSqlUserPrompt(dialect, question, schema, ambiguityNotes, logger, nlToSqlSchemaOptions, deps.prebuiltDdl, deps.tenantPolicy, deps.tenantScope, parameterize || undefined),
|
|
73
|
+
prompt: buildNlToSqlUserPrompt(dialect, question, schema, ambiguityNotes, logger, nlToSqlSchemaOptions, deps.prebuiltDdl, deps.tenantPolicy, deps.tenantScope, parameterize || undefined, deps.promptTableIds),
|
|
73
74
|
temperature: 0,
|
|
74
75
|
// Cast: AskDB's public `providerOptions` type is a plain opaque bag
|
|
75
76
|
// (`Record<string, unknown>`) so callers don't need AI SDK JSON types.
|
|
@@ -93,8 +94,7 @@ async function runGenerateSelectSql(dialect, question, schema, model, deps) {
|
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
96
|
catch (e) {
|
|
96
|
-
|
|
97
|
-
throw new SqlGenerationError(`Model call failed: ${message}`, e);
|
|
97
|
+
throw new SqlGenerationError(`Model call failed: ${failureMessage(e)}`, e);
|
|
98
98
|
}
|
|
99
99
|
// The read-only check is a guardrail finding, decided by the caller; here the SQL is
|
|
100
100
|
// only normalized (trailing `;` removed) when it passes.
|
|
@@ -129,6 +129,7 @@ async function runGenerateSelectSql(dialect, question, schema, model, deps) {
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
function logGenerateFailed(logger, e) {
|
|
132
|
+
// A failed model call arrives as the SqlGenerationError above, whose message already names the reason.
|
|
132
133
|
const msg = e instanceof Error ? e.message : String(e);
|
|
133
134
|
logger?.error({
|
|
134
135
|
event: AskDbLogEvent.PipelineFailed,
|
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,kBAAkB,EAAyB,MAAM,cAAc,CAAC;AAC7F,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,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EACL,+BAA+B,EAC/B,iBAAiB,GAElB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/sql/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/sql/lexer.d.ts
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* | `[…]` | — | — | ident (`]]`) | ident |
|
|
19
19
|
* | `#` line comment | — | yes | — | — |
|
|
20
20
|
* | `--` line comment | yes | only before whitespace | yes | yes |
|
|
21
|
+
* | `\r` ends a line comment | yes | no (`\n` only) | yes | no |
|
|
21
22
|
* | nested `/* … *\/` | yes | no (`/*! … *\/` runs) | yes | no |
|
|
22
23
|
* | `0x`, `1E`, `$`/`€` money | — | — | literal | — |
|
|
23
24
|
* | U+00A0 etc. end a name | — | — | yes | — |
|
|
@@ -62,6 +63,11 @@ export type SqlLexerProfile = {
|
|
|
62
63
|
* is its own token, as it is to SQL Server.
|
|
63
64
|
*/
|
|
64
65
|
tsqlLiterals: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* A `--` or `#` comment ends only at `\n` (MySQL, MariaDB, SQLite, CockroachDB). Unset: it ends
|
|
68
|
+
* at `\r` too, as on Postgres and SQL Server.
|
|
69
|
+
*/
|
|
70
|
+
lineCommentEndsAtLfOnly?: boolean;
|
|
65
71
|
};
|
|
66
72
|
export declare const POSTGRES_LEXER: SqlLexerProfile;
|
|
67
73
|
export declare const MYSQL_LEXER: SqlLexerProfile;
|
|
@@ -141,6 +147,18 @@ export declare function postgresReadingProfiles(dialect?: Pick<DialectSpec, "id"
|
|
|
141
147
|
* report its position, not its text, which may hold a value from the question.
|
|
142
148
|
*/
|
|
143
149
|
export declare function findEscapeStringContinuation(sql: string, tokens: readonly SqlToken[]): SqlToken | undefined;
|
|
150
|
+
/**
|
|
151
|
+
* A CockroachDB byte string, `b'…'` with a lower-case `b`, that holds a backslash or is continued
|
|
152
|
+
* on a later line. CockroachDB reads it with backslash escapes, and keeps them across the
|
|
153
|
+
* continuation. This lexer reads it under the Postgres profile without them, as Postgres reads a
|
|
154
|
+
* bit string, so where `\'` ends one reading's string the other's goes on. AskDB doesn't model the
|
|
155
|
+
* difference. The checks refuse the string at this boundary, where both readings still agree
|
|
156
|
+
* (#730, ADR 0012). What's lost: a byte string with escapes on CockroachDB, which a hex string
|
|
157
|
+
* cast to bytes (`'\x00'::bytea`) can write instead, and a continued lower-case bit string on Postgres, where a backslash in a bit
|
|
158
|
+
* string is an error. `B'…'` is a bit string on both engines and passes. Returns the `b'…'` token;
|
|
159
|
+
* callers report its position, not its text, which may hold a value from the question.
|
|
160
|
+
*/
|
|
161
|
+
export declare function findEscapedByteString(sql: string, tokens: readonly SqlToken[]): SqlToken | undefined;
|
|
144
162
|
/**
|
|
145
163
|
* A Postgres Unicode-escaped identifier, as `U&"…"` (either case) with no space between the
|
|
146
164
|
* parts: the form Postgres's scanner reads as one identifier. With a space, `U& "x"` is the
|
|
@@ -153,6 +171,26 @@ export declare function findEscapeStringContinuation(sql: string, tokens: readon
|
|
|
153
171
|
* and the tenant check both refuse it instead (#692, #704, ADR 0012).
|
|
154
172
|
*/
|
|
155
173
|
export declare function findUnicodeEscapedIdentifier(tokens: readonly SqlToken[]): string | undefined;
|
|
174
|
+
/** The forms only a Postgres reading can hold, as {@link findPostgresOnlyForms} finds them. */
|
|
175
|
+
export type PostgresOnlyForms = {
|
|
176
|
+
/** The first `U&"…"` name, as written ({@link findUnicodeEscapedIdentifier}). */
|
|
177
|
+
unicodeEscapedIdentifier: string | undefined;
|
|
178
|
+
/** The `E'…'` token of the first continued escape string ({@link findEscapeStringContinuation}). */
|
|
179
|
+
escapeStringContinuation: SqlToken | undefined;
|
|
180
|
+
/** The first `b'…'` byte string CockroachDB reads differently ({@link findEscapedByteString}). */
|
|
181
|
+
escapedByteString: SqlToken | undefined;
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* The forms only a Postgres reading of `sql` can hold, under each reading
|
|
185
|
+
* {@link postgresReadingProfiles} gives for `dialect`: a `U&"…"` name, an `E'…'` string continued
|
|
186
|
+
* on a later line, and a `b'…'` byte string that CockroachDB reads with backslash escapes. The
|
|
187
|
+
* checks match names as written and don't model the escapes, so the tenant check and the
|
|
188
|
+
* sensitive check refuse all three through this one function (#703, #704, #707, #730, ADR 0012).
|
|
189
|
+
* The byte string is found under `postgres` too, since a host may point the `postgres` dialect at
|
|
190
|
+
* CockroachDB, which is wire-compatible. Each field holds the first match across
|
|
191
|
+
* the readings; all are `undefined` when the SQL can't be read as Postgres.
|
|
192
|
+
*/
|
|
193
|
+
export declare function findPostgresOnlyForms(sql: string, dialect?: Pick<DialectSpec, "id" | "backslashEscapes">): PostgresOnlyForms;
|
|
156
194
|
/** True when any token ran off the end of the input. */
|
|
157
195
|
export declare function hasUnterminatedToken(tokens: readonly SqlToken[]): boolean;
|
|
158
196
|
//# sourceMappingURL=lexer.d.ts.map
|
package/dist/sql/lexer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/sql/lexer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/sql/lexer.ts"],"names":[],"mappings":"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"}
|