rawsql-ts 0.28.0 → 0.30.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.
Files changed (54) hide show
  1. package/dist/esm/index.d.ts +1 -0
  2. package/dist/esm/index.js +1 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/index.min.js +2 -2
  5. package/dist/esm/index.min.js.map +4 -4
  6. package/dist/esm/transformers/ConditionDeduplicationOptimizer.d.ts +22 -0
  7. package/dist/esm/transformers/ConditionDeduplicationOptimizer.js +198 -0
  8. package/dist/esm/transformers/ConditionDeduplicationOptimizer.js.map +1 -0
  9. package/dist/esm/transformers/ConditionOptimization.d.ts +31 -1
  10. package/dist/esm/transformers/ConditionOptimization.js +321 -4
  11. package/dist/esm/transformers/ConditionOptimization.js.map +1 -1
  12. package/dist/esm/transformers/ParameterConditionPlacementOptimizer.d.ts +13 -0
  13. package/dist/esm/transformers/ParameterConditionPlacementOptimizer.js +238 -87
  14. package/dist/esm/transformers/ParameterConditionPlacementOptimizer.js.map +1 -1
  15. package/dist/esm/transformers/PredicateExpressionUtils.d.ts +16 -0
  16. package/dist/esm/transformers/PredicateExpressionUtils.js +74 -0
  17. package/dist/esm/transformers/PredicateExpressionUtils.js.map +1 -0
  18. package/dist/esm/transformers/PredicateReachabilityAnalyzer.d.ts +88 -0
  19. package/dist/esm/transformers/PredicateReachabilityAnalyzer.js +495 -0
  20. package/dist/esm/transformers/PredicateReachabilityAnalyzer.js.map +1 -0
  21. package/dist/esm/transformers/StaticPredicatePlacementOptimizer.d.ts +14 -0
  22. package/dist/esm/transformers/StaticPredicatePlacementOptimizer.js +344 -157
  23. package/dist/esm/transformers/StaticPredicatePlacementOptimizer.js.map +1 -1
  24. package/dist/esm/transformers/TopLevelAndConditionDeduper.d.ts +10 -0
  25. package/dist/esm/transformers/TopLevelAndConditionDeduper.js +66 -0
  26. package/dist/esm/transformers/TopLevelAndConditionDeduper.js.map +1 -0
  27. package/dist/index.js +1 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/index.min.js +2 -2
  30. package/dist/index.min.js.map +4 -4
  31. package/dist/src/index.d.ts +1 -0
  32. package/dist/src/transformers/ConditionDeduplicationOptimizer.d.ts +22 -0
  33. package/dist/src/transformers/ConditionOptimization.d.ts +31 -1
  34. package/dist/src/transformers/ParameterConditionPlacementOptimizer.d.ts +13 -0
  35. package/dist/src/transformers/PredicateExpressionUtils.d.ts +16 -0
  36. package/dist/src/transformers/PredicateReachabilityAnalyzer.d.ts +88 -0
  37. package/dist/src/transformers/StaticPredicatePlacementOptimizer.d.ts +14 -0
  38. package/dist/src/transformers/TopLevelAndConditionDeduper.d.ts +10 -0
  39. package/dist/transformers/ConditionDeduplicationOptimizer.js +202 -0
  40. package/dist/transformers/ConditionDeduplicationOptimizer.js.map +1 -0
  41. package/dist/transformers/ConditionOptimization.js +324 -4
  42. package/dist/transformers/ConditionOptimization.js.map +1 -1
  43. package/dist/transformers/ParameterConditionPlacementOptimizer.js +261 -110
  44. package/dist/transformers/ParameterConditionPlacementOptimizer.js.map +1 -1
  45. package/dist/transformers/PredicateExpressionUtils.js +88 -0
  46. package/dist/transformers/PredicateExpressionUtils.js.map +1 -0
  47. package/dist/transformers/PredicateReachabilityAnalyzer.js +508 -0
  48. package/dist/transformers/PredicateReachabilityAnalyzer.js.map +1 -0
  49. package/dist/transformers/StaticPredicatePlacementOptimizer.js +366 -179
  50. package/dist/transformers/StaticPredicatePlacementOptimizer.js.map +1 -1
  51. package/dist/transformers/TopLevelAndConditionDeduper.js +72 -0
  52. package/dist/transformers/TopLevelAndConditionDeduper.js.map +1 -0
  53. package/dist/tsconfig.browser.tsbuildinfo +1 -1
  54. package/package.json +1 -1
