@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.
Files changed (170) hide show
  1. package/dist/src/core/database-auto-analyze.d.ts +258 -0
  2. package/dist/src/core/database-auto-analyze.d.ts.map +1 -0
  3. package/dist/src/core/database-auto-analyze.js +616 -0
  4. package/dist/src/core/database-auto-analyze.js.map +1 -0
  5. package/dist/src/core/database-materialized-views.d.ts +42 -1
  6. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  7. package/dist/src/core/database-materialized-views.js +76 -3
  8. package/dist/src/core/database-materialized-views.js.map +1 -1
  9. package/dist/src/core/database-transaction.d.ts +17 -0
  10. package/dist/src/core/database-transaction.d.ts.map +1 -1
  11. package/dist/src/core/database-transaction.js +37 -0
  12. package/dist/src/core/database-transaction.js.map +1 -1
  13. package/dist/src/core/database.d.ts +8 -1
  14. package/dist/src/core/database.d.ts.map +1 -1
  15. package/dist/src/core/database.js +135 -5
  16. package/dist/src/core/database.js.map +1 -1
  17. package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
  18. package/dist/src/planner/analysis/change-scope.js +8 -8
  19. package/dist/src/planner/analysis/change-scope.js.map +1 -1
  20. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  21. package/dist/src/planner/analysis/constraint-extractor.js +27 -14
  22. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  23. package/dist/src/planner/analysis/expression-fingerprint.d.ts.map +1 -1
  24. package/dist/src/planner/analysis/expression-fingerprint.js +23 -2
  25. package/dist/src/planner/analysis/expression-fingerprint.js.map +1 -1
  26. package/dist/src/planner/analysis/mv-body-functions.d.ts +46 -0
  27. package/dist/src/planner/analysis/mv-body-functions.d.ts.map +1 -0
  28. package/dist/src/planner/analysis/mv-body-functions.js +65 -0
  29. package/dist/src/planner/analysis/mv-body-functions.js.map +1 -0
  30. package/dist/src/planner/analysis/predicate-shape.d.ts +32 -4
  31. package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -1
  32. package/dist/src/planner/analysis/predicate-shape.js +37 -5
  33. package/dist/src/planner/analysis/predicate-shape.js.map +1 -1
  34. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +2 -2
  35. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  36. package/dist/src/planner/analysis/query-rewrite-matcher.js +46 -6
  37. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  38. package/dist/src/planner/analysis/sat-checker.js +2 -5
  39. package/dist/src/planner/analysis/sat-checker.js.map +1 -1
  40. package/dist/src/planner/building/select-aggregates.d.ts +17 -5
  41. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  42. package/dist/src/planner/building/select-aggregates.js +122 -79
  43. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  44. package/dist/src/planner/building/select-modifiers.d.ts +1 -1
  45. package/dist/src/planner/building/select.d.ts.map +1 -1
  46. package/dist/src/planner/building/select.js +73 -55
  47. package/dist/src/planner/building/select.js.map +1 -1
  48. package/dist/src/planner/cost/index.d.ts +28 -0
  49. package/dist/src/planner/cost/index.d.ts.map +1 -1
  50. package/dist/src/planner/cost/index.js +33 -0
  51. package/dist/src/planner/cost/index.js.map +1 -1
  52. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  53. package/dist/src/planner/nodes/limit-offset.js +3 -2
  54. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  55. package/dist/src/planner/optimizer-tuning.d.ts +10 -6
  56. package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
  57. package/dist/src/planner/optimizer-tuning.js.map +1 -1
  58. package/dist/src/planner/optimizer.d.ts.map +1 -1
  59. package/dist/src/planner/optimizer.js +49 -0
  60. package/dist/src/planner/optimizer.js.map +1 -1
  61. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
  62. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +8 -4
  63. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
  64. package/dist/src/planner/rules/access/rule-select-access-path.d.ts +14 -0
  65. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  66. package/dist/src/planner/rules/access/rule-select-access-path.js +5 -1
  67. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  68. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +3 -1
  69. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
  70. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +8 -3
  71. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
  72. package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.d.ts +47 -0
  73. package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.d.ts.map +1 -0
  74. package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.js +200 -0
  75. package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.js.map +1 -0
  76. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts +29 -0
  77. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -1
  78. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +55 -16
  79. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -1
  80. package/dist/src/planner/rules/join/index-nested-loop.d.ts +96 -22
  81. package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -1
  82. package/dist/src/planner/rules/join/index-nested-loop.js +401 -82
  83. package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -1
  84. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +20 -0
  85. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
  86. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +23 -4
  87. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
  88. package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
  89. package/dist/src/planner/rules/join/rule-join-greedy-commute.js +7 -0
  90. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
  91. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +19 -2
  92. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  93. package/dist/src/planner/rules/join/rule-join-physical-selection.js +262 -40
  94. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  95. package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
  96. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +24 -4
  97. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
  98. package/dist/src/planner/rules/join/rule-semi-join-pushdown.d.ts +107 -0
  99. package/dist/src/planner/rules/join/rule-semi-join-pushdown.d.ts.map +1 -0
  100. package/dist/src/planner/rules/join/rule-semi-join-pushdown.js +214 -0
  101. package/dist/src/planner/rules/join/rule-semi-join-pushdown.js.map +1 -0
  102. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts.map +1 -1
  103. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +2 -1
  104. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -1
  105. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts +21 -0
  106. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
  107. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +24 -6
  108. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  109. package/dist/src/planner/rules/shared/access-leaf.d.ts +12 -12
  110. package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -1
  111. package/dist/src/planner/rules/shared/access-leaf.js +3 -14
  112. package/dist/src/planner/rules/shared/access-leaf.js.map +1 -1
  113. package/dist/src/planner/stats/catalog-stats.d.ts.map +1 -1
  114. package/dist/src/planner/stats/catalog-stats.js +6 -10
  115. package/dist/src/planner/stats/catalog-stats.js.map +1 -1
  116. package/dist/src/planner/type-utils.d.ts.map +1 -1
  117. package/dist/src/planner/type-utils.js +3 -5
  118. package/dist/src/planner/type-utils.js.map +1 -1
  119. package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
  120. package/dist/src/planner/util/fd-utils.js +4 -7
  121. package/dist/src/planner/util/fd-utils.js.map +1 -1
  122. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  123. package/dist/src/runtime/emit/alter-table.js +58 -4
  124. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  125. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  126. package/dist/src/runtime/emit/binary.js +5 -3
  127. package/dist/src/runtime/emit/binary.js.map +1 -1
  128. package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -1
  129. package/dist/src/runtime/emit/fanout-lookup-join.js +9 -1
  130. package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -1
  131. package/dist/src/runtime/emit/limit-offset.d.ts.map +1 -1
  132. package/dist/src/runtime/emit/limit-offset.js +50 -24
  133. package/dist/src/runtime/emit/limit-offset.js.map +1 -1
  134. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +33 -2
  135. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  136. package/dist/src/runtime/emit/materialized-view-helpers.js +61 -5
  137. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  138. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  139. package/dist/src/runtime/emit/materialized-view.js +6 -1
  140. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  141. package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -1
  142. package/dist/src/runtime/emit/ordinal-slice.js +8 -0
  143. package/dist/src/runtime/emit/ordinal-slice.js.map +1 -1
  144. package/dist/src/schema/derivation.d.ts +15 -1
  145. package/dist/src/schema/derivation.d.ts.map +1 -1
  146. package/dist/src/schema/derivation.js.map +1 -1
  147. package/dist/src/schema/function.d.ts +9 -4
  148. package/dist/src/schema/function.d.ts.map +1 -1
  149. package/dist/src/schema/function.js +11 -9
  150. package/dist/src/schema/function.js.map +1 -1
  151. package/dist/src/schema/schema.d.ts +14 -3
  152. package/dist/src/schema/schema.d.ts.map +1 -1
  153. package/dist/src/schema/schema.js +20 -2
  154. package/dist/src/schema/schema.js.map +1 -1
  155. package/dist/src/schema/table.d.ts +27 -0
  156. package/dist/src/schema/table.d.ts.map +1 -1
  157. package/dist/src/schema/table.js +55 -0
  158. package/dist/src/schema/table.js.map +1 -1
  159. package/dist/src/schema/unique-enforcement.d.ts +6 -13
  160. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  161. package/dist/src/schema/unique-enforcement.js +8 -17
  162. package/dist/src/schema/unique-enforcement.js.map +1 -1
  163. package/dist/src/util/comparison.d.ts +19 -0
  164. package/dist/src/util/comparison.d.ts.map +1 -1
  165. package/dist/src/util/comparison.js +22 -0
  166. package/dist/src/util/comparison.js.map +1 -1
  167. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  168. package/dist/src/vtab/memory/module.js +10 -0
  169. package/dist/src/vtab/memory/module.js.map +1 -1
  170. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"sat-checker.js","sourceRoot":"","sources":["../../../../src/planner/analysis/sat-checker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACN,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACN,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,GACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,OAAO,GAAG,YAAY,CAAC,8BAA8B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAsB5E,uFAAuF;AACvF,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,8EAA8E;AAC9E,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,mBAAmB,CAClC,SAAwC,EACxC,OAAwC,EACxC,QAAwC,EACxC,SAAiD,EACjD,YAAkD,EAClD,iBAAqC;IAErC,IAAI,SAAS,CAAC,MAAM,GAAG,aAAa;QAAE,OAAO,SAAS,CAAC;IAEvD,MAAM,UAAU,GAAG,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACrH,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC,CAAC,gDAAgD;IAEhG,kFAAkF;IAClF,oFAAoF;IACpF,iFAAiF;IACjF,oFAAoF;IACpF,kFAAkF;IAClF,qFAAqF;IACrF,8EAA8E;IAC9E,MAAM,aAAa,GAAG,0BAA0B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvE,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAgD,CAAC;IACjF,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC;QACzC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,qBAAqB,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAA6B,CAAC;IAClD,MAAM,GAAG,GAAG,CAAC,CAAW,EAAE,CAAW,EAAE,GAAW,EAAU,EAAE;QAC7D,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC;IAC5E,CAAC,CAAC;IAEF,8CAA8C;IAC9C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;gBAC3C,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;gBAC3C,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACzD,CAAC;QACF,CAAC;aAAM,CAAC;YACP,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;IAED,0EAA0E;IAC1E,qEAAqE;IACrE,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QACzB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACnC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACrC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACrC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IAED,2BAA2B;IAC3B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,yCAAyC;QACzC,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAe,EAAE,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;oBAAE,SAAS;gBAC7C,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;oBAAE,SAAS;gBACvD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC;YAC1C,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,CAAC;QAED,mBAAmB;QACnB,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;gBAAE,OAAO,OAAO,CAAC;YACxE,uCAAuC;YACvC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC5G,OAAO,OAAO,CAAC;YAChB,CAAC;QACF,CAAC;QAED,oCAAoC;QACpC,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC;QACjF,CAAC;QAED,IAAI,GAAG,CAAC,UAAU;YAAE,UAAU,GAAG,IAAI,CAAC;IACvC,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,uBAAuB,CAC/B,SAAwC,EACxC,OAAwC,EACxC,QAAwC,EACxC,SAAiD,EACjD,YAA+D,EAC/D,iBAAgD;IAEhD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IACtD,IAAI,CAAC,YAAY;QAAE,OAAO,QAAQ,CAAC,CAAC,qCAAqC;IAEzE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtE,KAAK,MAAM,IAAI,IAAI,SAAS;QAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEvE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,QAAQ;YAAE,SAAS;QACxD,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACtG,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,UAAU,CAAC,QAA2B,EAAE,IAAY;IAC5D,IAAI,CAAC;QACJ,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,OAAO,CAAC,4EAA4E,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/F,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CAClC,SAAwC,EACxC,SAAiD;IAEjD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC;QAC1C,IAAI,mBAAmB,CAAC,OAAO,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,2FAA2F;AAC3F,SAAS,cAAc,CACtB,CAAiB,EACjB,SAAiD,EACjD,GAAgB;IAEhB,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAC9B,KAAoC,EACpC,SAAiD,EACjD,KAAsD;IAEtD,MAAM,KAAK,GAAqB,CAAC,GAAG,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACzB,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,GAAG,KAAK,SAAS;gBAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvC,SAAS;QACV,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YACvC,IAAI,YAAY,IAAI,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAuB,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAAC,IAAoC,EAAE,GAAW;IACrE,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,GAAG,GAAG;YACL,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,KAAK;SACjB,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAS,YAAY,CACpB,GAAsB,EACtB,KAAe,EACf,SAAkB,EAClB,GAAW,EACX,GAAsD;IAEtD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrB,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC;QAC7B,OAAO;IACR,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrB,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC;IAC9B,CAAC;SAAM,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;QACtD,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;IAC1B,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CACpB,GAAsB,EACtB,KAAe,EACf,SAAkB,EAClB,GAAW,EACX,GAAsD;IAEtD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrB,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC;QAC7B,OAAO;IACR,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrB,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC;IAC9B,CAAC;SAAM,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;QACtD,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;IAC1B,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CACxB,GAAsB,EACtB,MAA+B,EAC/B,GAAW,EACX,GAAsD;IAEtD,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACzC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;QACtB,OAAO;IACR,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACrC,GAAG,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO;IACR,CAAC;IACD,MAAM,WAAW,GAAe,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACnC,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,GAAG,CAAC,aAAa,GAAG,WAAW,CAAC;AACjC,CAAC;AAED,SAAS,aAAa,CACrB,GAA4B,EAC5B,KAAe,EACf,GAAW,EACX,GAAsD;IAEtD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CACnB,GAAsB,EACtB,KAAe,EACf,GAAW,EACX,GAAsD;IAEtD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC;IAChD,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,MAAM,CAAC,CAAiB;IAChC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,YAAY,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC;IACrE,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,CAAiB;IACnC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IAC7B,IAAI,CAAC,YAAY,OAAO;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,CAAC,CAAC;AACV,CAAC;AAED,SAAS,QAAQ,CAChB,CAAiB,EACjB,SAAiD;IAEjD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,CAAC,CAAC,YAAY,mBAAmB,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAC7B,CAAiB,EACjB,IAAoC,EACpC,SAAiD;IAEjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,OAAO;QAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;AACrE,CAAC;AAED,SAAS,MAAM,CACd,IAAoB,EACpB,IAAoC,EACpC,SAAiD,EACjD,GAAsD;IAEtD,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACpC,QAAQ,EAAE,EAAE,CAAC;YACZ,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,CAAC;YACV,KAAK,IAAI,CAAC;YACV,KAAK,IAAI,CAAC;YACV,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,CAAC;YACV,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,CAAC,CAAC,CAAC;gBACX,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC7C,OAAO;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACT,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC7C,OAAO;YACR,CAAC;QACF,CAAC;IACF,CAAC;IACD,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YAClC,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7C,OAAO;QACR,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAC7F,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7C,OAAO;QACR,CAAC;QACD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,OAAO;IACR,CAAC;IACD,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;QAC5B,mEAAmE;QACnE,iDAAiD;QACjD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7C,OAAO;QACR,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACvB,2DAA2D;YAC3D,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7C,OAAO;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,sEAAsE;YACtE,yDAAyD;YACzD,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACvD,OAAO;QACR,CAAC;QACD,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACvB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC7C,OAAO;YACR,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3D,OAAO;IACR,CAAC;IACD,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QACjC,iEAAiE;QACjE,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7C,OAAO;IACR,CAAC;IACD,4DAA4D;IAC5D,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,YAAY,CACpB,IAAkB,EAClB,EAAU,EACV,IAAoC,EACpC,SAAiD,EACjD,GAAsD;IAEtD,8CAA8C;IAC9C,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACzC,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACvB,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtC,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC5C,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7C,OAAO;IACR,CAAC;IACD,kEAAkE;IAClE,iEAAiE;IACjE,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAClB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7C,OAAO;IACR,CAAC;IACD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnC,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,GAAG,CAAC;QACT,KAAK,IAAI;YACR,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACvC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACvC,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACvC,OAAO;QACR,KAAK,IAAI,CAAC;QACV,KAAK,IAAI;YACR,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;gBAC9C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;oBAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACP,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,OAAO;QACR,KAAK,GAAG;YACP,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,OAAO;QACR,KAAK,IAAI;YACR,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACvC,OAAO;QACR,KAAK,GAAG;YACP,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,OAAO;QACR,KAAK,IAAI;YACR,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACvC,OAAO;QACR;YACC,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7C,OAAO;IACT,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"sat-checker.js","sourceRoot":"","sources":["../../../../src/planner/analysis/sat-checker.ts"],"names":[],"mappings":"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"}
@@ -20,9 +20,11 @@ export declare function buildAggregatePhase(input: RelationalPlanNode, stmt: AST
20
20
  groupByExpressions?: ScalarPlanNode[];
21
21
  hasHavingOnlyAggregates?: boolean;
22
22
  hasOrderByOnlyAggregates?: boolean;
23
- orderByNeedsPostAggregateSort?: boolean;
24
23
  aggregatesContext?: PlanningContext['aggregates'];
24
+ /** Grouping-key rewrite target — set only for a query WITH GROUP BY. */
25
25
  groupedRedirectContext?: GroupedRedirectContext;
26
+ /** What an aggregated row carries — set for EVERY aggregate query, grouped or not. */
27
+ groupedCoverageContext?: GroupedRedirectContext;
26
28
  };
27
29
  /**
28
30
  * What a GROUPED query's post-aggregate builders need in order to run their
@@ -105,14 +107,22 @@ export interface GroupKeyIndex {
105
107
  */
106
108
  export declare function redirectPostAggregate(expr: ScalarPlanNode, context: GroupedRedirectContext | undefined, scope: Scope): ScalarPlanNode;
107
109
  /**
108
- * Boundary check over a GROUPED query's finished plan: no node ABOVE the
110
+ * Boundary check over an AGGREGATE query's finished plan: no node ABOVE the
109
111
  * AggregateNode may reference an aggregate-input attribute id that is absent from
110
- * the aggregate's output. Called once per grouped query, from the end of
112
+ * the aggregate's output. Called once per aggregate query, from the end of
111
113
  * `buildSelectStmt`, walking the operator spine from the query root down to — and
112
114
  * stopping at — the AggregateNode itself (whose own input subtree legally reads
113
115
  * pre-grouping columns). Each scalar expression hanging off a spine operator gets
114
116
  * the subquery-aware per-expression check ({@link assertPostAggregateCoverage}).
115
117
  *
118
+ * "Aggregate", not "grouped": a query with no GROUP BY has exactly one implicit group,
119
+ * whose row carries the aggregate results and nothing else, so the same rule applies to
120
+ * everything above it (`having`, `order by` when it is forced above the aggregate,
121
+ * `limit`, `offset`). `context` is therefore built for every aggregate query — see the
122
+ * `groupedCoverageContext` / `groupedRedirectContext` split in
123
+ * {@link buildAggregatePhase}. An ungrouped query's `groupKeys` maps are empty, which is
124
+ * correct: it has no grouping key any post-aggregate reference could be covered by.
125
+ *
116
126
  * This is what turns "a builder forgot to call {@link redirectPostAggregate}" from a
117
127
  * runtime `No row context found for column …` internal error into the user-facing
118
128
  * GROUP BY message at plan time — the SELECT-list and ORDER BY escapes both shipped
@@ -127,11 +137,13 @@ export declare function redirectPostAggregate(expr: ScalarPlanNode, context: Gro
127
137
  * rejected with a user-facing GROUP BY error. If such a step is ever added, locate
128
138
  * the aggregate by node id instead of by reference.
129
139
  *
130
- * NOTE: one extra walk of the post-aggregate plan per grouped query per prepare, on
140
+ * NOTE: one extra walk of the post-aggregate plan per aggregate query per prepare, on
131
141
  * top of the redirect's own walk (see {@link redirectNode}). Measured end-to-end, not
132
142
  * isolated: compiling a six-column grouped query costs ~0.6-0.8 ms against ~0.5 ms for
133
143
  * a comparable ungrouped one, so this walk is bounded well below the surrounding
134
- * planning cost. Revisit if preparing grouped queries ever shows up as slow.
144
+ * planning cost. An ungrouped aggregate query now pays the same walk plus the
145
+ * `collectDefinedAttrIds` pass that builds its context. Revisit if preparing aggregate
146
+ * queries ever shows up as slow.
135
147
  */
136
148
  export declare function assertGroupedPlanCoverage(node: PlanNode, aggregateNode: PlanNode, context: GroupedRedirectContext): void;
137
149
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"select-aggregates.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-aggregates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAwD,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKjH;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,eAAe,EAC9B,UAAU,EAAE;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC3D,aAAa,EAAE,OAAO,EACtB,WAAW,EAAE,UAAU,EAAE,EACzB,oBAAoB,GAAE,OAAe,EACrC,UAAU,GAAE,SAAS,eAAe,EAAO,EAC3C,uBAAuB,GAAE,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,UAAU,EAAE,CAAa,GACvF;IACF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,kBAAkB,CAAC,EAAE,cAAc,EAAE,CAAC;IACtC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,iBAAiB,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAClD,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CAChD,CA8JA;AAiGD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,sBAAsB;IACtC,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,6FAA6F;IAC7F,QAAQ,CAAC,gBAAgB,EAAE,SAAS,SAAS,EAAE,CAAC;IAChD;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpD;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,oFAAoF;IACpF,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAkED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,sBAAsB,GAAG,SAAS,EAC3C,KAAK,EAAE,KAAK,GACV,cAAc,CAGhB;AAiLD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,yBAAyB,CACxC,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,QAAQ,EACvB,OAAO,EAAE,sBAAsB,GAC7B,IAAI,CAUN;AAsoBD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC5C,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,GAAG,EAAE,eAAe,GAClB,GAAG,CAAC,YAAY,EAAE,CAIpB;AAyID;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC7C,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,eAAe,EAC9B,oBAAoB,EAAE,eAAe,EACrC,aAAa,EAAE,kBAAkB,EACjC,UAAU,EAAE;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC3D,kBAAkB,EAAE,cAAc,EAAE,EACpC,uBAAuB,GAAE,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,UAAU,EAAE,CAAa,EACzF,cAAc,CAAC,EAAE,sBAAsB,GACrC,UAAU,EAAE,CAkHd"}
1
+ {"version":3,"file":"select-aggregates.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-aggregates.ts"],"names":[],"mappings":"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"}
@@ -51,34 +51,34 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
51
51
  hasOrderByOnlyAggregates = true;
