@quereus/quereus 4.4.0 → 4.5.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 (491) hide show
  1. package/README.md +6 -1
  2. package/dist/src/common/types.d.ts +9 -0
  3. package/dist/src/common/types.d.ts.map +1 -1
  4. package/dist/src/common/types.js.map +1 -1
  5. package/dist/src/core/database-events.d.ts +49 -0
  6. package/dist/src/core/database-events.d.ts.map +1 -1
  7. package/dist/src/core/database-events.js +148 -0
  8. package/dist/src/core/database-events.js.map +1 -1
  9. package/dist/src/core/database-materialized-views-analysis.d.ts.map +1 -1
  10. package/dist/src/core/database-materialized-views-analysis.js +1 -0
  11. package/dist/src/core/database-materialized-views-analysis.js.map +1 -1
  12. package/dist/src/core/database-materialized-views-plan-builders.d.ts +2 -1
  13. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
  14. package/dist/src/core/database-materialized-views-plan-builders.js +26 -5
  15. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
  16. package/dist/src/core/database-materialized-views-plans.d.ts +6 -3
  17. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
  18. package/dist/src/core/database-materialized-views.d.ts +3 -2
  19. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  20. package/dist/src/core/database-materialized-views.js +26 -5
  21. package/dist/src/core/database-materialized-views.js.map +1 -1
  22. package/dist/src/core/database.d.ts +5 -0
  23. package/dist/src/core/database.d.ts.map +1 -1
  24. package/dist/src/core/database.js +21 -1
  25. package/dist/src/core/database.js.map +1 -1
  26. package/dist/src/core/internal-statement-cache.d.ts +18 -0
  27. package/dist/src/core/internal-statement-cache.d.ts.map +1 -0
  28. package/dist/src/core/internal-statement-cache.js +211 -0
  29. package/dist/src/core/internal-statement-cache.js.map +1 -0
  30. package/dist/src/func/builtins/aggregate.d.ts +13 -12
  31. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  32. package/dist/src/func/builtins/aggregate.js +45 -67
  33. package/dist/src/func/builtins/aggregate.js.map +1 -1
  34. package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
  35. package/dist/src/func/builtins/builtin-window-functions.js +63 -48
  36. package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
  37. package/dist/src/func/builtins/scalar.d.ts.map +1 -1
  38. package/dist/src/func/builtins/scalar.js +92 -3
  39. package/dist/src/func/builtins/scalar.js.map +1 -1
  40. package/dist/src/func/registration.d.ts +18 -1
  41. package/dist/src/func/registration.d.ts.map +1 -1
  42. package/dist/src/func/registration.js +26 -0
  43. package/dist/src/func/registration.js.map +1 -1
  44. package/dist/src/index.d.ts +10 -10
  45. package/dist/src/index.d.ts.map +1 -1
  46. package/dist/src/index.js +13 -12
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/parser/parser.d.ts +6 -0
  49. package/dist/src/parser/parser.d.ts.map +1 -1
  50. package/dist/src/parser/parser.js +45 -34
  51. package/dist/src/parser/parser.js.map +1 -1
  52. package/dist/src/planner/analysis/coarsened-key.d.ts +4 -3
  53. package/dist/src/planner/analysis/coarsened-key.d.ts.map +1 -1
  54. package/dist/src/planner/analysis/coarsened-key.js +37 -3
  55. package/dist/src/planner/analysis/coarsened-key.js.map +1 -1
  56. package/dist/src/planner/analysis/comparison-collation.d.ts +35 -3
  57. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
  58. package/dist/src/planner/analysis/comparison-collation.js +37 -3
  59. package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
  60. package/dist/src/planner/analysis/coverage-prover.d.ts +13 -2
  61. package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -1
  62. package/dist/src/planner/analysis/coverage-prover.js +10 -14
  63. package/dist/src/planner/analysis/coverage-prover.js.map +1 -1
  64. package/dist/src/planner/analysis/expression-fingerprint.d.ts.map +1 -1
  65. package/dist/src/planner/analysis/expression-fingerprint.js +29 -0
  66. package/dist/src/planner/analysis/expression-fingerprint.js.map +1 -1
  67. package/dist/src/planner/analysis/predicate-conjuncts.d.ts +10 -4
  68. package/dist/src/planner/analysis/predicate-conjuncts.d.ts.map +1 -1
  69. package/dist/src/planner/analysis/predicate-conjuncts.js +28 -7
  70. package/dist/src/planner/analysis/predicate-conjuncts.js.map +1 -1
  71. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +6 -0
  72. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  73. package/dist/src/planner/analysis/query-rewrite-matcher.js +19 -29
  74. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  75. package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -1
  76. package/dist/src/planner/analysis/sat-checker.js +43 -4
  77. package/dist/src/planner/analysis/sat-checker.js.map +1 -1
  78. package/dist/src/planner/analysis/scalar-subqueries.d.ts +22 -3
  79. package/dist/src/planner/analysis/scalar-subqueries.d.ts.map +1 -1
  80. package/dist/src/planner/analysis/scalar-subqueries.js +32 -3
  81. package/dist/src/planner/analysis/scalar-subqueries.js.map +1 -1
  82. package/dist/src/planner/analysis/set-op-type-merge.d.ts +64 -0
  83. package/dist/src/planner/analysis/set-op-type-merge.d.ts.map +1 -0
  84. package/dist/src/planner/analysis/set-op-type-merge.js +97 -0
  85. package/dist/src/planner/analysis/set-op-type-merge.js.map +1 -0
  86. package/dist/src/planner/building/coercion.d.ts +78 -0
  87. package/dist/src/planner/building/coercion.d.ts.map +1 -0
  88. package/dist/src/planner/building/coercion.js +137 -0
  89. package/dist/src/planner/building/coercion.js.map +1 -0
  90. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  91. package/dist/src/planner/building/constraint-builder.js +5 -18
  92. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  93. package/dist/src/planner/building/delete.d.ts.map +1 -1
  94. package/dist/src/planner/building/delete.js +10 -3
  95. package/dist/src/planner/building/delete.js.map +1 -1
  96. package/dist/src/planner/building/expression.d.ts.map +1 -1
  97. package/dist/src/planner/building/expression.js +13 -35
  98. package/dist/src/planner/building/expression.js.map +1 -1
  99. package/dist/src/planner/building/foreign-key-builder.d.ts +44 -1
  100. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  101. package/dist/src/planner/building/foreign-key-builder.js +54 -0
  102. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  103. package/dist/src/planner/building/function-call.d.ts.map +1 -1
  104. package/dist/src/planner/building/function-call.js +8 -0
  105. package/dist/src/planner/building/function-call.js.map +1 -1
  106. package/dist/src/planner/building/insert.d.ts.map +1 -1
  107. package/dist/src/planner/building/insert.js +9 -12
  108. package/dist/src/planner/building/insert.js.map +1 -1
  109. package/dist/src/planner/building/select-compound.d.ts.map +1 -1
  110. package/dist/src/planner/building/select-compound.js +10 -6
  111. package/dist/src/planner/building/select-compound.js.map +1 -1
  112. package/dist/src/planner/building/update.d.ts.map +1 -1
  113. package/dist/src/planner/building/update.js +13 -4
  114. package/dist/src/planner/building/update.js.map +1 -1
  115. package/dist/src/planner/cost/conjunct-cost.d.ts +42 -0
  116. package/dist/src/planner/cost/conjunct-cost.d.ts.map +1 -0
  117. package/dist/src/planner/cost/conjunct-cost.js +62 -0
  118. package/dist/src/planner/cost/conjunct-cost.js.map +1 -0
  119. package/dist/src/planner/framework/pass.js +3 -3
  120. package/dist/src/planner/mutation/propagate.d.ts.map +1 -1
  121. package/dist/src/planner/mutation/propagate.js +1 -0
  122. package/dist/src/planner/mutation/propagate.js.map +1 -1
  123. package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
  124. package/dist/src/planner/nodes/async-gather-node.js +19 -8
  125. package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
  126. package/dist/src/planner/nodes/bloom-join-node.d.ts +2 -0
  127. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  128. package/dist/src/planner/nodes/bloom-join-node.js +10 -5
  129. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  130. package/dist/src/planner/nodes/dml-executor-node.d.ts +0 -9
  131. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  132. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  133. package/dist/src/planner/nodes/join-node.d.ts +5 -0
  134. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  135. package/dist/src/planner/nodes/join-node.js +8 -1
  136. package/dist/src/planner/nodes/join-node.js.map +1 -1
  137. package/dist/src/planner/nodes/join-utils.d.ts +57 -0
  138. package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
  139. package/dist/src/planner/nodes/join-utils.js +47 -0
  140. package/dist/src/planner/nodes/join-utils.js.map +1 -1
  141. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts +87 -0
  142. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts.map +1 -0
  143. package/dist/src/planner/nodes/key-set-semi-join-node.js +137 -0
  144. package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -0
  145. package/dist/src/planner/nodes/merge-join-node.d.ts +2 -0
  146. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  147. package/dist/src/planner/nodes/merge-join-node.js +14 -6
  148. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  149. package/dist/src/planner/nodes/plan-node-type.d.ts +1 -0
  150. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  151. package/dist/src/planner/nodes/plan-node-type.js +1 -0
  152. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  153. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  154. package/dist/src/planner/nodes/scalar.js +26 -3
  155. package/dist/src/planner/nodes/scalar.js.map +1 -1
  156. package/dist/src/planner/nodes/set-operation-node.d.ts +68 -16
  157. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  158. package/dist/src/planner/nodes/set-operation-node.js +147 -26
  159. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  160. package/dist/src/planner/nodes/table-access-nodes.d.ts +19 -1
  161. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  162. package/dist/src/planner/nodes/table-access-nodes.js +13 -2
  163. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  164. package/dist/src/planner/optimizer.d.ts.map +1 -1
  165. package/dist/src/planner/optimizer.js +54 -12
  166. package/dist/src/planner/optimizer.js.map +1 -1
  167. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts +68 -0
  168. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -0
  169. package/dist/src/planner/rules/access/rule-key-set-seek.js +408 -0
  170. package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -0
  171. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
  172. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +2 -2
  173. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
  174. package/dist/src/planner/rules/access/rule-select-access-path.d.ts +27 -0
  175. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  176. package/dist/src/planner/rules/access/rule-select-access-path.js +74 -29
  177. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  178. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -1
  179. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +23 -4
  180. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  181. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts +10 -8
  182. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts.map +1 -1
  183. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js +10 -8
  184. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js.map +1 -1
  185. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +67 -41
  186. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
  187. package/dist/src/planner/rules/join/equi-pair-extractor.js +72 -36
  188. package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
  189. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  190. package/dist/src/planner/rules/join/rule-join-physical-selection.js +14 -2
  191. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  192. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
  193. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +11 -1
  194. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
  195. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +1 -1
  196. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +1 -1
  197. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.d.ts +30 -0
  198. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.d.ts.map +1 -0
  199. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.js +63 -0
  200. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.js.map +1 -0
  201. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +17 -1
  202. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
  203. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +206 -12
  204. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -1
  205. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +8 -1
  206. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
  207. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts +3 -1
  208. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
  209. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +13 -1
  210. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
  211. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
  212. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +18 -3
  213. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  214. package/dist/src/planner/rules/shared/index-style-context.d.ts +17 -0
  215. package/dist/src/planner/rules/shared/index-style-context.d.ts.map +1 -1
  216. package/dist/src/planner/rules/shared/index-style-context.js +7 -0
  217. package/dist/src/planner/rules/shared/index-style-context.js.map +1 -1
  218. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js +4 -0
  219. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js.map +1 -1
  220. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts +24 -6
  221. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  222. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +175 -60
  223. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  224. package/dist/src/planner/stats/catalog-stats.d.ts +52 -0
  225. package/dist/src/planner/stats/catalog-stats.d.ts.map +1 -1
  226. package/dist/src/planner/stats/catalog-stats.js +151 -5
  227. package/dist/src/planner/stats/catalog-stats.js.map +1 -1
  228. package/dist/src/planner/stats/index.d.ts +15 -0
  229. package/dist/src/planner/stats/index.d.ts.map +1 -1
  230. package/dist/src/planner/stats/index.js.map +1 -1
  231. package/dist/src/planner/stats/selectivity-combine.d.ts +53 -0
  232. package/dist/src/planner/stats/selectivity-combine.d.ts.map +1 -0
  233. package/dist/src/planner/stats/selectivity-combine.js +75 -0
  234. package/dist/src/planner/stats/selectivity-combine.js.map +1 -0
  235. package/dist/src/planner/util/column-origins.d.ts +58 -0
  236. package/dist/src/planner/util/column-origins.d.ts.map +1 -0
  237. package/dist/src/planner/util/column-origins.js +90 -0
  238. package/dist/src/planner/util/column-origins.js.map +1 -0
  239. package/dist/src/runtime/deferred-constraint-queue.d.ts +40 -0
  240. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  241. package/dist/src/runtime/deferred-constraint-queue.js +91 -0
  242. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  243. package/dist/src/runtime/emit/aggregate-setup.d.ts +49 -0
  244. package/dist/src/runtime/emit/aggregate-setup.d.ts.map +1 -0
  245. package/dist/src/runtime/emit/aggregate-setup.js +99 -0
  246. package/dist/src/runtime/emit/aggregate-setup.js.map +1 -0
  247. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  248. package/dist/src/runtime/emit/aggregate.js +4 -69
  249. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  250. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  251. package/dist/src/runtime/emit/alter-table.js +354 -165
  252. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  253. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  254. package/dist/src/runtime/emit/asof-scan.js +11 -0
  255. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  256. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  257. package/dist/src/runtime/emit/between.js +7 -12
  258. package/dist/src/runtime/emit/between.js.map +1 -1
  259. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  260. package/dist/src/runtime/emit/binary.js +24 -25
  261. package/dist/src/runtime/emit/binary.js.map +1 -1
  262. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  263. package/dist/src/runtime/emit/bloom-join.js +8 -16
  264. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  265. package/dist/src/runtime/emit/case.d.ts.map +1 -1
  266. package/dist/src/runtime/emit/case.js +40 -6
  267. package/dist/src/runtime/emit/case.js.map +1 -1
  268. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  269. package/dist/src/runtime/emit/cast.js +10 -23
  270. package/dist/src/runtime/emit/cast.js.map +1 -1
  271. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  272. package/dist/src/runtime/emit/constraint-check.js +72 -51
  273. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  274. package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
  275. package/dist/src/runtime/emit/create-view.js +6 -0
  276. package/dist/src/runtime/emit/create-view.js.map +1 -1
  277. package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
  278. package/dist/src/runtime/emit/distinct.js +6 -3
  279. package/dist/src/runtime/emit/distinct.js.map +1 -1
  280. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  281. package/dist/src/runtime/emit/dml-executor.js +188 -84
  282. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  283. package/dist/src/runtime/emit/filter.d.ts +18 -0
  284. package/dist/src/runtime/emit/filter.d.ts.map +1 -1
  285. package/dist/src/runtime/emit/filter.js +52 -10
  286. package/dist/src/runtime/emit/filter.js.map +1 -1
  287. package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
  288. package/dist/src/runtime/emit/hash-aggregate.js +16 -65
  289. package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
  290. package/dist/src/runtime/emit/insert.d.ts.map +1 -1
  291. package/dist/src/runtime/emit/insert.js +18 -7
  292. package/dist/src/runtime/emit/insert.js.map +1 -1
  293. package/dist/src/runtime/emit/join-key-extractor.d.ts +46 -0
  294. package/dist/src/runtime/emit/join-key-extractor.d.ts.map +1 -0
  295. package/dist/src/runtime/emit/join-key-extractor.js +60 -0
  296. package/dist/src/runtime/emit/join-key-extractor.js.map +1 -0
  297. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  298. package/dist/src/runtime/emit/join.js +37 -11
  299. package/dist/src/runtime/emit/join.js.map +1 -1
  300. package/dist/src/runtime/emit/key-set-semi-join.d.ts +29 -0
  301. package/dist/src/runtime/emit/key-set-semi-join.d.ts.map +1 -0
  302. package/dist/src/runtime/emit/key-set-semi-join.js +143 -0
  303. package/dist/src/runtime/emit/key-set-semi-join.js.map +1 -0
  304. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +14 -1
  305. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  306. package/dist/src/runtime/emit/materialized-view-helpers.js +33 -3
  307. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  308. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  309. package/dist/src/runtime/emit/materialized-view.js +47 -6
  310. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  311. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  312. package/dist/src/runtime/emit/merge-join.js +32 -15
  313. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  314. package/dist/src/runtime/emit/operand-comparator.d.ts +40 -0
  315. package/dist/src/runtime/emit/operand-comparator.d.ts.map +1 -0
  316. package/dist/src/runtime/emit/operand-comparator.js +59 -0
  317. package/dist/src/runtime/emit/operand-comparator.js.map +1 -0
  318. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  319. package/dist/src/runtime/emit/scan.js +11 -2
  320. package/dist/src/runtime/emit/scan.js.map +1 -1
  321. package/dist/src/runtime/emit/set-object-tags.d.ts +8 -0
  322. package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -1
  323. package/dist/src/runtime/emit/set-object-tags.js +8 -0
  324. package/dist/src/runtime/emit/set-object-tags.js.map +1 -1
  325. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  326. package/dist/src/runtime/emit/set-operation.js +7 -4
  327. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  328. package/dist/src/runtime/emit/sort.d.ts.map +1 -1
  329. package/dist/src/runtime/emit/sort.js +5 -2
  330. package/dist/src/runtime/emit/sort.js.map +1 -1
  331. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  332. package/dist/src/runtime/emit/subquery.js +113 -13
  333. package/dist/src/runtime/emit/subquery.js.map +1 -1
  334. package/dist/src/runtime/emit/temporal-arithmetic.d.ts +7 -0
  335. package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -1
  336. package/dist/src/runtime/emit/temporal-arithmetic.js +15 -7
  337. package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -1
  338. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  339. package/dist/src/runtime/emit/update.js +44 -3
  340. package/dist/src/runtime/emit/update.js.map +1 -1
  341. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  342. package/dist/src/runtime/emit/window.js +72 -55
  343. package/dist/src/runtime/emit/window.js.map +1 -1
  344. package/dist/src/runtime/foreign-key-actions.d.ts +36 -1
  345. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  346. package/dist/src/runtime/foreign-key-actions.js +238 -116
  347. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  348. package/dist/src/runtime/parallel-driver.d.ts +10 -2
  349. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  350. package/dist/src/runtime/parallel-driver.js +12 -2
  351. package/dist/src/runtime/parallel-driver.js.map +1 -1
  352. package/dist/src/runtime/register.d.ts.map +1 -1
  353. package/dist/src/runtime/register.js +2 -0
  354. package/dist/src/runtime/register.js.map +1 -1
  355. package/dist/src/runtime/types.d.ts +25 -0
  356. package/dist/src/runtime/types.d.ts.map +1 -1
  357. package/dist/src/runtime/types.js.map +1 -1
  358. package/dist/src/schema/catalog-persistability.d.ts +58 -0
  359. package/dist/src/schema/catalog-persistability.d.ts.map +1 -0
  360. package/dist/src/schema/catalog-persistability.js +87 -0
  361. package/dist/src/schema/catalog-persistability.js.map +1 -0
  362. package/dist/src/schema/catalog.d.ts +17 -1
  363. package/dist/src/schema/catalog.d.ts.map +1 -1
  364. package/dist/src/schema/catalog.js +25 -3
  365. package/dist/src/schema/catalog.js.map +1 -1
  366. package/dist/src/schema/constraint-builder.d.ts +20 -22
  367. package/dist/src/schema/constraint-builder.d.ts.map +1 -1
  368. package/dist/src/schema/constraint-builder.js +43 -36
  369. package/dist/src/schema/constraint-builder.js.map +1 -1
  370. package/dist/src/schema/ddl-generator.d.ts +23 -0
  371. package/dist/src/schema/ddl-generator.d.ts.map +1 -1
  372. package/dist/src/schema/ddl-generator.js +27 -0
  373. package/dist/src/schema/ddl-generator.js.map +1 -1
  374. package/dist/src/schema/function.d.ts +39 -1
  375. package/dist/src/schema/function.d.ts.map +1 -1
  376. package/dist/src/schema/function.js.map +1 -1
  377. package/dist/src/schema/manager.d.ts +28 -0
  378. package/dist/src/schema/manager.d.ts.map +1 -1
  379. package/dist/src/schema/manager.js +82 -14
  380. package/dist/src/schema/manager.js.map +1 -1
  381. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  382. package/dist/src/schema/schema-differ.js +51 -12
  383. package/dist/src/schema/schema-differ.js.map +1 -1
  384. package/dist/src/schema/unique-enforcement.d.ts +31 -0
  385. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  386. package/dist/src/schema/unique-enforcement.js +37 -1
  387. package/dist/src/schema/unique-enforcement.js.map +1 -1
  388. package/dist/src/schema/window-function.d.ts +30 -10
  389. package/dist/src/schema/window-function.d.ts.map +1 -1
  390. package/dist/src/schema/window-function.js +20 -16
  391. package/dist/src/schema/window-function.js.map +1 -1
  392. package/dist/src/types/builtin-types.d.ts.map +1 -1
  393. package/dist/src/types/builtin-types.js +30 -4
  394. package/dist/src/types/builtin-types.js.map +1 -1
  395. package/dist/src/types/cast-semantics.d.ts +43 -0
  396. package/dist/src/types/cast-semantics.d.ts.map +1 -0
  397. package/dist/src/types/cast-semantics.js +59 -0
  398. package/dist/src/types/cast-semantics.js.map +1 -0
  399. package/dist/src/types/index.d.ts +1 -1
  400. package/dist/src/types/index.d.ts.map +1 -1
  401. package/dist/src/types/index.js +1 -1
  402. package/dist/src/types/index.js.map +1 -1
  403. package/dist/src/types/json-type.d.ts.map +1 -1
  404. package/dist/src/types/json-type.js +31 -10
  405. package/dist/src/types/json-type.js.map +1 -1
  406. package/dist/src/types/logical-type.d.ts +22 -0
  407. package/dist/src/types/logical-type.d.ts.map +1 -1
  408. package/dist/src/types/logical-type.js.map +1 -1
  409. package/dist/src/types/temporal-types.d.ts.map +1 -1
  410. package/dist/src/types/temporal-types.js +33 -11
  411. package/dist/src/types/temporal-types.js.map +1 -1
  412. package/dist/src/types/validation.d.ts +39 -1
  413. package/dist/src/types/validation.d.ts.map +1 -1
  414. package/dist/src/types/validation.js +60 -0
  415. package/dist/src/types/validation.js.map +1 -1
  416. package/dist/src/util/ast-spine-clone.d.ts +23 -0
  417. package/dist/src/util/ast-spine-clone.d.ts.map +1 -0
  418. package/dist/src/util/ast-spine-clone.js +41 -0
  419. package/dist/src/util/ast-spine-clone.js.map +1 -0
  420. package/dist/src/util/coercion.d.ts +13 -0
  421. package/dist/src/util/coercion.d.ts.map +1 -1
  422. package/dist/src/util/coercion.js +10 -1
  423. package/dist/src/util/coercion.js.map +1 -1
  424. package/dist/src/util/comparison.d.ts +114 -0
  425. package/dist/src/util/comparison.d.ts.map +1 -1
  426. package/dist/src/util/comparison.js +187 -27
  427. package/dist/src/util/comparison.js.map +1 -1
  428. package/dist/src/vtab/best-access-plan.d.ts +87 -0
  429. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  430. package/dist/src/vtab/best-access-plan.js +87 -0
  431. package/dist/src/vtab/best-access-plan.js.map +1 -1
  432. package/dist/src/vtab/manifest.d.ts +7 -0
  433. package/dist/src/vtab/manifest.d.ts.map +1 -1
  434. package/dist/src/vtab/memory/connection.d.ts +14 -1
  435. package/dist/src/vtab/memory/connection.d.ts.map +1 -1
  436. package/dist/src/vtab/memory/connection.js +20 -2
  437. package/dist/src/vtab/memory/connection.js.map +1 -1
  438. package/dist/src/vtab/memory/layer/base.d.ts +12 -5
  439. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  440. package/dist/src/vtab/memory/layer/base.js +20 -9
  441. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  442. package/dist/src/vtab/memory/layer/connection.d.ts +17 -0
  443. package/dist/src/vtab/memory/layer/connection.d.ts.map +1 -1
  444. package/dist/src/vtab/memory/layer/connection.js +26 -0
  445. package/dist/src/vtab/memory/layer/connection.js.map +1 -1
  446. package/dist/src/vtab/memory/layer/manager.d.ts +156 -31
  447. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  448. package/dist/src/vtab/memory/layer/manager.js +695 -158
  449. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  450. package/dist/src/vtab/memory/layer/plan-filter.d.ts +41 -20
  451. package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
  452. package/dist/src/vtab/memory/layer/plan-filter.js +57 -27
  453. package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
  454. package/dist/src/vtab/memory/layer/row-convert.d.ts +21 -0
  455. package/dist/src/vtab/memory/layer/row-convert.d.ts.map +1 -0
  456. package/dist/src/vtab/memory/layer/row-convert.js +30 -0
  457. package/dist/src/vtab/memory/layer/row-convert.js.map +1 -0
  458. package/dist/src/vtab/memory/layer/scan-layer.d.ts +6 -3
  459. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  460. package/dist/src/vtab/memory/layer/scan-layer.js +48 -34
  461. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  462. package/dist/src/vtab/memory/layer/transaction.d.ts +142 -19
  463. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  464. package/dist/src/vtab/memory/layer/transaction.js +237 -73
  465. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  466. package/dist/src/vtab/memory/module.d.ts +14 -2
  467. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  468. package/dist/src/vtab/memory/module.js +60 -41
  469. package/dist/src/vtab/memory/module.js.map +1 -1
  470. package/dist/src/vtab/memory/table.d.ts +1 -1
  471. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  472. package/dist/src/vtab/memory/table.js +12 -4
  473. package/dist/src/vtab/memory/table.js.map +1 -1
  474. package/dist/src/vtab/memory/types.d.ts +27 -1
  475. package/dist/src/vtab/memory/types.d.ts.map +1 -1
  476. package/dist/src/vtab/memory/types.js +16 -1
  477. package/dist/src/vtab/memory/types.js.map +1 -1
  478. package/dist/src/vtab/memory/utils/primary-key.d.ts +9 -0
  479. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  480. package/dist/src/vtab/memory/utils/primary-key.js +11 -0
  481. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  482. package/dist/src/vtab/module.d.ts +63 -0
  483. package/dist/src/vtab/module.d.ts.map +1 -1
  484. package/dist/src/vtab/table.d.ts +33 -7
  485. package/dist/src/vtab/table.d.ts.map +1 -1
  486. package/dist/src/vtab/table.js.map +1 -1
  487. package/package.json +3 -3
  488. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts +0 -26
  489. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts.map +0 -1
  490. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js +0 -66
  491. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js.map +0 -1
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Column origin attribution.
3
+ *
4
+ * Maps every output attribute id reachable under a relational subtree back to the
5
+ * base-table column that minted it. `rule-filter-selectivity` uses this to route
6
+ * each conjunct of a filter-over-join predicate to the statistics of the table its
7
+ * columns actually come from, instead of declining the whole filter because its
8
+ * source spans more than one table.
9
+ *
10
+ * ## Identity — not schema — distinguishes the two sides of a self-join
11
+ *
12
+ * `ColumnOrigin.ref` is the `TableReferenceNode` instance that produced the
13
+ * attribute. `from t a join t b` yields two distinct TableReferenceNodes sharing
14
+ * ONE `TableSchema` object, so a caller asking "how many relations does this
15
+ * expression touch?" must key on `ref` identity. Keying on `table` collapses the
16
+ * two sides and mis-classifies `a.age > b.age` as a single-table predicate
17
+ * comparing a column to a constant.
18
+ *
19
+ * ## Attributes minted above a base table are deliberately absent
20
+ *
21
+ * Computed projections, aggregate outputs, `values` rows and join existence flags
22
+ * never appear in the map. A predicate over one of them has no base-table column
23
+ * statistics to consult, so the caller must treat it as unknown rather than
24
+ * mis-attribute it by column name.
25
+ *
26
+ * ## Row-merging operators are opaque
27
+ *
28
+ * A set operation and a recursive CTE both *forward* their left / base-case branch's
29
+ * attribute ids (see `analysis/attribute-provenance.ts`), but the rows behind those
30
+ * ids come from every branch. `union all` of a 4-distinct-value column with a
31
+ * 1000-distinct-value one publishes the left branch's id while carrying both
32
+ * distributions, so attributing it to the left base table alone would hand the
33
+ * caller one branch's statistics as if they described the whole relation. The walk
34
+ * therefore stops at such a node and records nothing beneath it — a conjunct over a
35
+ * union reads as unknown, exactly like one over a computed projection.
36
+ */
37
+ import { TableReferenceNode } from '../nodes/reference.js';
38
+ import type { RelationalPlanNode } from '../nodes/plan-node.js';
39
+ import type { TableSchema } from '../../schema/table.js';
40
+ /** Where a single attribute came from: a column of a specific base-table reference. */
41
+ export interface ColumnOrigin {
42
+ /** The TableReferenceNode that minted this attribute — identity is significant. */
43
+ readonly ref: TableReferenceNode;
44
+ readonly table: TableSchema;
45
+ readonly columnIndex: number;
46
+ readonly columnName: string;
47
+ }
48
+ /**
49
+ * Attribute id → originating base-table column, for every base column reachable
50
+ * under `node` via `getRelations()`.
51
+ *
52
+ * The walk descends relations only, so scalar subqueries hanging off a join
53
+ * condition or a filter predicate are NOT traversed — their columns stay out of
54
+ * the map and any conjunct referencing them reads as unknown. It also stops at a
55
+ * row-merging operator (see the file doc-comment).
56
+ */
57
+ export declare function collectColumnOrigins(node: RelationalPlanNode): Map<number, ColumnOrigin>;
58
+ //# sourceMappingURL=column-origins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-origins.d.ts","sourceRoot":"","sources":["../../../../src/planner/util/column-origins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,KAAK,EAAY,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,uFAAuF;AACvF,MAAM,WAAW,YAAY;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAoBxF"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Column origin attribution.
3
+ *
4
+ * Maps every output attribute id reachable under a relational subtree back to the
5
+ * base-table column that minted it. `rule-filter-selectivity` uses this to route
6
+ * each conjunct of a filter-over-join predicate to the statistics of the table its
7
+ * columns actually come from, instead of declining the whole filter because its
8
+ * source spans more than one table.
9
+ *
10
+ * ## Identity — not schema — distinguishes the two sides of a self-join
11
+ *
12
+ * `ColumnOrigin.ref` is the `TableReferenceNode` instance that produced the
13
+ * attribute. `from t a join t b` yields two distinct TableReferenceNodes sharing
14
+ * ONE `TableSchema` object, so a caller asking "how many relations does this
15
+ * expression touch?" must key on `ref` identity. Keying on `table` collapses the
16
+ * two sides and mis-classifies `a.age > b.age` as a single-table predicate
17
+ * comparing a column to a constant.
18
+ *
19
+ * ## Attributes minted above a base table are deliberately absent
20
+ *
21
+ * Computed projections, aggregate outputs, `values` rows and join existence flags
22
+ * never appear in the map. A predicate over one of them has no base-table column
23
+ * statistics to consult, so the caller must treat it as unknown rather than
24
+ * mis-attribute it by column name.
25
+ *
26
+ * ## Row-merging operators are opaque
27
+ *
28
+ * A set operation and a recursive CTE both *forward* their left / base-case branch's
29
+ * attribute ids (see `analysis/attribute-provenance.ts`), but the rows behind those
30
+ * ids come from every branch. `union all` of a 4-distinct-value column with a
31
+ * 1000-distinct-value one publishes the left branch's id while carrying both
32
+ * distributions, so attributing it to the left base table alone would hand the
33
+ * caller one branch's statistics as if they described the whole relation. The walk
34
+ * therefore stops at such a node and records nothing beneath it — a conjunct over a
35
+ * union reads as unknown, exactly like one over a computed projection.
36
+ */
37
+ import { TableReferenceNode } from '../nodes/reference.js';
38
+ import { SetOperationNode } from '../nodes/set-operation-node.js';
39
+ import { RecursiveCTENode } from '../nodes/recursive-cte-node.js';
40
+ /**
41
+ * Attribute id → originating base-table column, for every base column reachable
42
+ * under `node` via `getRelations()`.
43
+ *
44
+ * The walk descends relations only, so scalar subqueries hanging off a join
45
+ * condition or a filter predicate are NOT traversed — their columns stay out of
46
+ * the map and any conjunct referencing them reads as unknown. It also stops at a
47
+ * row-merging operator (see the file doc-comment).
48
+ */
49
+ export function collectColumnOrigins(node) {
50
+ const origins = new Map();
51
+ // Plan trees are DAGs (a CTE instance can be shared), so dedupe by identity.
52
+ const visited = new Set();
53
+ const stack = [node];
54
+ while (stack.length > 0) {
55
+ const n = stack.pop();
56
+ if (visited.has(n))
57
+ continue;
58
+ visited.add(n);
59
+ if (n instanceof TableReferenceNode) {
60
+ addBaseColumns(n, origins);
61
+ continue;
62
+ }
63
+ if (isRowMerging(n))
64
+ continue;
65
+ for (const rel of n.getRelations())
66
+ stack.push(rel);
67
+ }
68
+ return origins;
69
+ }
70
+ /**
71
+ * Does this node publish one branch's attribute ids over rows drawn from several
72
+ * branches? Such an id describes no single base-table column.
73
+ */
74
+ function isRowMerging(node) {
75
+ return node instanceof SetOperationNode || node instanceof RecursiveCTENode;
76
+ }
77
+ /** Zip a table reference's attributes with its schema columns (1:1 by construction). */
78
+ function addBaseColumns(ref, out) {
79
+ // TableReferenceNode builds its attributes by mapping `tableSchema.columns`
80
+ // positionally (see reference.ts), so index i describes the same column in both
81
+ // lists — the same zip `computePhysical` uses to seed update lineage.
82
+ const attrs = ref.getAttributes();
83
+ ref.tableSchema.columns.forEach((col, i) => {
84
+ const attr = attrs[i];
85
+ if (!attr)
86
+ return;
87
+ out.set(attr.id, { ref, table: ref.tableSchema, columnIndex: i, columnName: col.name });
88
+ });
89
+ }
90
+ //# sourceMappingURL=column-origins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-origins.js","sourceRoot":"","sources":["../../../../src/planner/util/column-origins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAalE;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAwB;IAC5D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAChD,6EAA6E;IAC7E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAY,CAAC;IACpC,MAAM,KAAK,GAAyB,CAAC,IAAI,CAAC,CAAC;IAE3C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACvB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEf,IAAI,CAAC,YAAY,kBAAkB,EAAE,CAAC;YACrC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3B,SAAS;QACV,CAAC;QACD,IAAI,YAAY,CAAC,CAAC,CAAC;YAAE,SAAS;QAC9B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,YAAY,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAwB;IAC7C,OAAO,IAAI,YAAY,gBAAgB,IAAI,IAAI,YAAY,gBAAgB,CAAC;AAC7E,CAAC;AAED,wFAAwF;AACxF,SAAS,cAAc,CAAC,GAAuB,EAAE,GAA8B;IAC9E,4EAA4E;IAC5E,gFAAgF;IAChF,sEAAsE;IACtE,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;IAClC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -10,6 +10,15 @@ export interface DeferredConstraintRow {
10
10
  connectionId?: string;
