@quereus/quereus 4.6.0 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (535) hide show
  1. package/README.md +2 -2
  2. package/dist/src/common/errors.d.ts +17 -0
  3. package/dist/src/common/errors.d.ts.map +1 -1
  4. package/dist/src/common/errors.js +21 -0
  5. package/dist/src/common/errors.js.map +1 -1
  6. package/dist/src/core/database-assertions.d.ts +4 -3
  7. package/dist/src/core/database-assertions.d.ts.map +1 -1
  8. package/dist/src/core/database-assertions.js +44 -14
  9. package/dist/src/core/database-assertions.js.map +1 -1
  10. package/dist/src/core/database-events.d.ts +62 -0
  11. package/dist/src/core/database-events.d.ts.map +1 -1
  12. package/dist/src/core/database-events.js +88 -2
  13. package/dist/src/core/database-events.js.map +1 -1
  14. package/dist/src/core/database-internal.d.ts +5 -2
  15. package/dist/src/core/database-internal.d.ts.map +1 -1
  16. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
  17. package/dist/src/core/database-materialized-views-plan-builders.js +4 -2
  18. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
  19. package/dist/src/core/database-materialized-views-plans.d.ts +12 -2
  20. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
  21. package/dist/src/core/database-materialized-views.d.ts +46 -0
  22. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  23. package/dist/src/core/database-materialized-views.js +75 -4
  24. package/dist/src/core/database-materialized-views.js.map +1 -1
  25. package/dist/src/core/database.d.ts +9 -1
  26. package/dist/src/core/database.d.ts.map +1 -1
  27. package/dist/src/core/database.js +36 -10
  28. package/dist/src/core/database.js.map +1 -1
  29. package/dist/src/core/derived-row-validator.d.ts.map +1 -1
  30. package/dist/src/core/derived-row-validator.js +7 -1
  31. package/dist/src/core/derived-row-validator.js.map +1 -1
  32. package/dist/src/core/statement.d.ts.map +1 -1
  33. package/dist/src/core/statement.js +15 -5
  34. package/dist/src/core/statement.js.map +1 -1
  35. package/dist/src/emit/ast-stringify.d.ts +18 -2
  36. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  37. package/dist/src/emit/ast-stringify.js +22 -4
  38. package/dist/src/emit/ast-stringify.js.map +1 -1
  39. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  40. package/dist/src/func/builtins/explain.js +19 -5
  41. package/dist/src/func/builtins/explain.js.map +1 -1
  42. package/dist/src/func/builtins/scalar.d.ts.map +1 -1
  43. package/dist/src/func/builtins/scalar.js +24 -20
  44. package/dist/src/func/builtins/scalar.js.map +1 -1
  45. package/dist/src/func/builtins/schema.d.ts.map +1 -1
  46. package/dist/src/func/builtins/schema.js +32 -5
  47. package/dist/src/func/builtins/schema.js.map +1 -1
  48. package/dist/src/index.d.ts +4 -4
  49. package/dist/src/index.d.ts.map +1 -1
  50. package/dist/src/index.js +4 -4
  51. package/dist/src/index.js.map +1 -1
  52. package/dist/src/parser/ast.d.ts +58 -1
  53. package/dist/src/parser/ast.d.ts.map +1 -1
  54. package/dist/src/parser/parser.js +1 -1
  55. package/dist/src/parser/parser.js.map +1 -1
  56. package/dist/src/parser/utils.d.ts +13 -1
  57. package/dist/src/parser/utils.d.ts.map +1 -1
  58. package/dist/src/parser/utils.js +14 -0
  59. package/dist/src/parser/utils.js.map +1 -1
  60. package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
  61. package/dist/src/planner/analysis/assertion-classifier.js +7 -2
  62. package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
  63. package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
  64. package/dist/src/planner/analysis/assertion-hoist-cache.js +5 -0
  65. package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
  66. package/dist/src/planner/analysis/change-scope.d.ts +11 -3
  67. package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
  68. package/dist/src/planner/analysis/change-scope.js +5 -4
  69. package/dist/src/planner/analysis/change-scope.js.map +1 -1
  70. package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -1
  71. package/dist/src/planner/analysis/coverage-prover.js +13 -5
  72. package/dist/src/planner/analysis/coverage-prover.js.map +1 -1
  73. package/dist/src/planner/analysis/equi-correlation.d.ts +6 -1
  74. package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -1
  75. package/dist/src/planner/analysis/equi-correlation.js +8 -1
  76. package/dist/src/planner/analysis/equi-correlation.js.map +1 -1
  77. package/dist/src/planner/analysis/predicate-dependencies.d.ts +34 -0
  78. package/dist/src/planner/analysis/predicate-dependencies.d.ts.map +1 -0
  79. package/dist/src/planner/analysis/predicate-dependencies.js +60 -0
  80. package/dist/src/planner/analysis/predicate-dependencies.js.map +1 -0
  81. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +1 -1
  82. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  83. package/dist/src/planner/analysis/query-rewrite-matcher.js +0 -26
  84. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  85. package/dist/src/planner/building/alter-table.d.ts.map +1 -1
  86. package/dist/src/planner/building/alter-table.js +53 -17
  87. package/dist/src/planner/building/alter-table.js.map +1 -1
  88. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  89. package/dist/src/planner/building/constraint-builder.js +9 -5
  90. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  91. package/dist/src/planner/building/create-assertion.d.ts.map +1 -1
  92. package/dist/src/planner/building/create-assertion.js +72 -1
  93. package/dist/src/planner/building/create-assertion.js.map +1 -1
  94. package/dist/src/planner/building/create-view.d.ts +6 -1
  95. package/dist/src/planner/building/create-view.d.ts.map +1 -1
  96. package/dist/src/planner/building/create-view.js +12 -3
  97. package/dist/src/planner/building/create-view.js.map +1 -1
  98. package/dist/src/planner/building/ddl.d.ts.map +1 -1
  99. package/dist/src/planner/building/ddl.js +6 -2
  100. package/dist/src/planner/building/ddl.js.map +1 -1
  101. package/dist/src/planner/building/delete.d.ts.map +1 -1
  102. package/dist/src/planner/building/delete.js +23 -10
  103. package/dist/src/planner/building/delete.js.map +1 -1
  104. package/dist/src/planner/building/dml-target.d.ts.map +1 -1
  105. package/dist/src/planner/building/dml-target.js +4 -0
  106. package/dist/src/planner/building/dml-target.js.map +1 -1
  107. package/dist/src/planner/building/drop-assertion.d.ts.map +1 -1
  108. package/dist/src/planner/building/drop-assertion.js +3 -1
  109. package/dist/src/planner/building/drop-assertion.js.map +1 -1
  110. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  111. package/dist/src/planner/building/foreign-key-builder.js +7 -5
  112. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  113. package/dist/src/planner/building/function-call.d.ts +35 -0
  114. package/dist/src/planner/building/function-call.d.ts.map +1 -1
  115. package/dist/src/planner/building/function-call.js +53 -40
  116. package/dist/src/planner/building/function-call.js.map +1 -1
  117. package/dist/src/planner/building/insert.d.ts.map +1 -1
  118. package/dist/src/planner/building/insert.js +185 -48
  119. package/dist/src/planner/building/insert.js.map +1 -1
  120. package/dist/src/planner/building/materialized-view.d.ts.map +1 -1
  121. package/dist/src/planner/building/materialized-view.js +3 -1
  122. package/dist/src/planner/building/materialized-view.js.map +1 -1
  123. package/dist/src/planner/building/schema-authored-context.d.ts +69 -0
  124. package/dist/src/planner/building/schema-authored-context.d.ts.map +1 -0
  125. package/dist/src/planner/building/schema-authored-context.js +75 -0
  126. package/dist/src/planner/building/schema-authored-context.js.map +1 -0
  127. package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
  128. package/dist/src/planner/building/schema-resolution.js +7 -4
  129. package/dist/src/planner/building/schema-resolution.js.map +1 -1
  130. package/dist/src/planner/building/select-aggregates.d.ts +187 -2
  131. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  132. package/dist/src/planner/building/select-aggregates.js +414 -81
  133. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  134. package/dist/src/planner/building/select-compound.js +2 -2
  135. package/dist/src/planner/building/select-compound.js.map +1 -1
  136. package/dist/src/planner/building/select-context.d.ts +91 -0
  137. package/dist/src/planner/building/select-context.d.ts.map +1 -1
  138. package/dist/src/planner/building/select-context.js +113 -0
  139. package/dist/src/planner/building/select-context.js.map +1 -1
  140. package/dist/src/planner/building/select-modifiers.d.ts +10 -3
  141. package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
  142. package/dist/src/planner/building/select-modifiers.js +29 -8
  143. package/dist/src/planner/building/select-modifiers.js.map +1 -1
  144. package/dist/src/planner/building/select-ordinal.d.ts +64 -19
  145. package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
  146. package/dist/src/planner/building/select-ordinal.js +79 -30
  147. package/dist/src/planner/building/select-ordinal.js.map +1 -1
  148. package/dist/src/planner/building/select-projections.d.ts +1 -1
  149. package/dist/src/planner/building/select-projections.d.ts.map +1 -1
  150. package/dist/src/planner/building/select-projections.js +18 -11
  151. package/dist/src/planner/building/select-projections.js.map +1 -1
  152. package/dist/src/planner/building/select-window.d.ts +13 -3
  153. package/dist/src/planner/building/select-window.d.ts.map +1 -1
  154. package/dist/src/planner/building/select-window.js +142 -37
  155. package/dist/src/planner/building/select-window.js.map +1 -1
  156. package/dist/src/planner/building/select.d.ts.map +1 -1
  157. package/dist/src/planner/building/select.js +129 -59
  158. package/dist/src/planner/building/select.js.map +1 -1
  159. package/dist/src/planner/building/update.d.ts.map +1 -1
  160. package/dist/src/planner/building/update.js +27 -13
  161. package/dist/src/planner/building/update.js.map +1 -1
  162. package/dist/src/planner/building/view-mutation-builder.d.ts +1 -1
  163. package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -1
  164. package/dist/src/planner/building/view-mutation-builder.js +102 -8
  165. package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
  166. package/dist/src/planner/building/with.d.ts.map +1 -1
  167. package/dist/src/planner/building/with.js +34 -4
  168. package/dist/src/planner/building/with.js.map +1 -1
  169. package/dist/src/planner/cache/correlation-detector.d.ts +15 -0
  170. package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -1
  171. package/dist/src/planner/cache/correlation-detector.js +26 -0
  172. package/dist/src/planner/cache/correlation-detector.js.map +1 -1
  173. package/dist/src/planner/cache/materialization-advisory.d.ts +7 -0
  174. package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
  175. package/dist/src/planner/cache/materialization-advisory.js +12 -3
  176. package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
  177. package/dist/src/planner/framework/characteristics.d.ts +9 -0
  178. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  179. package/dist/src/planner/framework/characteristics.js.map +1 -1
  180. package/dist/src/planner/framework/pass.d.ts +2 -0
  181. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  182. package/dist/src/planner/framework/pass.js +15 -0
  183. package/dist/src/planner/framework/pass.js.map +1 -1
  184. package/dist/src/planner/mutation/backward-body.d.ts.map +1 -1
  185. package/dist/src/planner/mutation/backward-body.js +4 -1
  186. package/dist/src/planner/mutation/backward-body.js.map +1 -1
  187. package/dist/src/planner/mutation/body-context.d.ts +23 -0
  188. package/dist/src/planner/mutation/body-context.d.ts.map +1 -0
  189. package/dist/src/planner/mutation/body-context.js +26 -0
  190. package/dist/src/planner/mutation/body-context.js.map +1 -0
  191. package/dist/src/planner/mutation/cte-flatten.js +15 -2
  192. package/dist/src/planner/mutation/cte-flatten.js.map +1 -1
  193. package/dist/src/planner/mutation/decomposition.d.ts +8 -0
  194. package/dist/src/planner/mutation/decomposition.d.ts.map +1 -1
  195. package/dist/src/planner/mutation/decomposition.js +8 -3
  196. package/dist/src/planner/mutation/decomposition.js.map +1 -1
  197. package/dist/src/planner/mutation/lens-enforcement.js +1 -1
  198. package/dist/src/planner/mutation/multi-source.d.ts +7 -0
  199. package/dist/src/planner/mutation/multi-source.d.ts.map +1 -1
  200. package/dist/src/planner/mutation/multi-source.js +5 -0
  201. package/dist/src/planner/mutation/multi-source.js.map +1 -1
  202. package/dist/src/planner/mutation/mutation-diagnostic.d.ts +1 -1
  203. package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -1
  204. package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -1
  205. package/dist/src/planner/mutation/scope-transform.d.ts +32 -0
  206. package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -1
  207. package/dist/src/planner/mutation/scope-transform.js +181 -33
  208. package/dist/src/planner/mutation/scope-transform.js.map +1 -1
  209. package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
  210. package/dist/src/planner/mutation/set-op.js +66 -16
  211. package/dist/src/planner/mutation/set-op.js.map +1 -1
  212. package/dist/src/planner/mutation/single-source.d.ts.map +1 -1
  213. package/dist/src/planner/mutation/single-source.js +100 -24
  214. package/dist/src/planner/mutation/single-source.js.map +1 -1
  215. package/dist/src/planner/nodes/add-constraint-node.d.ts +15 -1
  216. package/dist/src/planner/nodes/add-constraint-node.d.ts.map +1 -1
  217. package/dist/src/planner/nodes/add-constraint-node.js +10 -1
  218. package/dist/src/planner/nodes/add-constraint-node.js.map +1 -1
  219. package/dist/src/planner/nodes/aggregate-node.d.ts +14 -5
  220. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  221. package/dist/src/planner/nodes/aggregate-node.js +28 -21
  222. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  223. package/dist/src/planner/nodes/alter-table-node.d.ts +27 -2
  224. package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
  225. package/dist/src/planner/nodes/alter-table-node.js +49 -2
  226. package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
  227. package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
  228. package/dist/src/planner/nodes/constraint-check-node.js +17 -19
  229. package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
  230. package/dist/src/planner/nodes/create-assertion-node.d.ts +2 -1
  231. package/dist/src/planner/nodes/create-assertion-node.d.ts.map +1 -1
  232. package/dist/src/planner/nodes/create-assertion-node.js +5 -2
  233. package/dist/src/planner/nodes/create-assertion-node.js.map +1 -1
  234. package/dist/src/planner/nodes/cte-node.d.ts +19 -9
  235. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  236. package/dist/src/planner/nodes/cte-node.js +25 -9
  237. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  238. package/dist/src/planner/nodes/delete-node.d.ts +20 -2
  239. package/dist/src/planner/nodes/delete-node.d.ts.map +1 -1
  240. package/dist/src/planner/nodes/delete-node.js +11 -2
  241. package/dist/src/planner/nodes/delete-node.js.map +1 -1
  242. package/dist/src/planner/nodes/dml-executor-node.d.ts +58 -1
  243. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  244. package/dist/src/planner/nodes/dml-executor-node.js +107 -15
  245. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  246. package/dist/src/planner/nodes/drop-assertion-node.d.ts +2 -1
  247. package/dist/src/planner/nodes/drop-assertion-node.d.ts.map +1 -1
  248. package/dist/src/planner/nodes/drop-assertion-node.js +5 -2
  249. package/dist/src/planner/nodes/drop-assertion-node.js.map +1 -1
  250. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  251. package/dist/src/planner/nodes/filter.js +12 -6
  252. package/dist/src/planner/nodes/filter.js.map +1 -1
  253. package/dist/src/planner/nodes/hash-aggregate.d.ts +0 -5
  254. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  255. package/dist/src/planner/nodes/hash-aggregate.js +17 -20
  256. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  257. package/dist/src/planner/nodes/insert-node.d.ts +19 -2
  258. package/dist/src/planner/nodes/insert-node.d.ts.map +1 -1
  259. package/dist/src/planner/nodes/insert-node.js +10 -2
  260. package/dist/src/planner/nodes/insert-node.js.map +1 -1
  261. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts +42 -10
  262. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts.map +1 -1
  263. package/dist/src/planner/nodes/key-set-semi-join-node.js +85 -16
  264. package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -1
  265. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +5 -0
  266. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
  267. package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
  268. package/dist/src/planner/nodes/plan-node.d.ts +5 -0
  269. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  270. package/dist/src/planner/nodes/plan-node.js +12 -0
  271. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  272. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  273. package/dist/src/planner/nodes/project-node.js +16 -35
  274. package/dist/src/planner/nodes/project-node.js.map +1 -1
  275. package/dist/src/planner/nodes/retrieve-node.d.ts +16 -2
  276. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  277. package/dist/src/planner/nodes/retrieve-node.js +8 -1
  278. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  279. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  280. package/dist/src/planner/nodes/returning-node.js +13 -32
  281. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  282. package/dist/src/planner/nodes/stream-aggregate.d.ts +0 -5
  283. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  284. package/dist/src/planner/nodes/stream-aggregate.js +18 -24
  285. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  286. package/dist/src/planner/nodes/table-access-nodes.d.ts +89 -1
  287. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  288. package/dist/src/planner/nodes/table-access-nodes.js +64 -2
  289. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  290. package/dist/src/planner/nodes/update-node.d.ts +19 -2
  291. package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
  292. package/dist/src/planner/nodes/update-node.js +10 -2
  293. package/dist/src/planner/nodes/update-node.js.map +1 -1
  294. package/dist/src/planner/optimizer.d.ts +18 -0
  295. package/dist/src/planner/optimizer.d.ts.map +1 -1
  296. package/dist/src/planner/optimizer.js +59 -10
  297. package/dist/src/planner/optimizer.js.map +1 -1
  298. package/dist/src/planner/planning-context.d.ts +24 -0
  299. package/dist/src/planner/planning-context.d.ts.map +1 -1
  300. package/dist/src/planner/planning-context.js.map +1 -1
  301. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts +78 -20
  302. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -1
  303. package/dist/src/planner/rules/access/rule-key-set-seek.js +297 -71
  304. package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -1
  305. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
  306. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +2 -2
  307. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
  308. package/dist/src/planner/rules/access/rule-select-access-path.d.ts +11 -1
  309. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  310. package/dist/src/planner/rules/access/rule-select-access-path.js +46 -2
  311. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  312. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +7 -4
  313. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
  314. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +39 -5
  315. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
  316. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
  317. package/dist/src/planner/rules/cache/rule-cte-optimization.js +6 -2
  318. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
  319. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +10 -3
  320. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  321. package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -1
  322. package/dist/src/planner/rules/join/index-nested-loop.js +13 -7
  323. package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -1
  324. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts +4 -0
  325. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
  326. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +50 -15
  327. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
  328. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +6 -0
  329. package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
  330. package/dist/src/planner/rules/join/rule-join-elimination.js +25 -9
  331. package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
  332. package/dist/src/planner/rules/join/rule-join-key-inference.d.ts +7 -0
  333. package/dist/src/planner/rules/join/rule-join-key-inference.d.ts.map +1 -1
  334. package/dist/src/planner/rules/join/rule-join-key-inference.js +23 -11
  335. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +1 -1
  336. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +2 -2
  337. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  338. package/dist/src/planner/rules/join/rule-join-physical-selection.js +46 -16
  339. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  340. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +2 -0
  341. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
  342. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +14 -0
  343. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
  344. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts +2 -2
  345. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
  346. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +19 -22
  347. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
  348. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +33 -19
  349. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
  350. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +37 -18
  351. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -1
  352. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts +6 -3
  353. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts.map +1 -1
  354. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js +6 -3
  355. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js.map +1 -1
  356. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
  357. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +11 -21
  358. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
  359. package/dist/src/planner/rules/shared/access-leaf.d.ts +16 -3
  360. package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -1
  361. package/dist/src/planner/rules/shared/access-leaf.js +21 -5
  362. package/dist/src/planner/rules/shared/access-leaf.js.map +1 -1
  363. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
  364. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
  365. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +1 -1
  366. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
  367. package/dist/src/planner/stored-body-context.d.ts +57 -0
  368. package/dist/src/planner/stored-body-context.d.ts.map +1 -0
  369. package/dist/src/planner/stored-body-context.js +64 -0
  370. package/dist/src/planner/stored-body-context.js.map +1 -0
  371. package/dist/src/planner/util/ind-utils.d.ts +28 -20
  372. package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
  373. package/dist/src/planner/util/ind-utils.js +36 -27
  374. package/dist/src/planner/util/ind-utils.js.map +1 -1
  375. package/dist/src/planner/util/key-utils.d.ts +19 -4
  376. package/dist/src/planner/util/key-utils.d.ts.map +1 -1
  377. package/dist/src/planner/util/key-utils.js +23 -7
  378. package/dist/src/planner/util/key-utils.js.map +1 -1
  379. package/dist/src/planner/util/output-names.d.ts +12 -0
  380. package/dist/src/planner/util/output-names.d.ts.map +1 -0
  381. package/dist/src/planner/util/output-names.js +20 -0
  382. package/dist/src/planner/util/output-names.js.map +1 -0
  383. package/dist/src/planner/util/row-estimates.d.ts +11 -0
  384. package/dist/src/planner/util/row-estimates.d.ts.map +1 -1
  385. package/dist/src/planner/util/row-estimates.js +28 -0
  386. package/dist/src/planner/util/row-estimates.js.map +1 -1
  387. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  388. package/dist/src/runtime/deferred-constraint-queue.js +3 -2
  389. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  390. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  391. package/dist/src/runtime/emit/add-constraint.js +22 -6
  392. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  393. package/dist/src/runtime/emit/alter-schema-event.d.ts +59 -4
  394. package/dist/src/runtime/emit/alter-schema-event.d.ts.map +1 -1
  395. package/dist/src/runtime/emit/alter-schema-event.js +63 -4
  396. package/dist/src/runtime/emit/alter-schema-event.js.map +1 -1
  397. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  398. package/dist/src/runtime/emit/alter-table.js +212 -92
  399. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  400. package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
  401. package/dist/src/runtime/emit/analyze.js +15 -4
  402. package/dist/src/runtime/emit/analyze.js.map +1 -1
  403. package/dist/src/runtime/emit/assertion-drop-guard.d.ts +37 -0
  404. package/dist/src/runtime/emit/assertion-drop-guard.d.ts.map +1 -0
  405. package/dist/src/runtime/emit/assertion-drop-guard.js +59 -0
  406. package/dist/src/runtime/emit/assertion-drop-guard.js.map +1 -0
  407. package/dist/src/runtime/emit/assertion-rename-helpers.d.ts +33 -0
  408. package/dist/src/runtime/emit/assertion-rename-helpers.d.ts.map +1 -0
  409. package/dist/src/runtime/emit/assertion-rename-helpers.js +124 -0
  410. package/dist/src/runtime/emit/assertion-rename-helpers.js.map +1 -0
  411. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  412. package/dist/src/runtime/emit/constraint-check.js +10 -227
  413. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  414. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  415. package/dist/src/runtime/emit/create-assertion.js +31 -14
  416. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  417. package/dist/src/runtime/emit/cte.d.ts.map +1 -1
  418. package/dist/src/runtime/emit/cte.js +11 -6
  419. package/dist/src/runtime/emit/cte.js.map +1 -1
  420. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  421. package/dist/src/runtime/emit/dml-executor.js +169 -1
  422. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  423. package/dist/src/runtime/emit/drop-assertion.js +8 -8
  424. package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
  425. package/dist/src/runtime/emit/drop-column-guards.d.ts +151 -0
  426. package/dist/src/runtime/emit/drop-column-guards.d.ts.map +1 -0
  427. package/dist/src/runtime/emit/drop-column-guards.js +230 -0
  428. package/dist/src/runtime/emit/drop-column-guards.js.map +1 -0
  429. package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
  430. package/dist/src/runtime/emit/drop-table.js +6 -0
  431. package/dist/src/runtime/emit/drop-table.js.map +1 -1
  432. package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
  433. package/dist/src/runtime/emit/drop-view.js +4 -0
  434. package/dist/src/runtime/emit/drop-view.js.map +1 -1
  435. package/dist/src/runtime/emit/key-set-semi-join.d.ts.map +1 -1
  436. package/dist/src/runtime/emit/key-set-semi-join.js +5 -3
  437. package/dist/src/runtime/emit/key-set-semi-join.js.map +1 -1
  438. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +4 -4
  439. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  440. package/dist/src/runtime/emit/materialized-view-helpers.js +34 -22
  441. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  442. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  443. package/dist/src/runtime/emit/materialized-view.js +7 -2
  444. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  445. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  446. package/dist/src/runtime/emit/recursive-cte.js +4 -5
  447. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  448. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  449. package/dist/src/runtime/emit/update.js +18 -6
  450. package/dist/src/runtime/emit/update.js.map +1 -1
  451. package/dist/src/runtime/row-constraints.d.ts +85 -0
  452. package/dist/src/runtime/row-constraints.d.ts.map +1 -0
  453. package/dist/src/runtime/row-constraints.js +239 -0
  454. package/dist/src/runtime/row-constraints.js.map +1 -0
  455. package/dist/src/runtime/types.d.ts +8 -11
  456. package/dist/src/runtime/types.d.ts.map +1 -1
  457. package/dist/src/runtime/types.js.map +1 -1
  458. package/dist/src/schema/assertion.d.ts +14 -1
  459. package/dist/src/schema/assertion.d.ts.map +1 -1
  460. package/dist/src/schema/assertion.js +14 -1
  461. package/dist/src/schema/assertion.js.map +1 -1
  462. package/dist/src/schema/catalog-persistability.js +19 -3
  463. package/dist/src/schema/catalog-persistability.js.map +1 -1
  464. package/dist/src/schema/catalog.d.ts +6 -0
  465. package/dist/src/schema/catalog.d.ts.map +1 -1
  466. package/dist/src/schema/catalog.js +26 -36
  467. package/dist/src/schema/catalog.js.map +1 -1
  468. package/dist/src/schema/column-source-resolver.d.ts +18 -0
  469. package/dist/src/schema/column-source-resolver.d.ts.map +1 -0
  470. package/dist/src/schema/column-source-resolver.js +22 -0
  471. package/dist/src/schema/column-source-resolver.js.map +1 -0
  472. package/dist/src/schema/constraint-builder.d.ts.map +1 -1
  473. package/dist/src/schema/constraint-builder.js +7 -1
  474. package/dist/src/schema/constraint-builder.js.map +1 -1
  475. package/dist/src/schema/ddl-generator.js +8 -0
  476. package/dist/src/schema/ddl-generator.js.map +1 -1
  477. package/dist/src/schema/lens-compiler.d.ts.map +1 -1
  478. package/dist/src/schema/lens-compiler.js +203 -51
  479. package/dist/src/schema/lens-compiler.js.map +1 -1
  480. package/dist/src/schema/lens-prover.d.ts +2 -3
  481. package/dist/src/schema/lens-prover.d.ts.map +1 -1
  482. package/dist/src/schema/lens-prover.js +19 -11
  483. package/dist/src/schema/lens-prover.js.map +1 -1
  484. package/dist/src/schema/manager.d.ts +30 -12
  485. package/dist/src/schema/manager.d.ts.map +1 -1
  486. package/dist/src/schema/manager.js +49 -17
  487. package/dist/src/schema/manager.js.map +1 -1
  488. package/dist/src/schema/rename-rewriter.d.ts +142 -0
  489. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  490. package/dist/src/schema/rename-rewriter.js +254 -9
  491. package/dist/src/schema/rename-rewriter.js.map +1 -1
  492. package/dist/src/schema/reserved-tags.d.ts +1 -1
  493. package/dist/src/schema/reserved-tags.d.ts.map +1 -1
  494. package/dist/src/schema/reserved-tags.js +4 -3
  495. package/dist/src/schema/reserved-tags.js.map +1 -1
  496. package/dist/src/schema/schema-differ.d.ts +16 -0
  497. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  498. package/dist/src/schema/schema-differ.js +122 -11
  499. package/dist/src/schema/schema-differ.js.map +1 -1
  500. package/dist/src/schema/view.d.ts +11 -0
  501. package/dist/src/schema/view.d.ts.map +1 -1
  502. package/dist/src/schema/view.js +12 -0
  503. package/dist/src/schema/view.js.map +1 -1
  504. package/dist/src/types/builtin-types.d.ts +38 -0
  505. package/dist/src/types/builtin-types.d.ts.map +1 -1
  506. package/dist/src/types/builtin-types.js +77 -26
  507. package/dist/src/types/builtin-types.js.map +1 -1
  508. package/dist/src/types/index.d.ts +1 -1
  509. package/dist/src/types/index.d.ts.map +1 -1
  510. package/dist/src/types/index.js +1 -1
  511. package/dist/src/types/index.js.map +1 -1
  512. package/dist/src/util/{working-table-iterable.d.ts → array-row-iterable.d.ts} +6 -6
  513. package/dist/src/util/array-row-iterable.d.ts.map +1 -0
  514. package/dist/src/util/{working-table-iterable.js → array-row-iterable.js} +6 -6
  515. package/dist/src/util/array-row-iterable.js.map +1 -0
  516. package/dist/src/vtab/events.d.ts +3 -0
  517. package/dist/src/vtab/events.d.ts.map +1 -1
  518. package/dist/src/vtab/events.js.map +1 -1
  519. package/dist/src/vtab/manifest.d.ts +15 -0
  520. package/dist/src/vtab/manifest.d.ts.map +1 -1
  521. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  522. package/dist/src/vtab/memory/layer/manager.js +3 -69
  523. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  524. package/dist/src/vtab/memory/module.d.ts +16 -1
  525. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  526. package/dist/src/vtab/memory/module.js +62 -2
  527. package/dist/src/vtab/memory/module.js.map +1 -1
  528. package/dist/src/vtab/module.d.ts +26 -2
  529. package/dist/src/vtab/module.d.ts.map +1 -1
  530. package/dist/src/vtab/table.d.ts +8 -1
  531. package/dist/src/vtab/table.d.ts.map +1 -1
  532. package/dist/src/vtab/table.js.map +1 -1
  533. package/package.json +3 -3
  534. package/dist/src/util/working-table-iterable.d.ts.map +0 -1
  535. package/dist/src/util/working-table-iterable.js.map +0 -1