52
52
  }
53
53
  }
54
- // If there is a HAVING clause but the SELECT contains **no aggregate functions**
55
- // AND **no GROUP BY**, we can safely treat the HAVING predicate as a regular filter
56
- // that runs *before* the aggregation (i.e. between the source and the AggregateNode).
57
- // This avoids the "missing column context" problem where the predicate refers to columns
58
- // that are not available after the AggregateNode (only grouping columns and
59
- // aggregate results are exposed). This behaviour is compatible with SQLite –
60
- // GROUP BY with a primary-key guarantees one row per group so the semantics
61
- // are unchanged.
62
- const shouldPushHavingBelowAggregate = Boolean(stmt.having && !hasAggregates && !hasGroupBy);
63
- if (!hasAggregates && !hasGroupBy) {
54
+ // A `having` clause makes this an aggregate query on its own, exactly as SQLite and
55
+ // PostgreSQL define it: with no `group by` the query has ONE implicit group over all
56
+ // input rows, and `having` filters that single group. So a query with a `having` and
57
+ // neither aggregates nor `group by` still goes through the aggregate pipeline below —
58
+ // it builds an AggregateNode with no grouping keys and no aggregates, which yields
59
+ // exactly one (empty) row, and every clause above it is subject to the usual coverage
60
+ // rule. Returning early here instead is what silently dropped the predicate.
61
+ const isAggregateQuery = hasAggregates || hasGroupBy || Boolean(stmt.having);
62
+ if (!isAggregateQuery) {
64
63
  return { output: input, needsFinalProjection: false, preAggregateSort: false };
65
64
  }
66
- // ---------------------------------------------------------------------------
67
- // Build HAVING predicate as *pre-aggregate* filter when appropriate
68
- // ---------------------------------------------------------------------------
69
65
  let currentInput = input;
70
- if (shouldPushHavingBelowAggregate) {
71
- // Build the predicate using the *pre-aggregate* scope because all columns
72
- // are still available here.
73
- const havingExpr = buildExpression(selectContext, stmt.having, true);
74
- currentInput = new FilterNode(selectContext.scope, currentInput, havingExpr);
75
- }
76
- // After (optional) early HAVING filter we continue with the existing pipeline
77
- // ----------------------------------------------------------------------------
78
66
  // Handle pre-aggregate sorting for ORDER BY without GROUP BY. Skip when the
79
67
  // ORDER BY names an aggregate or a SELECT-list alias — neither can be evaluated
80
68
  // against the per-input rows; they need the post-aggregate row(s).
81
- const preAggregateSort = Boolean(hasAggregates && !hasGroupBy && stmt.orderBy && stmt.orderBy.length > 0 && !needsPostAggregateSort);
69
+ // Inside the guard above, "not grouped" already means "one implicit group", so this
70
+ // does not test `hasAggregates`: the documented extension (an ungrouped aggregate
71
+ // query's ORDER BY sorts the *input* rows below the aggregation) must read the same
72
+ // whether or not the query happens to name an aggregate, or `select 1 from t having
73
+ // 1 = 1 order by a` would instead push the sort above the aggregation and be rejected
74
+ // by the coverage check while `select group_concat(b) from t order by a` is allowed.
75
+ // NOTE: for the having-only shape the aggregate list is empty, so nothing observes
76
+ // input order and the sort it emits cannot change the single output row — verified
77
+ // by dumping the program for `select 1 from hn having 1 = 1 order by val`, which
78
+ // carries one `sort(1 keys)` instruction. Harmless and rare; if an ungrouped
79
+ // aggregate query with an empty aggregate list ever shows up sorting a large input,
80
+ // elide the sort when `aggregates.length === 0 && groupByExpressions.length === 0`.
81
+ const preAggregateSort = Boolean(!hasGroupBy && stmt.orderBy && stmt.orderBy.length > 0 && !needsPostAggregateSort);
82
82
  currentInput = handlePreAggregateSort(currentInput, stmt, selectContext, preAggregateSort, selectList);
83
83
  // Build GROUP BY expressions, resolving 1-based positional references against the SELECT list.
84
84
  const groupByExpressions = stmt.groupBy ?
@@ -89,18 +89,26 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
89
89
  // Create AggregateNode
90
90
  const aggregateNode = new AggregateNode(selectContext.scope, currentInput, groupByExpressions, aggregates);
91
91
  currentInput = aggregateNode;
92
- // A GROUPED query's post-aggregate expressions — HAVING below, the rebuilt SELECT
93
- // list, a window phase's specifications and function arguments, the sort keys —
94
- // are all built against scopes that fall through to the pre-aggregate select scope,
95
- // so a legal spelling of a grouping key can bind to a base-table attribute the
96
- // grouped row does not carry. Every such expression reaches the fix through ONE
97
- // entry point, {@link redirectPostAggregate}, off this one context — built here,
98
- // the moment the AggregateNode exists, so no post-aggregate site can run before it
99
- // does. An aggregate query with no GROUP BY has no grouping keys to redirect onto
100
- // and gets none.
101
- const groupedRedirectContext = groupByExpressions.length > 0
102
- ? buildGroupedRedirectContext(groupByExpressions, aggregateNode.getAttributes(), aggregateNode.getRelations()[0])
103
- : undefined;
92
+ // Two questions, two bindings — they used to be one value, and conflating them is
93
+ // what let an ungrouped aggregate query skip the coverage check entirely.
94
+ //
95
+ // "What does an aggregated row of this query carry?" — every aggregate query has an
96
+ // answer, GROUP BY or not: an ungrouped one has exactly one implicit group whose row
97
+ // carries only the aggregate results. That is what the finished-plan boundary check
98
+ // ({@link assertGroupedPlanCoverage}) and HAVING's own coverage check need, so this
99
+ // binding is built unconditionally.
100
+ const groupedCoverageContext = buildGroupedRedirectContext(groupByExpressions, aggregateNode.getAttributes(), aggregateNode.getRelations()[0]);
101
+ // "Are there grouping keys to rewrite post-aggregate expressions onto?" — only a
102
+ // query WITH GROUP BY has any. A GROUPED query's post-aggregate expressions — HAVING
103
+ // below, the rebuilt SELECT list, a window phase's specifications and function
104
+ // arguments, the sort keys — are all built against scopes that fall through to the
105
+ // pre-aggregate select scope, so a legal spelling of a grouping key can bind to a
106
+ // base-table attribute the grouped row does not carry. Every such expression reaches
107
+ // the fix through ONE entry point, {@link redirectPostAggregate}, off this one
108
+ // context — built here, the moment the AggregateNode exists, so no post-aggregate
109
+ // site can run before it does. `undefined` here means exactly one thing: no grouping
110
+ // keys, so nothing to rewrite onto and the redirect takes its pass-through branch.
111
+ const groupedRedirectContext = groupByExpressions.length > 0 ? groupedCoverageContext : undefined;
104
112
  // Create aggregate output scope
105
113
  const aggregateOutputScope = createAggregateOutputScope(selectContext.scope, currentInput, groupByExpressions, aggregates, projections);
106
114
  // Build the aggregates planning context entries so downstream builders
@@ -117,10 +125,9 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
117
125
  attributeId: attr.id,
118
126
  };