11
11
  contextRow?: Row;
12
12
  contextDescriptor?: RowDescriptor;
13
+ /**
14
+ * Lowercase `<schema>.<name>` as this entry's frozen evaluator names a table →
15
+ * the name that table carries now. Populated by {@link DeferredConstraintQueue.notifyTableRename}
16
+ * for renames that happen AFTER this entry was queued, and handed to the scan
17
+ * leaf via `RuntimeContext.tableNameRemap` at evaluation time. Per-entry rather
18
+ * than queue-wide because a freed name may be reused by a fresh table in the
19
+ * same transaction — only entries queued before the rename may be redirected.
20
+ */
21
+ tableRenames?: Map<string, string>;
13
22
  }
14
23
  export declare class DeferredConstraintQueue {
15
24
  private readonly db;
@@ -17,6 +26,37 @@ export declare class DeferredConstraintQueue {
17
26
  private layers;
18
27
  constructor(db: Database);
19
28
  enqueue(baseTable: string, constraintName: string, row: Row, descriptor: RowDescriptor, evaluator: (ctx: RuntimeContext) => OutputValue, connectionId?: string, contextRow?: Row, contextDescriptor?: RowDescriptor): void;
29
+ /**
30
+ * Records an `ALTER TABLE ... RENAME TO` against every entry already queued, so a
31
+ * check parked before the rename still finds its tables at commit.
32
+ *
33
+ * Two halves:
34
+ * - every pending entry learns `<schema>.<oldName>` → `newName`, composing across
35
+ * repeated renames (`pp → pp2 → pp3` leaves `main.pp` → `pp3`). Composition is
36
+ * confined to keys in the renamed table's own schema — map VALUES are bare names,
37
+ * so a same-named table in another schema must not follow this rename. An entry
38
+ * that already maps `<schema>.<oldName>` is left alone on that key: its emit-time
39
+ * table has moved on, and this rename is about whichever table holds the freed
40
+ * name now.
41
+ * - the bucket keyed by the write-time table name moves with the table, so
42
+ * {@link findConnection}'s name fallback keys off the CURRENT name.
43
+ *
44
+ * NOTE: stamps every pending entry, including entries below the current savepoint
45
+ * layer, and `rollbackLayer` does not unstamp them. Correct today because a catalog
46
+ * rename is not rolled back either — the built-in modules declare the
47
+ * `'non-transactional'` DDL tier, so `rollback to <savepoint>` (and a whole
48
+ * `rollback`) leave the rename applied. If transactional DDL ever lands for the
49
+ * native backends, this remap has to become layer-scoped alongside the catalog.
50
+ *
51
+ * NOTE: walks every queued entry per rename, and each entry owns its own map — so a
52
+ * bulk load that parks a very large number of deferred rows and then renames pays
53
+ * O(entries) per rename plus one Map per entry. Fine at today's scale (renames inside
54
+ * a write transaction are rare); if that combination ever shows up hot, share one
55
+ * copy-on-write rename map across the entries queued between two renames.
56
+ */
57
+ notifyTableRename(schemaName: string, oldName: string, newName: string): void;
58
+ /** Moves the `oldKey` bucket to `newKey`, merging per-constraint row lists into an existing destination. */
59
+ private rekeyBucket;
20
60
  beginLayer(): void;
21
61
  rollbackLayer(): void;
22
62
  releaseLayer(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"deferred-constraint-queue.d.ts","sourceRoot":"","sources":["../../../src/runtime/deferred-constraint-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAY,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AASpD,MAAM,WAAW,qBAAqB;IACrC,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,aAAa,CAAC;IAC1B,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,WAAW,CAAC;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,iBAAiB,CAAC,EAAE,aAAa,CAAC;CAClC;AAID,qBAAa,uBAAuB;IAIvB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAH/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAChE,OAAO,CAAC,MAAM,CAAmC;gBAEpB,EAAE,EAAE,QAAQ;IAEzC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,EAAE,aAAa,GAAG,IAAI;IAiB1N,UAAU,IAAI,IAAI;IAIlB,aAAa,IAAI,IAAI;IAIrB,YAAY,IAAI,IAAI;IAOpB,KAAK,IAAI,IAAI;IAKP,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YAyBxB,aAAa;IAoB3B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,QAAQ;IA2BhB,OAAO,CAAC,KAAK;IAYb,OAAO,CAAC,cAAc;CA2BtB"}
1
+ {"version":3,"file":"deferred-constraint-queue.d.ts","sourceRoot":"","sources":["../../../src/runtime/deferred-constraint-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAY,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AASpD,MAAM,WAAW,qBAAqB;IACrC,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,aAAa,CAAC;IAC1B,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,WAAW,CAAC;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,iBAAiB,CAAC,EAAE,aAAa,CAAC;IAClC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAID,qBAAa,uBAAuB;IAIvB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAH/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAChE,OAAO,CAAC,MAAM,CAAmC;gBAEpB,EAAE,EAAE,QAAQ;IAEzC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,EAAE,aAAa,GAAG,IAAI;IAiB1N;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IA4B7E,4GAA4G;IAC5G,OAAO,CAAC,WAAW;IAgBnB,UAAU,IAAI,IAAI;IAIlB,aAAa,IAAI,IAAI;IAIrB,YAAY,IAAI,IAAI;IAOpB,KAAK,IAAI,IAAI;IAKP,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YA4BxB,aAAa;IA0B3B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,QAAQ;IA4BhB,OAAO,CAAC,KAAK;IAYb,OAAO,CAAC,cAAc;CAkCtB"}
@@ -29,6 +29,80 @@ export class DeferredConstraintQueue {
29
29
  contextDescriptor
30
30
  });
31
31
  }
32
+ /**
33
+ * Records an `ALTER TABLE ... RENAME TO` against every entry already queued, so a
34
+ * check parked before the rename still finds its tables at commit.
35
+ *
36
+ * Two halves:
37
+ * - every pending entry learns `<schema>.<oldName>` → `newName`, composing across
38
+ * repeated renames (`pp → pp2 → pp3` leaves `main.pp` → `pp3`). Composition is
39
+ * confined to keys in the renamed table's own schema — map VALUES are bare names,
40
+ * so a same-named table in another schema must not follow this rename. An entry
41
+ * that already maps `<schema>.<oldName>` is left alone on that key: its emit-time
42
+ * table has moved on, and this rename is about whichever table holds the freed
43
+ * name now.
44
+ * - the bucket keyed by the write-time table name moves with the table, so
45
+ * {@link findConnection}'s name fallback keys off the CURRENT name.
46
+ *
47
+ * NOTE: stamps every pending entry, including entries below the current savepoint
48
+ * layer, and `rollbackLayer` does not unstamp them. Correct today because a catalog
49
+ * rename is not rolled back either — the built-in modules declare the
50
+ * `'non-transactional'` DDL tier, so `rollback to <savepoint>` (and a whole
51
+ * `rollback`) leave the rename applied. If transactional DDL ever lands for the
52
+ * native backends, this remap has to become layer-scoped alongside the catalog.
53
+ *
54
+ * NOTE: walks every queued entry per rename, and each entry owns its own map — so a
55
+ * bulk load that parks a very large number of deferred rows and then renames pays
56
+ * O(entries) per rename plus one Map per entry. Fine at today's scale (renames inside
57
+ * a write transaction are rare); if that combination ever shows up hot, share one
58
+ * copy-on-write rename map across the entries queued between two renames.
59
+ */
60
+ notifyTableRename(schemaName, oldName, newName) {
61
+ const oldKey = `${schemaName}.${oldName}`.toLowerCase();
62
+ const newKey = `${schemaName}.${newName}`.toLowerCase();
63
+ const oldLower = oldName.toLowerCase();
64
+ const schemaPrefix = `${schemaName.toLowerCase()}.`;
65
+ const stampStore = (store) => {
66
+ for (const constraints of store.values()) {
67
+ for (const rows of constraints.values()) {
68
+ for (const entry of rows) {
69
+ const renames = entry.tableRenames ?? new Map();
70
+ for (const [key, current] of renames) {
71
+ if (key.startsWith(schemaPrefix) && current.toLowerCase() === oldLower) {
72
+ renames.set(key, newName);
73
+ }
74
+ }
75
+ if (!renames.has(oldKey))
76
+ renames.set(oldKey, newName);
77
+ entry.tableRenames = renames;
78
+ }
79
+ }
80
+ }
81
+ this.rekeyBucket(store, oldKey, newKey);
82
+ };
83
+ stampStore(this.entries);
84
+ for (const layer of this.layers)
85
+ stampStore(layer);
86
+ }
87
+ /** Moves the `oldKey` bucket to `newKey`, merging per-constraint row lists into an existing destination. */
88
+ rekeyBucket(store, oldKey, newKey) {
89
+ if (oldKey === newKey)
90
+ return;
91
+ const bucket = store.get(oldKey);
92
+ if (!bucket)
93
+ return;
94
+ store.delete(oldKey);
95
+ const dest = store.get(newKey);
96
+ if (!dest) {
97
+ store.set(newKey, bucket);
98
+ return;
99
+ }
100
+ for (const [constraintName, rows] of bucket) {
101
+ if (!dest.has(constraintName))
102
+ dest.set(constraintName, []);
103
+ dest.get(constraintName).push(...rows);
104
+ }
105
+ }
32
106
  beginLayer() {
33
107
  this.layers.push(new Map());
34
108
  }
@@ -65,6 +139,9 @@ export class DeferredConstraintQueue {
65
139
  for (const entry of rows) {
66
140
  const connection = this.findConnection(activeConnections, table, entry.connectionId);
67
141
  runtimeCtx.activeConnection = connection;
142
+ // Per entry: the evaluator was frozen at row-write time, so any table it
143
+ // names by the pre-rename name resolves through this map in the scan leaf.
144
+ runtimeCtx.tableNameRemap = entry.tableRenames;
68
145
  await this.evaluateEntry(runtimeCtx, entry);
69
146
  }
70
147
  }
@@ -81,6 +158,12 @@ export class DeferredConstraintQueue {
81
158
  try {
82
159
  slot.set(evaluationRow);
83
160
  const value = await entry.evaluator(runtimeCtx);
161
+ // NOTE: unreachable from today's two enqueue sites (runtime/emit/constraint-check.ts
162
+ // and core/derived-row-validator.ts) — both wrap their evaluator so it throws its
163
+ // own message, attributed identically to the immediate path. This stays as the
164
+ // safety net for any future caller that queues a raw evaluator; if that never
165
+ // happens, it can go, and if it does, prefer teaching the caller to self-attribute
166
+ // over enriching this generic (name-only) message.
84
167
  if (value !== null && !isTruthy(value)) {
85
168
  throw new QuereusError(`CHECK constraint failed: ${entry.constraintName}`, StatusCode.CONSTRAINT);
86
169
  }
@@ -116,6 +199,7 @@ export class DeferredConstraintQueue {
116
199
  connectionId: entry.connectionId,
117
200
  contextRow: entry.contextRow ? entry.contextRow.slice() : undefined,
118
201
  contextDescriptor: entry.contextDescriptor,
202
+ tableRenames: entry.tableRenames,
119
203
  })));
120
204
  }