@@ -1,38 +1,83 @@
1
1
  import type * as AST from '../../parser/ast.js';
2
- import type { RelationalPlanNode } from '../nodes/plan-node.js';
2
+ import type { Attribute, RelationalPlanNode, ScalarPlanNode } from '../nodes/plan-node.js';
3
+ import type { PlanningContext } from '../planning-context.js';
3
4
  import type { Scope } from '../scopes/scope.js';
4
5
  import { ColumnReferenceNode } from '../nodes/reference.js';
5
6
  /**
6
- * Builds the source-order list of AST expressions for a SELECT list, with
7
+ * One output column of a SELECT list, in source order (stars expanded).
8
+ *
9
+ * `expr` is the AST that produced the column — the authored expression for a
10
+ * normal result column, or a synthesized `{type:'column', name}` for a column a
11
+ * star expanded to. That synthesized name is NOT a reliable handle: it is
12
+ * unqualified, so two same-named columns from different join sides collapse onto
13
+ * it. `sourceAttribute` therefore carries the exact input attribute a
14
+ * star-expanded column came from, so a positional reference can bind to it
15
+ * directly instead of re-resolving the name.
16
+ */
17
+ export interface SelectListEntry {
18
+ /** The AST that produced this output column (authored, or synthesized for a star). */
19
+ readonly expr: AST.Expression;
20
+ /** Star-expanded entries only: the exact input attribute this column came from. */
21
+ readonly sourceAttribute?: {
22
+ readonly attr: Attribute;
23
+ readonly index: number;
24
+ };
25
+ }
26
+ /**
27
+ * Builds the source-order list of SELECT-list output columns, with
7
28
  * SELECT * / table.* expanded against the input relation's attributes.
8
29
  * Each entry corresponds to one output column, in source order. Used so that
9
30
  * GROUP BY / ORDER BY ordinal references (1-based) can resolve back to the
10
- * AST expression that produced the Nth output column.
31
+ * column that produced the Nth output column.
11
32
  */