@@ -0,0 +1,508 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analyzePredicateReachability = exports.PredicateReachabilityAnalyzer = void 0;
4
+ const Clause_1 = require("../models/Clause");
5
+ const SelectQuery_1 = require("../models/SelectQuery");
6
+ const ValueComponent_1 = require("../models/ValueComponent");
7
+ const SelectQueryParser_1 = require("../parsers/SelectQueryParser");
8
+ const SqlComponentFormatter_1 = require("./SqlComponentFormatter");
9
+ const SelectOutputCollector_1 = require("./SelectOutputCollector");
10
+ const PredicateExpressionUtils_1 = require("./PredicateExpressionUtils");
11
+ class PredicateReachabilityAnalyzer {
12
+ analyze(input, options = {}) {
13
+ const warnings = [];
14
+ const errors = [];
15
+ let query = null;
16
+ try {
17
+ if (typeof input === "string") {
18
+ query = SelectQueryParser_1.SelectQueryParser.parse(input);
19
+ }
20
+ else if (options.cloneInput === false) {
21
+ query = input;
22
+ }
23
+ else {
24
+ query = SelectQueryParser_1.SelectQueryParser.parse((0, SqlComponentFormatter_1.formatSqlComponent)(input, options));
25
+ }
26
+ }
27
+ catch (error) {
28
+ errors.push({
29
+ code: "PARSE_FAILED",
30
+ message: "Predicate reachability analysis could not parse the input SQL.",
31
+ detail: error instanceof Error ? error.message : String(error)
32
+ });
33
+ return this.buildResult(null, [], warnings, errors);
34
+ }
35
+ if (!(query instanceof SelectQuery_1.SimpleSelectQuery)) {
36
+ warnings.push({
37
+ code: "UNSUPPORTED_ROOT_QUERY",
38
+ message: "Predicate reachability analysis currently supports only SimpleSelectQuery roots."
39
+ });
40
+ return this.buildResult(query, [], warnings, errors);
41
+ }
42
+ const predicates = this.analyzeScope(query, query, "scope:root", options);
43
+ return this.buildResult(query, predicates, warnings, errors);
44
+ }
45
+ analyzeScope(contextRoot, query, scopeId, options) {
46
+ if (!query.whereClause) {
47
+ return [];
48
+ }
49
+ return (0, PredicateExpressionUtils_1.collectTopLevelAndTerms)(query.whereClause.condition).map(term => {
50
+ const references = this.collectOuterColumnReferences(query, term);
51
+ const reaches = [{
52
+ scopeId,
53
+ relation: "origin",
54
+ mode: "rewrite_safe",
55
+ predicateSql: (0, SqlComponentFormatter_1.formatSqlComponent)(term, options)
56
+ }];
57
+ const blocked = [];
58
+ const direct = this.resolveDirectOutputReach(contextRoot, query, references);
59
+ if (direct) {
60
+ const rebased = this.rebasePredicate(term, direct.targetColumns, options);
61
+ reaches.push({
62
+ scopeId: direct.scopeId,
63
+ relation: "direct_output",
64
+ mode: "rewrite_safe",
65
+ predicateSql: (0, SqlComponentFormatter_1.formatSqlComponent)(rebased, options)
66
+ });
67
+ }
68
+ const joinReachability = this.resolveJoinEquivalenceReach(query, references, term, options);
69
+ reaches.push(...joinReachability.reaches);
70
+ blocked.push(...joinReachability.blocked);
71
+ return {
72
+ predicateSql: (0, SqlComponentFormatter_1.formatSqlComponent)(term, options),
73
+ originScopeId: scopeId,
74
+ columnReferences: references.map(PredicateExpressionUtils_1.columnReferenceText),
75
+ reaches,
76
+ blocked,
77
+ probeTargets: this.buildProbeTargets(reaches)
78
+ };
79
+ });
80
+ }
81
+ buildProbeTargets(reaches) {
82
+ return reaches.map(reach => ({
83
+ scopeId: reach.scopeId,
84
+ relation: reach.relation,
85
+ mode: reach.mode,
86
+ predicateSql: reach.predicateSql,
87
+ target: this.describeScopeTarget(reach.scopeId),
88
+ probeKinds: ["count", "sample"],
89
+ ...(reach.mode === "debug_only"
90
+ ? {
91
+ caution: "This target is inferred through a debug-only relationship and is not a safe SQL rewrite target."
92
+ }
93
+ : {})
94
+ }));
95
+ }
96
+ describeScopeTarget(scopeId) {
97
+ const [kind, ...rest] = scopeId.split(":");
98
+ const name = rest.join(":") || scopeId;
99
+ switch (kind) {
100
+ case "cte":
101
+ return { kind: "cte", name };
102
+ case "table":
103
+ return { kind: "table", name };
104
+ case "subquery":
105
+ return { kind: "subquery", name };
106
+ case "source":
107
+ return { kind: "source", name };
108
+ default:
109
+ return { kind: "scope", name };
110
+ }
111
+ }
112
+ resolveDirectOutputReach(contextRoot, query, references) {
113
+ if (references.length === 0 || !query.fromClause) {
114
+ return null;
115
+ }
116
+ const bindings = [];
117
+ for (const reference of references) {
118
+ const binding = this.resolveSourceBinding(query, reference);
119
+ if (!binding) {
120
+ return null;
121
+ }
122
+ if (!bindings.some(item => item.source === binding.source)) {
123
+ bindings.push(binding);
124
+ }
125
+ }
126
+ if (bindings.length !== 1) {
127
+ return null;
128
+ }
129
+ const binding = bindings[0];
130
+ const target = this.resolveSourceQuery(contextRoot, binding);
131
+ if (!target) {
132
+ return null;
133
+ }
134
+ const targetColumns = [];
135
+ for (const reference of references) {
136
+ const output = this.resolveDirectOutputColumn(contextRoot, target.query, reference.column.name);
137
+ if (!output || !(output.value instanceof ValueComponent_1.ColumnReference)) {
138
+ return null;
139
+ }
140
+ targetColumns.push({
141
+ sourceColumn: reference,
142
+ targetColumn: output.value
143
+ });
144
+ }
145
+ return {
146
+ query: target.query,
147
+ scopeId: target.scopeId,
148
+ targetColumns
149
+ };
150
+ }
151
+ resolveJoinEquivalenceReach(query, references, predicate, options) {
152
+ var _a;
153
+ const reaches = [];
154
+ const blocked = [];
155
+ if (!query.fromClause || references.length === 0) {
156
+ return { reaches, blocked };
157
+ }
158
+ const bindings = this.getSourceBindings(query.fromClause);
159
+ for (const join of (_a = query.fromClause.joins) !== null && _a !== void 0 ? _a : []) {
160
+ if (!(join.condition instanceof Clause_1.JoinOnClause)) {
161
+ continue;
162
+ }
163
+ const equalities = this.collectJoinEqualities(join.condition.condition);
164
+ for (const equality of equalities) {
165
+ for (const reference of references) {
166
+ const equivalent = (0, PredicateExpressionUtils_1.sameColumnReference)(reference, equality.left)
167
+ ? equality.right
168
+ : (0, PredicateExpressionUtils_1.sameColumnReference)(reference, equality.right)
169
+ ? equality.left
170
+ : null;
171
+ if (!equivalent) {
172
+ continue;
173
+ }
174
+ const targetBinding = this.resolveSourceBindingFromList(bindings, equivalent);
175
+ if (!targetBinding) {
176
+ continue;
177
+ }
178
+ const via = [(0, SqlComponentFormatter_1.formatSqlComponent)(equality.expression, options)];
179
+ const rebased = this.rebasePredicate(predicate, [{
180
+ sourceColumn: reference,
181
+ targetColumn: equivalent
182
+ }], options);
183
+ const scopeId = this.scopeIdForBinding(null, targetBinding);
184
+ if (!this.isInnerJoin(join)) {
185
+ blocked.push({
186
+ scopeId,
187
+ relation: "join_equivalence",
188
+ code: "OUTER_JOIN_EQUIVALENCE_UNSUPPORTED",
189
+ reason: "JOIN equivalence debug reachability is reported only for INNER JOIN predicates in this safe diagnostic API.",
190
+ via
191
+ });
192
+ continue;
193
+ }
194
+ reaches.push({
195
+ scopeId,
196
+ relation: "join_equivalence",
197
+ mode: "debug_only",
198
+ predicateSql: (0, SqlComponentFormatter_1.formatSqlComponent)(rebased, options),
199
+ via
200
+ });
201
+ }
202
+ }
203
+ }
204
+ return { reaches, blocked };
205
+ }
206
+ collectJoinEqualities(expression) {
207
+ const candidate = (0, PredicateExpressionUtils_1.unwrapParens)(expression);
208
+ if ((0, PredicateExpressionUtils_1.isBinaryOperator)(candidate, "and")) {
209
+ return [
210
+ ...this.collectJoinEqualities(candidate.left),
211
+ ...this.collectJoinEqualities(candidate.right)
212
+ ];
213
+ }
214
+ if (candidate instanceof ValueComponent_1.BinaryExpression
215
+ && candidate.operator.value.trim() === "="
216
+ && (0, PredicateExpressionUtils_1.unwrapParens)(candidate.left) instanceof ValueComponent_1.ColumnReference
217
+ && (0, PredicateExpressionUtils_1.unwrapParens)(candidate.right) instanceof ValueComponent_1.ColumnReference) {
218
+ return [{
219
+ expression: candidate,
220
+ left: (0, PredicateExpressionUtils_1.unwrapParens)(candidate.left),
221
+ right: (0, PredicateExpressionUtils_1.unwrapParens)(candidate.right)
222
+ }];
223
+ }
224
+ return [];
225
+ }
226
+ resolveSourceQuery(contextRoot, binding) {
227
+ const source = binding.source.datasource;
228
+ if (source instanceof Clause_1.SubQuerySource && source.query instanceof SelectQuery_1.SimpleSelectQuery) {
229
+ return {
230
+ query: source.query,
231
+ scopeId: `subquery:${binding.alias}`
232
+ };
233
+ }
234
+ if (!(source instanceof Clause_1.TableSource)) {
235
+ return null;
236
+ }
237
+ const cte = this.findCte(contextRoot, source.table.name);
238
+ if (!cte || !(cte.query instanceof SelectQuery_1.SimpleSelectQuery)) {
239
+ return null;
240
+ }
241
+ return {
242
+ query: cte.query,
243
+ scopeId: `cte:${cte.getSourceAliasName()}`
244
+ };
245
+ }
246
+ resolveDirectOutputColumn(contextRoot, query, columnName) {
247
+ const matches = this.collectSelectOutputs(contextRoot, query)
248
+ .filter(item => (0, PredicateExpressionUtils_1.identifiersEqual)(item.name, columnName));
249
+ return matches.length === 1 ? matches[0] : null;
250
+ }
251
+ collectSelectOutputs(root, query) {
252
+ var _a, _b, _c, _d;
253
+ const commonTables = [
254
+ ...((_b = (_a = query.withClause) === null || _a === void 0 ? void 0 : _a.tables) !== null && _b !== void 0 ? _b : []),
255
+ ...((_d = (_c = root.withClause) === null || _c === void 0 ? void 0 : _c.tables) !== null && _d !== void 0 ? _d : [])
256
+ ];
257
+ const collector = new SelectOutputCollector_1.SelectOutputCollector(null, commonTables.length > 0 ? commonTables : null);
258
+ return collector.collect(query);
259
+ }
260
+ findCte(root, name) {
261
+ var _a, _b;
262
+ const normalized = (0, PredicateExpressionUtils_1.normalizeIdentifier)(name);
263
+ const matches = ((_b = (_a = root.withClause) === null || _a === void 0 ? void 0 : _a.tables) !== null && _b !== void 0 ? _b : [])
264
+ .filter(table => (0, PredicateExpressionUtils_1.normalizeIdentifier)(table.getSourceAliasName()) === normalized);
265
+ return matches.length === 1 ? matches[0] : null;
266
+ }
267
+ resolveSourceBinding(query, column) {
268
+ if (!query.fromClause) {
269
+ return null;
270
+ }
271
+ return this.resolveSourceBindingFromList(this.getSourceBindings(query.fromClause), column);
272
+ }
273
+ resolveSourceBindingFromList(bindings, column) {
274
+ const namespace = column.getNamespace();
275
+ if (namespace) {
276
+ const matches = bindings.filter(binding => (0, PredicateExpressionUtils_1.identifiersEqual)(binding.alias, namespace));
277
+ return matches.length === 1 ? matches[0] : null;
278
+ }
279
+ return bindings.length === 1 ? bindings[0] : null;
280
+ }
281
+ getSourceBindings(fromClause) {
282
+ var _a, _b, _c;
283
+ const bindings = [{
284
+ source: fromClause.source,
285
+ alias: (_a = fromClause.source.getAliasName()) !== null && _a !== void 0 ? _a : "",
286
+ join: null,
287
+ isPrimary: true
288
+ }];
289
+ for (const join of (_b = fromClause.joins) !== null && _b !== void 0 ? _b : []) {
290
+ bindings.push({
291
+ source: join.source,
292
+ alias: (_c = join.source.getAliasName()) !== null && _c !== void 0 ? _c : "",
293
+ join,
294
+ isPrimary: false
295
+ });
296
+ }
297
+ return bindings;
298
+ }
299
+ scopeIdForBinding(contextRoot, binding) {
300
+ const source = binding.source.datasource;
301
+ if (source instanceof Clause_1.SubQuerySource) {
302
+ return `subquery:${binding.alias}`;
303
+ }
304
+ if (source instanceof Clause_1.TableSource) {
305
+ if (contextRoot && this.findCte(contextRoot, source.table.name)) {
306
+ return `cte:${source.table.name}`;
307
+ }
308
+ return `table:${source.getSourceName()}`;
309
+ }
310
+ return `source:${binding.alias || "unknown"}`;
311
+ }
312
+ isInnerJoin(join) {
313
+ const joinType = join.joinType.value.trim().toLowerCase();
314
+ return joinType === "join" || joinType === "inner join";
315
+ }
316
+ rebasePredicate(expression, targetColumns, options) {
317
+ const cloned = (0, PredicateExpressionUtils_1.cloneValueComponent)(expression, options);
318
+ const visit = (value) => {
319
+ const candidate = (0, PredicateExpressionUtils_1.unwrapParens)(value);
320
+ if (candidate instanceof ValueComponent_1.ColumnReference) {
321
+ const target = targetColumns.find(item => (0, PredicateExpressionUtils_1.sameColumnReference)(candidate, item.sourceColumn));
322
+ if (target) {
323
+ candidate.qualifiedName = (0, PredicateExpressionUtils_1.cloneColumnReference)(target.targetColumn).qualifiedName;
324
+ }
325
+ return;
326
+ }
327
+ if (candidate instanceof ValueComponent_1.BinaryExpression) {
328
+ visit(candidate.left);
329
+ visit(candidate.right);
330
+ return;
331
+ }
332
+ if (candidate instanceof ValueComponent_1.UnaryExpression) {
333
+ visit(candidate.expression);
334
+ return;
335
+ }
336
+ if (candidate instanceof ValueComponent_1.InlineQuery) {
337
+ return;
338
+ }
339
+ if (candidate instanceof ValueComponent_1.FunctionCall) {
340
+ if (candidate.argument) {
341
+ visit(candidate.argument);
342
+ }
343
+ if (candidate.filterCondition) {
344
+ visit(candidate.filterCondition);
345
+ }
346
+ return;
347
+ }
348
+ if (candidate instanceof ValueComponent_1.CastExpression) {
349
+ visit(candidate.input);
350
+ return;
351
+ }
352
+ if (candidate instanceof ValueComponent_1.CaseExpression) {
353
+ if (candidate.condition) {
354
+ visit(candidate.condition);
355
+ }
356
+ for (const pair of candidate.switchCase.cases) {
357
+ visit(pair.key);
358
+ visit(pair.value);
359
+ }
360
+ if (candidate.switchCase.elseValue) {
361
+ visit(candidate.switchCase.elseValue);
362
+ }
363
+ return;
364
+ }
365
+ if (candidate instanceof ValueComponent_1.BetweenExpression) {
366
+ visit(candidate.expression);
367
+ visit(candidate.lower);
368
+ visit(candidate.upper);
369
+ return;
370
+ }
371
+ if (candidate instanceof ValueComponent_1.JsonPredicateExpression) {
372
+ visit(candidate.expression);
373
+ return;
374
+ }
375
+ if (candidate instanceof ValueComponent_1.ArrayExpression) {
376
+ visit(candidate.expression);
377
+ return;
378
+ }
379
+ if (candidate instanceof ValueComponent_1.ArrayQueryExpression) {
380
+ return;
381
+ }
382
+ if (candidate instanceof ValueComponent_1.ValueList) {
383
+ candidate.values.forEach(visit);
384
+ return;
385
+ }
386
+ if (candidate instanceof ValueComponent_1.TupleExpression) {
387
+ candidate.values.forEach(visit);
388
+ return;
389
+ }
390
+ if (candidate instanceof ValueComponent_1.TypeValue && candidate.argument) {
391
+ visit(candidate.argument);
392
+ }
393
+ };
394
+ visit(cloned);
395
+ return cloned;
396
+ }
397
+ collectOuterColumnReferences(query, expression) {
398
+ var _a, _b;
399
+ const references = [];
400
+ const sourceAliases = new Set(((_b = (_a = query.fromClause) === null || _a === void 0 ? void 0 : _a.getSources()) !== null && _b !== void 0 ? _b : [])
401
+ .map(source => source.getAliasName())
402
+ .filter((alias) => alias !== null)
403
+ .map(PredicateExpressionUtils_1.normalizeIdentifier));
404
+ const collect = (reference) => {
405
+ if (!references.some(existing => (0, PredicateExpressionUtils_1.sameColumnReference)(existing, reference))) {
406
+ references.push(reference);
407
+ }
408
+ };
409
+ const visit = (value) => {
410
+ const candidate = (0, PredicateExpressionUtils_1.unwrapParens)(value);
411
+ if (candidate instanceof ValueComponent_1.ColumnReference) {
412
+ const namespace = (0, PredicateExpressionUtils_1.normalizeIdentifier)(candidate.getNamespace());
413
+ if (!namespace || sourceAliases.has(namespace)) {
414
+ collect(candidate);
415
+ }
416
+ return;
417
+ }
418
+ if (candidate instanceof ValueComponent_1.BinaryExpression) {
419
+ visit(candidate.left);
420
+ visit(candidate.right);
421
+ return;
422
+ }
423
+ if (candidate instanceof ValueComponent_1.UnaryExpression) {
424
+ visit(candidate.expression);
425
+ return;
426
+ }
427
+ if (candidate instanceof ValueComponent_1.InlineQuery) {
428
+ return;
429
+ }
430
+ if (candidate instanceof ValueComponent_1.FunctionCall) {
431
+ if (candidate.argument) {
432
+ visit(candidate.argument);
433
+ }
434
+ if (candidate.filterCondition) {
435
+ visit(candidate.filterCondition);
436
+ }
437
+ return;
438
+ }
439
+ if (candidate instanceof ValueComponent_1.CastExpression) {
440
+ visit(candidate.input);
441
+ return;
442
+ }
443
+ if (candidate instanceof ValueComponent_1.CaseExpression) {
444
+ if (candidate.condition) {
445
+ visit(candidate.condition);
446
+ }
447
+ for (const pair of candidate.switchCase.cases) {
448
+ visit(pair.key);
449
+ visit(pair.value);
450
+ }
451
+ if (candidate.switchCase.elseValue) {
452
+ visit(candidate.switchCase.elseValue);
453
+ }
454
+ return;
455
+ }
456
+ if (candidate instanceof ValueComponent_1.BetweenExpression) {
457
+ visit(candidate.expression);
458
+ visit(candidate.lower);
459
+ visit(candidate.upper);
460
+ return;
461
+ }
462
+ if (candidate instanceof ValueComponent_1.JsonPredicateExpression) {
463
+ visit(candidate.expression);
464
+ return;
465
+ }
466
+ if (candidate instanceof ValueComponent_1.ArrayExpression) {
467
+ visit(candidate.expression);
468
+ return;
469
+ }
470
+ if (candidate instanceof ValueComponent_1.ArrayQueryExpression) {
471
+ return;
472
+ }
473
+ if (candidate instanceof ValueComponent_1.ValueList) {
474
+ candidate.values.forEach(visit);
475
+ return;
476
+ }
477
+ if (candidate instanceof ValueComponent_1.TupleExpression) {
478
+ candidate.values.forEach(visit);
479
+ return;
480
+ }
481
+ if (candidate instanceof ValueComponent_1.TypeValue && candidate.argument) {
482
+ visit(candidate.argument);
483
+ }
484
+ };
485
+ visit(expression);
486
+ return references;
487
+ }
488
+ buildResult(query, predicates, warnings, errors) {
489
+ // API output shape review: this diagnostic API reports structured reachability only and never emits rewritten SQL.
490
+ return {
491
+ ok: errors.length === 0,
492
+ query,
493
+ predicates,
494
+ warnings,
495
+ errors,
496
+ safety: {
497
+ mode: "debug_only",
498
+ sqlRewritten: false
499
+ }
500
+ };
501
+ }
502
+ }
503
+ exports.PredicateReachabilityAnalyzer = PredicateReachabilityAnalyzer;
504
+ const analyzePredicateReachability = (input, options = {}) => {
505
+ return new PredicateReachabilityAnalyzer().analyze(input, options);
506
+ };
507
+ exports.analyzePredicateReachability = analyzePredicateReachability;
508
+ //# sourceMappingURL=PredicateReachabilityAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PredicateReachabilityAnalyzer.js","sourceRoot":"","sources":["../../src/transformers/PredicateReachabilityAnalyzer.ts"],"names":[],"mappings":"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"}