121
205
  }
@@ -146,6 +230,13 @@ export class DeferredConstraintQueue {
146
230
  }
147
231
  throw new QuereusError(`Deferred constraint execution could not find connectionId=${preferredId} for table ${tableKey}`, StatusCode.INTERNAL);
148
232
  }
233
+ // NOTE: this name fallback is only reached when the enqueue site had no
234
+ // `activeConnection` to stamp. `tableKey` is the table's CURRENT name, not the
235
+ // write-time one: `notifyTableRename` moves the bucket whenever an
236
+ // `ALTER TABLE ... RENAME TO` lands mid-transaction, matching the modules that
237
+ // re-key their connections on rename (see MemoryTableManager.rekeyRegisteredConnections).
238
+ // Were the two to drift apart, the entry would evaluate with no active connection and
239
+ // read committed state instead of the transaction's own writes.
149
240
  const normalized = tableKey.toLowerCase();
150
241
  const simple = normalized.includes('.') ? normalized.substring(normalized.lastIndexOf('.') + 1) : normalized;
151
242
  const matches = connections.filter(conn => {
@@ -1 +1 @@
1
- {"version":3,"file":"deferred-constraint-queue.js","sourceRoot":"","sources":["../../../src/runtime/deferred-constraint-queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deferred-constraint-queue.js","sourceRoot":"","sources":["../../../src/runtime/deferred-constraint-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { ScalarPlanNode } from '../../planner/nodes/plan-node.js';
2
+ import type { AggregateArgBinding, FunctionSchema } from '../../schema/function.js';
3
+ import { type SqlValue } from '../../common/types.js';
4
+ import type { EmissionContext } from '../emission-context.js';
5
+ /**
6
+ * Emit-time setup shared by the stream and hash aggregate emitters: both walk the
7
+ * same `{ expression, alias }` aggregate list and need the same per-aggregate
8
+ * pre-resolutions. Everything here runs ONCE per emit — never per row.
9
+ *
10
+ * {@link argComparisonContext} is shared more widely still: the window emitter
11
+ * binds its own registry's comparison-sensitive functions from the same context,
12
+ * so `min(x) over (…)` and the `min(x)` aggregate read the call site identically.
13
+ */
14
+ /** One entry of a stream/hash aggregate node's `aggregates` list. */
15
+ export type AggregateExpr = {
16
+ readonly expression: ScalarPlanNode;
17
+ readonly alias: string;
18
+ };
19
+ /** Compares one aggregate's argument values for DISTINCT tracking (scalar for a
20
+ * single argument, element-wise for several, constant for `count(*)`). */
21
+ export type DistinctComparator = (a: SqlValue | SqlValue[], b: SqlValue | SqlValue[]) => number;
22
+ /** The declared logical type and resolved collation of one aggregate or window
23
+ * argument at this call site — the comparison context `bindArgs` (aggregate and
24
+ * window alike) and DISTINCT tracking all rank under. A missing collation name
25
+ * stays undefined, which every consumer reads as BINARY. The logical type is
26
+ * always known here (narrower than {@link AggregateArgBinding}, which allows an
27
+ * untyped argument), so callers may compare with it directly. */
28
+ export declare function argComparisonContext(arg: ScalarPlanNode, ctx: EmissionContext): Required<Pick<AggregateArgBinding, 'logicalType'>> & AggregateArgBinding;
29
+ /**
30
+ * Resolve each aggregate's schema and bind it to its call site's argument types and
31
+ * collations, so a comparison-sensitive aggregate (min/max via
32
+ * {@link import('../../schema/function.js').AggregateFunctionSchema.bindArgs}) steps
33
+ * and merges by the argument's semantic order. Nothing in the per-row path then has
34
+ * to resolve a type or a collation.
35
+ */
36
+ export declare function bindAggregateSchemas(aggregates: readonly AggregateExpr[], ctx: EmissionContext): {
37
+ schemas: FunctionSchema[];
38
+ distinctFlags: boolean[];
39
+ };
40
+ /** Pre-resolved typed comparators for DISTINCT aggregate argument tracking. */
41
+ export declare function buildDistinctComparators(aggregates: readonly AggregateExpr[], ctx: EmissionContext): DistinctComparator[];
42
+ /**
43
+ * Per-aggregate: may `coerceForAggregate` be skipped for this call site? Skipped when
44
+ * the aggregate never coerces anyway, when every argument is already numeric, or when
45
+ * every argument type carries semantic ordering (TIMESPAN/JSON) — the numeric-string
46
+ * conversion must never run ahead of a type-aware comparator.
47
+ */
48
+ export declare function computeAggregateSkipCoercion(aggregates: readonly AggregateExpr[]): boolean[];
49
+ //# sourceMappingURL=aggregate-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate-setup.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/aggregate-setup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAKpF,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;;;;;GAQG;AAEH,qEAAqE;AACrE,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5F;2EAC2E;AAC3E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,MAAM,CAAC;AAEhG;;;;;kEAKkE;AAClE,wBAAgB,oBAAoB,CACnC,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,GAClB,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC,GAAG,mBAAmB,CAM1E;AAmBD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,SAAS,aAAa,EAAE,EACpC,GAAG,EAAE,eAAe,GAClB;IAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IAAC,aAAa,EAAE,OAAO,EAAE,CAAA;CAAE,CAgBzD;AAED,+EAA+E;AAC/E,wBAAgB,wBAAwB,CACvC,UAAU,EAAE,SAAS,aAAa,EAAE,EACpC,GAAG,EAAE,eAAe,GAClB,kBAAkB,EAAE,CAqBtB;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,EAAE,CAa5F"}
@@ -0,0 +1,99 @@
1
+ import { AggregateFunctionCallNode } from '../../planner/nodes/aggregate-function.js';
2
+ import { isAggregateFunctionSchema } from '../../schema/function.js';
3
+ import { bindAggregateSchema } from '../../func/registration.js';
4
+ import { createTypedComparator, hasSemanticOrdering } from '../../util/comparison.js';
5
+ import { StatusCode } from '../../common/types.js';
6
+ import { quereusError } from '../../common/errors.js';
7
+ /** The declared logical type and resolved collation of one aggregate or window
8
+ * argument at this call site — the comparison context `bindArgs` (aggregate and
9
+ * window alike) and DISTINCT tracking all rank under. A missing collation name
10
+ * stays undefined, which every consumer reads as BINARY. The logical type is
11
+ * always known here (narrower than {@link AggregateArgBinding}, which allows an
12
+ * untyped argument), so callers may compare with it directly. */
13
+ export function argComparisonContext(arg, ctx) {
14
+ const argType = arg.getType();
15
+ return {
16
+ logicalType: argType.logicalType,
17
+ collation: argType.collationName ? ctx.resolveCollation(argType.collationName) : undefined,
18
+ };
19
+ }
20
+ function argComparator(arg, ctx) {
21
+ const { logicalType, collation } = argComparisonContext(arg, ctx);
22
+ return createTypedComparator(logicalType, collation);
23
+ }
24
+ /** The aggregate call at `agg`, or an INTERNAL error when the plan holds something else. */
25
+ function requireAggregateCall(agg) {
26
+ const funcNode = agg.expression;
27
+ if (!(funcNode instanceof AggregateFunctionCallNode)) {
28
+ quereusError(`Expected AggregateFunctionCallNode but got ${funcNode.constructor.name}`, StatusCode.INTERNAL);
29
+ }
30
+ return funcNode;
31
+ }
32
+ /**
33
+ * Resolve each aggregate's schema and bind it to its call site's argument types and
34
+ * collations, so a comparison-sensitive aggregate (min/max via
35
+ * {@link import('../../schema/function.js').AggregateFunctionSchema.bindArgs}) steps
36
+ * and merges by the argument's semantic order. Nothing in the per-row path then has
37
+ * to resolve a type or a collation.
38
+ */
39
+ export function bindAggregateSchemas(aggregates, ctx) {
40
+ const schemas = [];
41
+ const distinctFlags = [];
42
+ for (const agg of aggregates) {
43
+ const funcNode = requireAggregateCall(agg);
44
+ const funcSchema = funcNode.functionSchema;
45
+ if (!isAggregateFunctionSchema(funcSchema)) {
46
+ quereusError(`Function ${funcNode.functionName || 'unknown'} is not an aggregate function`, StatusCode.INTERNAL);
47
+ }
48
+ schemas.push(bindAggregateSchema(funcSchema, (funcNode.args || []).map(arg => argComparisonContext(arg, ctx))));
49
+ distinctFlags.push(funcNode.isDistinct);
50
+ }
51
+ return { schemas, distinctFlags };
52
+ }
53
+ /** Pre-resolved typed comparators for DISTINCT aggregate argument tracking. */
54
+ export function buildDistinctComparators(aggregates, ctx) {
55
+ return aggregates.map(agg => {
56
+ const funcNode = agg.expression;
57
+ if (!(funcNode instanceof AggregateFunctionCallNode))
58
+ return () => 0;
59
+ const args = funcNode.args || [];
60
+ if (args.length === 1) {
61
+ const cmp = argComparator(args[0], ctx);
62
+ return (a, b) => cmp(a, b);
63
+ }
64
+ if (args.length === 0)
65
+ return () => 0; // count(*) — nothing to distinguish
66
+ const argComparators = args.map(arg => argComparator(arg, ctx));
67
+ return (a, b) => {
68
+ const arrA = a;
69
+ const arrB = b;
70
+ for (let i = 0; i < argComparators.length; i++) {
71
+ const cmp = argComparators[i](arrA[i], arrB[i]);
72
+ if (cmp !== 0)
73
+ return cmp;
74
+ }
75
+ return 0;
76
+ };
77
+ });
78
+ }
79
+ /**
80
+ * Per-aggregate: may `coerceForAggregate` be skipped for this call site? Skipped when
81
+ * the aggregate never coerces anyway, when every argument is already numeric, or when
82
+ * every argument type carries semantic ordering (TIMESPAN/JSON) — the numeric-string
83
+ * conversion must never run ahead of a type-aware comparator.
84
+ */
85
+ export function computeAggregateSkipCoercion(aggregates) {
86
+ return aggregates.map(agg => {
87
+ const funcNode = agg.expression;
88
+ if (!(funcNode instanceof AggregateFunctionCallNode))
89
+ return false;
90
+ const funcName = (funcNode.functionName || '').toUpperCase();
91
+ // COUNT, GROUP_CONCAT and JSON_* never coerce their arguments.
92
+ if (funcName === 'COUNT' || funcName === 'GROUP_CONCAT' || funcName.startsWith('JSON_'))
93
+ return false;
94
+ const args = funcNode.args || [];
95
+ return args.length > 0 && (args.every(arg => arg.getType().logicalType.isNumeric)
96
+ || args.every(arg => hasSemanticOrdering(arg.getType().logicalType)));
97
+ });
98
+ }
99
+ //# sourceMappingURL=aggregate-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate-setup.js","sourceRoot":"","sources":["../../../../src/runtime/emit/aggregate-setup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,kCAAkC,CAAC;AAWhF,OAAO,EAAY,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGzE,eAAO,MAAM,MAAM,0BAAkC,CAAC;AAMtD,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAgB3D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAwhBhG"}
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,kCAAkC,CAAC;AAYhF,OAAO,EAAY,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGzE,eAAO,MAAM,MAAM,0BAAkC,CAAC;AAMtD,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAgB3D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAmdhG"}