@quereus/quereus 4.16.0 → 4.17.1
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/src/core/database-auto-analyze.d.ts +258 -0
- package/dist/src/core/database-auto-analyze.d.ts.map +1 -0
- package/dist/src/core/database-auto-analyze.js +616 -0
- package/dist/src/core/database-auto-analyze.js.map +1 -0
- package/dist/src/core/database-materialized-views.d.ts +42 -1
- package/dist/src/core/database-materialized-views.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.js +76 -3
- package/dist/src/core/database-materialized-views.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +17 -0
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +37 -0
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database.d.ts +8 -1
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +135 -5
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +8 -8
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +27 -14
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/expression-fingerprint.d.ts.map +1 -1
- package/dist/src/planner/analysis/expression-fingerprint.js +23 -2
- package/dist/src/planner/analysis/expression-fingerprint.js.map +1 -1
- package/dist/src/planner/analysis/mv-body-functions.d.ts +46 -0
- package/dist/src/planner/analysis/mv-body-functions.d.ts.map +1 -0
- package/dist/src/planner/analysis/mv-body-functions.js +65 -0
- package/dist/src/planner/analysis/mv-body-functions.js.map +1 -0
- package/dist/src/planner/analysis/predicate-shape.d.ts +32 -4
- package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.js +37 -5
- package/dist/src/planner/analysis/predicate-shape.js.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +2 -2
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.js +46 -6
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
- package/dist/src/planner/analysis/sat-checker.js +2 -5
- package/dist/src/planner/analysis/sat-checker.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +17 -5
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +122 -79
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.d.ts +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +73 -55
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +28 -0
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +33 -0
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +3 -2
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/optimizer-tuning.d.ts +10 -6
- package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
- package/dist/src/planner/optimizer-tuning.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +49 -0
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js +8 -4
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts +14 -0
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +5 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +3 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +8 -3
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.d.ts +47 -0
- package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.d.ts.map +1 -0
- package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.js +200 -0
- package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.js.map +1 -0
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts +29 -0
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +55 -16
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.d.ts +96 -22
- package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.js +401 -82
- package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +20 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +23 -4
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js +7 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +19 -2
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +262 -40
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +24 -4
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
- package/dist/src/planner/rules/join/rule-semi-join-pushdown.d.ts +107 -0
- package/dist/src/planner/rules/join/rule-semi-join-pushdown.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-semi-join-pushdown.js +214 -0
- package/dist/src/planner/rules/join/rule-semi-join-pushdown.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +2 -1
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts +21 -0
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +24 -6
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/rules/shared/access-leaf.d.ts +12 -12
- package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -1
- package/dist/src/planner/rules/shared/access-leaf.js +3 -14
- package/dist/src/planner/rules/shared/access-leaf.js.map +1 -1
- package/dist/src/planner/stats/catalog-stats.d.ts.map +1 -1
- package/dist/src/planner/stats/catalog-stats.js +6 -10
- package/dist/src/planner/stats/catalog-stats.js.map +1 -1
- package/dist/src/planner/type-utils.d.ts.map +1 -1
- package/dist/src/planner/type-utils.js +3 -5
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +4 -7
- package/dist/src/planner/util/fd-utils.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +58 -4
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +5 -3
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/fanout-lookup-join.js +9 -1
- package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -1
- package/dist/src/runtime/emit/limit-offset.d.ts.map +1 -1
- package/dist/src/runtime/emit/limit-offset.js +50 -24
- package/dist/src/runtime/emit/limit-offset.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +33 -2
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.js +61 -5
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view.js +6 -1
- package/dist/src/runtime/emit/materialized-view.js.map +1 -1
- package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -1
- package/dist/src/runtime/emit/ordinal-slice.js +8 -0
- package/dist/src/runtime/emit/ordinal-slice.js.map +1 -1
- package/dist/src/schema/derivation.d.ts +15 -1
- package/dist/src/schema/derivation.d.ts.map +1 -1
- package/dist/src/schema/derivation.js.map +1 -1
- package/dist/src/schema/function.d.ts +9 -4
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js +11 -9
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/schema.d.ts +14 -3
- package/dist/src/schema/schema.d.ts.map +1 -1
- package/dist/src/schema/schema.js +20 -2
- package/dist/src/schema/schema.js.map +1 -1
- package/dist/src/schema/table.d.ts +27 -0
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +55 -0
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +6 -13
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
- package/dist/src/schema/unique-enforcement.js +8 -17
- package/dist/src/schema/unique-enforcement.js.map +1 -1
- package/dist/src/util/comparison.d.ts +19 -0
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +22 -0
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +10 -0
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-join-physical-selection.js","sourceRoot":"","sources":["../../../../../src/planner/rules/join/rule-join-physical-selection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rule-join-physical-selection.js","sourceRoot":"","sources":["../../../../../src/planner/rules/join/rule-join-physical-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAqB,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,wCAAwC,CAAC;AAErG,OAAO,EACN,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,8BAA8B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAiC,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAEpF,MAAM,GAAG,GAAG,YAAY,CAAC,wCAAwC,CAAC,CAAC;AAEnE,4FAA4F;AAC5F,SAAS,eAAe,CAAC,KAA8B;IACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,wBAAwB,CAAC,IAAc;IAC/C,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO;WAC5B,CAAC,IAAI,CAAC,mBAAmB;WACzB,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;WACzD,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,SAAS,sBAAsB,CAC9B,IAAc,EACd,OAAmB,EACnB,SAAiB,EACjB,cAAsB;IAEtB,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,IAAI,cAAc,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,OAAO,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,GAAG,cAAc,CAAC;AAC9F,CAAC;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,SAAS,yBAAyB,CACjC,IAAc,EACd,KAAyB,EACzB,SAA0C,EAC1C,QAA0B,EAC1B,aAA+C,EAC/C,SAAiB,EACjB,cAAsB,EACtB,MAAmC;IAEnC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACpD,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,0EAA0E;IAC1E,IAAI,SAAS,CAAC,gBAAgB,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;IACjC,oEAAoE;IACpE,MAAM,MAAM,GAAqB;QAChC,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,SAAU,CAAC;QACzD,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB;QAChE,WAAW,EAAE,KAAK,CAAC,aAAa,EAAE;QAClC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,eAAe,KAAK,KAAK;KACzD,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IACjG,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,8BAA8B,CAC1C,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC;IAC1F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC9B,MAA0B,EAC1B,SAAkC,EAClC,IAAsB,EACtB,KAA4C;IAE5C,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACpE,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,kDAAkD;QAClD,MAAM,MAAM,GAAG,IAAI,mBAAmB,CACrC,KAAK,EACL,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAC1D,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,EAAE,EACP,GAAG,CACH,CAAC;QACF,OAAO;YACN,UAAU,EAAE,MAAwB;YACpC,SAAS,EAAE,KAAc;YACzB,KAAK,EAAE,SAAS;SAChB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAc,EAAE,OAAmB;IAC5E,oEAAoE;IACpE,IAAI,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAE/B,4CAA4C;IAC5C,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAE3G,6CAA6C;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAExD,gFAAgF;IAChF,kFAAkF;IAClF,MAAM,SAAS,GACd,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAE7D,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhE,4EAA4E;IAC5E,oEAAoE;IACpE,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,uDAAuD;IACvD,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpF,GAAG,CAAC,kFAAkF,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC;IACb,CAAC;IAED,gFAAgF;IAChF,2EAA2E;IAC3E,yEAAyE;IACzE,4EAA4E;IAC5E,sEAAsE;IACtE,yEAAyE;IACzE,0EAA0E;IAC1E,uDAAuD;IACvD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;IAC1E,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;IAE7E,8EAA8E;IAC9E,6EAA6E;IAC7E,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,4BAA4B;IAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC;IAElE,8EAA8E;IAC9E,yEAAyE;IACzE,uBAAuB;IACvB,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC;UACnD,aAAa;UACb,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAEnE,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,yEAAyE;IACzE,uEAAuE;IACvE,yDAAyD;IACzD,MAAM,OAAO,GAAG,kBAAkB,CACjC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE1E,2EAA2E;IAC3E,yEAAyE;IACzE,6EAA6E;IAC7E,uEAAuE;IACvE,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,UAAU,GAAoC,wBAAwB,CAAC,IAAI,CAAC;QACjF,CAAC,CAAC,kBAAkB,CACnB,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC;QAC1F,CAAC,CAAC,IAAI,CAAC;IAER,6EAA6E;IAC7E,wEAAwE;IACxE,8EAA8E;IAC9E,6EAA6E;IAC7E,2EAA2E;IAC3E,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtE,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEhF,4EAA4E;IAC5E,yEAAyE;IACzE,uEAAuE;IACvE,4EAA4E;IAC5E,qEAAqE;IACrE,2BAA2B;IAC3B,MAAM,kBAAkB,GAAG,GAAa,EAAE;QACzC,GAAG,CAAC,gEAAgE,EAAE,OAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/F,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAU,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC;IACF,uEAAuE;IACvE,0EAA0E;IAC1E,4EAA4E;IAC5E,sEAAsE;IACtE,6EAA6E;IAC7E,yEAAyE;IACzE,uEAAuE;IACvE,sEAAsE;IACtE,iEAAiE;IACjE,wEAAwE;IACxE,uEAAuE;IACvE,4EAA4E;IAC5E,6EAA6E;IAC7E,oEAAoE;IACpE,0EAA0E;IAC1E,MAAM,qBAAqB,GAAG,GAAa,EAAE;QAC5C,GAAG,CAAC,2FAA2F,EAC9F,UAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC9B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAW,CAAC,QAAQ,EAAE,OAAO,EACxE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,gFAAgF;IAChF,gFAAgF;IAChF,gFAAgF;IAChF,4EAA4E;IAC5E,8EAA8E;IAC9E,0EAA0E;IAC1E,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9B,IAAI,WAAW,GAAG,MAAM;YAAE,OAAO,kBAAkB,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,8EAA8E;IAC9E,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,EAAiB,CAAC;IAElE,4EAA4E;IAC5E,yEAAyE;IACzE,yEAAyE;IACzE,iEAAiE;IACjE,yEAAyE;IACzE,yEAAyE;IACzE,sBAAsB;IACtB,MAAM,SAAS,GAAG,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM;QAC5D,CAAC,CAAC,yBAAyB,CAC1B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrG,CAAC,CAAC,IAAI,CAAC;IACR,MAAM,iBAAiB,GAAG,yBAAyB,CAClD,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvG,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5D,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEpF,kDAAkD;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAEzD,sEAAsE;IACtE,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,yEAAyE;IACzE,wDAAwD;IACxD,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAEzE,iEAAiE;IACjE,iEAAiE;IACjE,IAAI,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC;IACzC,IAAI,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAC1E,IAAI,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAC7E,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,wBAAwB,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClF,IAAI,SAAS,EAAE,CAAC;YACf,cAAc,GAAG,SAAS,CAAC;YAC3B,WAAW,GAAG,IAAI,CAAC;YACnB,YAAY,GAAG,IAAI,CAAC;QACrB,CAAC;IACF,CAAC;IACD,MAAM,cAAc,GAAG,cAAc;QACpC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC;QACjE,CAAC,CAAC,QAAQ,CAAC;IAEZ,6EAA6E;IAC7E,0DAA0D;IAC1D,MAAM,SAAS,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC;IACjE,MAAM,UAAU,GAAG,cAAc,GAAG,aAAa,GAAG,cAAc,CAAC;IAenE,IAAI,QAAQ,GAAa,aAAa,CAAC;IACvC,IAAI,QAAQ,GAAG,MAAM,CAAC;IAEtB,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;QAC1B,QAAQ,GAAG,MAAM,CAAC;QAClB,QAAQ,GAAG,SAAS,CAAC;IACtB,CAAC;IACD,IAAI,UAAU,GAAG,QAAQ,EAAE,CAAC;QAC3B,QAAQ,GAAG,OAAO,CAAC;QACnB,QAAQ,GAAG,UAAU,CAAC;IACvB,CAAC;IACD,IAAI,WAAW,GAAG,QAAQ,EAAE,CAAC;QAC5B,QAAQ,GAAG,UAAU,CAAC;QACtB,QAAQ,GAAG,WAAW,CAAC;IACxB,CAAC;IACD,IAAI,aAAa,GAAG,QAAQ,EAAE,CAAC;QAC9B,QAAQ,GAAG,kBAAkB,CAAC;QAC9B,QAAQ,GAAG,aAAa,CAAC;IAC1B,CAAC;IACD,IAAI,cAAc,GAAG,QAAQ,EAAE,CAAC;QAC/B,QAAQ,GAAG,mBAAmB,CAAC;QAC/B,QAAQ,GAAG,cAAc,CAAC;IAC3B,CAAC;IACD,IAAI,qBAAqB,GAAG,QAAQ,EAAE,CAAC;QACtC,QAAQ,GAAG,2BAA2B,CAAC;QACvC,QAAQ,GAAG,qBAAqB,CAAC;IAClC,CAAC;IAED,6FAA6F;IAC7F,MAAM,KAAK,GAAG,gHAAgH,CAAC;IAC/H,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,CAAC,CAAC;IAEpH,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAChC,GAAG,CAAC,yBAAyB,KAAK,oBAAoB,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,kBAAkB,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;QACtC,OAAO,qBAAqB,EAAE,CAAC;IAChC,CAAC;IACD,wEAAwE;IACxE,+CAA+C;IAC/C,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;QACrC,GAAG,CAAC,6CAA6C,KAAK,qBAAqB,EAAE,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpG,OAAO,SAAU,CAAC,IAAI,CAAC;IACxB,CAAC;IACD,IAAI,QAAQ,KAAK,2BAA2B,EAAE,CAAC;QAC9C,GAAG,CAAC,sDAAsD,KAAK,uCAAuC,EACrG,GAAG,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzB,OAAO,iBAAkB,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,GAAG,CAAC,sBAAsB,KAAK,oBAAoB,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEjG,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1B,kDAAkD;QAClD,IAAI,UAAU,GAAuB,IAAI,CAAC,IAAI,CAAC;QAC/C,IAAI,WAAW,GAAuB,IAAI,CAAC,KAAK,CAAC;QAEjD,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACnF,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtF,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAC3C,CAAC;QAED,0EAA0E;QAC1E,sEAAsE;QACtE,4EAA4E;QAC5E,qEAAqE;QACrE,OAAO,IAAI,aAAa,CACvB,IAAI,CAAC,KAAK,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,cAAc,EACd,SAAS,CAAC,QAAQ,EAClB,aAAa,CACb,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,+DAA+D;IAC/D,sEAAsE;IACtE,gEAAgE;IAChE,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;IAC5B,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACpC,IAAI,SAAS,GAAG,aAAa,CAAC;IAE9B,sEAAsE;IACtE,oEAAoE;IACpE,yEAAyE;IACzE,qEAAqE;IACrE,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,GAAG,SAAS;WAC5C,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;WACzD,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,gDAAgD;QAChD,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACjD,yEAAyE;QACzE,4EAA4E;QAC5E,4DAA4D;QAC5D,2EAA2E;QAC3E,yEAAyE;QACzE,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,0EAA0E;QAC1E,mDAAmD;QACnD,sEAAsE;QACtE,wEAAwE;QACxE,uEAAuE;QACvE,sDAAsD;QACtD,SAAS,GAAG;YACX,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;YACxC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC;SAC3C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,aAAa,CACvB,IAAI,CAAC,KAAK,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,SAAS,EACT,SAAS,CAAC,QAAQ,EAClB,SAAS,CACT,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-quickpick-enumeration.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/join/rule-quickpick-enumeration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAsC,MAAM,0BAA0B,CAAC;AAE7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-quickpick-enumeration.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/join/rule-quickpick-enumeration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAsC,MAAM,0BAA0B,CAAC;AAE7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAkO7D,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAsFjG"}
|
|
@@ -26,15 +26,35 @@ function extractJoinGraph(node) {
|
|
|
26
26
|
pairToConds.set(key, []);
|
|
27
27
|
pairToConds.get(key).push(cond);
|
|
28
28
|
}
|
|
29
|
+
// Enumeration covers INNER/CROSS spines only. A non-inner join anywhere in the
|
|
30
|
+
// subtree abandons the whole graph — it must be a latched flag, NOT a sentinel
|
|
31
|
+
// written into `relations`: the recursion continues in the ancestor frames after
|
|
32
|
+
// a bail, so an emptied `relations` is refilled by the still-unvisited siblings
|
|
33
|
+
// and a PARTIAL graph then looks like a complete one. That silently reordered a
|
|
34
|
+
// join over the surviving relations and dropped the bailed subtree along with
|
|
35
|
+
// every predicate touching it (wrong rows, or "No row context found for column").
|
|
36
|
+
//
|
|
37
|
+
// NOTE: bailing is stricter than necessary — a non-inner join could instead be
|
|
38
|
+
// registered as ONE opaque leaf relation (its attributes are all this walk needs)
|
|
39
|
+
// and the surviving spine still enumerated. That matters because
|
|
40
|
+
// `rule-semi-join-pushdown` now routinely parks a semi join at the bottom of an
|
|
41
|
+
// inner spine, so `a join b join c where a.x in (select …)` loses enumeration it
|
|
42
|
+
// used to get. Revisit if a 3+-relation join under an `IN (SELECT …)` filter shows
|
|
43
|
+
// up with a bad join order; the opaque-leaf variant needs its own correlation
|
|
44
|
+
// guard first (a LATERAL leaf must not be reordered below its provider).
|
|
45
|
+
let bailed = false;
|
|
29
46
|
function visit(n) {
|
|
47
|
+
if (bailed)
|
|
48
|
+
return;
|
|
30
49
|
if (n instanceof JoinNode) {
|
|
31
|
-
// Only enumerate INNER/CROSS joins; bail if OUTER join encountered
|
|
32
50
|
if (n.getJoinType() !== 'inner' && n.getJoinType() !== 'cross') {
|
|
33
|
-
|
|
51
|
+
bailed = true;
|
|
34
52
|
return;
|
|
35
53
|
}
|
|
36
54
|
visit(n.getLeftSource());
|
|
37
55
|
visit(n.getRightSource());
|
|
56
|
+
if (bailed)
|
|
57
|
+
return;
|
|
38
58
|
// Analyze equi-join predicates
|
|
39
59
|
const cond = n.getJoinCondition();
|
|
40
60
|
if (cond) {
|
|
@@ -67,8 +87,8 @@ function extractJoinGraph(node) {
|
|
|
67
87
|
visit(c);
|
|
68
88
|
}
|
|
69
89
|
visit(node);
|
|
70
|
-
if (relations.length === 0)
|
|
71
|
-
return null; //
|
|
90
|
+
if (bailed || relations.length === 0)
|
|
91
|
+
return null; // non-inner join encountered, or non-join
|
|
72
92
|
// Build predicates array (AND-combine multiple per pair later during plan build)
|
|
73
93
|
const predicates = [];
|
|
74
94
|
for (const [key, conds] of pairToConds) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-quickpick-enumeration.js","sourceRoot":"","sources":["../../../../../src/planner/rules/join/rule-quickpick-enumeration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rule-quickpick-enumeration.js","sourceRoot":"","sources":["../../../../../src/planner/rules/join/rule-quickpick-enumeration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,GAAG,GAAG,YAAY,CAAC,0BAA0B,CAAC,CAAC;AAarD,SAAS,gBAAgB,CAAC,IAAc;IACtC,4FAA4F;IAC5F,MAAM,SAAS,GAAyB,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;IAExD,SAAS,WAAW,CAAC,GAAuB;QAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;QAC7B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;YACvC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY,EAAE,IAAoB;QACnE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACpD,WAAW,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,+EAA+E;IAC/E,+EAA+E;IAC/E,iFAAiF;IACjF,gFAAgF;IAChF,gFAAgF;IAChF,8EAA8E;IAC9E,kFAAkF;IAClF,EAAE;IACF,+EAA+E;IAC/E,kFAAkF;IAClF,iEAAiE;IACjE,gFAAgF;IAChF,iFAAiF;IACjF,mFAAmF;IACnF,8EAA8E;IAC9E,yEAAyE;IACzE,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,SAAS,KAAK,CAAC,CAAW;QACxB,IAAI,MAAM;YAAE,OAAO;QACnB,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;gBAC/D,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO;YACT,CAAC;YACD,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;YAC1B,IAAI,MAAM;gBAAE,OAAO;YAEnB,+BAA+B;YAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAClC,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM,KAAK,GAAqB,CAAC,IAAI,CAAC,CAAC;gBACvC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;oBACpB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;oBAC1B,IAAI,IAAI,YAAY,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;wBACvE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACpC,CAAC;yBAAM,IAAI,IAAI,YAAY,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;wBAC5E,IAAI,IAAI,CAAC,IAAI,YAAY,mBAAmB,IAAI,IAAI,CAAC,KAAK,YAAY,mBAAmB,EAAE,CAAC;4BAC1F,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAE,IAAI,CAAC,IAA4B,CAAC,WAAW,CAAC,CAAC;4BAC7E,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAE,IAAI,CAAC,KAA6B,CAAC,WAAW,CAAC,CAAC;4BAC9E,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gCAC9D,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;4BAChC,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,WAAW,CAAC,CAAC,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QACD,sCAAsC;QACtC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;YAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,IAAI,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,0CAA0C;IAE7F,iFAAiF;IACjF,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7B,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACzE,IAAI,YAAY,CACd,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAClB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,EAChF,GAAG,EACH,GAAG,CACJ,CACF,CAAC;QACF,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAwB;IAChD,mGAAmG;IACnG,oFAAoF;IACpF,2EAA2E;IAC3E,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAe,EAAE,KAAgB;IAC1D,IAAI,OAAO,GAA8B,IAAI,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAClC,4DAA4D;QAC5D,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC;YACxH,IAAI,QAAQ;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAChF,GAAG;YACD,CAAC,CAAC,IAAI,YAAY,CACd,OAAQ,CAAC,KAAK,EACd,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,EAChF,GAAG,EACH,GAAG,CACJ;YACH,CAAC,CAAC,GAAG,EACP,SAAuC,CAAC,CAAC;QAC3C,OAAO,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACpE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,OAAQ,CAAC;AAClB,CAAC;AAED,yFAAyF;AACzF,SAAS,cAAc,CAAC,KAAgB;IAEtC,MAAM,UAAU,GAAgB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpG,SAAS,iBAAiB,CAAC,CAAY,EAAE,CAAY;QACnD,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;YACjD,IAAI,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAC/B,GAAG;YACD,CAAC,CAAC,IAAI,YAAY,CACd,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EACxB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,EAChF,GAAG,EACH,GAAG,CACJ;YACH,CAAC,CAAC,GAAG,EACP,SAAuC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACxC,IAAI,QAAQ,GAA8B,IAAI,CAAC;QAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBACzE,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBACtC,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;oBACpB,QAAQ,GAAG,IAAI,CAAC;oBAChB,KAAK,GAAG,CAAC,CAAC;oBACV,KAAK,GAAG,CAAC,CAAC;oBACV,QAAQ,GAAG,MAAM,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAc,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,QAAS,EAAE,CAAC;QAC9F,4BAA4B;QAC5B,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5B,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAc,EAAE,OAAmB;IAC9E,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;IACpC,IAAI,CAAC,EAAE,EAAE,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,gCAAgC;IAE7E,sEAAsE;IACtE,wEAAwE;IACxE,wDAAwD;IACxD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,uBAAuB,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,gDAAgD,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAqC,CAAC,CAAC;IAC7E,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC,cAAc,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzD,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,IAAI,GAAG,CAAC;IACpC,IAAI,QAAQ,GAA8B,IAAI,CAAC;IAC/C,IAAI,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAExC,8EAA8E;IAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,GAAG,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3E,yDAAyD;QACzD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAa,CAAC,QAAQ,CAAC,CAAC;QAEnC,OAAO,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,QAAQ,GAAkB,IAAI,CAAC;YACnC,IAAI,WAAW,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAE3C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,gFAAgF;gBAChF,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC1C,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC;oBAC7D,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAC9D,CAAC;gBACF,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;gBACxD,IAAI,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,SAAS;oBAAE,IAAI,IAAI,EAAE,CAAC,CAAC,mCAAmC;gBAC/D,IAAI,IAAI,GAAG,WAAW,EAAE,CAAC;oBACvB,WAAW,GAAG,IAAI,CAAC;oBACnB,QAAQ,GAAG,IAAI,CAAC;gBAClB,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,QAAS,CAAC,CAAC;YACtB,SAAS,CAAC,MAAM,CAAC,QAAS,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YACpB,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,KAAK,EAAE,CAAC;IACV,CAAC;IAED,qCAAqC;IACrC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;QACzB,QAAQ,GAAG,SAAS,CAAC;QACrB,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,2CAA2C;IAC3C,OAAO,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACpD,IAAI,QAAQ,GAAG,YAAY,GAAG,GAAG,EAAE,CAAC;QAClC,GAAG,CAAC,6CAA6C,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC3E,OAAO,QAA+B,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule: Semi-Join Pushdown — reassociate a semi join below an inner/cross join
|
|
3
|
+
*
|
|
4
|
+
* A semi join is an existential *filter* on its left input: it emits the left
|
|
5
|
+
* rows for which the key source holds a match, and publishes the left input's
|
|
6
|
+
* attributes verbatim. When its condition reads columns from only ONE side of an
|
|
7
|
+
* inner/cross join underneath it, the filter can be applied to that side first:
|
|
8
|
+
*
|
|
9
|
+
* Join(semi, Join(inner|cross, L, R), K, cond) cond reads L (and K) only
|
|
10
|
+
* → Join(inner|cross, Join(semi, L, K, cond), R)
|
|
11
|
+
*
|
|
12
|
+
* Join(semi, Join(inner|cross, L, R), K, cond) cond reads R (and K) only
|
|
13
|
+
* → Join(inner|cross, L, Join(semi, R, K, cond))
|
|
14
|
+
*
|
|
15
|
+
* This is the same argument `rules/predicate/rule-join-predicate-pushdown.ts`
|
|
16
|
+
* makes for scalar conjuncts — see its header's null-extension table. Neither
|
|
17
|
+
* side of an `inner` / `cross` join is ever null-extended, so every output row
|
|
18
|
+
* carries that side's genuine input values, and filtering the side before the
|
|
19
|
+
* join removes exactly the output rows filtering after it would have.
|
|
20
|
+
*
|
|
21
|
+
* Soundness, stated for the semi case: `semi(X, K, p) = { x ∈ X : ∃k ∈ K. p(x, k) }`.
|
|
22
|
+
* When `p` reads only the `L` part of `x`, the test is per-`L`-row and
|
|
23
|
+
* deterministic, so it commutes with the join — whether the join drops `L` rows
|
|
24
|
+
* or fans them out, filtering before removes precisely the output rows filtering
|
|
25
|
+
* after would have.
|
|
26
|
+
*
|
|
27
|
+
* Output attributes are unchanged in identity AND order. A semi join publishes
|
|
28
|
+
* its left input's attributes verbatim, so both the original and the rewritten
|
|
29
|
+
* shape yield `L.attrs ++ R.attrs`; every `ColumnReferenceNode` above the join
|
|
30
|
+
* resolves to the same attribute id it did before.
|
|
31
|
+
*
|
|
32
|
+
* WHY: `rules/access/rule-key-set-seek.ts` — which turns a semi join into
|
|
33
|
+
* "materialize the key set once, then seek the target index per key" — only
|
|
34
|
+
* fires when the filtered side peels down to a bare access leaf. A compound
|
|
35
|
+
* query (`… from entry e join txn t on t.id = e.txn_id where e.txn_id in
|
|
36
|
+
* (select …)`) puts a join there instead, so that rule declines and `entry` is
|
|
37
|
+
* read end-to-end. After this reassociation the filtered side is a bare leaf
|
|
38
|
+
* again and the existing rule fires unchanged — no new peel through `JoinNode`
|
|
39
|
+
* is needed (walking a join in the peel would be unsound; this rule is the
|
|
40
|
+
* sound way to reach the same plan).
|
|
41
|
+
*
|
|
42
|
+
* Deeper nesting works without extra machinery: the rewrite's new semi join is a
|
|
43
|
+
* child of the returned node, so the top-down descent visits it and
|
|
44
|
+
* `Join(semi, Join(inner, Join(inner, A, B), C), K)` pushes down twice.
|
|
45
|
+
*
|
|
46
|
+
* Admission gates (all must hold):
|
|
47
|
+
* - Anchor is a semi `JoinNode` with a condition and no `exists … as` flags.
|
|
48
|
+
* - `node.left` is an `inner` or `cross` `JoinNode`.
|
|
49
|
+
* - The key source is uncorrelated, deterministic and write-free — the same
|
|
50
|
+
* admission test `rule-key-set-seek`'s `admitJoin` applies, and for the same
|
|
51
|
+
* reason: re-rooting the semi join must not change how the source is drained.
|
|
52
|
+
* - The condition is functional (deterministic + read-only): the reassociation
|
|
53
|
+
* changes how many rows it is evaluated against.
|
|
54
|
+
* - Neither inner-join branch is correlated. A LATERAL right side reads the left
|
|
55
|
+
* side, and re-rooting either branch under a semi join must not disturb that.
|
|
56
|
+
* - Neither inner-join branch carries a write.
|
|
57
|
+
* - Every attribute id the condition needs (`collectPredicateAttributeIds`,
|
|
58
|
+
* which also accounts for correlated references inside a sub-query operand) is
|
|
59
|
+
* either a key-source attribute or an attribute of EXACTLY ONE inner-join
|
|
60
|
+
* branch. An id in neither branch (an outer reference, an `exists … as` flag)
|
|
61
|
+
* declines; ids spanning both branches decline; ids touching neither branch
|
|
62
|
+
* decline because there is nothing to gain.
|
|
63
|
+
*
|
|
64
|
+
* `inner.condition` / `inner.usingColumns` / `inner.existence` carry over
|
|
65
|
+
* verbatim to the rebuilt inner join, and `node.condition` / `node.usingColumns`
|
|
66
|
+
* to the pushed semi join — both rebuilds go through `withChildren`, which
|
|
67
|
+
* threads those fields. Existence flags on an INNER join are unreachable today
|
|
68
|
+
* (the parser only accepts `exists … as` on `left join`), and the attribute-id
|
|
69
|
+
* gate above already declines any condition that reads a flag, so no redundant
|
|
70
|
+
* guard is added for them.
|
|
71
|
+
*
|
|
72
|
+
* NOT IN SCOPE — deliberately:
|
|
73
|
+
* - NOTE: `anti` joins are declined by design, not by accident.
|
|
74
|
+
* `anti(L ⋈ R, K) = anti(L, K) ⋈ R` when the condition reads only `L`,
|
|
75
|
+
* exactly as above (the test is still per-`L`-row and deterministic), but
|
|
76
|
+
* `rule-key-set-seek` admits `semi` only, so there is nothing downstream to
|
|
77
|
+
* gain. Revisit if that rule ever admits `anti`.
|
|
78
|
+
* - NOTE: a LEFT join on the probe side with the semi condition reading the
|
|
79
|
+
* PRESERVED (left) side is also sound — `σ(L ⟕ R) = σ(L) ⟕ R` when `σ` reads
|
|
80
|
+
* only `L` — and is left out only to keep the first pass to the shape in the
|
|
81
|
+
* repro. Revisit if a compound outer-join shape shows up wanting the seek.
|
|
82
|
+
* The MIRROR case is NOT sound and must stay declined permanently: a
|
|
83
|
+
* condition reading the NULL-EXTENDED side (the right side of a `left join`)
|
|
84
|
+
* does not commute, because filtering `R` before the join re-pads the left row
|
|
85
|
+
* with NULLs instead of dropping it.
|
|
86
|
+
* `backlog/feat-outer-join-to-inner-on-null-rejecting-filter`, if it lands,
|
|
87
|
+
* converts some outer joins to inner ones and this rule then covers them.
|
|
88
|
+
* - NOTE: the anchor's left input must be the `JoinNode` ITSELF — no wrapper is
|
|
89
|
+
* peeled. `select … from (select … from a join b …) x where x.k in (select …)`
|
|
90
|
+
* and a residual `Filter` that survived predicate pushdown (one spanning both
|
|
91
|
+
* branches, e.g. `… and e.amount > t.id`) both leave a node in between and
|
|
92
|
+
* decline. Revisit if a wrapped compound shape shows up wanting the seek; the
|
|
93
|
+
* peel would have to re-wrap whatever it walked through, which is why the
|
|
94
|
+
* first pass does not attempt it.
|
|
95
|
+
*
|
|
96
|
+
* NOTE: pushing leaves a semi join as a LEAF of the enclosing inner spine, and
|
|
97
|
+
* `rule-quickpick-enumeration` abandons any join graph containing a non-inner
|
|
98
|
+
* join — so a 3+-relation join under an `IN (SELECT …)` filter now gets no join
|
|
99
|
+
* enumeration where it used to. Seek beats enumeration on the shapes this rule
|
|
100
|
+
* targets; revisit (by teaching QuickPick to admit a non-inner join as one opaque
|
|
101
|
+
* leaf) if such a query shows up with a bad join order. See the matching `NOTE:`
|
|
102
|
+
* in `rule-quickpick-enumeration.ts`.
|
|
103
|
+
*/
|
|
104
|
+
import type { PlanNode } from '../../nodes/plan-node.js';
|
|
105
|
+
import type { OptContext } from '../../framework/context.js';
|
|
106
|
+
export declare function ruleSemiJoinPushdown(node: PlanNode, _context: OptContext): PlanNode | null;
|
|
107
|
+
//# sourceMappingURL=rule-semi-join-pushdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-semi-join-pushdown.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/join/rule-semi-join-pushdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAsC,MAAM,0BAA0B,CAAC;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAyC7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CA4E1F"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule: Semi-Join Pushdown — reassociate a semi join below an inner/cross join
|
|
3
|
+
*
|
|
4
|
+
* A semi join is an existential *filter* on its left input: it emits the left
|
|
5
|
+
* rows for which the key source holds a match, and publishes the left input's
|
|
6
|
+
* attributes verbatim. When its condition reads columns from only ONE side of an
|
|
7
|
+
* inner/cross join underneath it, the filter can be applied to that side first:
|
|
8
|
+
*
|
|
9
|
+
* Join(semi, Join(inner|cross, L, R), K, cond) cond reads L (and K) only
|
|
10
|
+
* → Join(inner|cross, Join(semi, L, K, cond), R)
|
|
11
|
+
*
|
|
12
|
+
* Join(semi, Join(inner|cross, L, R), K, cond) cond reads R (and K) only
|
|
13
|
+
* → Join(inner|cross, L, Join(semi, R, K, cond))
|
|
14
|
+
*
|
|
15
|
+
* This is the same argument `rules/predicate/rule-join-predicate-pushdown.ts`
|
|
16
|
+
* makes for scalar conjuncts — see its header's null-extension table. Neither
|
|
17
|
+
* side of an `inner` / `cross` join is ever null-extended, so every output row
|
|
18
|
+
* carries that side's genuine input values, and filtering the side before the
|
|
19
|
+
* join removes exactly the output rows filtering after it would have.
|
|
20
|
+
*
|
|
21
|
+
* Soundness, stated for the semi case: `semi(X, K, p) = { x ∈ X : ∃k ∈ K. p(x, k) }`.
|
|
22
|
+
* When `p` reads only the `L` part of `x`, the test is per-`L`-row and
|
|
23
|
+
* deterministic, so it commutes with the join — whether the join drops `L` rows
|
|
24
|
+
* or fans them out, filtering before removes precisely the output rows filtering
|
|
25
|
+
* after would have.
|
|
26
|
+
*
|
|
27
|
+
* Output attributes are unchanged in identity AND order. A semi join publishes
|
|
28
|
+
* its left input's attributes verbatim, so both the original and the rewritten
|
|
29
|
+
* shape yield `L.attrs ++ R.attrs`; every `ColumnReferenceNode` above the join
|
|
30
|
+
* resolves to the same attribute id it did before.
|
|
31
|
+
*
|
|
32
|
+
* WHY: `rules/access/rule-key-set-seek.ts` — which turns a semi join into
|
|
33
|
+
* "materialize the key set once, then seek the target index per key" — only
|
|
34
|
+
* fires when the filtered side peels down to a bare access leaf. A compound
|
|
35
|
+
* query (`… from entry e join txn t on t.id = e.txn_id where e.txn_id in
|
|
36
|
+
* (select …)`) puts a join there instead, so that rule declines and `entry` is
|
|
37
|
+
* read end-to-end. After this reassociation the filtered side is a bare leaf
|
|
38
|
+
* again and the existing rule fires unchanged — no new peel through `JoinNode`
|
|
39
|
+
* is needed (walking a join in the peel would be unsound; this rule is the
|
|
40
|
+
* sound way to reach the same plan).
|
|
41
|
+
*
|
|
42
|
+
* Deeper nesting works without extra machinery: the rewrite's new semi join is a
|
|
43
|
+
* child of the returned node, so the top-down descent visits it and
|
|
44
|
+
* `Join(semi, Join(inner, Join(inner, A, B), C), K)` pushes down twice.
|
|
45
|
+
*
|
|
46
|
+
* Admission gates (all must hold):
|
|
47
|
+
* - Anchor is a semi `JoinNode` with a condition and no `exists … as` flags.
|
|
48
|
+
* - `node.left` is an `inner` or `cross` `JoinNode`.
|
|
49
|
+
* - The key source is uncorrelated, deterministic and write-free — the same
|
|
50
|
+
* admission test `rule-key-set-seek`'s `admitJoin` applies, and for the same
|
|
51
|
+
* reason: re-rooting the semi join must not change how the source is drained.
|
|
52
|
+
* - The condition is functional (deterministic + read-only): the reassociation
|
|
53
|
+
* changes how many rows it is evaluated against.
|
|
54
|
+
* - Neither inner-join branch is correlated. A LATERAL right side reads the left
|
|
55
|
+
* side, and re-rooting either branch under a semi join must not disturb that.
|
|
56
|
+
* - Neither inner-join branch carries a write.
|
|
57
|
+
* - Every attribute id the condition needs (`collectPredicateAttributeIds`,
|
|
58
|
+
* which also accounts for correlated references inside a sub-query operand) is
|
|
59
|
+
* either a key-source attribute or an attribute of EXACTLY ONE inner-join
|
|
60
|
+
* branch. An id in neither branch (an outer reference, an `exists … as` flag)
|
|
61
|
+
* declines; ids spanning both branches decline; ids touching neither branch
|
|
62
|
+
* decline because there is nothing to gain.
|
|
63
|
+
*
|
|
64
|
+
* `inner.condition` / `inner.usingColumns` / `inner.existence` carry over
|
|
65
|
+
* verbatim to the rebuilt inner join, and `node.condition` / `node.usingColumns`
|
|
66
|
+
* to the pushed semi join — both rebuilds go through `withChildren`, which
|
|
67
|
+
* threads those fields. Existence flags on an INNER join are unreachable today
|
|
68
|
+
* (the parser only accepts `exists … as` on `left join`), and the attribute-id
|
|
69
|
+
* gate above already declines any condition that reads a flag, so no redundant
|
|
70
|
+
* guard is added for them.
|
|
71
|
+
*
|
|
72
|
+
* NOT IN SCOPE — deliberately:
|
|
73
|
+
* - NOTE: `anti` joins are declined by design, not by accident.
|
|
74
|
+
* `anti(L ⋈ R, K) = anti(L, K) ⋈ R` when the condition reads only `L`,
|
|
75
|
+
* exactly as above (the test is still per-`L`-row and deterministic), but
|
|
76
|
+
* `rule-key-set-seek` admits `semi` only, so there is nothing downstream to
|
|
77
|
+
* gain. Revisit if that rule ever admits `anti`.
|
|
78
|
+
* - NOTE: a LEFT join on the probe side with the semi condition reading the
|
|
79
|
+
* PRESERVED (left) side is also sound — `σ(L ⟕ R) = σ(L) ⟕ R` when `σ` reads
|
|
80
|
+
* only `L` — and is left out only to keep the first pass to the shape in the
|
|
81
|
+
* repro. Revisit if a compound outer-join shape shows up wanting the seek.
|
|
82
|
+
* The MIRROR case is NOT sound and must stay declined permanently: a
|
|
83
|
+
* condition reading the NULL-EXTENDED side (the right side of a `left join`)
|
|
84
|
+
* does not commute, because filtering `R` before the join re-pads the left row
|
|
85
|
+
* with NULLs instead of dropping it.
|
|
86
|
+
* `backlog/feat-outer-join-to-inner-on-null-rejecting-filter`, if it lands,
|
|
87
|
+
* converts some outer joins to inner ones and this rule then covers them.
|
|
88
|
+
* - NOTE: the anchor's left input must be the `JoinNode` ITSELF — no wrapper is
|
|
89
|
+
* peeled. `select … from (select … from a join b …) x where x.k in (select …)`
|
|
90
|
+
* and a residual `Filter` that survived predicate pushdown (one spanning both
|
|
91
|
+
* branches, e.g. `… and e.amount > t.id`) both leave a node in between and
|
|
92
|
+
* decline. Revisit if a wrapped compound shape shows up wanting the seek; the
|
|
93
|
+
* peel would have to re-wrap whatever it walked through, which is why the
|
|
94
|
+
* first pass does not attempt it.
|
|
95
|
+
*
|
|
96
|
+
* NOTE: pushing leaves a semi join as a LEAF of the enclosing inner spine, and
|
|
97
|
+
* `rule-quickpick-enumeration` abandons any join graph containing a non-inner
|
|
98
|
+
* join — so a 3+-relation join under an `IN (SELECT …)` filter now gets no join
|
|
99
|
+
* enumeration where it used to. Seek beats enumeration on the shapes this rule
|
|
100
|
+
* targets; revisit (by teaching QuickPick to admit a non-inner join as one opaque
|
|
101
|
+
* leaf) if such a query shows up with a bad join order. See the matching `NOTE:`
|
|
102
|
+
* in `rule-quickpick-enumeration.ts`.
|
|
103
|
+
*/
|
|
104
|
+
import { createLogger } from '../../../common/logger.js';
|
|
105
|
+
import { JoinNode } from '../../nodes/join-node.js';
|
|
106
|
+
import { PlanNodeCharacteristics } from '../../framework/characteristics.js';
|
|
107
|
+
import { collectPredicateAttributeIds } from '../../analysis/predicate-dependencies.js';
|
|
108
|
+
import { isCorrelatedSubquery } from '../../cache/correlation-detector.js';
|
|
109
|
+
const log = createLogger('optimizer:rule:semi-join-pushdown');
|
|
110
|
+
const attributeIds = (node) => new Set(node.getAttributes().map(a => a.id));
|
|
111
|
+
/**
|
|
112
|
+
* The single inner-join branch `cond` reads, or null when it spans both, escapes
|
|
113
|
+
* both (an outer reference or an existence flag), or reads neither.
|
|
114
|
+
*/
|
|
115
|
+
function conditionSide(cond, keyIds, leftIds, rightIds) {
|
|
116
|
+
let needsLeft = false;
|
|
117
|
+
let needsRight = false;
|
|
118
|
+
for (const id of collectPredicateAttributeIds(cond)) {
|
|
119
|
+
if (keyIds.has(id))
|
|
120
|
+
continue;
|
|
121
|
+
if (leftIds.has(id)) {
|
|
122
|
+
needsLeft = true;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (rightIds.has(id)) {
|
|
126
|
+
needsRight = true;
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// An id belonging to neither branch nor the key source: an outer
|
|
130
|
+
// reference, or an `exists … as` flag the inner join appends. Pushing
|
|
131
|
+
// below either branch would strand it.
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
// Equal means either "spans both branches" (unsound to push to one) or
|
|
135
|
+
// "reads neither" (nothing to gain — a condition over constants alone).
|
|
136
|
+
if (needsLeft === needsRight)
|
|
137
|
+
return null;
|
|
138
|
+
return needsLeft ? 'left' : 'right';
|
|
139
|
+
}
|
|
140
|
+
export function ruleSemiJoinPushdown(node, _context) {
|
|
141
|
+
if (!(node instanceof JoinNode))
|
|
142
|
+
return null;
|
|
143
|
+
if (node.joinType !== 'semi')
|
|
144
|
+
return null;
|
|
145
|
+
if (!node.condition)
|
|
146
|
+
return null;
|
|
147
|
+
// An `exists … as` flag on the anchor would be published above it, but the
|
|
148
|
+
// pushed semi join publishes only its own left input's attributes.
|
|
149
|
+
if (node.hasExistenceColumns)
|
|
150
|
+
return null;
|
|
151
|
+
const inner = node.left;
|
|
152
|
+
if (!(inner instanceof JoinNode))
|
|
153
|
+
return null;
|
|
154
|
+
if (inner.joinType !== 'inner' && inner.joinType !== 'cross')
|
|
155
|
+
return null;
|
|
156
|
+
// NOTE: unconditional — no cost gate, matching `rule-join-predicate-pushdown`'s
|
|
157
|
+
// treatment of scalar conjuncts. At Structural time the row estimates are not
|
|
158
|
+
// usable anyway (most table-backed inputs report `Infinity`; see the NOTE in
|
|
159
|
+
// `rule-join-greedy-commute`). The one shape where pushdown does extra work is a
|
|
160
|
+
// strongly *filtering* inner join, where the semi join probes |L| rows instead of
|
|
161
|
+
// the smaller |L ⋈ R| — offset by the join then receiving a smaller left input.
|
|
162
|
+
// Revisit condition: if a filtering-join shape ever shows up regressed in
|
|
163
|
+
// `yarn bench:gate`, gate this on estimated rows.
|
|
164
|
+
const keySource = node.right;
|
|
165
|
+
// The key source is drained once by the semi join wherever it sits; a
|
|
166
|
+
// correlated / non-deterministic / write-bearing source must keep its
|
|
167
|
+
// per-execution semantics. Same admission test as `rule-key-set-seek`.
|
|
168
|
+
if (isCorrelatedSubquery(keySource)) {
|
|
169
|
+
log('decline: key source is correlated');
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
if (!PlanNodeCharacteristics.isDeterministic(keySource)) {
|
|
173
|
+
log('decline: key source is non-deterministic');
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
if (PlanNodeCharacteristics.subtreeHasSideEffects(keySource)) {
|
|
177
|
+
log('decline: key source has side effects');
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
// Both branches are re-rooted (one under the semi join, one under the rebuilt
|
|
181
|
+
// inner join) — refuse to touch a subtree carrying a write.
|
|
182
|
+
if (PlanNodeCharacteristics.subtreeHasSideEffects(inner.left)
|
|
183
|
+
|| PlanNodeCharacteristics.subtreeHasSideEffects(inner.right)) {
|
|
184
|
+
log('decline: an inner-join branch has side effects');
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
// A LATERAL right side reads the left side; re-rooting either branch must not
|
|
188
|
+
// disturb the row context it reads from.
|
|
189
|
+
if (isCorrelatedSubquery(inner.left) || isCorrelatedSubquery(inner.right)) {
|
|
190
|
+
log('decline: an inner-join branch is correlated');
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
// The condition is evaluated against a different number of rows after the
|
|
194
|
+
// move, so a non-deterministic or write-bearing one must stay put.
|
|
195
|
+
if (!PlanNodeCharacteristics.isFunctional(node.condition)) {
|
|
196
|
+
log('decline: semi-join condition is not functional');
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
const side = conditionSide(node.condition, attributeIds(keySource), attributeIds(inner.left), attributeIds(inner.right));
|
|
200
|
+
if (side === null)
|
|
201
|
+
return null;
|
|
202
|
+
const target = side === 'left' ? inner.left : inner.right;
|
|
203
|
+
// `withChildren` (not `new JoinNode(...)`) so `usingColumns` / `existence`
|
|
204
|
+
// thread through both rebuilds.
|
|
205
|
+
const pushedSemi = node.withChildren([target, keySource, node.condition]);
|
|
206
|
+
const innerChildren = side === 'left'
|
|
207
|
+
? [pushedSemi, inner.right]
|
|
208
|
+
: [inner.left, pushedSemi];
|
|
209
|
+
if (inner.condition)
|
|
210
|
+
innerChildren.push(inner.condition);
|
|
211
|
+
log('Pushed semi join below %s join onto its %s branch', inner.joinType, side);
|
|
212
|
+
return inner.withChildren(innerChildren);
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=rule-semi-join-pushdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-semi-join-pushdown.js","sourceRoot":"","sources":["../../../../../src/planner/rules/join/rule-semi-join-pushdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-sargable-range-rewrite.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/predicate/rule-sargable-range-rewrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-sargable-range-rewrite.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/predicate/rule-sargable-range-rewrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAc7D,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAuB9F"}
|
|
@@ -29,6 +29,7 @@ import { FilterNode } from '../../nodes/filter.js';
|
|
|
29
29
|
import { BinaryOpNode, LiteralNode } from '../../nodes/scalar.js';
|
|
30
30
|
import { ColumnReferenceNode, ParameterReferenceNode } from '../../nodes/reference.js';
|
|
31
31
|
import { splitConjuncts, combineConjuncts } from '../../analysis/predicate-conjuncts.js';
|
|
32
|
+
import { planTimeLiteralValue } from '../../analysis/predicate-shape.js';
|
|
32
33
|
import { getSyncLiteral } from '../../../parser/utils.js';
|
|
33
34
|
const log = createLogger('optimizer:rule:sargable-range-rewrite');
|
|
34
35
|
export function ruleSargableRangeRewrite(node, _context) {
|
|
@@ -128,7 +129,7 @@ function unwrapCast(node) {
|
|
|
128
129
|
return node.nodeType === PlanNodeType.Cast ? node.operand : node;
|
|
129
130
|
}
|
|
130
131
|
function isLiteralConstant(node) {
|
|
131
|
-
return unwrapCast(node)
|
|
132
|
+
return planTimeLiteralValue(unwrapCast(node)) !== undefined;
|
|
132
133
|
}
|
|
133
134
|
function getLiteralValue(node) {
|
|
134
135
|
const lit = unwrapCast(node);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-sargable-range-rewrite.js","sourceRoot":"","sources":["../../../../../src/planner/rules/predicate/rule-sargable-range-rewrite.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rule-sargable-range-rewrite.js","sourceRoot":"","sources":["../../../../../src/planner/rules/predicate/rule-sargable-range-rewrite.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,5 +17,26 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { type PlanNode } from '../../nodes/plan-node.js';
|
|
19
19
|
import type { OptContext } from '../../framework/context.js';
|
|
20
|
+
import { SortNode } from '../../nodes/sort.js';
|
|
20
21
|
export declare function ruleGrowRetrieve(node: PlanNode, context: OptContext): PlanNode | null;
|
|
22
|
+
/**
|
|
23
|
+
* Attempt to absorb a Sort whose Retrieve is reachable through a chain of
|
|
24
|
+
* commuting unary operators (Project, Filter). When the table's access plan
|
|
25
|
+
* can satisfy the required ordering — e.g., a composite index where leading
|
|
26
|
+
* columns are equality-bound by an upstream Filter and trailing columns
|
|
27
|
+
* provide the ORDER BY direction — the Sort can be elided entirely:
|
|
28
|
+
* Retrieve produces rows in the requested order, and Project/Filter preserve
|
|
29
|
+
* row order on the way back up.
|
|
30
|
+
*
|
|
31
|
+
* Two callers:
|
|
32
|
+
* - `ruleGrowRetrieve` itself, for a Sort the user wrote (or an earlier rule left);
|
|
33
|
+
* - `rules/aggregate/rule-minmax-index-boundary.ts`, which synthesizes a throwaway
|
|
34
|
+
* Sort purely to ask this question and commits nothing when the answer is null.
|
|
35
|
+
*
|
|
36
|
+
* Because of that second caller this must stay side-effect-free: it probes
|
|
37
|
+
* `getBestAccessPlan` and either returns a NEW tree or null, never mutating the
|
|
38
|
+
* tree it was handed and never recording anything on `context`. A caller that
|
|
39
|
+
* gets null must be able to discard its probe input and leave the plan untouched.
|
|
40
|
+
*/
|
|
41
|
+
export declare function trySortAbsorbViaIndexOrdering(sort: SortNode, context: OptContext): PlanNode | null;
|
|
21
42
|
//# sourceMappingURL=rule-grow-retrieve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-grow-retrieve.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/retrieve/rule-grow-retrieve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAoB,KAAK,QAAQ,EAAgD,MAAM,0BAA0B,CAAC;AACzH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-grow-retrieve.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/retrieve/rule-grow-retrieve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAoB,KAAK,QAAQ,EAAgD,MAAM,0BAA0B,CAAC;AACzH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAW7D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAc/C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAqJrF;AA+YD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CA8GlG"}
|
|
@@ -359,11 +359,19 @@ function fallbackIndexSupports(node, context, tableRef, existingCtx) {
|
|
|
359
359
|
// NOTE: a bare `LIMIT n` lands HERE, not in the branch above — the
|
|
360
360
|
// builder materializes an absent OFFSET as `Literal(null)`, so every
|
|
361
361
|
// LIMIT without an explicit numeric OFFSET is refused and no module
|
|
362
|
-
// sees `request.limit` by this route.
|
|
363
|
-
//
|
|
364
|
-
//
|
|
365
|
-
//
|
|
366
|
-
//
|
|
362
|
+
// sees `request.limit` by this route.
|
|
363
|
+
//
|
|
364
|
+
// This arm IS reached: `rule-minmax-index-boundary` puts a
|
|
365
|
+
// `LimitOffset(1, Literal(null))` directly above an ordering-equipped
|
|
366
|
+
// Retrieve, and this refusal is what keeps it there. Reading a
|
|
367
|
+
// null/absent OFFSET as 0 would let the grow SWALLOW that node into
|
|
368
|
+
// `Retrieve.source`, which the index-style branch of
|
|
369
|
+
// `ruleSelectAccessPath` never executes — the boundary read's early
|
|
370
|
+
// stop would silently vanish and the scan would drain the table
|
|
371
|
+
// (answers unchanged, cost restored to a full scan). Widen this only
|
|
372
|
+
// alongside a guard for that rewrite; the "LIMITOFFSET survives
|
|
373
|
+
// directly above the access leaf" case in
|
|
374
|
+
// test/optimizer/minmax-index-boundary.spec.ts is what catches it.
|
|
367
375
|
limitVal = undefined;
|
|
368
376
|
}
|
|
369
377
|
}
|
|
@@ -503,8 +511,18 @@ function orderingMatches(provided, required) {
|
|
|
503
511
|
* provide the ORDER BY direction — the Sort can be elided entirely:
|
|
504
512
|
* Retrieve produces rows in the requested order, and Project/Filter preserve
|
|
505
513
|
* row order on the way back up.
|
|
514
|
+
*
|
|
515
|
+
* Two callers:
|
|
516
|
+
* - `ruleGrowRetrieve` itself, for a Sort the user wrote (or an earlier rule left);
|
|
517
|
+
* - `rules/aggregate/rule-minmax-index-boundary.ts`, which synthesizes a throwaway
|
|
518
|
+
* Sort purely to ask this question and commits nothing when the answer is null.
|
|
519
|
+
*
|
|
520
|
+
* Because of that second caller this must stay side-effect-free: it probes
|
|
521
|
+
* `getBestAccessPlan` and either returns a NEW tree or null, never mutating the
|
|
522
|
+
* tree it was handed and never recording anything on `context`. A caller that
|
|
523
|
+
* gets null must be able to discard its probe input and leave the plan untouched.
|
|
506
524
|
*/
|
|
507
|
-
function trySortAbsorbViaIndexOrdering(sort, context) {
|
|
525
|
+
export function trySortAbsorbViaIndexOrdering(sort, context) {
|
|
508
526
|
// Walk down through commuting unary operators to find the RetrieveNode.
|
|
509
527
|
const chain = [];
|
|
510
528
|
let current = sort.source;
|