12
- export declare function buildSelectListAsts(columns: AST.ResultColumn[], input: RelationalPlanNode): AST.Expression[];
33
+ export declare function buildSelectListEntries(columns: AST.ResultColumn[], input: RelationalPlanNode): SelectListEntry[];
13
34
  /**
14
- * If `expr` is a bare integer literal (or a unary `-` applied to one), treats it
15
- * as a 1-based positional reference into `selectListAsts` and returns the
16
- * corresponding AST expression. Out-of-range / zero / negative ordinals raise
17
- * an error. Any other expression shape returns null so the caller can fall
18
- * through to normal expression building (e.g., `group by 1 + 0` keeps its
35
+ * If `expr` is a bare integer literal (or a unary `+`/`-` applied to one), treats
36
+ * it as a 1-based positional reference into `selectList` and returns the
37
+ * corresponding entry. Out-of-range / zero / negative ordinals raise an error.
38
+ * Any other expression shape returns null so the caller can fall through to
39
+ * normal expression building (e.g., `group by 1 + 0` keeps its
19
40
  * constant-expression semantics).
20
41
  */
21
- export declare function resolveOrdinalReference(expr: AST.Expression, selectListAsts: AST.Expression[], clauseName: 'GROUP BY' | 'ORDER BY'): AST.Expression | null;
42
+ export declare function resolveOrdinalReference(expr: AST.Expression, selectList: readonly SelectListEntry[], clauseName: 'GROUP BY' | 'ORDER BY'): SelectListEntry | null;
43
+ /**
44
+ * Builds one GROUP BY / ORDER BY term that sits *below* (or beside) the
45
+ * projection producing the SELECT list, so there are no output attributes to
46
+ * bind a positional reference to yet.
47
+ *
48
+ * A positional reference still must not go through a NAME: for a star-expanded
49
+ * column the synthesized name is unqualified, so `select * from t1 join t2 …
50
+ * group by 4` would re-resolve `v` to whichever side happens to be first in
51
+ * scope. When the resolved entry carries its source attribute, reference that
52
+ * attribute directly; otherwise re-plan the authored expression, which is what
53
+ * the ordinal literally stands for.
54
+ */
55
+ export declare function buildOrdinalAwareExpression(context: PlanningContext, expr: AST.Expression, selectList: readonly SelectListEntry[], clauseName: 'GROUP BY' | 'ORDER BY', allowAggregates?: boolean): ScalarPlanNode;
22
56
  /**
23
- * Resolves a 1-based positional ORDER BY ordinal against a *compound* (set
24
- * operation) result. A compound has no single SELECT-list AST to map the
25
- * ordinal onto (each arm has its own), so `resolveOrdinalReference` does not
26
- * apply — instead the ordinal maps directly to the Nth OUTPUT column of the set
27
- * node, returning a `ColumnReferenceNode` over that column's attribute/type
28
- * (index `n-1`). The reference therefore inherits the column's RESOLVED type —
29
- * including its cross-input `collationName`/`collationSource` — so an ordinal
30
- * ORDER BY stays in lockstep with dedup, exactly like the column-name form.
57
+ * Resolves a 1-based positional ORDER BY ordinal against a relation whose output
58
+ * attributes ARE the SELECT list — the final `ProjectNode` of a single SELECT, or
59
+ * a `SetOperationNode` for a compound. The ordinal maps directly to the Nth
60
+ * OUTPUT column (index `n-1`), returning a `ColumnReferenceNode` over that
61
+ * column's attribute/type.
62
+ *
63
+ * Binding by attribute rather than by name is what makes a positional reference
64
+ * mean "the Nth result column" rather than "re-resolve the text that produced it":
65
+ * a SELECT-list alias cannot shadow the target (`select b as a, a as z … order by
66
+ * 2`), two same-named columns under a star cannot be confused (`select * from t1
67
+ * join t2 … order by 4`), and a computed column (window function, aggregate) is
68
+ * READ from the output rather than recomputed in a scope that cannot evaluate it.
69
+ * The reference also inherits the column's RESOLVED type — including a compound's
70
+ * cross-input `collationName`/`collationSource` — so an ordinal ORDER BY stays in
71
+ * lockstep with dedup, exactly like the column-name form.
72
+ *
73
+ * ORDER BY only: GROUP BY always runs BELOW the projection that produces the
74
+ * select list, so it has no output attributes to bind to (see
75
+ * {@link buildOrdinalAwareExpression}).
31
76
  *
32
77
  * Returns null for any non-ordinal expression shape (mirrors
33
78
  * `extractOrdinalValue`) so the caller falls through to normal expression
34
79
  * building. Out-of-range / zero / negative ordinals raise the same prepare-time
35
80
  * error as `resolveOrdinalReference`.
36
81
  */
