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