@quereus/quereus 0.7.3 → 0.7.4

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 (566) hide show
  1. package/package.json +3 -3
  2. package/dist/src/common/constants.js.map +0 -1
  3. package/dist/src/common/datatype.js.map +0 -1
  4. package/dist/src/common/errors.js.map +0 -1
  5. package/dist/src/common/json-types.js.map +0 -1
  6. package/dist/src/common/logger.js.map +0 -1
  7. package/dist/src/common/type-inference.js.map +0 -1
  8. package/dist/src/common/types.js.map +0 -1
  9. package/dist/src/core/database-options.js.map +0 -1
  10. package/dist/src/core/database.js.map +0 -1
  11. package/dist/src/core/param.js.map +0 -1
  12. package/dist/src/core/statement.js.map +0 -1
  13. package/dist/src/func/builtins/aggregate.js.map +0 -1
  14. package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
  15. package/dist/src/func/builtins/conversion.js.map +0 -1
  16. package/dist/src/func/builtins/datetime.js.map +0 -1
  17. package/dist/src/func/builtins/explain.js.map +0 -1
  18. package/dist/src/func/builtins/generation.js.map +0 -1
  19. package/dist/src/func/builtins/index.js.map +0 -1
  20. package/dist/src/func/builtins/json-helpers.js.map +0 -1
  21. package/dist/src/func/builtins/json-tvf.js.map +0 -1
  22. package/dist/src/func/builtins/json.js.map +0 -1
  23. package/dist/src/func/builtins/scalar.js.map +0 -1
  24. package/dist/src/func/builtins/schema.js.map +0 -1
  25. package/dist/src/func/builtins/string.js.map +0 -1
  26. package/dist/src/func/builtins/timespan.js.map +0 -1
  27. package/dist/src/func/context.js.map +0 -1
  28. package/dist/src/func/registration.js.map +0 -1
  29. package/dist/src/index.js.map +0 -1
  30. package/dist/src/parser/ast.js.map +0 -1
  31. package/dist/src/parser/index.js.map +0 -1
  32. package/dist/src/parser/lexer.js.map +0 -1
  33. package/dist/src/parser/parser.js.map +0 -1
  34. package/dist/src/parser/utils.js.map +0 -1
  35. package/dist/src/parser/visitor.js.map +0 -1
  36. package/dist/src/planner/analysis/binding-collector.js.map +0 -1
  37. package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
  38. package/dist/src/planner/analysis/const-pass.js.map +0 -1
  39. package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
  40. package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
  41. package/dist/src/planner/building/alter-table.js.map +0 -1
  42. package/dist/src/planner/building/block.js.map +0 -1
  43. package/dist/src/planner/building/constraint-builder.js.map +0 -1
  44. package/dist/src/planner/building/create-assertion.js.map +0 -1
  45. package/dist/src/planner/building/create-view.js.map +0 -1
  46. package/dist/src/planner/building/ddl.js.map +0 -1
  47. package/dist/src/planner/building/declare-schema.js.map +0 -1
  48. package/dist/src/planner/building/delete.js.map +0 -1
  49. package/dist/src/planner/building/drop-assertion.js.map +0 -1
  50. package/dist/src/planner/building/drop-table.js.map +0 -1
  51. package/dist/src/planner/building/drop-view.js.map +0 -1
  52. package/dist/src/planner/building/expression.js.map +0 -1
  53. package/dist/src/planner/building/function-call.js.map +0 -1
  54. package/dist/src/planner/building/insert.js.map +0 -1
  55. package/dist/src/planner/building/pragma.js.map +0 -1
  56. package/dist/src/planner/building/schema-resolution.js.map +0 -1
  57. package/dist/src/planner/building/select-aggregates.js.map +0 -1
  58. package/dist/src/planner/building/select-compound.js.map +0 -1
  59. package/dist/src/planner/building/select-context.js.map +0 -1
  60. package/dist/src/planner/building/select-modifiers.js.map +0 -1
  61. package/dist/src/planner/building/select-projections.js.map +0 -1
  62. package/dist/src/planner/building/select-window.js.map +0 -1
  63. package/dist/src/planner/building/select.js.map +0 -1
  64. package/dist/src/planner/building/table-function.js.map +0 -1
  65. package/dist/src/planner/building/table.js.map +0 -1
  66. package/dist/src/planner/building/transaction.js.map +0 -1
  67. package/dist/src/planner/building/update.js.map +0 -1
  68. package/dist/src/planner/building/with.js.map +0 -1
  69. package/dist/src/planner/cache/correlation-detector.js.map +0 -1
  70. package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
  71. package/dist/src/planner/cache/reference-graph.js.map +0 -1
  72. package/dist/src/planner/cost/index.js.map +0 -1
  73. package/dist/src/planner/debug/logger-utils.js.map +0 -1
  74. package/dist/src/planner/debug.js.map +0 -1
  75. package/dist/src/planner/framework/characteristics.js.map +0 -1
  76. package/dist/src/planner/framework/context.js.map +0 -1
  77. package/dist/src/planner/framework/pass.js.map +0 -1
  78. package/dist/src/planner/framework/physical-utils.js.map +0 -1
  79. package/dist/src/planner/framework/registry.js.map +0 -1
  80. package/dist/src/planner/framework/trace.js.map +0 -1
  81. package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
  82. package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
  83. package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
  84. package/dist/src/planner/nodes/array-index-node.js.map +0 -1
  85. package/dist/src/planner/nodes/block.js.map +0 -1
  86. package/dist/src/planner/nodes/cache-node.js.map +0 -1
  87. package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
  88. package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
  89. package/dist/src/planner/nodes/create-index-node.js.map +0 -1
  90. package/dist/src/planner/nodes/create-table-node.js.map +0 -1
  91. package/dist/src/planner/nodes/create-view-node.js.map +0 -1
  92. package/dist/src/planner/nodes/cte-node.js.map +0 -1
  93. package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
  94. package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
  95. package/dist/src/planner/nodes/delete-node.js.map +0 -1
  96. package/dist/src/planner/nodes/distinct-node.js.map +0 -1
  97. package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
  98. package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
  99. package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
  100. package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
  101. package/dist/src/planner/nodes/filter.js.map +0 -1
  102. package/dist/src/planner/nodes/function.js.map +0 -1
  103. package/dist/src/planner/nodes/insert-node.js.map +0 -1
  104. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
  105. package/dist/src/planner/nodes/join-node.js.map +0 -1
  106. package/dist/src/planner/nodes/limit-offset.js.map +0 -1
  107. package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
  108. package/dist/src/planner/nodes/plan-node.js.map +0 -1
  109. package/dist/src/planner/nodes/pragma.js.map +0 -1
  110. package/dist/src/planner/nodes/project-node.js.map +0 -1
  111. package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
  112. package/dist/src/planner/nodes/reference.js.map +0 -1
  113. package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
  114. package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
  115. package/dist/src/planner/nodes/returning-node.js.map +0 -1
  116. package/dist/src/planner/nodes/scalar.js.map +0 -1
  117. package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
  118. package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
  119. package/dist/src/planner/nodes/single-row.js.map +0 -1
  120. package/dist/src/planner/nodes/sink-node.js.map +0 -1
  121. package/dist/src/planner/nodes/sort.js.map +0 -1
  122. package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
  123. package/dist/src/planner/nodes/subquery.js.map +0 -1
  124. package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
  125. package/dist/src/planner/nodes/table-function-call.js.map +0 -1
  126. package/dist/src/planner/nodes/transaction-node.js.map +0 -1
  127. package/dist/src/planner/nodes/update-node.js.map +0 -1
  128. package/dist/src/planner/nodes/values-node.js.map +0 -1
  129. package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
  130. package/dist/src/planner/nodes/window-function.js.map +0 -1
  131. package/dist/src/planner/nodes/window-node.js.map +0 -1
  132. package/dist/src/planner/optimizer-tuning.js.map +0 -1
  133. package/dist/src/planner/optimizer.js.map +0 -1
  134. package/dist/src/planner/planning-context.js.map +0 -1
  135. package/dist/src/planner/resolve.js.map +0 -1
  136. package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
  137. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
  138. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
  139. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
  140. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
  141. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
  142. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
  143. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
  144. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
  145. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
  146. package/dist/src/planner/scopes/aliased.js.map +0 -1
  147. package/dist/src/planner/scopes/base.js.map +0 -1
  148. package/dist/src/planner/scopes/empty.js.map +0 -1
  149. package/dist/src/planner/scopes/global.js.map +0 -1
  150. package/dist/src/planner/scopes/multi.js.map +0 -1
  151. package/dist/src/planner/scopes/param.js.map +0 -1
  152. package/dist/src/planner/scopes/registered.js.map +0 -1
  153. package/dist/src/planner/scopes/scope.js.map +0 -1
  154. package/dist/src/planner/stats/basic-estimates.js.map +0 -1
  155. package/dist/src/planner/stats/index.js.map +0 -1
  156. package/dist/src/planner/type-utils.js.map +0 -1
  157. package/dist/src/planner/util/key-utils.js.map +0 -1
  158. package/dist/src/planner/validation/determinism-validator.js.map +0 -1
  159. package/dist/src/planner/validation/plan-validator.js.map +0 -1
  160. package/dist/src/runtime/async-util.js.map +0 -1
  161. package/dist/src/runtime/cache/shared-cache.js.map +0 -1
  162. package/dist/src/runtime/context-helpers.js.map +0 -1
  163. package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
  164. package/dist/src/runtime/emission-context.js.map +0 -1
  165. package/dist/src/runtime/emit/add-constraint.js.map +0 -1
  166. package/dist/src/runtime/emit/aggregate.js.map +0 -1
  167. package/dist/src/runtime/emit/array-index.js.map +0 -1
  168. package/dist/src/runtime/emit/between.js.map +0 -1
  169. package/dist/src/runtime/emit/binary.js.map +0 -1
  170. package/dist/src/runtime/emit/block.js.map +0 -1
  171. package/dist/src/runtime/emit/cache.js.map +0 -1
  172. package/dist/src/runtime/emit/case.js.map +0 -1
  173. package/dist/src/runtime/emit/cast.js.map +0 -1
  174. package/dist/src/runtime/emit/collate.js.map +0 -1
  175. package/dist/src/runtime/emit/column-reference.js.map +0 -1
  176. package/dist/src/runtime/emit/constraint-check.js.map +0 -1
  177. package/dist/src/runtime/emit/create-assertion.js.map +0 -1
  178. package/dist/src/runtime/emit/create-index.js.map +0 -1
  179. package/dist/src/runtime/emit/create-table.js.map +0 -1
  180. package/dist/src/runtime/emit/create-view.js.map +0 -1
  181. package/dist/src/runtime/emit/cte-reference.js.map +0 -1
  182. package/dist/src/runtime/emit/cte.js.map +0 -1
  183. package/dist/src/runtime/emit/delete.js.map +0 -1
  184. package/dist/src/runtime/emit/distinct.js.map +0 -1
  185. package/dist/src/runtime/emit/dml-executor.js.map +0 -1
  186. package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
  187. package/dist/src/runtime/emit/drop-table.js.map +0 -1
  188. package/dist/src/runtime/emit/drop-view.js.map +0 -1
  189. package/dist/src/runtime/emit/filter.js.map +0 -1
  190. package/dist/src/runtime/emit/insert.js.map +0 -1
  191. package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
  192. package/dist/src/runtime/emit/join.js.map +0 -1
  193. package/dist/src/runtime/emit/limit-offset.js.map +0 -1
  194. package/dist/src/runtime/emit/literal.js.map +0 -1
  195. package/dist/src/runtime/emit/parameter.js.map +0 -1
  196. package/dist/src/runtime/emit/pragma.js.map +0 -1
  197. package/dist/src/runtime/emit/project.js.map +0 -1
  198. package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
  199. package/dist/src/runtime/emit/remote-query.js.map +0 -1
  200. package/dist/src/runtime/emit/retrieve.js.map +0 -1
  201. package/dist/src/runtime/emit/returning.js.map +0 -1
  202. package/dist/src/runtime/emit/scalar-function.js.map +0 -1
  203. package/dist/src/runtime/emit/scan.js.map +0 -1
  204. package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
  205. package/dist/src/runtime/emit/sequencing.js.map +0 -1
  206. package/dist/src/runtime/emit/set-operation.js.map +0 -1
  207. package/dist/src/runtime/emit/sink.js.map +0 -1
  208. package/dist/src/runtime/emit/sort.js.map +0 -1
  209. package/dist/src/runtime/emit/subquery.js.map +0 -1
  210. package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
  211. package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
  212. package/dist/src/runtime/emit/transaction.js.map +0 -1
  213. package/dist/src/runtime/emit/unary.js.map +0 -1
  214. package/dist/src/runtime/emit/update.js.map +0 -1
  215. package/dist/src/runtime/emit/values.js.map +0 -1
  216. package/dist/src/runtime/emit/window-function.js.map +0 -1
  217. package/dist/src/runtime/emit/window.js.map +0 -1
  218. package/dist/src/runtime/emitters.js.map +0 -1
  219. package/dist/src/runtime/register.js.map +0 -1
  220. package/dist/src/runtime/scheduler.js.map +0 -1
  221. package/dist/src/runtime/types.js.map +0 -1
  222. package/dist/src/runtime/utils.js.map +0 -1
  223. package/dist/src/schema/assertion.js.map +0 -1
  224. package/dist/src/schema/catalog.js.map +0 -1
  225. package/dist/src/schema/change-events.js.map +0 -1
  226. package/dist/src/schema/column.js.map +0 -1
  227. package/dist/src/schema/declared-schema-manager.js.map +0 -1
  228. package/dist/src/schema/function.js.map +0 -1
  229. package/dist/src/schema/manager.js.map +0 -1
  230. package/dist/src/schema/schema-differ.js.map +0 -1
  231. package/dist/src/schema/schema-hasher.js.map +0 -1
  232. package/dist/src/schema/schema.js.map +0 -1
  233. package/dist/src/schema/table.js.map +0 -1
  234. package/dist/src/schema/view.js.map +0 -1
  235. package/dist/src/schema/window-function.js.map +0 -1
  236. package/dist/src/types/builtin-types.js.map +0 -1
  237. package/dist/src/types/index.js.map +0 -1
  238. package/dist/src/types/json-type.js.map +0 -1
  239. package/dist/src/types/logical-type.js.map +0 -1
  240. package/dist/src/types/plugin-interface.js.map +0 -1
  241. package/dist/src/types/registry.js.map +0 -1
  242. package/dist/src/types/temporal-types.js.map +0 -1
  243. package/dist/src/types/validation.js.map +0 -1
  244. package/dist/src/util/affinity.js.map +0 -1
  245. package/dist/src/util/ast-stringify.js.map +0 -1
  246. package/dist/src/util/cached.js.map +0 -1
  247. package/dist/src/util/coercion.js.map +0 -1
  248. package/dist/src/util/comparison.js.map +0 -1
  249. package/dist/src/util/environment.js.map +0 -1
  250. package/dist/src/util/hash.js.map +0 -1
  251. package/dist/src/util/latches.js.map +0 -1
  252. package/dist/src/util/mutation-statement.js.map +0 -1
  253. package/dist/src/util/patterns.js.map +0 -1
  254. package/dist/src/util/plan-formatter.js.map +0 -1
  255. package/dist/src/util/plugin-helper.js.map +0 -1
  256. package/dist/src/util/row-descriptor.js.map +0 -1
  257. package/dist/src/util/serialization.js.map +0 -1
  258. package/dist/src/util/sql-literal.js.map +0 -1
  259. package/dist/src/util/working-table-iterable.js.map +0 -1
  260. package/dist/src/vtab/best-access-plan.js.map +0 -1
  261. package/dist/src/vtab/connection.js.map +0 -1
  262. package/dist/src/vtab/filter-info.js.map +0 -1
  263. package/dist/src/vtab/index-info.js.map +0 -1
  264. package/dist/src/vtab/manifest.js.map +0 -1
  265. package/dist/src/vtab/memory/connection.js.map +0 -1
  266. package/dist/src/vtab/memory/index.js.map +0 -1
  267. package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
  268. package/dist/src/vtab/memory/layer/base.js.map +0 -1
  269. package/dist/src/vtab/memory/layer/connection.js.map +0 -1
  270. package/dist/src/vtab/memory/layer/interface.js.map +0 -1
  271. package/dist/src/vtab/memory/layer/manager.js.map +0 -1
  272. package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
  273. package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
  274. package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
  275. package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
  276. package/dist/src/vtab/memory/module.js.map +0 -1
  277. package/dist/src/vtab/memory/table.js.map +0 -1
  278. package/dist/src/vtab/memory/types.js.map +0 -1
  279. package/dist/src/vtab/memory/utils/logging.js.map +0 -1
  280. package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
  281. package/dist/src/vtab/module.js.map +0 -1
  282. package/dist/src/vtab/table.js.map +0 -1
  283. package/src/common/constants.ts +0 -60
  284. package/src/common/datatype.ts +0 -85
  285. package/src/common/errors.ts +0 -189
  286. package/src/common/json-types.ts +0 -16
  287. package/src/common/logger.ts +0 -97
  288. package/src/common/type-inference.ts +0 -39
  289. package/src/common/types.ts +0 -151
  290. package/src/core/database-options.ts +0 -258
  291. package/src/core/database.ts +0 -1461
  292. package/src/core/param.ts +0 -56
  293. package/src/core/statement.ts +0 -528
  294. package/src/func/builtins/aggregate.ts +0 -269
  295. package/src/func/builtins/builtin-window-functions.ts +0 -166
  296. package/src/func/builtins/conversion.ts +0 -226
  297. package/src/func/builtins/datetime.ts +0 -500
  298. package/src/func/builtins/explain.ts +0 -779
  299. package/src/func/builtins/generation.ts +0 -43
  300. package/src/func/builtins/index.ts +0 -167
  301. package/src/func/builtins/json-helpers.ts +0 -237
  302. package/src/func/builtins/json-tvf.ts +0 -224
  303. package/src/func/builtins/json.ts +0 -588
  304. package/src/func/builtins/scalar.ts +0 -423
  305. package/src/func/builtins/schema.ts +0 -213
  306. package/src/func/builtins/string.ts +0 -306
  307. package/src/func/builtins/timespan.ts +0 -179
  308. package/src/func/context.ts +0 -258
  309. package/src/func/registration.ts +0 -201
  310. package/src/index.ts +0 -172
  311. package/src/parser/ast.ts +0 -581
  312. package/src/parser/index.ts +0 -65
  313. package/src/parser/lexer.ts +0 -806
  314. package/src/parser/parser.ts +0 -3352
  315. package/src/parser/utils.ts +0 -10
  316. package/src/parser/visitor.ts +0 -188
  317. package/src/planner/analysis/README.md +0 -93
  318. package/src/planner/analysis/binding-collector.ts +0 -83
  319. package/src/planner/analysis/const-evaluator.ts +0 -63
  320. package/src/planner/analysis/const-pass.ts +0 -282
  321. package/src/planner/analysis/constraint-extractor.ts +0 -764
  322. package/src/planner/analysis/predicate-normalizer.ts +0 -237
  323. package/src/planner/building/alter-table.ts +0 -49
  324. package/src/planner/building/block.ts +0 -93
  325. package/src/planner/building/constraint-builder.ts +0 -178
  326. package/src/planner/building/create-assertion.ts +0 -7
  327. package/src/planner/building/create-view.ts +0 -29
  328. package/src/planner/building/ddl.ts +0 -24
  329. package/src/planner/building/declare-schema.ts +0 -22
  330. package/src/planner/building/delete.ts +0 -218
  331. package/src/planner/building/drop-assertion.ts +0 -11
  332. package/src/planner/building/drop-table.ts +0 -13
  333. package/src/planner/building/drop-view.ts +0 -19
  334. package/src/planner/building/expression.ts +0 -205
  335. package/src/planner/building/function-call.ts +0 -129
  336. package/src/planner/building/insert.ts +0 -435
  337. package/src/planner/building/pragma.ts +0 -34
  338. package/src/planner/building/schema-resolution.ts +0 -176
  339. package/src/planner/building/select-aggregates.ts +0 -318
  340. package/src/planner/building/select-compound.ts +0 -119
  341. package/src/planner/building/select-context.ts +0 -85
  342. package/src/planner/building/select-modifiers.ts +0 -236
  343. package/src/planner/building/select-projections.ts +0 -177
  344. package/src/planner/building/select-window.ts +0 -259
  345. package/src/planner/building/select.ts +0 -567
  346. package/src/planner/building/table-function.ts +0 -49
  347. package/src/planner/building/table.ts +0 -40
  348. package/src/planner/building/transaction.ts +0 -23
  349. package/src/planner/building/update.ts +0 -331
  350. package/src/planner/building/with.ts +0 -180
  351. package/src/planner/cache/correlation-detector.ts +0 -83
  352. package/src/planner/cache/materialization-advisory.ts +0 -265
  353. package/src/planner/cache/reference-graph.ts +0 -196
  354. package/src/planner/cost/index.ts +0 -169
  355. package/src/planner/debug/logger-utils.ts +0 -68
  356. package/src/planner/debug.ts +0 -480
  357. package/src/planner/framework/README.md +0 -132
  358. package/src/planner/framework/characteristics.ts +0 -503
  359. package/src/planner/framework/context.ts +0 -239
  360. package/src/planner/framework/pass.ts +0 -354
  361. package/src/planner/framework/physical-utils.ts +0 -210
  362. package/src/planner/framework/registry.ts +0 -261
  363. package/src/planner/framework/trace.ts +0 -259
  364. package/src/planner/nodes/add-constraint-node.ts +0 -62
  365. package/src/planner/nodes/aggregate-function.ts +0 -155
  366. package/src/planner/nodes/aggregate-node.ts +0 -267
  367. package/src/planner/nodes/array-index-node.ts +0 -50
  368. package/src/planner/nodes/block.ts +0 -80
  369. package/src/planner/nodes/cache-node.ts +0 -103
  370. package/src/planner/nodes/constraint-check-node.ts +0 -138
  371. package/src/planner/nodes/create-assertion-node.ts +0 -51
  372. package/src/planner/nodes/create-index-node.ts +0 -41
  373. package/src/planner/nodes/create-table-node.ts +0 -35
  374. package/src/planner/nodes/create-view-node.ts +0 -44
  375. package/src/planner/nodes/cte-node.ts +0 -168
  376. package/src/planner/nodes/cte-reference-node.ts +0 -125
  377. package/src/planner/nodes/declarative-schema.ts +0 -221
  378. package/src/planner/nodes/delete-node.ts +0 -102
  379. package/src/planner/nodes/distinct-node.ts +0 -107
  380. package/src/planner/nodes/dml-executor-node.ts +0 -104
  381. package/src/planner/nodes/drop-assertion-node.ts +0 -50
  382. package/src/planner/nodes/drop-table-node.ts +0 -36
  383. package/src/planner/nodes/drop-view-node.ts +0 -37
  384. package/src/planner/nodes/filter.ts +0 -144
  385. package/src/planner/nodes/function.ts +0 -98
  386. package/src/planner/nodes/insert-node.ts +0 -126
  387. package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
  388. package/src/planner/nodes/join-node.ts +0 -336
  389. package/src/planner/nodes/limit-offset.ts +0 -144
  390. package/src/planner/nodes/plan-node-type.ts +0 -95
  391. package/src/planner/nodes/plan-node.ts +0 -503
  392. package/src/planner/nodes/pragma.ts +0 -98
  393. package/src/planner/nodes/project-node.ts +0 -337
  394. package/src/planner/nodes/recursive-cte-node.ts +0 -158
  395. package/src/planner/nodes/reference.ts +0 -334
  396. package/src/planner/nodes/remote-query-node.ts +0 -73
  397. package/src/planner/nodes/retrieve-node.ts +0 -86
  398. package/src/planner/nodes/returning-node.ts +0 -269
  399. package/src/planner/nodes/scalar.ts +0 -772
  400. package/src/planner/nodes/sequencing-node.ts +0 -113
  401. package/src/planner/nodes/set-operation-node.ts +0 -87
  402. package/src/planner/nodes/single-row.ts +0 -85
  403. package/src/planner/nodes/sink-node.ts +0 -61
  404. package/src/planner/nodes/sort.ts +0 -166
  405. package/src/planner/nodes/stream-aggregate.ts +0 -293
  406. package/src/planner/nodes/subquery.ts +0 -268
  407. package/src/planner/nodes/table-access-nodes.ts +0 -323
  408. package/src/planner/nodes/table-function-call.ts +0 -134
  409. package/src/planner/nodes/transaction-node.ts +0 -55
  410. package/src/planner/nodes/update-node.ts +0 -138
  411. package/src/planner/nodes/values-node.ts +0 -244
  412. package/src/planner/nodes/view-reference-node.ts +0 -97
  413. package/src/planner/nodes/window-function.ts +0 -73
  414. package/src/planner/nodes/window-node.ts +0 -199
  415. package/src/planner/optimizer-tuning.ts +0 -105
  416. package/src/planner/optimizer.ts +0 -332
  417. package/src/planner/planning-context.ts +0 -190
  418. package/src/planner/resolve.ts +0 -101
  419. package/src/planner/rules/README.md +0 -96
  420. package/src/planner/rules/access/rule-select-access-path.ts +0 -399
  421. package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
  422. package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
  423. package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
  424. package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
  425. package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
  426. package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
  427. package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
  428. package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
  429. package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
  430. package/src/planner/scopes/aliased.ts +0 -50
  431. package/src/planner/scopes/base.ts +0 -10
  432. package/src/planner/scopes/empty.ts +0 -12
  433. package/src/planner/scopes/global.ts +0 -73
  434. package/src/planner/scopes/multi.ts +0 -40
  435. package/src/planner/scopes/param.ts +0 -95
  436. package/src/planner/scopes/registered.ts +0 -67
  437. package/src/planner/scopes/scope.ts +0 -16
  438. package/src/planner/stats/basic-estimates.ts +0 -107
  439. package/src/planner/stats/index.ts +0 -158
  440. package/src/planner/type-utils.ts +0 -87
  441. package/src/planner/util/key-utils.ts +0 -46
  442. package/src/planner/validation/determinism-validator.ts +0 -104
  443. package/src/planner/validation/plan-validator.ts +0 -335
  444. package/src/runtime/async-util.ts +0 -283
  445. package/src/runtime/cache/shared-cache.ts +0 -169
  446. package/src/runtime/context-helpers.ts +0 -191
  447. package/src/runtime/deferred-constraint-queue.ts +0 -196
  448. package/src/runtime/emission-context.ts +0 -319
  449. package/src/runtime/emit/add-constraint.ts +0 -78
  450. package/src/runtime/emit/aggregate.ts +0 -581
  451. package/src/runtime/emit/array-index.ts +0 -25
  452. package/src/runtime/emit/between.ts +0 -51
  453. package/src/runtime/emit/binary.ts +0 -357
  454. package/src/runtime/emit/block.ts +0 -23
  455. package/src/runtime/emit/cache.ts +0 -64
  456. package/src/runtime/emit/case.ts +0 -87
  457. package/src/runtime/emit/cast.ts +0 -151
  458. package/src/runtime/emit/collate.ts +0 -9
  459. package/src/runtime/emit/column-reference.ts +0 -17
  460. package/src/runtime/emit/constraint-check.ts +0 -290
  461. package/src/runtime/emit/create-assertion.ts +0 -82
  462. package/src/runtime/emit/create-index.ts +0 -15
  463. package/src/runtime/emit/create-table.ts +0 -15
  464. package/src/runtime/emit/create-view.ts +0 -52
  465. package/src/runtime/emit/cte-reference.ts +0 -38
  466. package/src/runtime/emit/cte.ts +0 -39
  467. package/src/runtime/emit/delete.ts +0 -24
  468. package/src/runtime/emit/distinct.ts +0 -40
  469. package/src/runtime/emit/dml-executor.ts +0 -198
  470. package/src/runtime/emit/drop-assertion.ts +0 -45
  471. package/src/runtime/emit/drop-table.ts +0 -27
  472. package/src/runtime/emit/drop-view.ts +0 -49
  473. package/src/runtime/emit/filter.ts +0 -30
  474. package/src/runtime/emit/insert.ts +0 -42
  475. package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
  476. package/src/runtime/emit/join.ts +0 -148
  477. package/src/runtime/emit/limit-offset.ts +0 -73
  478. package/src/runtime/emit/literal.ts +0 -17
  479. package/src/runtime/emit/parameter.ts +0 -59
  480. package/src/runtime/emit/pragma.ts +0 -56
  481. package/src/runtime/emit/project.ts +0 -46
  482. package/src/runtime/emit/recursive-cte.ts +0 -111
  483. package/src/runtime/emit/remote-query.ts +0 -47
  484. package/src/runtime/emit/retrieve.ts +0 -15
  485. package/src/runtime/emit/returning.ts +0 -41
  486. package/src/runtime/emit/scalar-function.ts +0 -69
  487. package/src/runtime/emit/scan.ts +0 -106
  488. package/src/runtime/emit/schema-declarative.ts +0 -215
  489. package/src/runtime/emit/sequencing.ts +0 -24
  490. package/src/runtime/emit/set-operation.ts +0 -141
  491. package/src/runtime/emit/sink.ts +0 -27
  492. package/src/runtime/emit/sort.ts +0 -75
  493. package/src/runtime/emit/subquery.ts +0 -203
  494. package/src/runtime/emit/table-valued-function.ts +0 -106
  495. package/src/runtime/emit/temporal-arithmetic.ts +0 -302
  496. package/src/runtime/emit/transaction.ts +0 -205
  497. package/src/runtime/emit/unary.ts +0 -101
  498. package/src/runtime/emit/update.ts +0 -66
  499. package/src/runtime/emit/values.ts +0 -66
  500. package/src/runtime/emit/window-function.ts +0 -42
  501. package/src/runtime/emit/window.ts +0 -458
  502. package/src/runtime/emitters.ts +0 -183
  503. package/src/runtime/register.ts +0 -150
  504. package/src/runtime/scheduler.ts +0 -488
  505. package/src/runtime/types.ts +0 -242
  506. package/src/runtime/utils.ts +0 -177
  507. package/src/schema/assertion.ts +0 -21
  508. package/src/schema/catalog.ts +0 -269
  509. package/src/schema/change-events.ts +0 -80
  510. package/src/schema/column.ts +0 -51
  511. package/src/schema/declared-schema-manager.ts +0 -82
  512. package/src/schema/function.ts +0 -188
  513. package/src/schema/manager.ts +0 -1034
  514. package/src/schema/schema-differ.ts +0 -214
  515. package/src/schema/schema-hasher.ts +0 -26
  516. package/src/schema/schema.ts +0 -222
  517. package/src/schema/table.ts +0 -409
  518. package/src/schema/view.ts +0 -19
  519. package/src/schema/window-function.ts +0 -56
  520. package/src/types/builtin-types.ts +0 -350
  521. package/src/types/index.ts +0 -17
  522. package/src/types/json-type.ts +0 -152
  523. package/src/types/logical-type.ts +0 -91
  524. package/src/types/plugin-interface.ts +0 -10
  525. package/src/types/registry.ts +0 -204
  526. package/src/types/temporal-types.ts +0 -290
  527. package/src/types/validation.ts +0 -120
  528. package/src/util/affinity.ts +0 -151
  529. package/src/util/ast-stringify.ts +0 -887
  530. package/src/util/cached.ts +0 -25
  531. package/src/util/coercion.ts +0 -113
  532. package/src/util/comparison.ts +0 -510
  533. package/src/util/environment.ts +0 -52
  534. package/src/util/hash.ts +0 -90
  535. package/src/util/latches.ts +0 -47
  536. package/src/util/mutation-statement.ts +0 -135
  537. package/src/util/patterns.ts +0 -56
  538. package/src/util/plan-formatter.ts +0 -48
  539. package/src/util/plugin-helper.ts +0 -110
  540. package/src/util/row-descriptor.ts +0 -105
  541. package/src/util/serialization.ts +0 -47
  542. package/src/util/sql-literal.ts +0 -22
  543. package/src/util/working-table-iterable.ts +0 -38
  544. package/src/vtab/best-access-plan.ts +0 -244
  545. package/src/vtab/connection.ts +0 -36
  546. package/src/vtab/filter-info.ts +0 -23
  547. package/src/vtab/index-info.ts +0 -84
  548. package/src/vtab/manifest.ts +0 -86
  549. package/src/vtab/memory/connection.ts +0 -73
  550. package/src/vtab/memory/index.ts +0 -191
  551. package/src/vtab/memory/layer/base-cursor.ts +0 -124
  552. package/src/vtab/memory/layer/base.ts +0 -275
  553. package/src/vtab/memory/layer/connection.ts +0 -203
  554. package/src/vtab/memory/layer/interface.ts +0 -47
  555. package/src/vtab/memory/layer/manager.ts +0 -909
  556. package/src/vtab/memory/layer/safe-iterate.ts +0 -49
  557. package/src/vtab/memory/layer/scan-plan.ts +0 -84
  558. package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
  559. package/src/vtab/memory/layer/transaction.ts +0 -229
  560. package/src/vtab/memory/module.ts +0 -667
  561. package/src/vtab/memory/table.ts +0 -251
  562. package/src/vtab/memory/types.ts +0 -23
  563. package/src/vtab/memory/utils/logging.ts +0 -36
  564. package/src/vtab/memory/utils/primary-key.ts +0 -163
  565. package/src/vtab/module.ts +0 -162
  566. package/src/vtab/table.ts +0 -177