37
- export declare function resolveCompoundOrdinalColumn(expr: AST.Expression, setNode: RelationalPlanNode, scope: Scope): ColumnReferenceNode | null;
82
+ export declare function resolveOrdinalOutputColumn(expr: AST.Expression, outputRelation: RelationalPlanNode, scope: Scope): ColumnReferenceNode | null;
38
83
  //# sourceMappingURL=select-ordinal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-ordinal.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-ordinal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAGhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,EAC3B,KAAK,EAAE,kBAAkB,GACvB,GAAG,CAAC,UAAU,EAAE,CAiBlB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,cAAc,EAAE,GAAG,CAAC,UAAU,EAAE,EAChC,UAAU,EAAE,UAAU,GAAG,UAAU,GACjC,GAAG,CAAC,UAAU,GAAG,IAAI,CAavB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAC3C,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,KAAK,GACV,mBAAmB,GAAG,IAAI,CAkB5B"}
1
+ {"version":3,"file":"select-ordinal.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-ordinal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAGhD,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAC/B,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,eAAe,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,EAC3B,KAAK,EAAE,kBAAkB,GACvB,eAAe,EAAE,CAenB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,UAAU,EAAE,SAAS,eAAe,EAAE,EACtC,UAAU,EAAE,UAAU,GAAG,UAAU,GACjC,eAAe,GAAG,IAAI,CAaxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,UAAU,EAAE,SAAS,eAAe,EAAE,EACtC,UAAU,EAAE,UAAU,GAAG,UAAU,EACnC,eAAe,GAAE,OAAe,GAC9B,cAAc,CAOhB;AAeD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,0BAA0B,CACzC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,cAAc,EAAE,kBAAkB,EAClC,KAAK,EAAE,KAAK,GACV,mBAAmB,GAAG,IAAI,CAuB5B"}
@@ -1,75 +1,124 @@
1
1
  import { QuereusError } from '../../common/errors.js';