119
127
  });
120
- // Handle HAVING clause *after* aggregation only when we did not already push
121
- // it below the AggregateNode.
122
- if (stmt.having && !shouldPushHavingBelowAggregate) {
123
- currentInput = buildHavingFilter(currentInput, stmt.having, selectContext, aggregateOutputScope, aggregates, groupByExpressions, groupedRedirectContext);
128
+ // Handle HAVING clause *after* aggregation.
129
+ if (stmt.having) {
130
+ currentInput = buildHavingFilter(currentInput, stmt.having, selectContext, aggregateOutputScope, aggregates, groupByExpressions, groupedCoverageContext, groupedRedirectContext);
124
131
  }
125
132
  // Determine if final projection is needed.
126
133
  // Force a final projection when HAVING-only or ORDER-BY-only aggregates were
@@ -150,9 +157,9 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
150
157
  groupByExpressions,
151
158
  hasHavingOnlyAggregates,
152
159
  hasOrderByOnlyAggregates,
153
- orderByNeedsPostAggregateSort: needsPostAggregateSort,
154
160
  aggregatesContext,
155
161
  groupedRedirectContext,
162
+ groupedCoverageContext,
156
163
  };
157
164
  }
158
165
  /**
@@ -173,12 +180,14 @@ function handlePreAggregateSort(input, stmt, selectContext, preAggregateSort, se
173
180
  return new SortNode(selectContext.scope, input, sortKeys);
174
181
  }
175
182
  /**
176
- * Builds the coverage test for a grouped query. `groupedOutputAttributes` is the
177
- * AggregateNode's output attributes (group keys followed by aggregate results),
178
- * needed only when the expressions to be checked were built against the aggregate
179
- * output scope.
183
+ * Builds the coverage test for a grouped query, from the GROUP BY expressions as
184
+ * built against the PRE-aggregate scope. Its one caller is the SELECT-list check
185
+ * ({@link validateAggregateProjections}), whose projections are built against that
186
+ * same scope. HAVING deliberately does NOT use this: its predicate lives above the
187
+ * AggregateNode and is checked with {@link isPreGroupingReference} instead, which
188
+ * can tell this query's own ungrouped columns from an enclosing query's.
180
189
  */
