@quereus/quereus 4.3.2 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/README.md +5 -0
  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-external-changes.d.ts +2 -2
  10. package/dist/src/core/database-external-changes.d.ts.map +1 -1
  11. package/dist/src/core/database-external-changes.js +12 -9
  12. package/dist/src/core/database-external-changes.js.map +1 -1
  13. package/dist/src/core/database-materialized-views-apply.d.ts +156 -14
  14. package/dist/src/core/database-materialized-views-apply.d.ts.map +1 -1
  15. package/dist/src/core/database-materialized-views-apply.js +370 -65
  16. package/dist/src/core/database-materialized-views-apply.js.map +1 -1
  17. package/dist/src/core/database-materialized-views-plan-builders.d.ts +66 -1
  18. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
  19. package/dist/src/core/database-materialized-views-plan-builders.js +368 -8
  20. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
  21. package/dist/src/core/database-materialized-views-plans.d.ts +257 -30
  22. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
  23. package/dist/src/core/database-materialized-views.d.ts +99 -42
  24. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  25. package/dist/src/core/database-materialized-views.js +198 -121
  26. package/dist/src/core/database-materialized-views.js.map +1 -1
  27. package/dist/src/core/database.d.ts +5 -0
  28. package/dist/src/core/database.d.ts.map +1 -1
  29. package/dist/src/core/database.js +41 -18
  30. package/dist/src/core/database.js.map +1 -1
  31. package/dist/src/core/internal-statement-cache.d.ts +18 -0
  32. package/dist/src/core/internal-statement-cache.d.ts.map +1 -0
  33. package/dist/src/core/internal-statement-cache.js +211 -0
  34. package/dist/src/core/internal-statement-cache.js.map +1 -0
  35. package/dist/src/func/builtins/aggregate.d.ts +13 -12
  36. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  37. package/dist/src/func/builtins/aggregate.js +146 -62
  38. package/dist/src/func/builtins/aggregate.js.map +1 -1
  39. package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
  40. package/dist/src/func/builtins/builtin-window-functions.js +63 -48
  41. package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
  42. package/dist/src/func/registration.d.ts +19 -1
  43. package/dist/src/func/registration.d.ts.map +1 -1
  44. package/dist/src/func/registration.js +41 -0
  45. package/dist/src/func/registration.js.map +1 -1
  46. package/dist/src/index.d.ts +8 -8
  47. package/dist/src/index.d.ts.map +1 -1
  48. package/dist/src/index.js +12 -11
  49. package/dist/src/index.js.map +1 -1
  50. package/dist/src/parser/parser.d.ts +6 -0
  51. package/dist/src/parser/parser.d.ts.map +1 -1
  52. package/dist/src/parser/parser.js +45 -34
  53. package/dist/src/parser/parser.js.map +1 -1
  54. package/dist/src/planner/analysis/comparison-collation.d.ts +2 -0
  55. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
  56. package/dist/src/planner/analysis/comparison-collation.js +1 -1
  57. package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
  58. package/dist/src/planner/analysis/equi-correlation.d.ts +26 -0
  59. package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -0
  60. package/dist/src/planner/analysis/equi-correlation.js +62 -0
  61. package/dist/src/planner/analysis/equi-correlation.js.map +1 -0
  62. package/dist/src/planner/analysis/expression-fingerprint.d.ts.map +1 -1
  63. package/dist/src/planner/analysis/expression-fingerprint.js +29 -0
  64. package/dist/src/planner/analysis/expression-fingerprint.js.map +1 -1
  65. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +60 -18
  66. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  67. package/dist/src/planner/analysis/query-rewrite-matcher.js +95 -42
  68. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  69. package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -1
  70. package/dist/src/planner/analysis/sat-checker.js +43 -4
  71. package/dist/src/planner/analysis/sat-checker.js.map +1 -1
  72. package/dist/src/planner/analysis/scalar-subqueries.d.ts +28 -0
  73. package/dist/src/planner/analysis/scalar-subqueries.d.ts.map +1 -0
  74. package/dist/src/planner/analysis/scalar-subqueries.js +60 -0
  75. package/dist/src/planner/analysis/scalar-subqueries.js.map +1 -0
  76. package/dist/src/planner/building/delete.d.ts.map +1 -1
  77. package/dist/src/planner/building/delete.js +10 -3
  78. package/dist/src/planner/building/delete.js.map +1 -1
  79. package/dist/src/planner/building/expression.d.ts.map +1 -1
  80. package/dist/src/planner/building/expression.js +87 -6
  81. package/dist/src/planner/building/expression.js.map +1 -1
  82. package/dist/src/planner/building/foreign-key-builder.d.ts +44 -1
  83. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  84. package/dist/src/planner/building/foreign-key-builder.js +54 -0
  85. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  86. package/dist/src/planner/building/insert.d.ts.map +1 -1
  87. package/dist/src/planner/building/insert.js +9 -12
  88. package/dist/src/planner/building/insert.js.map +1 -1
  89. package/dist/src/planner/building/select.d.ts.map +1 -1
  90. package/dist/src/planner/building/select.js +15 -1
  91. package/dist/src/planner/building/select.js.map +1 -1
  92. package/dist/src/planner/building/update.d.ts.map +1 -1
  93. package/dist/src/planner/building/update.js +13 -4
  94. package/dist/src/planner/building/update.js.map +1 -1
  95. package/dist/src/planner/building/with.d.ts.map +1 -1
  96. package/dist/src/planner/building/with.js +5 -8
  97. package/dist/src/planner/building/with.js.map +1 -1
  98. package/dist/src/planner/cache/materialization-advisory.d.ts +33 -0
  99. package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
  100. package/dist/src/planner/cache/materialization-advisory.js +164 -28
  101. package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
  102. package/dist/src/planner/cache/reference-graph.d.ts +0 -4
  103. package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
  104. package/dist/src/planner/cache/reference-graph.js +5 -13
  105. package/dist/src/planner/cache/reference-graph.js.map +1 -1
  106. package/dist/src/planner/cost/index.d.ts +28 -7
  107. package/dist/src/planner/cost/index.d.ts.map +1 -1
  108. package/dist/src/planner/cost/index.js +26 -0
  109. package/dist/src/planner/cost/index.js.map +1 -1
  110. package/dist/src/planner/framework/pass.js +3 -3
  111. package/dist/src/planner/nodes/cache-node.d.ts +18 -2
  112. package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
  113. package/dist/src/planner/nodes/cache-node.js +42 -3
  114. package/dist/src/planner/nodes/cache-node.js.map +1 -1
  115. package/dist/src/planner/nodes/cte-node.d.ts +15 -1
  116. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  117. package/dist/src/planner/nodes/cte-node.js +12 -2
  118. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  119. package/dist/src/planner/nodes/dml-executor-node.d.ts +0 -9
  120. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  121. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  122. package/dist/src/planner/nodes/recursive-cte-node.d.ts +30 -1
  123. package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
  124. package/dist/src/planner/nodes/recursive-cte-node.js +30 -3
  125. package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
  126. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  127. package/dist/src/planner/nodes/scalar.js +26 -3
  128. package/dist/src/planner/nodes/scalar.js.map +1 -1
  129. package/dist/src/planner/optimizer.d.ts.map +1 -1
  130. package/dist/src/planner/optimizer.js +129 -8
  131. package/dist/src/planner/optimizer.js.map +1 -1
  132. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  133. package/dist/src/planner/rules/access/rule-select-access-path.js +43 -18
  134. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  135. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
  136. package/dist/src/planner/rules/cache/rule-cte-optimization.js +8 -1
  137. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
  138. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -1
  139. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +72 -54
  140. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  141. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts.map +1 -1
  142. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js +6 -0
  143. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +1 -1
  144. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts +25 -0
  145. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -0
  146. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +176 -0
  147. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -0
  148. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts +31 -0
  149. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts.map +1 -0
  150. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js +68 -0
  151. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js.map +1 -0
  152. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
  153. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +1 -54
  154. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
  155. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +8 -1
  156. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
  157. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts +191 -0
  158. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts.map +1 -0
  159. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js +627 -0
  160. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js.map +1 -0
  161. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts +10 -1
  162. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  163. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +242 -51
  164. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  165. package/dist/src/runtime/cache/shared-cache.d.ts +7 -0
  166. package/dist/src/runtime/cache/shared-cache.d.ts.map +1 -1
  167. package/dist/src/runtime/cache/shared-cache.js +34 -1
  168. package/dist/src/runtime/cache/shared-cache.js.map +1 -1
  169. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  170. package/dist/src/runtime/deferred-constraint-queue.js +10 -0
  171. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  172. package/dist/src/runtime/emit/aggregate-setup.d.ts +49 -0
  173. package/dist/src/runtime/emit/aggregate-setup.d.ts.map +1 -0
  174. package/dist/src/runtime/emit/aggregate-setup.js +99 -0
  175. package/dist/src/runtime/emit/aggregate-setup.js.map +1 -0
  176. package/dist/src/runtime/emit/aggregate.d.ts +2 -3
  177. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  178. package/dist/src/runtime/emit/aggregate.js +10 -84
  179. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  180. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  181. package/dist/src/runtime/emit/alter-table.js +348 -165
  182. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  183. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  184. package/dist/src/runtime/emit/asof-scan.js +6 -0
  185. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  186. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  187. package/dist/src/runtime/emit/between.js +32 -3
  188. package/dist/src/runtime/emit/between.js.map +1 -1
  189. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  190. package/dist/src/runtime/emit/binary.js +22 -2
  191. package/dist/src/runtime/emit/binary.js.map +1 -1
  192. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  193. package/dist/src/runtime/emit/bloom-join.js +24 -3
  194. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  195. package/dist/src/runtime/emit/cache.d.ts +7 -3
  196. package/dist/src/runtime/emit/cache.d.ts.map +1 -1
  197. package/dist/src/runtime/emit/cache.js +23 -6
  198. package/dist/src/runtime/emit/cache.js.map +1 -1
  199. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  200. package/dist/src/runtime/emit/cast.js +10 -23
  201. package/dist/src/runtime/emit/cast.js.map +1 -1
  202. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  203. package/dist/src/runtime/emit/constraint-check.js +41 -44
  204. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  205. package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
  206. package/dist/src/runtime/emit/create-view.js +6 -0
  207. package/dist/src/runtime/emit/create-view.js.map +1 -1
  208. package/dist/src/runtime/emit/cte.d.ts.map +1 -1
  209. package/dist/src/runtime/emit/cte.js +43 -20
  210. package/dist/src/runtime/emit/cte.js.map +1 -1
  211. package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
  212. package/dist/src/runtime/emit/distinct.js +6 -3
  213. package/dist/src/runtime/emit/distinct.js.map +1 -1
  214. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  215. package/dist/src/runtime/emit/dml-executor.js +241 -115
  216. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  217. package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
  218. package/dist/src/runtime/emit/hash-aggregate.js +16 -65
  219. package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
  220. package/dist/src/runtime/emit/insert.d.ts.map +1 -1
  221. package/dist/src/runtime/emit/insert.js +18 -7
  222. package/dist/src/runtime/emit/insert.js.map +1 -1
  223. package/dist/src/runtime/emit/join.js +5 -0
  224. package/dist/src/runtime/emit/join.js.map +1 -1
  225. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +14 -1
  226. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  227. package/dist/src/runtime/emit/materialized-view-helpers.js +38 -7
  228. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  229. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  230. package/dist/src/runtime/emit/materialized-view.js +47 -6
  231. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  232. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  233. package/dist/src/runtime/emit/merge-join.js +18 -8
  234. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  235. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  236. package/dist/src/runtime/emit/recursive-cte.js +59 -1
  237. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  238. package/dist/src/runtime/emit/set-object-tags.d.ts +8 -0
  239. package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -1
  240. package/dist/src/runtime/emit/set-object-tags.js +8 -0
  241. package/dist/src/runtime/emit/set-object-tags.js.map +1 -1
  242. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  243. package/dist/src/runtime/emit/set-operation.js +7 -4
  244. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  245. package/dist/src/runtime/emit/sort.d.ts.map +1 -1
  246. package/dist/src/runtime/emit/sort.js +5 -2
  247. package/dist/src/runtime/emit/sort.js.map +1 -1
  248. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  249. package/dist/src/runtime/emit/subquery.js +113 -13
  250. package/dist/src/runtime/emit/subquery.js.map +1 -1
  251. package/dist/src/runtime/emit/temporal-arithmetic.d.ts +7 -0
  252. package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -1
  253. package/dist/src/runtime/emit/temporal-arithmetic.js +15 -7
  254. package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -1
  255. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  256. package/dist/src/runtime/emit/update.js +44 -3
  257. package/dist/src/runtime/emit/update.js.map +1 -1
  258. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  259. package/dist/src/runtime/emit/window.js +72 -55
  260. package/dist/src/runtime/emit/window.js.map +1 -1
  261. package/dist/src/runtime/foreign-key-actions.d.ts +36 -1
  262. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  263. package/dist/src/runtime/foreign-key-actions.js +238 -116
  264. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  265. package/dist/src/runtime/parallel-driver.d.ts +20 -1
  266. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  267. package/dist/src/runtime/parallel-driver.js +23 -1
  268. package/dist/src/runtime/parallel-driver.js.map +1 -1
  269. package/dist/src/runtime/types.d.ts +54 -0
  270. package/dist/src/runtime/types.d.ts.map +1 -1
  271. package/dist/src/runtime/types.js.map +1 -1
  272. package/dist/src/schema/catalog-persistability.d.ts +58 -0
  273. package/dist/src/schema/catalog-persistability.d.ts.map +1 -0
  274. package/dist/src/schema/catalog-persistability.js +87 -0
  275. package/dist/src/schema/catalog-persistability.js.map +1 -0
  276. package/dist/src/schema/catalog.d.ts +17 -1
  277. package/dist/src/schema/catalog.d.ts.map +1 -1
  278. package/dist/src/schema/catalog.js +25 -3
  279. package/dist/src/schema/catalog.js.map +1 -1
  280. package/dist/src/schema/constraint-builder.d.ts +20 -22
  281. package/dist/src/schema/constraint-builder.d.ts.map +1 -1
  282. package/dist/src/schema/constraint-builder.js +43 -36
  283. package/dist/src/schema/constraint-builder.js.map +1 -1
  284. package/dist/src/schema/ddl-generator.d.ts +23 -0
  285. package/dist/src/schema/ddl-generator.d.ts.map +1 -1
  286. package/dist/src/schema/ddl-generator.js +27 -0
  287. package/dist/src/schema/ddl-generator.js.map +1 -1
  288. package/dist/src/schema/function.d.ts +109 -1
  289. package/dist/src/schema/function.d.ts.map +1 -1
  290. package/dist/src/schema/function.js.map +1 -1
  291. package/dist/src/schema/manager.d.ts +28 -0
  292. package/dist/src/schema/manager.d.ts.map +1 -1
  293. package/dist/src/schema/manager.js +82 -14
  294. package/dist/src/schema/manager.js.map +1 -1
  295. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  296. package/dist/src/schema/schema-differ.js +51 -12
  297. package/dist/src/schema/schema-differ.js.map +1 -1
  298. package/dist/src/schema/unique-enforcement.d.ts +31 -0
  299. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  300. package/dist/src/schema/unique-enforcement.js +37 -1
  301. package/dist/src/schema/unique-enforcement.js.map +1 -1
  302. package/dist/src/schema/window-function.d.ts +30 -10
  303. package/dist/src/schema/window-function.d.ts.map +1 -1
  304. package/dist/src/schema/window-function.js +20 -16
  305. package/dist/src/schema/window-function.js.map +1 -1
  306. package/dist/src/types/cast-semantics.d.ts +43 -0
  307. package/dist/src/types/cast-semantics.d.ts.map +1 -0
  308. package/dist/src/types/cast-semantics.js +59 -0
  309. package/dist/src/types/cast-semantics.js.map +1 -0
  310. package/dist/src/types/index.d.ts +1 -1
  311. package/dist/src/types/index.d.ts.map +1 -1
  312. package/dist/src/types/index.js +1 -1
  313. package/dist/src/types/index.js.map +1 -1
  314. package/dist/src/types/json-type.d.ts.map +1 -1
  315. package/dist/src/types/json-type.js +31 -10
  316. package/dist/src/types/json-type.js.map +1 -1
  317. package/dist/src/types/logical-type.d.ts +22 -0
  318. package/dist/src/types/logical-type.d.ts.map +1 -1
  319. package/dist/src/types/logical-type.js.map +1 -1
  320. package/dist/src/types/temporal-types.d.ts.map +1 -1
  321. package/dist/src/types/temporal-types.js +33 -11
  322. package/dist/src/types/temporal-types.js.map +1 -1
  323. package/dist/src/types/validation.d.ts +39 -1
  324. package/dist/src/types/validation.d.ts.map +1 -1
  325. package/dist/src/types/validation.js +60 -0
  326. package/dist/src/types/validation.js.map +1 -1
  327. package/dist/src/util/ast-spine-clone.d.ts +23 -0
  328. package/dist/src/util/ast-spine-clone.d.ts.map +1 -0
  329. package/dist/src/util/ast-spine-clone.js +41 -0
  330. package/dist/src/util/ast-spine-clone.js.map +1 -0
  331. package/dist/src/util/coercion.d.ts +13 -0
  332. package/dist/src/util/coercion.d.ts.map +1 -1
  333. package/dist/src/util/coercion.js +10 -1
  334. package/dist/src/util/coercion.js.map +1 -1
  335. package/dist/src/util/comparison.d.ts +89 -0
  336. package/dist/src/util/comparison.d.ts.map +1 -1
  337. package/dist/src/util/comparison.js +156 -27
  338. package/dist/src/util/comparison.js.map +1 -1
  339. package/dist/src/vtab/manifest.d.ts +7 -0
  340. package/dist/src/vtab/manifest.d.ts.map +1 -1
  341. package/dist/src/vtab/memory/connection.d.ts +14 -1
  342. package/dist/src/vtab/memory/connection.d.ts.map +1 -1
  343. package/dist/src/vtab/memory/connection.js +20 -2
  344. package/dist/src/vtab/memory/connection.js.map +1 -1
  345. package/dist/src/vtab/memory/layer/base.d.ts +6 -1
  346. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  347. package/dist/src/vtab/memory/layer/base.js +14 -5
  348. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  349. package/dist/src/vtab/memory/layer/connection.d.ts +17 -0
  350. package/dist/src/vtab/memory/layer/connection.d.ts.map +1 -1
  351. package/dist/src/vtab/memory/layer/connection.js +26 -0
  352. package/dist/src/vtab/memory/layer/connection.js.map +1 -1
  353. package/dist/src/vtab/memory/layer/manager.d.ts +96 -13
  354. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  355. package/dist/src/vtab/memory/layer/manager.js +595 -119
  356. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  357. package/dist/src/vtab/memory/layer/plan-filter.d.ts +41 -20
  358. package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
  359. package/dist/src/vtab/memory/layer/plan-filter.js +57 -27
  360. package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
  361. package/dist/src/vtab/memory/layer/row-convert.d.ts +21 -0
  362. package/dist/src/vtab/memory/layer/row-convert.d.ts.map +1 -0
  363. package/dist/src/vtab/memory/layer/row-convert.js +30 -0
  364. package/dist/src/vtab/memory/layer/row-convert.js.map +1 -0
  365. package/dist/src/vtab/memory/layer/scan-layer.d.ts +6 -3
  366. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  367. package/dist/src/vtab/memory/layer/scan-layer.js +69 -36
  368. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  369. package/dist/src/vtab/memory/layer/transaction.d.ts +127 -13
  370. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  371. package/dist/src/vtab/memory/layer/transaction.js +214 -65
  372. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  373. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  374. package/dist/src/vtab/memory/module.js +9 -2
  375. package/dist/src/vtab/memory/module.js.map +1 -1
  376. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  377. package/dist/src/vtab/memory/table.js +3 -2
  378. package/dist/src/vtab/memory/table.js.map +1 -1
  379. package/dist/src/vtab/memory/types.d.ts +27 -1
  380. package/dist/src/vtab/memory/types.d.ts.map +1 -1
  381. package/dist/src/vtab/memory/types.js +16 -1
  382. package/dist/src/vtab/memory/types.js.map +1 -1
  383. package/dist/src/vtab/memory/utils/primary-key.d.ts +9 -0
  384. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  385. package/dist/src/vtab/memory/utils/primary-key.js +11 -0
  386. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  387. package/dist/src/vtab/module.d.ts +63 -0
  388. package/dist/src/vtab/module.d.ts.map +1 -1
  389. package/dist/src/vtab/table.d.ts +24 -6
  390. package/dist/src/vtab/table.d.ts.map +1 -1
  391. package/dist/src/vtab/table.js.map +1 -1
  392. package/package.json +3 -3
  393. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts +0 -19
  394. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts.map +0 -1
  395. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js +0 -53
  396. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js.map +0 -1