2
2
  import { StatusCode } from '../../common/types.js';
3
3
  import { ColumnReferenceNode } from '../nodes/reference.js';
4
+ import { buildExpression } from './expression.js';
4
5
  /**
5
- * Builds the source-order list of AST expressions for a SELECT list, with
6
+ * Builds the source-order list of SELECT-list output columns, with
6
7
  * SELECT * / table.* expanded against the input relation's attributes.
7
8
  * Each entry corresponds to one output column, in source order. Used so that
8
9
  * GROUP BY / ORDER BY ordinal references (1-based) can resolve back to the
9
- * AST expression that produced the Nth output column.
10
+ * column that produced the Nth output column.
10
11
  */
11
- export function buildSelectListAsts(columns, input) {
12
+ export function buildSelectListEntries(columns, input) {
12
13
  const result = [];
13
14
  for (const column of columns) {
14
15
  if (column.type === 'all') {
15
16
  const allAttrs = input.getAttributes();
16
- const matching = column.table
17
- ? allAttrs.filter(attr => attr.relationName?.toLowerCase() === column.table.toLowerCase())
18
- : allAttrs;
19
- for (const attr of matching) {
17
+ allAttrs.forEach((attr, index) => {
18
+ if (column.table && attr.relationName?.toLowerCase() !== column.table.toLowerCase())
19
+ return;
20
20
  const colExpr = { type: 'column', name: attr.name };
21
- result.push(colExpr);
22
- }
21
+ result.push({ expr: colExpr, sourceAttribute: { attr, index } });
22
+ });
23
23
  }
24
24
  else if (column.type === 'column') {
25
- result.push(column.expr);
25
+ result.push({ expr: column.expr });
26
26
  }
27
27
  }
28
28
  return result;
29
29
  }
30
30
  /**
31
- * If `expr` is a bare integer literal (or a unary `-` applied to one), treats it
32
- * as a 1-based positional reference into `selectListAsts` and returns the
33
- * corresponding AST expression. Out-of-range / zero / negative ordinals raise
34
- * an error. Any other expression shape returns null so the caller can fall
35
- * through to normal expression building (e.g., `group by 1 + 0` keeps its
31
+ * If `expr` is a bare integer literal (or a unary `+`/`-` applied to one), treats
32
+ * it as a 1-based positional reference into `selectList` and returns the
33
+ * corresponding entry. Out-of-range / zero / negative ordinals raise an error.
34
+ * Any other expression shape returns null so the caller can fall through to
35
+ * normal expression building (e.g., `group by 1 + 0` keeps its
36
36
  * constant-expression semantics).
37
37
  */
38
- export function resolveOrdinalReference(expr, selectListAsts, clauseName) {
38
+ export function resolveOrdinalReference(expr, selectList, clauseName) {
39
39
  const value = extractOrdinalValue(expr);
40
40
  if (value === null)
41
41
  return null;
42
- if (value < 1 || value > selectListAsts.length) {
43
- throw new QuereusError(`${clauseName} position ${value} is not in the SELECT list (1..${selectListAsts.length})`, StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
42
+ if (value < 1 || value > selectList.length) {
43
+ throw new QuereusError(`${clauseName} position ${value} is not in the SELECT list (1..${selectList.length})`, StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
44
44
  }
45
- return selectListAsts[value - 1];
45
+ return selectList[value - 1];
46
46
  }
47
47
  /**
48
- * Resolves a 1-based positional ORDER BY ordinal against a *compound* (set
49
- * operation) result. A compound has no single SELECT-list AST to map the
50
- * ordinal onto (each arm has its own), so `resolveOrdinalReference` does not
51
- * apply — instead the ordinal maps directly to the Nth OUTPUT column of the set
52
- * node, returning a `ColumnReferenceNode` over that column's attribute/type
53
- * (index `n-1`). The reference therefore inherits the column's RESOLVED type —
54
- * including its cross-input `collationName`/`collationSource` — so an ordinal
55
- * ORDER BY stays in lockstep with dedup, exactly like the column-name form.
48
+ * Builds one GROUP BY / ORDER BY term that sits *below* (or beside) the
49
+ * projection producing the SELECT list, so there are no output attributes to
50
+ * bind a positional reference to yet.
51
+ *
52
+ * A positional reference still must not go through a NAME: for a star-expanded
53
+ * column the synthesized name is unqualified, so `select * from t1 join t2 …
54
+ * group by 4` would re-resolve `v` to whichever side happens to be first in
55
+ * scope. When the resolved entry carries its source attribute, reference that
56
+ * attribute directly; otherwise re-plan the authored expression, which is what
57
+ * the ordinal literally stands for.
58
+ */
59
+ export function buildOrdinalAwareExpression(context, expr, selectList, clauseName, allowAggregates = false) {
60
+ const entry = resolveOrdinalReference(expr, selectList, clauseName);
61
+ if (!entry) {
62
+ return buildExpression(context, expr, allowAggregates);
63
+ }
64
+ const sourceRef = buildSourceAttributeReference(entry, context.scope);
65
+ return sourceRef ?? buildExpression(context, entry.expr, allowAggregates);
66
+ }
67
+ /**
68
+ * A direct reference to a star-expanded entry's source attribute, or null when
69
+ * the entry is an authored expression (which must be re-planned instead).
70
+ */
71
+ function buildSourceAttributeReference(entry, scope) {
72
+ if (!entry.sourceAttribute)
73
+ return null;
74
+ const { attr, index } = entry.sourceAttribute;
75
+ const colExpr = attr.relationName
76
+ ? { type: 'column', name: attr.name, table: attr.relationName }
77
+ : { type: 'column', name: attr.name };
78
+ return new ColumnReferenceNode(scope, colExpr, attr.type, attr.id, index);
79
+ }
80
+ /**
81
+ * Resolves a 1-based positional ORDER BY ordinal against a relation whose output
82
+ * attributes ARE the SELECT list — the final `ProjectNode` of a single SELECT, or
83
+ * a `SetOperationNode` for a compound. The ordinal maps directly to the Nth
84
+ * OUTPUT column (index `n-1`), returning a `ColumnReferenceNode` over that
85
+ * column's attribute/type.
86
+ *
87
+ * Binding by attribute rather than by name is what makes a positional reference
88
+ * mean "the Nth result column" rather than "re-resolve the text that produced it":
89
+ * a SELECT-list alias cannot shadow the target (`select b as a, a as z … order by
90
+ * 2`), two same-named columns under a star cannot be confused (`select * from t1
91
+ * join t2 … order by 4`), and a computed column (window function, aggregate) is
92
+ * READ from the output rather than recomputed in a scope that cannot evaluate it.
93
+ * The reference also inherits the column's RESOLVED type — including a compound's
94
+ * cross-input `collationName`/`collationSource` — so an ordinal ORDER BY stays in
95
+ * lockstep with dedup, exactly like the column-name form.
96
+ *
97
+ * ORDER BY only: GROUP BY always runs BELOW the projection that produces the
98
+ * select list, so it has no output attributes to bind to (see
99
+ * {@link buildOrdinalAwareExpression}).
56
100
  *
57
101
  * Returns null for any non-ordinal expression shape (mirrors
58
102
  * `extractOrdinalValue`) so the caller falls through to normal expression
59
103
  * building. Out-of-range / zero / negative ordinals raise the same prepare-time
60
104
  * error as `resolveOrdinalReference`.
61
105
  */
62
- export function resolveCompoundOrdinalColumn(expr, setNode, scope) {
106
+ export function resolveOrdinalOutputColumn(expr, outputRelation, scope) {
63
107
  const value = extractOrdinalValue(expr);
64
108
  if (value === null)
65
109
  return null;
66
- const columns = setNode.getType().columns;
110
+ // NOTE: the range is the relation's full output arity. A `SetOperationNode` that
111
+ // surfaces membership flag columns advertises them here too, so an ordinal could
112
+ // address one; harmless today because flags are introduced by optimizer rewrites,
113
+ // long after this runs at build time. If a flagged set-op ever reaches ORDER BY
114
+ // building, bound the range to the compound's data arity instead.
115
+ const columns = outputRelation.getType().columns;
67
116
  if (value < 1 || value > columns.length) {
68
117
  throw new QuereusError(`ORDER BY position ${value} is not in the SELECT list (1..${columns.length})`, StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
69
118
  }
70
119
  const index = value - 1;
71
120
  const column = columns[index];
72
- const attr = setNode.getAttributes()[index];
121
+ const attr = outputRelation.getAttributes()[index];
73
122
  const colExpr = { type: 'column', name: column.name || attr.name };
74
123
  return new ColumnReferenceNode(scope, colExpr, column.type, attr.id, index);
75
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"select-ordinal.js","sourceRoot":"","sources":["../../../../src/planner/building/select-ordinal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select-ordinal.js","sourceRoot":"","sources":["../../../../src/planner/building/select-ordinal.ts"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ export declare function buildStarProjections(column: {
30
30
  * metadata is attached to the column's `Projection` for the lineage walk.
31
31
  */
32
32
  export declare function analyzeSelectColumns(columns: AST.ResultColumn[], selectContext: PlanningContext, source: RelationalPlanNode): {
33
- projections: Projection[];
33
+ projectionsByColumn: Map<AST.ResultColumn, Projection>;
34
34
  aggregates: {
35
35
  expression: ScalarPlanNode;
36
36
  alias: string;
@@ -1 +1 @@
1
- {"version":3,"file":"select-projections.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-projections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAM3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAKhD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAcnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAchE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACvC,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,KAAK,GAChB,UAAU,EAAE,CAqCd;AA+BD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,EAC3B,aAAa,EAAE,eAAe,EAC9B,MAAM,EAAE,kBAAkB,GACxB;IACF,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,eAAe,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpE,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;CAC9B,CAuEA"}
1
+ {"version":3,"file":"select-projections.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-projections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAM3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAcnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAchE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACvC,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,KAAK,GAChB,UAAU,EAAE,CAqCd;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,EAC3B,aAAa,EAAE,eAAe,EAC9B,MAAM,EAAE,kBAAkB,GACxB;IACF,mBAAmB,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACvD,UAAU,EAAE;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,eAAe,EAAE;QAAE,IAAI,EAAE,sBAAsB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpE,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;CAC9B,CA0EA"}
@@ -1,6 +1,6 @@
1
1
  import { buildExpression } from './expression.js';
2
2
  import { ColumnReferenceNode } from '../nodes/reference.js';
3
- import { expressionToString } from '../../emit/ast-stringify.js';
3
+ import { expressionToString, expressionToIdentityString } from '../../emit/ast-stringify.js';
4
4
  import { QuereusError } from '../../common/errors.js';
5
5
  import { StatusCode } from '../../common/types.js';
6
6
  import { CapabilityDetectors } from '../framework/characteristics.js';
@@ -69,13 +69,17 @@ export function buildStarProjections(column, source, selectScope) {
69
69
  */
70
70
  function collectInnerAggregates(node, aggregates) {
71
71
  if (CapabilityDetectors.isAggregateFunction(node)) {
72
- const funcNode = node;
73
- const key = expressionToString(funcNode.expression).toLowerCase();
74
- // Deduplicate against existing entries
75
- if (!aggregates.some(a => a.alias.toLowerCase() === key)) {
72
+ const key = expressionToIdentityString(node.expression);
73
+ // Deduplicate against existing entries by identity key rather than the alias
74
+ // text — the alias is the un-folded rendering, so comparing it case-blind
75
+ // would collapse two aggregates differing only in a quoted literal's case.
76
+ // The array may also hold non-aggregate entries, so the guard is a filter.
77
+ const alreadyPresent = aggregates.some(a => CapabilityDetectors.isAggregateFunction(a.expression) &&
78
+ expressionToIdentityString(a.expression.expression) === key);
79
+ if (!alreadyPresent) {
76
80
  aggregates.push({
77
- expression: funcNode,
78
- alias: expressionToString(funcNode.expression)
81
+ expression: node,
82
+ alias: expressionToString(node.expression)
79
83
  });
80
84
  }
81
85
  return; // Don't recurse into aggregate arguments
@@ -96,7 +100,10 @@ function collectInnerAggregates(node, aggregates) {
96
100
  * metadata is attached to the column's `Projection` for the lineage walk.
97
101
  */
98
102
  export function analyzeSelectColumns(columns, selectContext, source) {
99
- const projections = [];
103
+ // Keyed by AST result column, not a flat list: the caller assembles the final
104
+ // projection list by walking `columns` itself so each star expands in written
105
+ // position (see buildSelectStmt).
106
+ const projectionsByColumn = new Map();
100
107
  const aggregates = [];
101
108
  const windowFunctions = [];
102
109
  let hasAggregates = false;
@@ -116,7 +123,7 @@ export function analyzeSelectColumns(columns, selectContext, source) {
116
123
  if (isWindowExpression(scalarNode)) {
117
124
  hasWindowFunctions = true;
118
125
  collectWindowFunctions(scalarNode, column.alias, windowFunctions);
119
- projections.push({
126
+ projectionsByColumn.set(column, {
120
127
  node: scalarNode,
121
128
  alias: column.alias,
122
129
  ...(authoredInverse ? { authoredInverse } : {})
@@ -147,7 +154,7 @@ export function analyzeSelectColumns(columns, selectContext, source) {
147
154
  }
148
155
  }
149
156
  else {
150
- projections.push({
157
+ projectionsByColumn.set(column, {
151
158
  node: scalarNode,
152
159
  alias: column.alias,
153
160
  ...(authoredInverse ? { authoredInverse } : {})
@@ -156,7 +163,7 @@ export function analyzeSelectColumns(columns, selectContext, source) {
156
163
  }
157
164
  }
158
165
  return {
159
- projections,
166
+ projectionsByColumn,
160
167
  aggregates,
161
168
  windowFunctions,
162
169
  hasAggregates,
@@ -1 +1 @@
1
- {"version":3,"file":"select-projections.js","sourceRoot":"","sources":["../../../../src/planner/building/select-projections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select-projections.js","sourceRoot":"","sources":["../../../../src/planner/building/select-projections.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,22 @@
1
1
  import type { RelationalPlanNode } from '../nodes/plan-node.js';
2
2
  import type { PlanningContext } from '../planning-context.js';
3
3
  import { WindowFunctionCallNode } from '../nodes/window-function.js';
4
- import type * as AST from '../../parser/ast.js';
4
+ import { type Projection } from '../nodes/project-node.js';
5
+ import { type GroupedWindowContext } from './select-aggregates.js';
5
6
  /**
6
- * Processes window functions and creates WindowNode(s) with proper projections
7
+ * Processes window functions and creates WindowNode(s) with proper projections.
8
+ *
9
+ * `selectListProjections` is the query's ONE select-list projection list — stars
10
+ * already expanded, in written order, window functions still present as raw
11
+ * `WindowFunctionCallNode` subtrees. It is rewritten (not rebuilt) into the
12
+ * projection placed above the WindowNode(s); see {@link buildWindowProjections}.
13
+ *
14
+ * `groupedWindowContext` is supplied only for a GROUPED query. The WindowNode sits
15
+ * ABOVE the AggregateNode, so its window specifications and function arguments run
16
+ * over the grouped rows and may only read what those rows carry.
7
17
  */
8
18
  export declare function buildWindowPhase(input: RelationalPlanNode, windowFunctions: {
9
19
  func: WindowFunctionCallNode;
10
20
  alias?: string;
11
- }[], selectContext: PlanningContext, stmt: AST.SelectStmt): RelationalPlanNode;
21
+ }[], selectContext: PlanningContext, selectListProjections: readonly Projection[], groupedWindowContext?: GroupedWindowContext): RelationalPlanNode;
12
22
  //# sourceMappingURL=select-window.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-window.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,kBAAkB,EAAkB,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAMrE,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAGhD;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,kBAAkB,EACzB,eAAe,EAAE;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACnE,aAAa,EAAE,eAAe,EAC9B,IAAI,EAAE,GAAG,CAAC,UAAU,GAClB,kBAAkB,CA4EpB"}
1
+ {"version":3,"file":"select-window.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,kBAAkB,EAAkB,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAIxE,OAAO,EAAmF,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAQpJ;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,kBAAkB,EACzB,eAAe,EAAE;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACnE,aAAa,EAAE,eAAe,EAC9B,qBAAqB,EAAE,SAAS,UAAU,EAAE,EAC5C,oBAAoB,CAAC,EAAE,oBAAoB,GACzC,kBAAkB,CA2GpB"}