181
- function buildGroupByCoverage(groupByExpressions, groupedOutputAttributes = []) {
190
+ function buildGroupByCoverage(groupByExpressions) {
182
191
  const attrIds = new Set();
183
192
  const fingerprints = new Set();
184
193
  for (const expr of groupByExpressions) {
@@ -187,9 +196,6 @@ function buildGroupByCoverage(groupByExpressions, groupedOutputAttributes = [])
187
196
  }
188
197
  fingerprints.add(expressionToIdentityString(expr.expression));
189
198
  }
190
- for (const attr of groupedOutputAttributes) {
191
- attrIds.add(attr.id);
192
- }
193
199
  return { attrIds, fingerprints };
194
200
  }
195
201
  /**
@@ -447,14 +453,22 @@ function referencesAggregateInput(node, context) {
447
453
  return false;
448
454
  }
449
455
  /**
450
- * Boundary check over a GROUPED query's finished plan: no node ABOVE the
456
+ * Boundary check over an AGGREGATE query's finished plan: no node ABOVE the
451
457
  * AggregateNode may reference an aggregate-input attribute id that is absent from
452
- * the aggregate's output. Called once per grouped query, from the end of
458
+ * the aggregate's output. Called once per aggregate query, from the end of
453
459
  * `buildSelectStmt`, walking the operator spine from the query root down to — and
454
460
  * stopping at — the AggregateNode itself (whose own input subtree legally reads
455
461
  * pre-grouping columns). Each scalar expression hanging off a spine operator gets
456
462
  * the subquery-aware per-expression check ({@link assertPostAggregateCoverage}).
457
463
  *
464
+ * "Aggregate", not "grouped": a query with no GROUP BY has exactly one implicit group,
465
+ * whose row carries the aggregate results and nothing else, so the same rule applies to
466
+ * everything above it (`having`, `order by` when it is forced above the aggregate,
467
+ * `limit`, `offset`). `context` is therefore built for every aggregate query — see the
468
+ * `groupedCoverageContext` / `groupedRedirectContext` split in
469
+ * {@link buildAggregatePhase}. An ungrouped query's `groupKeys` maps are empty, which is
470
+ * correct: it has no grouping key any post-aggregate reference could be covered by.
471
+ *
458
472
  * This is what turns "a builder forgot to call {@link redirectPostAggregate}" from a
459
473
  * runtime `No row context found for column …` internal error into the user-facing
460
474
  * GROUP BY message at plan time — the SELECT-list and ORDER BY escapes both shipped
@@ -469,11 +483,13 @@ function referencesAggregateInput(node, context) {
469
483
  * rejected with a user-facing GROUP BY error. If such a step is ever added, locate
470
484
  * the aggregate by node id instead of by reference.
471
485
  *
472
- * NOTE: one extra walk of the post-aggregate plan per grouped query per prepare, on
486
+ * NOTE: one extra walk of the post-aggregate plan per aggregate query per prepare, on
473
487
  * top of the redirect's own walk (see {@link redirectNode}). Measured end-to-end, not
474
488
  * isolated: compiling a six-column grouped query costs ~0.6-0.8 ms against ~0.5 ms for
475
489
  * a comparable ungrouped one, so this walk is bounded well below the surrounding
476
- * planning cost. Revisit if preparing grouped queries ever shows up as slow.
490
+ * planning cost. An ungrouped aggregate query now pays the same walk plus the
491
+ * `collectDefinedAttrIds` pass that builds its context. Revisit if preparing aggregate
492
+ * queries ever shows up as slow.
477
493
  */