@@ -336,14 +336,9 @@ export function emitTemporalArithmetic(plan, ctx) {
336
336
  * @returns Comparison result (boolean) if temporal comparison, undefined otherwise
337
337
  */
338
338
  export function tryTemporalComparison(operator, v1, v2) {
339
- // Check if both values are timespans
340
- // Timespans are the only temporal type that needs special comparison logic
341
- // because ISO 8601 duration strings don't compare correctly lexicographically
342
- if (!isTimespanValue(v1) || !isTimespanValue(v2)) {
339
+ const cmp = tryTemporalCompare(v1, v2);
340
+ if (cmp === undefined)
343
341
  return undefined;
344
- }
345
- // Use the TIMESPAN_TYPE's compare function
346
- const cmp = TIMESPAN_TYPE.compare(v1, v2);
347
342
  switch (operator) {
348
343
  case '=':
349
344
  case '==':
@@ -363,4 +358,17 @@ export function tryTemporalComparison(operator, v1, v2) {
363
358
  return undefined;
364
359
  }
365
360
  }
361
+ /**
362
+ * Three-way duration compare, for callers that need an ordering rather than a
363
+ * boolean verdict (BETWEEN's per-bound comparator). Returns undefined unless BOTH
364
+ * values look like ISO 8601 duration strings — the same guard
365
+ * {@link tryTemporalComparison} applies, so the two never disagree.
366
+ */
367
+ export function tryTemporalCompare(v1, v2) {
368
+ // Timespans are the only temporal type that needs special comparison logic
369
+ // because ISO 8601 duration strings don't compare correctly lexicographically
370
+ if (!isTimespanValue(v1) || !isTimespanValue(v2))
371
+ return undefined;
372
+ return TIMESPAN_TYPE.compare(v1, v2);
373
+ }
366
374
  //# sourceMappingURL=temporal-arithmetic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"temporal-arithmetic.js","sourceRoot":"","sources":["../../../../src/runtime/emit/temporal-arithmetic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"temporal-arithmetic.js","sourceRoot":"","sources":["../../../../src/runtime/emit/temporal-arithmetic.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAK/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CA+E9E"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAK/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAK9D,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAuH9E"}
@@ -4,6 +4,7 @@ import { QuereusError } from '../../common/errors.js';
4
4
  import { StatusCode } from '../../common/types.js';
5
5
  import { buildRowDescriptor, composeOldNewRow } from '../../util/row-descriptor.js';
6
6
  import { createRowSlot, withRowContext } from '../context-helpers.js';
7
+ import { buildRowCoercion } from '../../types/validation.js';
7
8
  export function emitUpdate(plan, ctx) {
8
9
  const tableSchema = plan.table.tableSchema;
9
10
  // Create row descriptor for the source rows (needed for assignment expression evaluation)
@@ -30,6 +31,38 @@ export function emitUpdate(plan, ctx) {
30
31
  });
31
32
  // Emit assignment value expressions as callbacks
32
33
  const assignmentEvaluators = plan.assignments.map(assign => emitCallFromPlan(assign.value, ctx));
34
+ // Convert the NEW row to declared column types HERE, driven by static types,
35
+ // so constraint checking and the storage layer (told `preCoerced`) see the
36
+ // declared form exactly once. An assigned column's source type is its
37
+ // assignment expression's type; an unassigned column keeps whatever the
38
+ // source relation reports at that position — for the ordinary target-table
39
+ // scan that is the declared column type itself (identity match ⇒ leave
40
+ // alone: the scanned value is already converted, and e.g. JSON conversion
41
+ // is not repeatable — see buildRowCoercion). Never assume "unassigned ⇒
42
+ // converted": a non-scan source (view decomposition, member insert) reports
43
+ // its own types and converts by the same rule.
44
+ //
45
+ // Split across the two assignment phases so a generated column derives from
46
+ // the value that will actually be STORED, not the raw assignment: phase 1
47
+ // converts the regular assignments (and any unassigned cell whose source
48
+ // type differs), phase 2 the generated cells. A generated column left in
49
+ // place by phase 1 still holds its scanned value, which is already in
50
+ // declared form.
51
+ const sourceAttrs = plan.source.getAttributes();
52
+ const regularCellTypes = tableSchema.columns.map((_, i) => sourceAttrs[i]?.type.logicalType);
53
+ for (const i of regularIndices) {
54
+ regularCellTypes[assignmentTargetIndices[i]] = plan.assignments[i].value.getType().logicalType;
55
+ }
56
+ const coerceRegular = buildRowCoercion(regularCellTypes, tableSchema.columns);
57
+ // After phase 1 every non-generated cell is in declared form (identity ⇒
58
+ // skip), so only the generated cells can still need converting.
59
+ const generatedCellTypes = tableSchema.columns.map(column => column.logicalType);
60
+ for (const i of generatedIndices) {
61
+ generatedCellTypes[assignmentTargetIndices[i]] = plan.assignments[i].value.getType().logicalType;
62
+ }
63
+ const coerceGenerated = generatedIndices.length > 0
64
+ ? buildRowCoercion(generatedCellTypes, tableSchema.columns)
65
+ : undefined;
33
66
  async function* run(rctx, sourceRowsIterable, ...assignmentEvaluators) {
34
67
  const slot = createRowSlot(rctx, sourceRowDescriptor);
35
68
  try {
@@ -38,12 +71,16 @@ export function emitUpdate(plan, ctx) {
38
71
  // Phase 1: Evaluate regular (non-generated) assignment expressions.
39
72
  // Await to support async evaluators (e.g. scalar subqueries) — non-async
40
73
  // callbacks return values directly and `await` is a no-op for them.
41
- const updatedRow = [...sourceRow]; // Copy the original row
74
+ let updatedRow = [...sourceRow]; // Copy the original row
42
75
  for (const i of regularIndices) {
43
76
  const value = await assignmentEvaluators[i](rctx);
44
77
  updatedRow[assignmentTargetIndices[i]] = value;
45
78
  }
46
- // Phase 2: Evaluate generated column expressions against the updated row.
79
+ if (coerceRegular)
80
+ updatedRow = coerceRegular(updatedRow);
81
+ // Phase 2: Evaluate generated column expressions against the updated row,
82
+ // now holding the CONVERTED values of the regular assignments (a generated
83
+ // column must derive from what is stored, not from the raw assignment).
47
84
  // Generated expressions are validated as deterministic (see
48
85
  // validateDeterministicGenerated in update.ts builder), so they cannot
49
86
  // contain scalar subqueries and always return synchronously.
@@ -54,8 +91,12 @@ export function emitUpdate(plan, ctx) {
54
91
  updatedRow[assignmentTargetIndices[i]] = value;
55
92
  }
56
93
  });
94
+ if (coerceGenerated)
95
+ updatedRow = coerceGenerated(updatedRow);
57
96
  }
58
- // Create flat row with OLD (source) and NEW (updated) values for constraint checking
97
+ // Create flat row with OLD (source) and NEW (updated) values for constraint
98
+ // checking. The NEW half is now fully in declared column types; OLD is the
99
+ // scanned row, already in stored form.
59
100
  const flatRow = composeOldNewRow(sourceRow, updatedRow, tableSchema.columns.length);
60
101
  // Yield the flat row for constraint checking
61
102
  // NOTE: UpdateNode only transforms rows - it does NOT execute the actual update
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/runtime/emit/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/runtime/emit/update.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAG/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAkB9D,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CA0I9E"}
1
+ {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAG/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAkB9D,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAkK9E"}
@@ -1,9 +1,10 @@
1
1
  import { asRun } from '../types.js';
2
2
  import { emitPlanNode, emitCallFromPlan } from '../emitters.js';
3
- import { resolveWindowFunction } from '../../schema/window-function.js';
3
+ import { bindWindowSchema, resolveWindowFunction } from '../../schema/window-function.js';
4
+ import { argComparisonContext } from './aggregate-setup.js';
4
5
  import { QuereusError } from '../../common/errors.js';
5
6
  import { StatusCode } from '../../common/types.js';
6
- import { createTypedComparator, createOrderByComparatorFast } from '../../util/comparison.js';
7
+ import { createTypedComparator, createTypedOrderByComparator, semanticKeyTransform } from '../../util/comparison.js';
7
8
  import { hashKeyCollationName } from '../../planner/analysis/comparison-collation.js';
8
9
  import { serializeKeyNullGrouping } from '../../util/key-serializer.js';
9
10
  import { createLogger } from '../../common/logger.js';
@@ -12,13 +13,21 @@ import { createRowSlot } from '../context-helpers.js';
12
13
  import { tryExtractNumericLiteral } from '../../util/ast-literal.js';
13
14
  const log = createLogger('runtime:emit:window');
14
15
  export function emitWindow(plan, ctx) {
15
- // Get schemas for all window functions in this node
16
- const functionSchemas = plan.functions.map(func => {
16
+ // Resolve + bind each window function's schema ONCE here: the call site's
17
+ // argument types and collations specialize comparison-sensitive windows
18
+ // (min/max via bindArgs) so their step ranks by the argument's semantic order,
19
+ // exactly as the min/max aggregate does. Every execution shape below —
20
+ // the buffered frame walk (computeAggregateFunction), the streaming running
21
+ // aggregate (stepRunningAgg) and the sliding-frame scans — folds through THIS
22
+ // schema, so the physical shapes cannot drift apart. Nothing per-row resolves
23
+ // a type or a collation.
24
+ const functionSchemas = plan.functions.map((func, fi) => {
17
25
  const schema = resolveWindowFunction(func.functionName);
18
26
  if (!schema) {
19
27
  throw new QuereusError(`Window function ${func.functionName} not found`, StatusCode.INTERNAL);
20
28
  }
21
- return schema;
29
+ const argBindings = (plan.functionArguments[fi] ?? []).map(argPlan => argComparisonContext(argPlan, ctx));
30
+ return bindWindowSchema(schema, argBindings);
22
31
  });
23
32
  // Emit callbacks for partition expressions
24
33
  const partitionCallbacks = plan.partitionExpressions.map(exprPlan => emitCallFromPlan(exprPlan, ctx));
@@ -30,13 +39,15 @@ export function emitWindow(plan, ctx) {
30
39
  const functionArgCounts = plan.functionArguments.map(args => args.length);
31
40
  // Create row descriptors
32
41
  const sourceRowDescriptor = buildRowDescriptor(plan.source.getAttributes());
33
- // Pre-resolve ORDER BY comparators using actual expression types (not hardcoded BINARY)
42
+ // Pre-resolve ORDER BY comparators using actual expression types (not hardcoded BINARY).
43
+ // Semantic-ordering types (TIMESPAN, JSON) rank by the type's compare — matching the
44
+ // typed peer-equality comparators below, so ordering and peer detection agree.
34
45
  const orderByComparators = plan.orderByExpressions.map((exprPlan, i) => {
35
46
  const exprType = exprPlan.getType();
36
47
  const collationName = exprType.collationName || 'BINARY';
37
48
  const collationFunc = ctx.resolveCollation(collationName);
38
49
  const orderClause = plan.windowSpec.orderBy[i];
39
- return createOrderByComparatorFast(orderClause.direction, orderClause.nulls, collationFunc);
50
+ return createTypedOrderByComparator(exprType.logicalType, orderClause.direction, orderClause.nulls, collationFunc);
40
51
  });
41
52
  // Pre-resolve typed equality comparators for ORDER BY (used in ranking functions)
42
53
  const orderByEqualityComparators = plan.orderByExpressions.map(exprPlan => {
@@ -49,6 +60,18 @@ export function emitWindow(plan, ctx) {
49
60
  const exprType = exprPlan.getType();
50
61
  return ctx.resolveKeyNormalizer(hashKeyCollationName(exprType.collationName, [exprType]));
51
62
  });
63
+ // Partition-key canonicalizers for semantic-ordering key types: values the type's
64
+ // compare treats as equal (TIMESPAN 'PT1H' ≡ 'PT60M') must land in one partition,
65
+ // so they serialize via the type's groupKey representative (mirrors GROUP BY in
66
+ // hash-aggregate.ts).
67
+ const partitionKeyCanonicalizers = plan.partitionExpressions.map(exprPlan => semanticKeyTransform(exprPlan.getType().logicalType));
68
+ const hasPartitionCanonicalizer = partitionKeyCanonicalizers.some(c => c !== undefined);
69
+ const serializePartitionKey = (values) => {
70
+ const keyValues = hasPartitionCanonicalizer
71
+ ? values.map((v, i) => partitionKeyCanonicalizers[i] ? partitionKeyCanonicalizers[i](v) : v)
72
+ : values;
73
+ return serializeKeyNullGrouping(keyValues, partitionKeyNormalizers);
74
+ };
52
75
  async function* run(rctx, source, ...callbacks) {
53
76
  log('Starting window function execution');
54
77
  // Extract callbacks in order: partitions, orderBy, function args
@@ -70,7 +93,7 @@ export function emitWindow(plan, ctx) {
70
93
  // Streaming fast path: source already arrives in
71
94
  // [PARTITION BY..., ORDER BY] order, so we walk it once and emit
72
95
  // in source order without materializing.
73
- yield* runStreaming(plan, functionSchemas, rctx, source, sourceRowDescriptor, partitionCallbackList, orderByCallbackList, funcArgCallbackGroups, partitionKeyNormalizers, orderByEqualityComparators);
96
+ yield* runStreaming(plan, functionSchemas, rctx, source, sourceRowDescriptor, partitionCallbackList, orderByCallbackList, funcArgCallbackGroups, serializePartitionKey, orderByEqualityComparators);
74
97
  return;
75
98
  }
76
99
  // Buffered path: materialize then partition/sort.
@@ -84,7 +107,7 @@ export function emitWindow(plan, ctx) {
84
107
  }
85
108
  else {
86
109
  // With partitioning - group by partition keys
87
- const partitions = await groupByPartitions(allRows, partitionCallbackList, rctx, sourceSlot, partitionKeyNormalizers);
110
+ const partitions = await groupByPartitions(allRows, partitionCallbackList, rctx, sourceSlot, serializePartitionKey);
88
111
  for (const partitionRows of partitions.values()) {
89
112
  yield* processPartition(partitionRows, plan, functionSchemas, rctx, sourceRowDescriptor, partitionCallbackList, orderByCallbackList, funcArgCallbackGroups, sourceSlot, orderByComparators, orderByEqualityComparators);
90
113
  }
@@ -107,7 +130,7 @@ export function emitWindow(plan, ctx) {
107
130
  note: `window(${plan.functions.map(f => f.functionName).join(', ')})`
108
131
  };
109
132
  }
110
- async function groupByPartitions(rows, partitionCallbacks, rctx, sourceSlot, keyNormalizers) {
133
+ async function groupByPartitions(rows, partitionCallbacks, rctx, sourceSlot, serializePartitionKey) {
111
134
  const partitions = new Map();
112
135
  for (const row of rows) {
113
136
  sourceSlot.set(row);
@@ -120,7 +143,7 @@ async function groupByPartitions(rows, partitionCallbacks, rctx, sourceSlot, key
120
143
  const raw = callback(rctx);
121
144
  partitionValues.push((raw instanceof Promise ? await raw : raw));
122
145
  }
123
- const partitionKey = serializeKeyNullGrouping(partitionValues, keyNormalizers);
146
+ const partitionKey = serializePartitionKey(partitionValues);
124
147
  if (!partitions.has(partitionKey)) {
125
148
  partitions.set(partitionKey, []);
126
149
  }
@@ -569,7 +592,7 @@ function arePeers(a, b, cmps) {
569
592
  * Streaming runner. Processes one row at a time, yielding output rows once
570
593
  * their slot values are all finalised.
571
594
  */
572
- async function* runStreaming(plan, functionSchemas, rctx, source, sourceRowDescriptor, partitionCallbacks, orderByCallbacks, funcArgCallbackGroups, partitionKeyNormalizers, orderByEqualityComparators) {
595
+ async function* runStreaming(plan, functionSchemas, rctx, source, sourceRowDescriptor, partitionCallbacks, orderByCallbacks, funcArgCallbackGroups, serializePartitionKey, orderByEqualityComparators) {
573
596
  const streaming = plan.streaming;
574
597
  const funcContexts = plan.functions.map((_func, fi) => ({
575
598
  fi,
@@ -650,7 +673,7 @@ async function* runStreaming(plan, functionSchemas, rctx, source, sourceRowDescr
650
673
  const rawP = cb(rctx);
651
674
  partitionValues.push((rawP instanceof Promise ? await rawP : rawP));
652
675
  }
653
- const partitionKey = serializeKeyNullGrouping(partitionValues, partitionKeyNormalizers);
676
+ const partitionKey = serializePartitionKey(partitionValues);
654
677
  // Resolve ORDER BY values (same shared-subtree concern as above).
655
678
  const orderByValues = [];
656
679
  for (const cb of orderByCallbacks) {
@@ -746,7 +769,7 @@ async function* runStreaming(plan, functionSchemas, rctx, source, sourceRowDescr
746
769
  stepRunningAgg(entry, fi, fs, fc, argVal, isRangeMode);
747
770
  break;
748
771
  case 'slidingAgg':
749
- handleSlidingArrival(entry, fi, fs, argVal, orderByVal0Num);
772
+ handleSlidingArrival(entry, fc, fs, argVal, orderByVal0Num);
750
773
  break;
751
774
  }
752
775
  }
@@ -897,7 +920,7 @@ async function* finalizePartition(state, funcContexts, isRangeMode, rctx, promot
897
920
  const fs = state.funcStates[fi];
898
921
  if (fs.mode.kind !== 'slidingAgg')
899
922
  continue;
900
- finalizeSlidingTrailing(fi, fs);
923
+ finalizeSlidingTrailing(funcContexts[fi], fs);
901
924
  }
902
925
  // Yield queued entries in order. Promote our slot to each entry's row so
903
926
  // downstream attribute resolution sees the correct row.
@@ -956,27 +979,24 @@ function slidingFinalAcc(name, acc) {
956
979
  default: return null;
957
980
  }
958
981
  }
959
- function slidingScanMin(buf, lo, hi) {
960
- let best = null;
961
- for (let k = lo; k <= hi; k++) {
962
- const v = buf[k].argVal;
963
- if (v === null)
964
- continue;
965
- if (best === null || v < best)
966
- best = v;
967
- }
968
- return best;
969
- }
970
- function slidingScanMax(buf, lo, hi) {
971
- let best = null;
982
+ /**
983
+ * MIN/MAX over a sliding-frame buffer slice, folded through the BOUND schema's own
984
+ * step/final rather than a local `<`. Reusing the schema is what keeps the sliding
985
+ * fast path ranking identically to the buffered frame walk — both consume the
986
+ * comparator `bindWindowSchema` installed at emit (semantic ordering for
987
+ * TIMESPAN/JSON arguments, the declared collation for text, storage-class order
988
+ * otherwise). `lo > hi` (empty slice) folds to the empty accumulator ⇒ NULL.
989
+ */
990
+ function slidingScanExtremum(schema, buf, lo, hi) {
991
+ if (!schema.step)
992
+ return null;
993
+ let acc = null;
994
+ let rowCount = 0;
972
995
  for (let k = lo; k <= hi; k++) {
973
- const v = buf[k].argVal;
974
- if (v === null)
975
- continue;
976
- if (best === null || v > best)
977
- best = v;
996
+ acc = schema.step(acc, buf[k].argVal);
997
+ rowCount++;
978
998
  }
979
- return best;
999
+ return schema.final ? schema.final(acc, rowCount) : acc;
980
1000
  }
981
1001
  function slidingScanCountNonNull(buf, lo, hi) {
982
1002
  let n = 0;
@@ -997,28 +1017,29 @@ function slidingScanSum(buf, lo, hi) {
997
1017
  }
998
1018
  return { sum, count };
999
1019
  }
1000
- /** Per-row dispatch for slidingAgg functions. */
1001
- function handleSlidingArrival(entry, fi, fs, argVal, orderByVal0Num) {
1020
+ /** Per-row dispatch for slidingAgg functions. `fc` carries the emit-time-bound
1021
+ * registry schema, consulted by the MIN/MAX scans. */
1022
+ function handleSlidingArrival(entry, fc, fs, argVal, orderByVal0Num) {
1002
1023
  const m = fs.mode;
1003
1024
  fs.slidingBuffer.push({ argVal, orderByVal0: orderByVal0Num });
1004
1025
  if (m.frameMode === 'rows') {
1005
- handleSlidingRowsArrival(entry, fi, fs, m, argVal);
1026
+ handleSlidingRowsArrival(entry, fc, fs, m, argVal);
1006
1027
  }
1007
1028
  else {
1008
- handleSlidingRangeArrival(entry, fi, fs, m, orderByVal0Num);
1029
+ handleSlidingRangeArrival(entry, fc, fs, m, orderByVal0Num);
1009
1030
  }
1010
1031
  }
1011
1032
  // ----- ROWS sliding -----
1012
- function handleSlidingRowsArrival(entry, fi, fs, m, argVal) {
1033
+ function handleSlidingRowsArrival(entry, fc, fs, m, argVal) {
1013
1034
  if (m.name === 'sum' || m.name === 'count' || m.name === 'avg') {
1014
1035
  slidingStepNum(fs.slidingAcc, argVal);
1015
1036
  }
1016
1037
  fs.slidingPending.push(entry);
1017
1038
  while (fs.slidingPending.length > m.following) {
1018
- finalizeSlidingRowsEntry(fi, fs, m);
1039
+ finalizeSlidingRowsEntry(fc, fs, m);
1019
1040
  }
1020
1041
  }
1021
- function finalizeSlidingRowsEntry(fi, fs, m) {
1042
+ function finalizeSlidingRowsEntry(fc, fs, m) {
1022
1043
  const j = fs.slidingNextFinalizeIdx;
1023
1044
  const targetLeft = Math.max(0, j - m.preceding);
1024
1045
  // Trim left: rows that have aged out of the next-pending entry's frame.
@@ -1040,10 +1061,8 @@ function finalizeSlidingRowsEntry(fi, fs, m) {
1040
1061
  value = slidingFinalAcc(m.name, fs.slidingAcc);
1041
1062
  break;
1042
1063
  case 'min':
1043
- value = slidingScanMin(buf, lo, hi);
1044
- break;
1045
1064
  case 'max':
1046
- value = slidingScanMax(buf, lo, hi);
1065
+ value = slidingScanExtremum(fc.schema, buf, lo, hi);
1047
1066
  break;
1048
1067
  case 'first_value':
1049
1068
  value = lo > hi ? null : buf[lo].argVal;
@@ -1055,11 +1074,11 @@ function finalizeSlidingRowsEntry(fi, fs, m) {
1055
1074
  value = null;
1056
1075
  }
1057
1076
  const targetEntry = fs.slidingPending.shift();
1058
- fillSlot(targetEntry, fi, value);
1077
+ fillSlot(targetEntry, fc.fi, value);
1059
1078
  fs.slidingNextFinalizeIdx++;
1060
1079
  }
1061
1080
  // ----- RANGE sliding -----
1062
- function handleSlidingRangeArrival(entry, fi, fs, m, orderByVal0Num) {
1081
+ function handleSlidingRangeArrival(entry, fc, fs, m, orderByVal0Num) {
1063
1082
  const isFinite = Number.isFinite(orderByVal0Num);
1064
1083
  const pending = fs.slidingRangePending;
1065
1084
  pending.push({ entry, v_j: orderByVal0Num, isFinite, rightClosed: false });
@@ -1086,7 +1105,7 @@ function handleSlidingRangeArrival(entry, fi, fs, m, orderByVal0Num) {
1086
1105
  }
1087
1106
  }
1088
1107
  while (pending.length > 0 && pending[0].rightClosed) {
1089
- finalizeSlidingRangeEntry(fi, fs, m);
1108
+ finalizeSlidingRangeEntry(fc, fs, m);
1090
1109
  }
1091
1110
  }
1092
1111
  /**
@@ -1131,7 +1150,7 @@ function findNonFinitePeerSpan(buf) {
1131
1150
  }
1132
1151
  return { lo, hi };
1133
1152
  }
1134
- function finalizeSlidingRangeEntry(fi, fs, m) {
1153
+ function finalizeSlidingRangeEntry(fc, fs, m) {
1135
1154
  const pending = fs.slidingRangePending;
1136
1155
  const head = pending[0];
1137
1156
  const buf = fs.slidingBuffer;
@@ -1163,10 +1182,8 @@ function finalizeSlidingRangeEntry(fi, fs, m) {
1163
1182
  break;
1164
1183
  }
1165
1184
  case 'min':
1166
- value = slidingScanMin(buf, lo, hi);
1167
- break;
1168
1185
  case 'max':
1169
- value = slidingScanMax(buf, lo, hi);
1186
+ value = slidingScanExtremum(fc.schema, buf, lo, hi);
1170
1187
  break;
1171
1188
  case 'first_value':
1172
1189
  value = buf[lo].argVal;
@@ -1178,7 +1195,7 @@ function finalizeSlidingRangeEntry(fi, fs, m) {
1178
1195
  value = null;
1179
1196
  }
1180
1197
  }
1181
- fillSlot(head.entry, fi, value);
1198
+ fillSlot(head.entry, fc.fi, value);
1182
1199
  pending.shift();
1183
1200
  // Trim buffer rows that no remaining pending entry needs.
1184
1201
  trimSlidingRangeBuffer(fs, m);
@@ -1230,16 +1247,16 @@ function trimSlidingRangeBuffer(fs, m) {
1230
1247
  break;
1231
1248
  }
1232
1249
  }
1233
- function finalizeSlidingTrailing(fi, fs) {
1250
+ function finalizeSlidingTrailing(fc, fs) {
1234
1251
  const m = fs.mode;
1235
1252
  if (m.frameMode === 'rows') {
1236
1253
  while (fs.slidingPending.length > 0) {
1237
- finalizeSlidingRowsEntry(fi, fs, m);
1254
+ finalizeSlidingRowsEntry(fc, fs, m);
1238
1255
  }
1239
1256
  }
1240
1257
  else {
1241
1258
  while (fs.slidingRangePending.length > 0) {
1242
- finalizeSlidingRangeEntry(fi, fs, m);
1259
+ finalizeSlidingRangeEntry(fc, fs, m);
1243
1260
  }
1244
1261
  }
1245
1262
  }