rawsql-ts 0.24.4 → 0.26.0
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/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +5 -5
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/parsers/FunctionExpressionParser.d.ts +3 -0
- package/dist/esm/parsers/FunctionExpressionParser.js +50 -2
- package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/esm/parsers/SqlPrintTokenParser.d.ts +1 -0
- package/dist/esm/parsers/SqlPrintTokenParser.js +11 -1
- package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/transformers/AstCommentAttachmentExtractor.d.ts +61 -0
- package/dist/esm/transformers/AstCommentAttachmentExtractor.js +221 -0
- package/dist/esm/transformers/AstCommentAttachmentExtractor.js.map +1 -0
- package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.d.ts +47 -0
- package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.js +235 -0
- package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.js.map +1 -0
- package/dist/esm/transformers/ConditionOptimization.d.ts +66 -0
- package/dist/esm/transformers/ConditionOptimization.js +294 -0
- package/dist/esm/transformers/ConditionOptimization.js.map +1 -0
- package/dist/esm/transformers/NamedQueryDefinitionExtractor.d.ts +53 -0
- package/dist/esm/transformers/NamedQueryDefinitionExtractor.js +370 -0
- package/dist/esm/transformers/NamedQueryDefinitionExtractor.js.map +1 -0
- package/dist/esm/transformers/ParameterConditionPlacementOptimizer.d.ts +85 -0
- package/dist/esm/transformers/ParameterConditionPlacementOptimizer.js +942 -0
- package/dist/esm/transformers/ParameterConditionPlacementOptimizer.js.map +1 -0
- package/dist/esm/transformers/SelectBodyExtractor.d.ts +21 -0
- package/dist/esm/transformers/SelectBodyExtractor.js +137 -0
- package/dist/esm/transformers/SelectBodyExtractor.js.map +1 -0
- package/dist/esm/transformers/SelectOutputCollector.d.ts +47 -0
- package/dist/esm/transformers/SelectOutputCollector.js +281 -0
- package/dist/esm/transformers/SelectOutputCollector.js.map +1 -0
- package/dist/esm/transformers/SelectValueCollector.d.ts +9 -1
- package/dist/esm/transformers/SelectValueCollector.js +83 -58
- package/dist/esm/transformers/SelectValueCollector.js.map +1 -1
- package/dist/esm/transformers/WildcardColumnInferenceCollector.d.ts +129 -0
- package/dist/esm/transformers/WildcardColumnInferenceCollector.js +373 -0
- package/dist/esm/transformers/WildcardColumnInferenceCollector.js.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +5 -5
- package/dist/index.min.js.map +4 -4
- package/dist/parsers/FunctionExpressionParser.js +49 -1
- package/dist/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/parsers/SqlPrintTokenParser.js +11 -1
- package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/index.d.ts +8 -0
- package/dist/src/parsers/FunctionExpressionParser.d.ts +3 -0
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +1 -0
- package/dist/src/transformers/AstCommentAttachmentExtractor.d.ts +61 -0
- package/dist/src/transformers/ClauseScopedColumnReferenceCollector.d.ts +47 -0
- package/dist/src/transformers/ConditionOptimization.d.ts +66 -0
- package/dist/src/transformers/NamedQueryDefinitionExtractor.d.ts +53 -0
- package/dist/src/transformers/ParameterConditionPlacementOptimizer.d.ts +85 -0
- package/dist/src/transformers/SelectBodyExtractor.d.ts +21 -0
- package/dist/src/transformers/SelectOutputCollector.d.ts +47 -0
- package/dist/src/transformers/SelectValueCollector.d.ts +9 -1
- package/dist/src/transformers/WildcardColumnInferenceCollector.d.ts +129 -0
- package/dist/transformers/AstCommentAttachmentExtractor.js +231 -0
- package/dist/transformers/AstCommentAttachmentExtractor.js.map +1 -0
- package/dist/transformers/ClauseScopedColumnReferenceCollector.js +239 -0
- package/dist/transformers/ClauseScopedColumnReferenceCollector.js.map +1 -0
- package/dist/transformers/ConditionOptimization.js +311 -0
- package/dist/transformers/ConditionOptimization.js.map +1 -0
- package/dist/transformers/NamedQueryDefinitionExtractor.js +374 -0
- package/dist/transformers/NamedQueryDefinitionExtractor.js.map +1 -0
- package/dist/transformers/ParameterConditionPlacementOptimizer.js +952 -0
- package/dist/transformers/ParameterConditionPlacementOptimizer.js.map +1 -0
- package/dist/transformers/SelectBodyExtractor.js +141 -0
- package/dist/transformers/SelectBodyExtractor.js.map +1 -0
- package/dist/transformers/SelectOutputCollector.js +291 -0
- package/dist/transformers/SelectOutputCollector.js.map +1 -0
- package/dist/transformers/SelectValueCollector.js +83 -58
- package/dist/transformers/SelectValueCollector.js.map +1 -1
- package/dist/transformers/WildcardColumnInferenceCollector.js +377 -0
- package/dist/transformers/WildcardColumnInferenceCollector.js.map +1 -0
- package/dist/tsconfig.browser.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { SelectQueryParser } from "../parsers/SelectQueryParser";
|
|
2
|
+
import { optimizeParameterConditionPlacement, planParameterConditionOptimization } from "./ParameterConditionPlacementOptimizer";
|
|
3
|
+
import { collectSupportedOptionalConditionBranches, pruneOptionalConditionBranches } from "./PruneOptionalConditionBranches";
|
|
4
|
+
import { SSSQLFilterBuilder } from "./SSSQLFilterBuilder";
|
|
5
|
+
import { SqlFormatter } from "./SqlFormatter";
|
|
6
|
+
const formatSqlComponent = (component) => {
|
|
7
|
+
return new SqlFormatter().format(component).formattedSql;
|
|
8
|
+
};
|
|
9
|
+
const hasOwnParameter = (parameters, parameterName) => Object.prototype.hasOwnProperty.call(parameters, parameterName);
|
|
10
|
+
const isAbsentOptionalValue = (parameters, parameterName) => parameters[parameterName] === null || parameters[parameterName] === undefined;
|
|
11
|
+
const parseConditionOptimizationInput = (input) => {
|
|
12
|
+
const warnings = [];
|
|
13
|
+
const errors = [];
|
|
14
|
+
const sourceSql = typeof input === "string" ? input : formatSqlComponent(input);
|
|
15
|
+
const formatterGeneratedSource = typeof input !== "string";
|
|
16
|
+
if (formatterGeneratedSource) {
|
|
17
|
+
warnings.push({
|
|
18
|
+
phaseKind: "sssql_optional_condition",
|
|
19
|
+
code: "AST_INPUT_FORMATTED",
|
|
20
|
+
message: "AST input is cloned through formatter output so the caller-owned query is not mutated."
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
return {
|
|
25
|
+
query: SelectQueryParser.parse(sourceSql),
|
|
26
|
+
sql: sourceSql,
|
|
27
|
+
formatterGeneratedSource,
|
|
28
|
+
warnings,
|
|
29
|
+
errors
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
errors.push({
|
|
34
|
+
phaseKind: "sssql_optional_condition",
|
|
35
|
+
code: "PARSE_FAILED",
|
|
36
|
+
message: "SSSQL optional condition optimization could not parse the input SQL.",
|
|
37
|
+
detail: error instanceof Error ? error.message : String(error)
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
query: null,
|
|
41
|
+
sql: sourceSql,
|
|
42
|
+
formatterGeneratedSource,
|
|
43
|
+
warnings,
|
|
44
|
+
errors
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const buildSssqlApplied = (branch) => {
|
|
49
|
+
return {
|
|
50
|
+
phaseKind: "sssql_optional_condition",
|
|
51
|
+
kind: "prune_optional_branch",
|
|
52
|
+
conditionSql: formatSqlComponent(branch.expression),
|
|
53
|
+
parameterName: branch.parameterName,
|
|
54
|
+
reason: "The optional branch parameter is explicitly absent, so the safe-only SSSQL phase pruned the branch."
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
const buildSssqlRefreshApplied = (branch, previousConditionSql) => {
|
|
58
|
+
return {
|
|
59
|
+
phaseKind: "sssql_optional_condition",
|
|
60
|
+
kind: "refresh_optional_branch",
|
|
61
|
+
conditionSql: formatSqlComponent(branch.expression),
|
|
62
|
+
previousConditionSql,
|
|
63
|
+
parameterName: branch.parameterName,
|
|
64
|
+
reason: "The safe-only SSSQL phase refreshed the optional branch placement before ordinary parameter placement."
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
const buildSssqlSkipped = (branch, parameters) => {
|
|
68
|
+
const parameterProvided = hasOwnParameter(parameters, branch.parameterName);
|
|
69
|
+
return {
|
|
70
|
+
phaseKind: "sssql_optional_condition",
|
|
71
|
+
kind: "optional_branch_skipped",
|
|
72
|
+
conditionSql: formatSqlComponent(branch.expression),
|
|
73
|
+
parameterName: branch.parameterName,
|
|
74
|
+
code: parameterProvided
|
|
75
|
+
? "SSSQL_OPTIONAL_PARAMETER_PRESENT"
|
|
76
|
+
: "SSSQL_OPTIONAL_PARAMETER_NOT_PROVIDED",
|
|
77
|
+
reason: parameterProvided
|
|
78
|
+
? "The optional branch parameter is present, so the branch remains active."
|
|
79
|
+
: "No optional branch parameter value was provided, so the branch remains unchanged."
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
const buildSssqlRefreshSkipped = (branch, code, reason) => {
|
|
83
|
+
return {
|
|
84
|
+
phaseKind: "sssql_optional_condition",
|
|
85
|
+
kind: "optional_branch_skipped",
|
|
86
|
+
conditionSql: formatSqlComponent(branch.expression),
|
|
87
|
+
parameterName: branch.parameterName,
|
|
88
|
+
code,
|
|
89
|
+
reason
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
const buildSssqlRefreshFilters = (branches, parameters) => {
|
|
93
|
+
const filters = {};
|
|
94
|
+
for (const branch of branches) {
|
|
95
|
+
filters[branch.parameterName] = hasOwnParameter(parameters, branch.parameterName)
|
|
96
|
+
? parameters[branch.parameterName]
|
|
97
|
+
: null;
|
|
98
|
+
}
|
|
99
|
+
return filters;
|
|
100
|
+
};
|
|
101
|
+
const refreshRemainingSssqlBranches = (sql, parameters) => {
|
|
102
|
+
const parsed = parseConditionOptimizationInput(sql);
|
|
103
|
+
const applied = [];
|
|
104
|
+
const skipped = [];
|
|
105
|
+
if (!parsed.query) {
|
|
106
|
+
return {
|
|
107
|
+
sql: parsed.sql,
|
|
108
|
+
applied,
|
|
109
|
+
skipped,
|
|
110
|
+
warnings: parsed.warnings,
|
|
111
|
+
errors: parsed.errors,
|
|
112
|
+
formatterGeneratedSource: parsed.formatterGeneratedSource
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const beforeBranches = collectSupportedOptionalConditionBranches(parsed.query);
|
|
116
|
+
if (beforeBranches.length === 0) {
|
|
117
|
+
return {
|
|
118
|
+
sql: parsed.sql,
|
|
119
|
+
applied,
|
|
120
|
+
skipped,
|
|
121
|
+
warnings: parsed.warnings,
|
|
122
|
+
errors: parsed.errors,
|
|
123
|
+
formatterGeneratedSource: parsed.formatterGeneratedSource
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const beforeBranchSql = new WeakMap();
|
|
127
|
+
const beforeBranchQuery = new WeakMap();
|
|
128
|
+
for (const branch of beforeBranches) {
|
|
129
|
+
beforeBranchSql.set(branch.expression, formatSqlComponent(branch.expression));
|
|
130
|
+
beforeBranchQuery.set(branch.expression, branch.query);
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
new SSSQLFilterBuilder().refresh(parsed.query, buildSssqlRefreshFilters(beforeBranches, parameters));
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
137
|
+
return {
|
|
138
|
+
sql,
|
|
139
|
+
applied,
|
|
140
|
+
skipped: beforeBranches.map(branch => buildSssqlRefreshSkipped(branch, "SSSQL_OPTIONAL_REFRESH_UNSUPPORTED", `SSSQL optional branch refresh was skipped because safe refresh could not be proven: ${detail}`)),
|
|
141
|
+
warnings: parsed.warnings,
|
|
142
|
+
errors: parsed.errors,
|
|
143
|
+
formatterGeneratedSource: parsed.formatterGeneratedSource
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
const afterBranches = collectSupportedOptionalConditionBranches(parsed.query);
|
|
147
|
+
for (const branch of afterBranches) {
|
|
148
|
+
const previousSql = beforeBranchSql.get(branch.expression);
|
|
149
|
+
const previousQuery = beforeBranchQuery.get(branch.expression);
|
|
150
|
+
if (!previousSql || !previousQuery) {
|
|
151
|
+
skipped.push(buildSssqlRefreshSkipped(branch, "SSSQL_OPTIONAL_REFRESH_UNSUPPORTED", "SSSQL optional branch refresh left an untracked branch unchanged."));
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const refreshedSql = formatSqlComponent(branch.expression);
|
|
155
|
+
if (previousQuery !== branch.query || previousSql !== refreshedSql) {
|
|
156
|
+
applied.push(buildSssqlRefreshApplied(branch, previousSql));
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
skipped.push(buildSssqlRefreshSkipped(branch, "SSSQL_OPTIONAL_REFRESH_NOOP", "SSSQL optional branch refresh found no safe placement change to apply."));
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
sql: applied.length > 0 ? formatSqlComponent(parsed.query) : sql,
|
|
163
|
+
applied,
|
|
164
|
+
skipped,
|
|
165
|
+
warnings: parsed.warnings,
|
|
166
|
+
errors: parsed.errors,
|
|
167
|
+
formatterGeneratedSource: parsed.formatterGeneratedSource
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
const runSssqlOptionalConditionPhase = (input, options) => {
|
|
171
|
+
var _a;
|
|
172
|
+
const parsed = parseConditionOptimizationInput(input);
|
|
173
|
+
const warnings = [...parsed.warnings];
|
|
174
|
+
let errors = [...parsed.errors];
|
|
175
|
+
const applied = [];
|
|
176
|
+
const skipped = [];
|
|
177
|
+
const optionalConditionParameters = (_a = options.optionalConditionParameters) !== null && _a !== void 0 ? _a : {};
|
|
178
|
+
if (!parsed.query) {
|
|
179
|
+
return {
|
|
180
|
+
sql: parsed.sql,
|
|
181
|
+
applied,
|
|
182
|
+
skipped,
|
|
183
|
+
warnings,
|
|
184
|
+
errors,
|
|
185
|
+
formatterGeneratedSource: parsed.formatterGeneratedSource
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
let currentSql = parsed.sql;
|
|
189
|
+
const branches = collectSupportedOptionalConditionBranches(parsed.query);
|
|
190
|
+
const pruneBranches = branches.filter(branch => hasOwnParameter(optionalConditionParameters, branch.parameterName)
|
|
191
|
+
&& isAbsentOptionalValue(optionalConditionParameters, branch.parameterName));
|
|
192
|
+
if (pruneBranches.length > 0) {
|
|
193
|
+
try {
|
|
194
|
+
pruneOptionalConditionBranches(parsed.query, optionalConditionParameters);
|
|
195
|
+
currentSql = formatSqlComponent(parsed.query);
|
|
196
|
+
applied.push(...pruneBranches.map(buildSssqlApplied));
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
errors = [...errors, {
|
|
200
|
+
phaseKind: "sssql_optional_condition",
|
|
201
|
+
code: "SSSQL_PRUNE_FAILED",
|
|
202
|
+
message: "SSSQL optional condition optimization could not prune optional branches.",
|
|
203
|
+
detail: error instanceof Error ? error.message : String(error)
|
|
204
|
+
}];
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (errors.length === 0) {
|
|
208
|
+
const refreshPhase = refreshRemainingSssqlBranches(currentSql, optionalConditionParameters);
|
|
209
|
+
applied.push(...refreshPhase.applied);
|
|
210
|
+
skipped.push(...refreshPhase.skipped);
|
|
211
|
+
warnings.push(...refreshPhase.warnings);
|
|
212
|
+
errors.push(...refreshPhase.errors);
|
|
213
|
+
currentSql = refreshPhase.sql;
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
for (const branch of branches) {
|
|
217
|
+
if (pruneBranches.includes(branch)) {
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
skipped.push(buildSssqlSkipped(branch, optionalConditionParameters));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
sql: errors.length === 0 ? currentSql : parsed.sql,
|
|
225
|
+
applied,
|
|
226
|
+
skipped,
|
|
227
|
+
warnings,
|
|
228
|
+
errors,
|
|
229
|
+
formatterGeneratedSource: parsed.formatterGeneratedSource
|
|
230
|
+
};
|
|
231
|
+
};
|
|
232
|
+
const mapParameterWarnings = (warnings) => warnings.map(warning => (Object.assign({ phaseKind: "parameter_condition_placement" }, warning)));
|
|
233
|
+
const mapParameterErrors = (errors) => errors.map(error => (Object.assign({ phaseKind: "parameter_condition_placement" }, error)));
|
|
234
|
+
const mapParameterApplied = (applied) => applied.map(item => (Object.assign({ phaseKind: "parameter_condition_placement" }, item)));
|
|
235
|
+
const mapParameterSkipped = (skipped) => skipped.map(item => (Object.assign({ phaseKind: "parameter_condition_placement" }, item)));
|
|
236
|
+
const makePhaseSummary = (kind, counts) => ({
|
|
237
|
+
kind,
|
|
238
|
+
appliedCount: counts.appliedCount,
|
|
239
|
+
skippedCount: counts.skippedCount,
|
|
240
|
+
warningCount: counts.warningCount,
|
|
241
|
+
errorCount: counts.errorCount
|
|
242
|
+
});
|
|
243
|
+
const runConditionOptimization = (input, options, defaultDryRun) => {
|
|
244
|
+
var _a;
|
|
245
|
+
const dryRun = (_a = options.dryRun) !== null && _a !== void 0 ? _a : defaultDryRun;
|
|
246
|
+
// Run the semantic SSSQL phase before the generic placement phase so
|
|
247
|
+
// optional branches remain owned by SSSQL even if parameter placement grows
|
|
248
|
+
// broader OR-predicate support later.
|
|
249
|
+
const sssqlPhase = runSssqlOptionalConditionPhase(input, Object.assign(Object.assign({}, options), { dryRun }));
|
|
250
|
+
const parameterPhase = dryRun
|
|
251
|
+
? planParameterConditionOptimization(sssqlPhase.sql, { dryRun })
|
|
252
|
+
: optimizeParameterConditionPlacement(sssqlPhase.sql, { dryRun });
|
|
253
|
+
const parameterWarnings = mapParameterWarnings(parameterPhase.warnings);
|
|
254
|
+
const parameterErrors = mapParameterErrors(parameterPhase.errors);
|
|
255
|
+
const parameterApplied = mapParameterApplied(parameterPhase.applied);
|
|
256
|
+
const parameterSkipped = mapParameterSkipped(parameterPhase.skipped);
|
|
257
|
+
const warnings = [...sssqlPhase.warnings, ...parameterWarnings];
|
|
258
|
+
const errors = [...sssqlPhase.errors, ...parameterErrors];
|
|
259
|
+
return {
|
|
260
|
+
ok: errors.length === 0,
|
|
261
|
+
sql: parameterPhase.sql,
|
|
262
|
+
phases: [
|
|
263
|
+
makePhaseSummary("sssql_optional_condition", {
|
|
264
|
+
appliedCount: sssqlPhase.applied.length,
|
|
265
|
+
skippedCount: sssqlPhase.skipped.length,
|
|
266
|
+
warningCount: sssqlPhase.warnings.length,
|
|
267
|
+
errorCount: sssqlPhase.errors.length
|
|
268
|
+
}),
|
|
269
|
+
makePhaseSummary("parameter_condition_placement", {
|
|
270
|
+
appliedCount: parameterApplied.length,
|
|
271
|
+
skippedCount: parameterSkipped.length,
|
|
272
|
+
warningCount: parameterWarnings.length,
|
|
273
|
+
errorCount: parameterErrors.length
|
|
274
|
+
})
|
|
275
|
+
],
|
|
276
|
+
applied: [...sssqlPhase.applied, ...parameterApplied],
|
|
277
|
+
skipped: [...sssqlPhase.skipped, ...parameterSkipped],
|
|
278
|
+
warnings,
|
|
279
|
+
errors,
|
|
280
|
+
safety: {
|
|
281
|
+
mode: "safe_only",
|
|
282
|
+
unsafeRewriteApplied: false,
|
|
283
|
+
dryRun,
|
|
284
|
+
formatterGeneratedSource: sssqlPhase.formatterGeneratedSource || parameterPhase.safety.formatterGeneratedSource
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
};
|
|
288
|
+
export const planConditionOptimization = (input, options = {}) => {
|
|
289
|
+
return runConditionOptimization(input, options, true);
|
|
290
|
+
};
|
|
291
|
+
export const optimizeConditions = (input, options = {}) => {
|
|
292
|
+
return runConditionOptimization(input, options, false);
|
|
293
|
+
};
|
|
294
|
+
//# sourceMappingURL=ConditionOptimization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionOptimization.js","sourceRoot":"","sources":["../../../src/transformers/ConditionOptimization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACH,mCAAmC,EAMnC,kCAAkC,EACrC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACH,yCAAyC,EAEzC,8BAA8B,EAEjC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAyF9C,MAAM,kBAAkB,GAAG,CAAC,SAA2D,EAAU,EAAE;IAC/F,OAAO,IAAI,YAAY,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACpB,UAA8C,EAC9C,aAAqB,EACd,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAE9E,MAAM,qBAAqB,GAAG,CAC1B,UAA8C,EAC9C,aAAqB,EACd,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,UAAU,CAAC,aAAa,CAAC,KAAK,SAAS,CAAC;AAE5F,MAAM,+BAA+B,GAAG,CACpC,KAAiC,EACD,EAAE;IAClC,MAAM,QAAQ,GAAmC,EAAE,CAAC;IACpD,MAAM,MAAM,GAAiC,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAChF,MAAM,wBAAwB,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC;IAE3D,IAAI,wBAAwB,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC;YACV,SAAS,EAAE,0BAA0B;YACrC,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,wFAAwF;SACpG,CAAC,CAAC;IACP,CAAC;IAED,IAAI,CAAC;QACD,OAAO;YACH,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;YACzC,GAAG,EAAE,SAAS;YACd,wBAAwB;YACxB,QAAQ;YACR,MAAM;SACT,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,0BAA0B;YACrC,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,sEAAsE;YAC/E,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACjE,CAAC,CAAC;QAEH,OAAO;YACH,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,SAAS;YACd,wBAAwB;YACxB,QAAQ;YACR,MAAM;SACT,CAAC;IACN,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,MAAwC,EACX,EAAE;IAC/B,OAAO;QACH,SAAS,EAAE,0BAA0B;QACrC,IAAI,EAAE,uBAAuB;QAC7B,YAAY,EAAE,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;QACnD,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,MAAM,EAAE,qGAAqG;KAChH,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC7B,MAAwC,EACxC,oBAA4B,EACC,EAAE;IAC/B,OAAO;QACH,SAAS,EAAE,0BAA0B;QACrC,IAAI,EAAE,yBAAyB;QAC/B,YAAY,EAAE,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;QACnD,oBAAoB;QACpB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,MAAM,EAAE,wGAAwG;KACnH,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,MAAwC,EACxC,UAA8C,EACjB,EAAE;IAC/B,MAAM,iBAAiB,GAAG,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC5E,OAAO;QACH,SAAS,EAAE,0BAA0B;QACrC,IAAI,EAAE,yBAAyB;QAC/B,YAAY,EAAE,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;QACnD,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,IAAI,EAAE,iBAAiB;YACnB,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,uCAAuC;QAC7C,MAAM,EAAE,iBAAiB;YACrB,CAAC,CAAC,yEAAyE;YAC3E,CAAC,CAAC,mFAAmF;KAC5F,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC7B,MAAwC,EACxC,IAAY,EACZ,MAAc,EACe,EAAE;IAC/B,OAAO;QACH,SAAS,EAAE,0BAA0B;QACrC,IAAI,EAAE,yBAAyB;QAC/B,YAAY,EAAE,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;QACnD,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,IAAI;QACJ,MAAM;KACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC7B,QAAqD,EACrD,UAA8C,EACZ,EAAE;IACpC,MAAM,OAAO,GAAuC,EAAE,CAAC;IACvD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC;YAC7E,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAClC,GAAW,EACX,UAA8C,EAC9B,EAAE;IAClB,MAAM,MAAM,GAAG,+BAA+B,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,MAAM,OAAO,GAAoC,EAAE,CAAC;IAEpD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO;YACH,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO;YACP,OAAO;YACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;SAC5D,CAAC;IACN,CAAC;IAED,MAAM,cAAc,GAAG,yCAAyC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;YACH,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO;YACP,OAAO;YACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;SAC5D,CAAC;IACN,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,OAAO,EAA0B,CAAC;IAC9D,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAqC,CAAC;IAC3E,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QAClC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9E,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC;QACD,IAAI,kBAAkB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,wBAAwB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;IACzG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO;YACH,GAAG;YACH,OAAO;YACP,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAC1D,MAAM,EACN,oCAAoC,EACpC,uFAAuF,MAAM,EAAE,CAClG,CAAC;YACF,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;SAC5D,CAAC;IACN,CAAC;IAED,MAAM,aAAa,GAAG,yCAAyC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9E,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CACjC,MAAM,EACN,oCAAoC,EACpC,mEAAmE,CACtE,CAAC,CAAC;YACH,SAAS;QACb,CAAC;QAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,aAAa,KAAK,MAAM,CAAC,KAAK,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;YAC5D,SAAS;QACb,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,wBAAwB,CACjC,MAAM,EACN,6BAA6B,EAC7B,wEAAwE,CAC3E,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACH,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;QAChE,OAAO;QACP,OAAO;QACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;KAC5D,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CACnC,KAAiC,EACjC,OAAqC,EACrB,EAAE;;IAClB,MAAM,MAAM,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,MAAM,2BAA2B,GAAG,MAAA,OAAO,CAAC,2BAA2B,mCAAI,EAAE,CAAC;IAE9E,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO;YACH,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO;YACP,OAAO;YACP,QAAQ;YACR,MAAM;YACN,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;SAC5D,CAAC;IACN,CAAC;IAED,IAAI,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC;IAC5B,MAAM,QAAQ,GAAG,yCAAyC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAC3C,eAAe,CAAC,2BAA2B,EAAE,MAAM,CAAC,aAAa,CAAC;WAC/D,qBAAqB,CAAC,2BAA2B,EAAE,MAAM,CAAC,aAAa,CAAC,CAC9E,CAAC;IAEF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACD,8BAA8B,CAAC,MAAM,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;YAC1E,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE;oBACjB,SAAS,EAAE,0BAA0B;oBACrC,IAAI,EAAE,oBAAoB;oBAC1B,OAAO,EAAE,0EAA0E;oBACnF,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBACjE,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,6BAA6B,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACpC,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC;IAClC,CAAC;SAAM,CAAC;QACJ,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,SAAS;YACb,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC;QACzE,CAAC;IACL,CAAC;IAED,OAAO;QACH,GAAG,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;QAClD,OAAO;QACP,OAAO;QACP,QAAQ;QACR,MAAM;QACN,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;KAC5D,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CACzB,QAA0D,EAC5B,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,iBACzD,SAAS,EAAE,+BAA+B,IACvC,OAAO,EACZ,CAAC,CAAC;AAEJ,MAAM,kBAAkB,GAAG,CACvB,MAAsD,EAC1B,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,iBACnD,SAAS,EAAE,+BAA+B,IACvC,KAAK,EACV,CAAC,CAAC;AAEJ,MAAM,mBAAmB,GAAG,CACxB,OAA0C,EACZ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iBACrD,SAAS,EAAE,+BAA+B,IACvC,IAAI,EACT,CAAC,CAAC;AAEJ,MAAM,mBAAmB,GAAG,CACxB,OAA6C,EACf,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iBACrD,SAAS,EAAE,+BAA+B,IACvC,IAAI,EACT,CAAC,CAAC;AAEJ,MAAM,gBAAgB,GAAG,CACrB,IAAoC,EACpC,MAKC,EACgC,EAAE,CAAC,CAAC;IACrC,IAAI;IACJ,YAAY,EAAE,MAAM,CAAC,YAAY;IACjC,YAAY,EAAE,MAAM,CAAC,YAAY;IACjC,YAAY,EAAE,MAAM,CAAC,YAAY;IACjC,UAAU,EAAE,MAAM,CAAC,UAAU;CAChC,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAC7B,KAAiC,EACjC,OAAqC,EACrC,aAAsB,EACK,EAAE;;IAC7B,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,aAAa,CAAC;IAE/C,qEAAqE;IACrE,4EAA4E;IAC5E,sCAAsC;IACtC,MAAM,UAAU,GAAG,8BAA8B,CAAC,KAAK,kCAAO,OAAO,KAAE,MAAM,IAAG,CAAC;IACjF,MAAM,cAAc,GAAG,MAAM;QACzB,CAAC,CAAC,kCAAkC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC;QAChE,CAAC,CAAC,mCAAmC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxE,MAAM,eAAe,GAAG,kBAAkB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,iBAAiB,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC;IAE1D,OAAO;QACH,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QACvB,GAAG,EAAE,cAAc,CAAC,GAAG;QACvB,MAAM,EAAE;YACJ,gBAAgB,CAAC,0BAA0B,EAAE;gBACzC,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;gBACvC,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;gBACvC,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM;gBACxC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM;aACvC,CAAC;YACF,gBAAgB,CAAC,+BAA+B,EAAE;gBAC9C,YAAY,EAAE,gBAAgB,CAAC,MAAM;gBACrC,YAAY,EAAE,gBAAgB,CAAC,MAAM;gBACrC,YAAY,EAAE,iBAAiB,CAAC,MAAM;gBACtC,UAAU,EAAE,eAAe,CAAC,MAAM;aACrC,CAAC;SACL;QACD,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAC;QACrD,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAC;QACrD,QAAQ;QACR,MAAM;QACN,MAAM,EAAE;YACJ,IAAI,EAAE,WAAW;YACjB,oBAAoB,EAAE,KAAK;YAC3B,MAAM;YACN,wBAAwB,EAAE,UAAU,CAAC,wBAAwB,IAAI,cAAc,CAAC,MAAM,CAAC,wBAAwB;SAClH;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACrC,KAAiC,EACjC,UAAwC,EAAE,EACf,EAAE;IAC7B,OAAO,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAC9B,KAAiC,EACjC,UAAwC,EAAE,EACf,EAAE;IAC7B,OAAO,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { CTEQuery } from "../models/Clause";
|
|
2
|
+
import { SqlComponent } from "../models/SqlComponent";
|
|
3
|
+
/**
|
|
4
|
+
* Source span for a named query definition when parser position metadata is available.
|
|
5
|
+
*
|
|
6
|
+
* @remarks The current extractor does not synthesize ranges. `range` and `nameRange`
|
|
7
|
+
* are returned as `null` until AST nodes expose reliable definition spans.
|
|
8
|
+
*/
|
|
9
|
+
export interface NamedQueryDefinitionSourceRange {
|
|
10
|
+
start: number;
|
|
11
|
+
end: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* DTO-style representation of a named query definition from a SQL AST.
|
|
15
|
+
*/
|
|
16
|
+
export interface NamedQueryDefinition {
|
|
17
|
+
/** The stable definition name, such as a CTE alias. */
|
|
18
|
+
name: string;
|
|
19
|
+
/** The AST query node that defines the named query. */
|
|
20
|
+
query: CTEQuery;
|
|
21
|
+
/** Whether the definition belongs to a `WITH RECURSIVE` clause, when that context is available. */
|
|
22
|
+
recursive?: boolean;
|
|
23
|
+
/** Full definition source range when available. Currently `null`. */
|
|
24
|
+
range: NamedQueryDefinitionSourceRange | null;
|
|
25
|
+
/** Definition-name source range when available. Currently `null`. */
|
|
26
|
+
nameRange: NamedQueryDefinitionSourceRange | null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Extracts named query definitions, starting with CTE definitions from `WITH` clauses.
|
|
30
|
+
*
|
|
31
|
+
* @remarks Definitions are emitted in SQL source order. For nested CTEs, the outer
|
|
32
|
+
* CTE definition is emitted when its name is encountered, then definitions inside
|
|
33
|
+
* that CTE body are emitted before later sibling CTE definitions.
|
|
34
|
+
*/
|
|
35
|
+
export declare class NamedQueryDefinitionExtractor {
|
|
36
|
+
private readonly definitions;
|
|
37
|
+
private readonly visited;
|
|
38
|
+
/**
|
|
39
|
+
* Extract named query definitions from an AST component.
|
|
40
|
+
*/
|
|
41
|
+
static extract(input: SqlComponent | null | undefined): NamedQueryDefinition[];
|
|
42
|
+
private visit;
|
|
43
|
+
private visitSelectQuery;
|
|
44
|
+
private visitSimpleSelectQuery;
|
|
45
|
+
private visitInsertQuery;
|
|
46
|
+
private visitUpdateQuery;
|
|
47
|
+
private visitDeleteQuery;
|
|
48
|
+
private visitMergeQuery;
|
|
49
|
+
private visitWithClause;
|
|
50
|
+
private visitCommonTable;
|
|
51
|
+
private visitKnownSqlComponent;
|
|
52
|
+
private visitKnownValueComponent;
|
|
53
|
+
}
|