478
494
  export function assertGroupedPlanCoverage(node, aggregateNode, context) {
479
495
  if (node === aggregateNode)
@@ -522,8 +538,15 @@ function assertPostAggregateCoverage(node, context) {
522
538
  * belongs to the subquery, and its arguments may correlate back out — `over (order by
523
539
  * (select max(wg.b) from wg t))` reads an ungrouped column of this query and must say
524
540
  * so at plan time, not die at runtime with "No row context found for column b".
541
+ *
542
+ * `skipSubqueries` stops the walk at a relational child instead of descending into it,
543
+ * and exists for the HAVING check ({@link buildHavingFilter}). An ungrouped reference
544
+ * to this query's column buried inside a HAVING subquery is already rejected by the
545
+ * finished-plan check ({@link assertGroupedPlanCoverage}) with the general "must appear
546
+ * in the GROUP BY clause" wording, which is the message that shape has always raised;
547
+ * descending here would pre-empt it with HAVING's own dedicated message instead.
525
548
  */
526
- function findUngroupedPostAggregateRef(node, context, insideSubquery = false) {
549
+ function findUngroupedPostAggregateRef(node, context, skipSubqueries = false, insideSubquery = false) {
527
550
  if (!insideSubquery && CapabilityDetectors.isAggregateFunction(node)) {
528
551
  return null;
529
552
  }
@@ -533,7 +556,9 @@ function findUngroupedPostAggregateRef(node, context, insideSubquery = false) {
533
556
  for (const child of node.getChildren()) {
534
557
  if (isCteDefinition(child))
535
558
  continue;
536
- const found = findUngroupedPostAggregateRef(child, context, insideSubquery || isRelationalNode(child));
559
+ if (skipSubqueries && isRelationalNode(child))
560
+ continue;
561
+ const found = findUngroupedPostAggregateRef(child, context, skipSubqueries, insideSubquery || isRelationalNode(child));
537
562
  if (found)
538
563
  return found;
539
564
  }
@@ -541,11 +566,16 @@ function findUngroupedPostAggregateRef(node, context, insideSubquery = false) {
541
566
  }
542
567
  /**
543
568
  * Validates that aggregate and non-aggregate projections don't mix inappropriately.
544
- * With GROUP BY, every non-aggregate column reference in the SELECT list must
545
- * either (a) match a GROUP BY column by attribute id, or (b) appear inside a
546
- * subtree whose AST matches a GROUP BY expression. This is intentionally
547
- * stricter than full functional-dependency coverage — it matches SQL-92 and
548
- * the corpus assertions, without importing SQLite's permissive "bare columns" rule.
569
+ * Every non-aggregate column reference in the SELECT list must either (a) match a
570
+ * GROUP BY column by attribute id, or (b) appear inside a subtree whose AST matches
571
+ * a GROUP BY expression. This is intentionally stricter than full functional-dependency
572
+ * coverage — it matches SQL-92 and the corpus assertions, without importing SQLite's
573
+ * permissive "bare columns" rule.
574
+ *
575
+ * Only {@link buildAggregatePhase} calls this, and only from inside its
576
+ * `isAggregateQuery` guard, so "no GROUP BY" here means "one implicit group with an
577
+ * EMPTY set of grouping keys" — not "no grouping at all". The coverage walk therefore
578
+ * runs for it too, and rejects every bare select-list column.
549
579
  */
550
580
  function validateAggregateProjections(projections, hasAggregates, hasGroupBy, groupByExpressions) {
551
581
  if (projections.length === 0)
@@ -553,10 +583,13 @@ function validateAggregateProjections(projections, hasAggregates, hasGroupBy, gr
553
583
  if (hasAggregates && !hasGroupBy) {
554
584
  throw new QuereusError('Cannot mix aggregate and non-aggregate columns in SELECT list without GROUP BY', StatusCode.ERROR);
555
585
  }
556
- if (!hasGroupBy)
557
- return;
558
586
  // The SELECT list is built against the pre-aggregate scope, so no aggregate
559
- // output attributes participate.
587
+ // output attributes participate. With no GROUP BY the coverage set is empty, which
588
+ // is exactly right for the one implicit group: it carries no base-table column, so
589
+ // any bare column here is rejected. Skipping the walk for that shape is what let
590
+ // `select * from t having 1 = 1` fall through to buildFinalAggregateProjections and
591
+ // raise its internal-consistency assert ("Internal: SELECT * column 'id' is not a
592
+ // GROUP BY key", StatusCode.INTERNAL) at the user instead of this message.
560
593
  const coverage = buildGroupByCoverage(groupByExpressions);
561
594
  for (const proj of projections) {
562
595
  assertGroupByCoverage(proj.node, coverage);
@@ -801,16 +834,21 @@ function groupKeyIndexOf(node, groupKeys) {
801
834
  /**
802
835
  * Builds HAVING filter clause.
803
836
  *
804
- * `groupedRedirectContext` is supplied for a GROUPED query. A HAVING reference to a
805
- * grouping key under a spelling the hybrid scope does not hold (`having wg.a = 'x'`
806
- * against `group by a`, the key nested in `upper(wg.a)`, a computed key written out
807
- * again) falls through to a base-table attribute, which happened to read correctly
808
- * only because this FilterNode sits directly on the AggregateNode's yield where the
809
- * representative source row is still published. {@link redirectPostAggregate} lands
810
- * it on the aggregate's own output column instead, so the predicate stays correct
811
- * wherever the filter ends up relative to a buffering operator.
837
+ * `groupedCoverageContext` describes what an aggregated row of this query carries and
838
+ * is supplied for EVERY aggregate query; it drives the coverage check below.
839
+ *
840
+ * `groupedRedirectContext` is the rewrite target and is supplied only for a GROUPED
841
+ * query. A HAVING reference to a grouping key under a spelling the hybrid scope does
842
+ * not hold (`having wg.a = 'x'` against `group by a`, the key nested in `upper(wg.a)`,
843
+ * a computed key written out again) falls through to a base-table attribute, which
844
+ * happened to read correctly only because this FilterNode sits directly on the
845
+ * AggregateNode's yield where the representative source row is still published.
846
+ * {@link redirectPostAggregate} lands it on the aggregate's own output column instead,
847
+ * so the predicate stays correct wherever the filter ends up relative to a buffering
848
+ * operator. A query with no GROUP BY has no keys to land anything on and passes
849
+ * `undefined`, so the redirect takes its pass-through branch.
812
850
  */
813
- function buildHavingFilter(input, havingClause, selectContext, aggregateOutputScope, aggregates, groupByExpressions, groupedRedirectContext) {
851
+ function buildHavingFilter(input, havingClause, selectContext, aggregateOutputScope, aggregates, groupByExpressions, groupedCoverageContext, groupedRedirectContext) {
814
852
  const aggregateAttributes = input.getAttributes();
815
853
  // Create a hybrid scope that first tries the aggregate output scope,
816
854
  // then falls back to the original source scope for column resolution.
@@ -854,17 +892,22 @@ function buildHavingFilter(input, havingClause, selectContext, aggregateOutputSc
854
892
  })
855
893
  };
856
894
  const havingExpression = redirectPostAggregate(buildExpression(havingContext, havingClause, true), groupedRedirectContext, hybridScope);
857
- // Reject HAVING references to non-grouped, non-aggregated columns.
895
+ // Reject HAVING references to non-grouped, non-aggregated columns — and ONLY
896
+ // those. The test is {@link isPreGroupingReference}: true just for a column of
897
+ // THIS query's pre-grouping input that the grouped row no longer carries. A
898
+ // column of an ENCLOSING query (a correlated reference from a subquery's HAVING,
899
+ // legal in SQL exactly as it is in WHERE) belongs to neither set and passes, as
900
+ // does a subquery's own column. An allow-list of grouping keys is unnecessary
901
+ // here: `redirectPostAggregate` has already rewritten every spelling of a
902
+ // grouping key it handles into an AggregateNode-OUTPUT reference, which
903
+ // `isPreGroupingReference` returns false for.
904
+ //
858
905
  // With GROUP BY: only GROUP BY columns/expressions and aggregates are allowed.
859
906
  // Without GROUP BY (implicit single group, only reachable here when aggregates
860
- // are present): only aggregates are allowed.
861
- // HAVING references resolve through `hybridScope`: GROUP BY columns and
862
- // aggregate aliases land on AggregateNode-output attribute IDs, while bare
863
- // source columns (registered as a fallback) land on source attribute IDs.
864
- // We accept both flavors of "grouped" attribute, plus any subtree whose AST
865
- // fingerprint matches a GROUP BY expression.
866
- const coverage = buildGroupByCoverage(groupByExpressions, aggregateAttributes.slice(0, groupByExpressions.length + aggregates.length));
867
- const ungrouped = findUngroupedColumnRef(havingExpression, coverage);
907
+ // are present): only aggregates are allowed. Both cases are described by
908
+ // `groupedCoverageContext`, which is why it is a separate parameter from the
909
+ // rewrite target above.
910
+ const ungrouped = findUngroupedPostAggregateRef(havingExpression, groupedCoverageContext, /* skipSubqueries */ true);
868
911
  if (ungrouped) {
869
912
  throw new QuereusError(`HAVING references non-grouped column '${ungrouped.expression.name}'; ` +
870
913
  `HAVING may only reference GROUP BY columns or aggregate expressions`, StatusCode.ERROR, undefined, ungrouped.expression.loc?.start.line, ungrouped.expression.loc?.start.column);