@@ -1,318 +0,0 @@
1
- import type * as AST from '../../parser/ast.js';
2
- import type { RelationalPlanNode, ScalarPlanNode } from '../nodes/plan-node.js';
3
- import type { PlanningContext } from '../planning-context.js';
4
- import { AggregateNode } from '../nodes/aggregate-node.js';
5
- import { FilterNode } from '../nodes/filter.js';
6
- import { SortNode, type SortKey } from '../nodes/sort.js';
7
- import { type Projection } from '../nodes/project-node.js';
8
- import { RegisteredScope } from '../scopes/registered.js';
9
- import { ColumnReferenceNode } from '../nodes/reference.js';
10
- import { buildExpression } from './expression.js';
11
- import { QuereusError } from '../../common/errors.js';
12
- import { StatusCode } from '../../common/types.js';
13
- import { CapabilityDetectors } from '../framework/characteristics.js';
14
- import { Scope } from '../scopes/scope.js';
15
-
16
- /**
17
- * Processes GROUP BY, aggregates, and HAVING clauses
18
- */
19
- export function buildAggregatePhase(
20
- input: RelationalPlanNode,
21
- stmt: AST.SelectStmt,
22
- selectContext: PlanningContext,
23
- aggregates: { expression: ScalarPlanNode; alias: string }[],
24
- hasAggregates: boolean,
25
- projections: Projection[]
26
- ): {
27
- output: RelationalPlanNode;
28
- aggregateScope?: RegisteredScope;
29
- needsFinalProjection: boolean;
30
- preAggregateSort: boolean;
31
- aggregateNode?: RelationalPlanNode;
32
- groupByExpressions?: ScalarPlanNode[];
33
- } {
34
- const hasGroupBy = stmt.groupBy && stmt.groupBy.length > 0;
35
-
36
- // If there is a HAVING clause but the SELECT contains **no aggregate functions**
37
- // AND **no GROUP BY**, we can safely treat the HAVING predicate as a regular filter
38
- // that runs *before* the aggregation (i.e. between the source and the AggregateNode).
39
- // This avoids the "missing column context" problem where the predicate refers to columns
40
- // that are not available after the AggregateNode (only grouping columns and
41
- // aggregate results are exposed). This behaviour is compatible with SQLite –
42
- // GROUP BY with a primary-key guarantees one row per group so the semantics
43
- // are unchanged.
44
- const shouldPushHavingBelowAggregate = Boolean(stmt.having && !hasAggregates && !hasGroupBy);
45
-
46
- if (!hasAggregates && !hasGroupBy) {
47
- return { output: input, needsFinalProjection: false, preAggregateSort: false };
48
- }
49
-
50
- // ---------------------------------------------------------------------------
51
- // Build HAVING predicate as *pre-aggregate* filter when appropriate
52
- // ---------------------------------------------------------------------------
53
- let currentInput: RelationalPlanNode = input;
54
- if (shouldPushHavingBelowAggregate) {
55
- // Build the predicate using the *pre-aggregate* scope because all columns
56
- // are still available here.
57
- const havingExpr = buildExpression(selectContext, stmt.having as AST.Expression, true);
58
- currentInput = new FilterNode(selectContext.scope, currentInput, havingExpr);
59
- }
60
-
61
- // After (optional) early HAVING filter we continue with the existing pipeline
62
- // ----------------------------------------------------------------------------
63
- // Handle pre-aggregate sorting for ORDER BY without GROUP BY
64
- const preAggregateSort = Boolean(hasAggregates && !hasGroupBy && stmt.orderBy && stmt.orderBy.length > 0);
65
- currentInput = handlePreAggregateSort(currentInput, stmt, selectContext, hasAggregates, !!hasGroupBy);
66
-
67
- // Validate aggregate/non-aggregate mixing
68
- validateAggregateProjections(projections, hasAggregates, !!hasGroupBy);
69
-
70
- // Build GROUP BY expressions
71
- const groupByExpressions = stmt.groupBy ?
72
- stmt.groupBy.map(expr => buildExpression(selectContext, expr, false)) : [];
73
-
74
- // Create AggregateNode
75
- const aggregateNode = new AggregateNode(selectContext.scope, currentInput, groupByExpressions, aggregates);
76
- currentInput = aggregateNode;
77
-
78
- // Create aggregate output scope
79
- const aggregateOutputScope = createAggregateOutputScope(
80
- selectContext.scope,
81
- currentInput,
82
- groupByExpressions,
83
- aggregates
84
- );
85
-
86
- // Handle HAVING clause *after* aggregation only when we did not already push
87
- // it below the AggregateNode.
88
- if (stmt.having && !shouldPushHavingBelowAggregate) {
89
- currentInput = buildHavingFilter(currentInput, stmt.having, selectContext, aggregateOutputScope, aggregates, groupByExpressions);
90
- }
91
-
92
- // Determine if final projection is needed
93
- const needsFinalProjection = checkNeedsFinalProjection(projections);
94
-
95
- return {
96
- output: currentInput,
97
- aggregateScope: aggregateOutputScope,
98
- needsFinalProjection,
99
- preAggregateSort,
100
- aggregateNode,
101
- groupByExpressions
102
- };
103
- }
104
-
105
- /**
106
- * Handles pre-aggregate sorting for special cases
107
- */
108
- function handlePreAggregateSort(
109
- input: RelationalPlanNode,
110
- stmt: AST.SelectStmt,
111
- selectContext: PlanningContext,
112
- hasAggregates: boolean,
113
- hasGroupBy: boolean
114
- ): RelationalPlanNode {
115
- // Special handling for ORDER BY with aggregates but no GROUP BY
116
- if (hasAggregates && !hasGroupBy && stmt.orderBy && stmt.orderBy.length > 0) {
117
- // Apply ORDER BY before aggregation
118
- const sortKeys: SortKey[] = stmt.orderBy.map(orderByClause => {
119
- const expression = buildExpression(selectContext, orderByClause.expr);
120
- return {
121
- expression,
122
- direction: orderByClause.direction,
123
- nulls: orderByClause.nulls
124
- };
125
- });
126
-
127
- return new SortNode(selectContext.scope, input, sortKeys);
128
- }
129
-
130
- return input;
131
- }
132
-
133
- /**
134
- * Validates that aggregate and non-aggregate projections don't mix inappropriately
135
- */
136
- function validateAggregateProjections(
137
- projections: Projection[],
138
- hasAggregates: boolean,
139
- hasGroupBy: boolean
140
- ): void {
141
- if (projections.length > 0 && hasAggregates && !hasGroupBy) {
142
- throw new QuereusError(
143
- 'Cannot mix aggregate and non-aggregate columns in SELECT list without GROUP BY',
144
- StatusCode.ERROR
145
- );
146
- }
147
- }
148
-
149
- /**
150
- * Creates a scope that includes the aggregate output columns
151
- */
152
- function createAggregateOutputScope(
153
- parentScope: Scope,
154
- aggregateNode: RelationalPlanNode,
155
- groupByExpressions: ScalarPlanNode[],
156
- aggregates: { expression: ScalarPlanNode; alias: string }[]
157
- ): RegisteredScope {
158
- const aggregateOutputScope = new RegisteredScope(parentScope);
159
- const aggregateAttributes = aggregateNode.getAttributes();
160
-
161
- // Register GROUP BY columns
162
- groupByExpressions.forEach((expr, index) => {
163
- const attr = aggregateAttributes[index];
164
- aggregateOutputScope.registerSymbol(attr.name.toLowerCase(), (exp, s) =>
165
- new ColumnReferenceNode(s, exp as AST.ColumnExpr, expr.getType(), attr.id, index));
166
- });
167
-
168
- // Register aggregate columns by their aliases
169
- aggregates.forEach((agg, index) => {
170
- const columnIndex = groupByExpressions.length + index;
171
- const attr = aggregateAttributes[columnIndex];
172
- aggregateOutputScope.registerSymbol(agg.alias.toLowerCase(), (exp, s) =>
173
- new ColumnReferenceNode(s, exp as AST.ColumnExpr, agg.expression.getType(), attr.id, columnIndex));
174
- });
175
-
176
- // Register source columns for HAVING clause access
177
- // Start after GROUP BY and aggregate columns
178
- const sourceColumnStartIndex = groupByExpressions.length + aggregates.length;
179
- for (let i = sourceColumnStartIndex; i < aggregateAttributes.length; i++) {
180
- const attr = aggregateAttributes[i];
181
- // Only register if not already registered (avoid conflicts with GROUP BY columns)
182
- const symbolName = attr.name.toLowerCase();
183
- const existingSymbols = aggregateOutputScope.getSymbols();
184
- const alreadyRegistered = existingSymbols.some(([key]) => key === symbolName);
185
- if (!alreadyRegistered) {
186
- aggregateOutputScope.registerSymbol(symbolName, (exp, s) =>
187
- new ColumnReferenceNode(s, exp as AST.ColumnExpr, attr.type, attr.id, i));
188
- }
189
- }
190
-
191
- return aggregateOutputScope;
192
- }
193
-
194
- /**
195
- * Builds HAVING filter clause
196
- */
197
- function buildHavingFilter(
198
- input: RelationalPlanNode,
199
- havingClause: AST.Expression,
200
- selectContext: PlanningContext,
201
- aggregateOutputScope: RegisteredScope,
202
- aggregates: { expression: ScalarPlanNode; alias: string }[],
203
- groupByExpressions: ScalarPlanNode[]
204
- ): RelationalPlanNode {
205
- const aggregateAttributes = input.getAttributes();
206
-
207
- // Create a hybrid scope that first tries the aggregate output scope,
208
- // then falls back to the original source scope for column resolution
209
- const hybridScope = new RegisteredScope();
210
-
211
- // Copy all symbols from aggregate output scope
212
- for (const [symbolKey, callback] of aggregateOutputScope.getSymbols()) {
213
- hybridScope.registerSymbol(symbolKey, callback);
214
- }
215
-
216
- // For any source columns not already registered, register them with
217
- // references to the source table
218
- const sourceInput = input.getRelations()[0]; // The AggregateNode's source
219
- const sourceAttributes = sourceInput.getAttributes();
220
-
221
- sourceAttributes.forEach((sourceAttr, sourceIndex) => {
222
- const symbolName = sourceAttr.name.toLowerCase();
223
- const existingSymbols = hybridScope.getSymbols();
224
- const alreadyRegistered = existingSymbols.some(([key]) => key === symbolName);
225
-
226
- if (!alreadyRegistered) {
227
- hybridScope.registerSymbol(symbolName, (exp, s) =>
228
- new ColumnReferenceNode(s, exp as AST.ColumnExpr, sourceAttr.type, sourceAttr.id, sourceIndex));
229
- }
230
- });
231
-
232
- // Build HAVING expression with the hybrid scope
233
- const havingContext: PlanningContext = {
234
- ...selectContext,
235
- scope: hybridScope,
236
- aggregates: aggregates.map((agg, index) => {
237
- const columnIndex = groupByExpressions.length + index;
238
- const attr = aggregateAttributes[columnIndex];
239
- return {
240
- expression: agg.expression,
241
- alias: agg.alias,
242
- columnIndex,
243
- attributeId: attr.id
244
- };
245
- })
246
- };
247
-
248
- const havingExpression = buildExpression(havingContext, havingClause, true);
249
-
250
- return new FilterNode(hybridScope, input, havingExpression);
251
- }
252
-
253
- /**
254
- * Checks if a final projection is needed for complex expressions
255
- */
256
- function checkNeedsFinalProjection(projections: Projection[]): boolean {
257
- if (projections.length === 0) {
258
- return false;
259
- }
260
-
261
- // Check if any of the projections are complex expressions (not just column refs)
262
- return projections.some(proj => {
263
- // If it's not a simple ColumnReferenceNode, we need final projection
264
- return !CapabilityDetectors.isColumnReference(proj.node);
265
- });
266
- }
267
-
268
- /**
269
- * Builds final projections for the complete SELECT list in aggregate context
270
- */
271
- export function buildFinalAggregateProjections(
272
- stmt: AST.SelectStmt,
273
- selectContext: PlanningContext,
274
- aggregateOutputScope: RegisteredScope,
275
- aggregateNode: RelationalPlanNode,
276
- aggregates: { expression: ScalarPlanNode; alias: string }[],
277
- groupByExpressions: ScalarPlanNode[]
278
- ): Projection[] {
279
- const finalProjections: Projection[] = [];
280
- const aggregateAttributes = aggregateNode.getAttributes();
281
-
282
- // Build context with aggregates so buildFunctionCall can resolve aggregate references
283
- const aggregatesContext = aggregates.map((agg, index) => {
284
- const columnIndex = groupByExpressions.length + index;
285
- const attr = aggregateAttributes[columnIndex];
286
- return {
287
- expression: agg.expression,
288
- alias: agg.alias,
289
- columnIndex,
290
- attributeId: attr.id
291
- };
292
- });
293
-
294
- for (const column of stmt.columns) {
295
- if (column.type === 'column') {
296
- // Re-build the expression in the context of the aggregate output
297
- const finalContext: PlanningContext = {
298
- ...selectContext,
299
- scope: aggregateOutputScope,
300
- aggregates: aggregatesContext
301
- };
302
- const scalarNode = buildExpression(finalContext, column.expr, true);
303
-
304
- let attrId: number | undefined = undefined;
305
- if (CapabilityDetectors.isColumnReference(scalarNode)) {
306
- attrId = scalarNode.attributeId;
307
- }
308
-
309
- finalProjections.push({
310
- node: scalarNode,
311
- alias: column.alias || (column.expr.type === 'column' ? column.expr.name : undefined),
312
- attributeId: attrId
313
- });
314
- }
315
- }
316
-
317
- return finalProjections;
318
- }
@@ -1,119 +0,0 @@
1
- import type * as AST from '../../parser/ast.js';
2
- import type { RelationalPlanNode } from '../nodes/plan-node.js';
3
- import type { PlanningContext } from '../planning-context.js';
4
- import type { CTEScopeNode } from '../nodes/cte-node.js';
5
- import type { Scope } from '../scopes/scope.js';
6
- import { SetOperationNode } from '../nodes/set-operation-node.js';
7
- import { SortNode, type SortKey } from '../nodes/sort.js';
8
- import { LimitOffsetNode } from '../nodes/limit-offset.js';
9
- import { LiteralNode } from '../nodes/scalar.js';
10
- import { RegisteredScope } from '../scopes/registered.js';
11
- import { ColumnReferenceNode } from '../nodes/reference.js';
12
- import { buildExpression } from './expression.js';
13
- // Import will be added after refactoring select.ts
14
- import { QuereusError } from '../../common/errors.js';
15
- import { StatusCode } from '../../common/types.js';
16
-
17
- /**
18
- * Builds a compound SELECT statement (UNION, INTERSECT, EXCEPT)
19
- */
20
- export function buildCompoundSelect(
21
- stmt: AST.SelectStmt,
22
- contextWithCTEs: PlanningContext,
23
- cteNodes: Map<string, CTEScopeNode>,
24
- buildSelectStmt: (ctx: PlanningContext, stmt: AST.SelectStmt, parentCTEs?: Map<string, CTEScopeNode>) => RelationalPlanNode
25
- ): RelationalPlanNode {
26
- if (!stmt.compound) {
27
- throw new QuereusError('buildCompoundSelect called without compound clause', StatusCode.INTERNAL);
28
- }
29
-
30
- // Build left side by cloning the statement without compound and stripping ORDER BY/LIMIT/OFFSET that belong to outer query
31
- const { compound: _outerCompound, orderBy: outerOrderBy, limit: outerLimit, offset: outerOffset, ...leftCore } = stmt;
32
-
33
- // Also strip ORDER BY/LIMIT/OFFSET from the right side - they should only apply to the final compound result
34
- const { orderBy: _rightOrderBy, limit: _rightLimit, offset: _rightOffset, ...rightCore } = stmt.compound.select;
35
-
36
- const leftPlan = buildSelectStmt(contextWithCTEs, leftCore as AST.SelectStmt, cteNodes) as RelationalPlanNode;
37
- const rightPlan = buildSelectStmt(contextWithCTEs, rightCore as AST.SelectStmt, cteNodes) as RelationalPlanNode;
38
-
39
- // Expand DIFF as (A EXCEPT B) UNION (B EXCEPT A)
40
- let setNode: RelationalPlanNode;
41
- if (stmt.compound.op === 'diff') {
42
- const leftMinusRight = new SetOperationNode(contextWithCTEs.scope, leftPlan, rightPlan, 'except');
43
- const rightMinusLeft = new SetOperationNode(contextWithCTEs.scope, rightPlan, leftPlan, 'except');
44
- setNode = new SetOperationNode(contextWithCTEs.scope, leftMinusRight, rightMinusLeft, 'union');
45
- } else {
46
- setNode = new SetOperationNode(contextWithCTEs.scope, leftPlan, rightPlan, stmt.compound.op);
47
- }
48
-
49
- // After set operation, apply ORDER BY / LIMIT / OFFSET from the *outer* (original) statement
50
- let input: RelationalPlanNode = setNode;
51
-
52
- // Build scope for output columns
53
- const setScope = createSetOperationScope(input);
54
- const selectContext: PlanningContext = { ...contextWithCTEs, scope: setScope };
55
-
56
- // Apply outer modifiers
57
- input = applyOuterOrderBy(input, outerOrderBy, selectContext);
58
- input = applyOuterLimitOffset(input, outerLimit, outerOffset, selectContext);
59
-
60
- return input;
61
- }
62
-
63
- /**
64
- * Creates a scope for set operation output columns
65
- */
66
- function createSetOperationScope(setNode: RelationalPlanNode): RegisteredScope {
67
- const setScope = new RegisteredScope();
68
- const attrs = setNode.getAttributes();
69
-
70
- setNode.getType().columns.forEach((c, i: number) => {
71
- const attr = attrs[i];
72
- // Ensure column has a name - use attribute name as fallback
73
- const columnName = c.name || attr.name;
74
- if (!columnName) {
75
- throw new QuereusError(`Column at index ${i} has no name in set operation`, StatusCode.ERROR);
76
- }
77
- setScope.registerSymbol(columnName.toLowerCase(), (exp: AST.Expression, s: Scope) =>
78
- new ColumnReferenceNode(s, exp as AST.ColumnExpr, c.type, attr.id, i));
79
- });
80
-
81
- return setScope;
82
- }
83
-
84
- /**
85
- * Applies ORDER BY clause from outer compound statement
86
- */
87
- function applyOuterOrderBy(
88
- input: RelationalPlanNode,
89
- outerOrderBy: AST.OrderByClause[] | undefined,
90
- selectContext: PlanningContext
91
- ): RelationalPlanNode {
92
- if (outerOrderBy && outerOrderBy.length > 0) {
93
- const sortKeys: SortKey[] = outerOrderBy.map((ob) => ({
94
- expression: buildExpression(selectContext, ob.expr),
95
- direction: ob.direction,
96
- nulls: ob.nulls,
97
- }));
98
- return new SortNode(selectContext.scope, input, sortKeys);
99
- }
100
- return input;
101
- }
102
-
103
- /**
104
- * Applies LIMIT and OFFSET clauses from outer compound statement
105
- */
106
- function applyOuterLimitOffset(
107
- input: RelationalPlanNode,
108
- outerLimit: AST.Expression | undefined,
109
- outerOffset: AST.Expression | undefined,
110
- selectContext: PlanningContext
111
- ): RelationalPlanNode {
112
- if (outerLimit || outerOffset) {
113
- const literalNull = new LiteralNode(selectContext.scope, { type: 'literal', value: null });
114
- const limitExpr = outerLimit ? buildExpression(selectContext, outerLimit) : literalNull;
115
- const offsetExpr = outerOffset ? buildExpression(selectContext, outerOffset) : literalNull;
116
- return new LimitOffsetNode(selectContext.scope, input, limitExpr, offsetExpr);
117
- }
118
- return input;
119
- }
@@ -1,85 +0,0 @@
1
- import type * as AST from '../../parser/ast.js';
2
- import type { PlanningContext } from '../planning-context.js';
3
- import type { CTEScopeNode } from '../nodes/cte-node.js';
4
- import type { Scope } from '../scopes/scope.js';
5
- import { RegisteredScope } from '../scopes/registered.js';
6
- import { ParameterScope } from '../scopes/param.js';
7
- import { ColumnReferenceNode } from '../nodes/reference.js';
8
- import { buildWithClause } from './with.js';
9
-
10
- /**
11
- * Helper function to get the non-parameter ancestor scope.
12
- * This ensures table/column scopes don't inherit from ParameterScope,
13
- * preventing parameter resolution ambiguity in MultiScope.
14
- */
15
- export function getNonParamAncestor(scope: Scope): Scope {
16
- return (scope instanceof ParameterScope) ? scope.parentScope : scope;
17
- }
18
-
19
- /**
20
- * Builds context with CTEs if present
21
- */
22
- export function buildWithContext(
23
- ctx: PlanningContext,
24
- stmt: AST.SelectStmt,
25
- parentCTEs: Map<string, CTEScopeNode> = new Map()
26
- ): {
27
- contextWithCTEs: PlanningContext;
28
- cteNodes: Map<string, CTEScopeNode>;
29
- } {
30
- // Start with parent CTEs - either from parameter or from context
31
- const cteNodes: Map<string, CTEScopeNode> = new Map(parentCTEs.size > 0 ? parentCTEs : (ctx.cteNodes ?? new Map()));
32
- let contextWithCTEs = ctx;
33
-
34
- if (stmt.withClause) {
35
- const newCteNodes = buildWithClause(ctx, stmt.withClause);
36
- // Merge parent CTEs with new ones (new ones take precedence)
37
- for (const [name, node] of newCteNodes) {
38
- cteNodes.set(name, node);
39
- }
40
-
41
- // Create a new scope that includes the CTEs
42
- const cteScope = createCTEScope(cteNodes, ctx);
43
- contextWithCTEs = { ...ctx, scope: cteScope, cteNodes, cteReferenceCache: ctx.cteReferenceCache };
44
- } else if (cteNodes.size > 0) {
45
- // No WITH clause but we have parent CTEs, create scope for them
46
- const cteScope = createCTEScope(cteNodes, ctx);
47
- contextWithCTEs = { ...ctx, scope: cteScope, cteNodes, cteReferenceCache: ctx.cteReferenceCache };
48
- }
49
-
50
- return { contextWithCTEs, cteNodes };
51
- }
52
-
53
- /**
54
- * Creates a scope that includes CTE references
55
- * CRITICAL: Uses stable input attribute IDs only, ignoring any projection output scopes
56
- * that might cause attribute ID collisions in correlated subqueries
57
- */
58
- function createCTEScope(
59
- cteNodes: Map<string, CTEScopeNode>,
60
- ctx: PlanningContext
61
- ): RegisteredScope {
62
- const cteScope = new RegisteredScope(getNonParamAncestor(ctx.scope));
63
-
64
- // Register each CTE in the scope
65
- for (const [cteName, cteNode] of cteNodes) {
66
- // CRITICAL: Use only the stable input attributes from the CTE definition
67
- // Do NOT use any projection output attributes that might have fresh IDs
68
- const attributes = cteNode.getAttributes();
69
- const columnTypes = cteNode.getType().columns;
70
-
71
- // Only register columns that are stable input attributes
72
- // This prevents scope pollution from projection output attributes
73
- columnTypes.forEach((col, i) => {
74
- if (i < attributes.length) {
75
- const attr = attributes[i];
76
- // Register CTE columns with qualified names to avoid collisions
77
- const qualifiedColumnName = `${cteName}.${col.name.toLowerCase()}`;
78
- cteScope.registerSymbol(qualifiedColumnName, (exp, s) =>
79
- new ColumnReferenceNode(s, exp as AST.ColumnExpr, col.type, attr.id, i));
80
- }
81
- });
82
- }
83
-
84
- return cteScope;
85
- }