@quereus/quereus 2.7.0 → 2.9.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 (358) hide show
  1. package/dist/src/common/errors.d.ts +21 -0
  2. package/dist/src/common/errors.d.ts.map +1 -1
  3. package/dist/src/common/errors.js +29 -0
  4. package/dist/src/common/errors.js.map +1 -1
  5. package/dist/src/core/database.d.ts.map +1 -1
  6. package/dist/src/core/database.js +20 -7
  7. package/dist/src/core/database.js.map +1 -1
  8. package/dist/src/core/statement.d.ts.map +1 -1
  9. package/dist/src/core/statement.js +15 -5
  10. package/dist/src/core/statement.js.map +1 -1
  11. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  12. package/dist/src/emit/ast-stringify.js +0 -4
  13. package/dist/src/emit/ast-stringify.js.map +1 -1
  14. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  15. package/dist/src/func/builtins/explain.js +39 -36
  16. package/dist/src/func/builtins/explain.js.map +1 -1
  17. package/dist/src/func/builtins/json-helpers.d.ts +1 -1
  18. package/dist/src/func/builtins/json-helpers.d.ts.map +1 -1
  19. package/dist/src/func/builtins/json-helpers.js.map +1 -1
  20. package/dist/src/func/builtins/json.d.ts.map +1 -1
  21. package/dist/src/func/builtins/json.js +5 -7
  22. package/dist/src/func/builtins/json.js.map +1 -1
  23. package/dist/src/func/builtins/scalar.d.ts.map +1 -1
  24. package/dist/src/func/builtins/scalar.js +17 -2
  25. package/dist/src/func/builtins/scalar.js.map +1 -1
  26. package/dist/src/func/builtins/string.d.ts.map +1 -1
  27. package/dist/src/func/builtins/string.js +4 -2
  28. package/dist/src/func/builtins/string.js.map +1 -1
  29. package/dist/src/parser/ast.d.ts +4 -3
  30. package/dist/src/parser/ast.d.ts.map +1 -1
  31. package/dist/src/parser/lexer.d.ts.map +1 -1
  32. package/dist/src/parser/lexer.js +8 -48
  33. package/dist/src/parser/lexer.js.map +1 -1
  34. package/dist/src/parser/parser.d.ts.map +1 -1
  35. package/dist/src/parser/parser.js +43 -11
  36. package/dist/src/parser/parser.js.map +1 -1
  37. package/dist/src/parser/utils.d.ts +10 -1
  38. package/dist/src/parser/utils.d.ts.map +1 -1
  39. package/dist/src/parser/utils.js +23 -0
  40. package/dist/src/parser/utils.js.map +1 -1
  41. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  42. package/dist/src/planner/analysis/constraint-extractor.js +0 -1
  43. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  44. package/dist/src/planner/building/constraint-builder.d.ts +12 -1
  45. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  46. package/dist/src/planner/building/constraint-builder.js +60 -1
  47. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  48. package/dist/src/planner/building/create-view.d.ts.map +1 -1
  49. package/dist/src/planner/building/create-view.js +16 -0
  50. package/dist/src/planner/building/create-view.js.map +1 -1
  51. package/dist/src/planner/building/delete.d.ts.map +1 -1
  52. package/dist/src/planner/building/delete.js +13 -7
  53. package/dist/src/planner/building/delete.js.map +1 -1
  54. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  55. package/dist/src/planner/building/foreign-key-builder.js +27 -17
  56. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  57. package/dist/src/planner/building/insert.d.ts.map +1 -1
  58. package/dist/src/planner/building/insert.js +51 -43
  59. package/dist/src/planner/building/insert.js.map +1 -1
  60. package/dist/src/planner/building/select-aggregates.d.ts +4 -1
  61. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  62. package/dist/src/planner/building/select-aggregates.js +122 -21
  63. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  64. package/dist/src/planner/building/select-modifiers.d.ts +6 -2
  65. package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
  66. package/dist/src/planner/building/select-modifiers.js +20 -5
  67. package/dist/src/planner/building/select-modifiers.js.map +1 -1
  68. package/dist/src/planner/building/select-ordinal.d.ts +20 -0
  69. package/dist/src/planner/building/select-ordinal.d.ts.map +1 -0
  70. package/dist/src/planner/building/select-ordinal.js +62 -0
  71. package/dist/src/planner/building/select-ordinal.js.map +1 -0
  72. package/dist/src/planner/building/select.d.ts.map +1 -1
  73. package/dist/src/planner/building/select.js +78 -19
  74. package/dist/src/planner/building/select.js.map +1 -1
  75. package/dist/src/planner/building/update.d.ts.map +1 -1
  76. package/dist/src/planner/building/update.js +38 -27
  77. package/dist/src/planner/building/update.js.map +1 -1
  78. package/dist/src/planner/building/with.d.ts.map +1 -1
  79. package/dist/src/planner/building/with.js +25 -2
  80. package/dist/src/planner/building/with.js.map +1 -1
  81. package/dist/src/planner/framework/characteristics.d.ts +3 -1
  82. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  83. package/dist/src/planner/framework/characteristics.js +7 -0
  84. package/dist/src/planner/framework/characteristics.js.map +1 -1
  85. package/dist/src/planner/framework/physical-utils.d.ts +22 -1
  86. package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
  87. package/dist/src/planner/framework/physical-utils.js +47 -0
  88. package/dist/src/planner/framework/physical-utils.js.map +1 -1
  89. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  90. package/dist/src/planner/nodes/alias-node.js +2 -0
  91. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  92. package/dist/src/planner/nodes/asof-scan-node.d.ts +137 -0
  93. package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -0
  94. package/dist/src/planner/nodes/asof-scan-node.js +223 -0
  95. package/dist/src/planner/nodes/asof-scan-node.js.map +1 -0
  96. package/dist/src/planner/nodes/constraint-check-node.d.ts +25 -1
  97. package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
  98. package/dist/src/planner/nodes/constraint-check-node.js +36 -6
  99. package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
  100. package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
  101. package/dist/src/planner/nodes/distinct-node.js +7 -0
  102. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  103. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  104. package/dist/src/planner/nodes/filter.js +8 -2
  105. package/dist/src/planner/nodes/filter.js.map +1 -1
  106. package/dist/src/planner/nodes/function.d.ts +11 -1
  107. package/dist/src/planner/nodes/function.d.ts.map +1 -1
  108. package/dist/src/planner/nodes/function.js +94 -1
  109. package/dist/src/planner/nodes/function.js.map +1 -1
  110. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  111. package/dist/src/planner/nodes/hash-aggregate.js +2 -0
  112. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  113. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  114. package/dist/src/planner/nodes/join-node.js +10 -2
  115. package/dist/src/planner/nodes/join-node.js.map +1 -1
  116. package/dist/src/planner/nodes/join-utils.d.ts +19 -1
  117. package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
  118. package/dist/src/planner/nodes/join-utils.js +46 -0
  119. package/dist/src/planner/nodes/join-utils.js.map +1 -1
  120. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  121. package/dist/src/planner/nodes/limit-offset.js +2 -0
  122. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  123. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  124. package/dist/src/planner/nodes/merge-join-node.js +4 -1
  125. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  126. package/dist/src/planner/nodes/ordinal-slice-node.d.ts +50 -0
  127. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -0
  128. package/dist/src/planner/nodes/ordinal-slice-node.js +127 -0
  129. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -0
  130. package/dist/src/planner/nodes/plan-node-type.d.ts +2 -0
  131. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  132. package/dist/src/planner/nodes/plan-node-type.js +2 -0
  133. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  134. package/dist/src/planner/nodes/plan-node.d.ts +130 -1
  135. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  136. package/dist/src/planner/nodes/plan-node.js +49 -0
  137. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  138. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  139. package/dist/src/planner/nodes/project-node.js +6 -1
  140. package/dist/src/planner/nodes/project-node.js.map +1 -1
  141. package/dist/src/planner/nodes/recursive-cte-node.d.ts +5 -3
  142. package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
  143. package/dist/src/planner/nodes/recursive-cte-node.js +24 -8
  144. package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
  145. package/dist/src/planner/nodes/reference.d.ts +4 -1
  146. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  147. package/dist/src/planner/nodes/reference.js +16 -0
  148. package/dist/src/planner/nodes/reference.js.map +1 -1
  149. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  150. package/dist/src/planner/nodes/returning-node.js +5 -12
  151. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  152. package/dist/src/planner/nodes/scalar.d.ts +7 -1
  153. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  154. package/dist/src/planner/nodes/scalar.js +100 -1
  155. package/dist/src/planner/nodes/scalar.js.map +1 -1
  156. package/dist/src/planner/nodes/set-operation-node.d.ts +2 -1
  157. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  158. package/dist/src/planner/nodes/set-operation-node.js +9 -0
  159. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  160. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  161. package/dist/src/planner/nodes/sort.js +20 -0
  162. package/dist/src/planner/nodes/sort.js.map +1 -1
  163. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  164. package/dist/src/planner/nodes/stream-aggregate.js +2 -0
  165. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  166. package/dist/src/planner/nodes/table-access-nodes.d.ts +37 -2
  167. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  168. package/dist/src/planner/nodes/table-access-nodes.js +87 -10
  169. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  170. package/dist/src/planner/nodes/update-node.d.ts +1 -3
  171. package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
  172. package/dist/src/planner/nodes/update-node.js +3 -9
  173. package/dist/src/planner/nodes/update-node.js.map +1 -1
  174. package/dist/src/planner/nodes/window-node.d.ts +61 -2
  175. package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
  176. package/dist/src/planner/nodes/window-node.js +64 -3
  177. package/dist/src/planner/nodes/window-node.js.map +1 -1
  178. package/dist/src/planner/optimizer-tuning.d.ts +9 -0
  179. package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
  180. package/dist/src/planner/optimizer-tuning.js +3 -0
  181. package/dist/src/planner/optimizer-tuning.js.map +1 -1
  182. package/dist/src/planner/optimizer.d.ts.map +1 -1
  183. package/dist/src/planner/optimizer.js +91 -0
  184. package/dist/src/planner/optimizer.js.map +1 -1
  185. package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts +30 -0
  186. package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts.map +1 -0
  187. package/dist/src/planner/rules/access/rule-asof-strategy-select.js +112 -0
  188. package/dist/src/planner/rules/access/rule-asof-strategy-select.js.map +1 -0
  189. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts +33 -0
  190. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts.map +1 -0
  191. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js +162 -0
  192. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js.map +1 -0
  193. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts +29 -0
  194. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -0
  195. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +175 -0
  196. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -0
  197. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  198. package/dist/src/planner/rules/access/rule-select-access-path.js +53 -36
  199. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  200. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +61 -0
  201. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -0
  202. package/dist/src/planner/rules/join/equi-pair-extractor.js +155 -0
  203. package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -0
  204. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  205. package/dist/src/planner/rules/join/rule-join-physical-selection.js +3 -123
  206. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  207. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts +21 -0
  208. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -0
  209. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +405 -0
  210. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -0
  211. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +31 -0
  212. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -0
  213. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +113 -0
  214. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -0
  215. package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
  216. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +7 -3
  217. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
  218. package/dist/src/planner/rules/predicate/rule-filter-merge.js.map +1 -1
  219. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
  220. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
  221. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +161 -9
  222. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  223. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  224. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +2 -2
  225. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  226. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +47 -0
  227. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -0
  228. package/dist/src/planner/rules/window/rule-monotonic-window.js +341 -0
  229. package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -0
  230. package/dist/src/runtime/context-helpers.d.ts +9 -0
  231. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  232. package/dist/src/runtime/context-helpers.js +5 -0
  233. package/dist/src/runtime/context-helpers.js.map +1 -1
  234. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  235. package/dist/src/runtime/emit/alter-table.js +286 -7
  236. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  237. package/dist/src/runtime/emit/asof-scan.d.ts +10 -0
  238. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -0
  239. package/dist/src/runtime/emit/asof-scan.js +467 -0
  240. package/dist/src/runtime/emit/asof-scan.js.map +1 -0
  241. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  242. package/dist/src/runtime/emit/binary.js +12 -7
  243. package/dist/src/runtime/emit/binary.js.map +1 -1
  244. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  245. package/dist/src/runtime/emit/constraint-check.js +145 -62
  246. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  247. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  248. package/dist/src/runtime/emit/create-assertion.js +6 -6
  249. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  250. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  251. package/dist/src/runtime/emit/dml-executor.js +133 -76
  252. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  253. package/dist/src/runtime/emit/ordinal-slice.d.ts +13 -0
  254. package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -0
  255. package/dist/src/runtime/emit/ordinal-slice.js +89 -0
  256. package/dist/src/runtime/emit/ordinal-slice.js.map +1 -0
  257. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  258. package/dist/src/runtime/emit/recursive-cte.js +61 -10
  259. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  260. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  261. package/dist/src/runtime/emit/returning.js +9 -4
  262. package/dist/src/runtime/emit/returning.js.map +1 -1
  263. package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
  264. package/dist/src/runtime/emit/scalar-function.js +2 -1
  265. package/dist/src/runtime/emit/scalar-function.js.map +1 -1
  266. package/dist/src/runtime/emit/scan.d.ts +19 -3
  267. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  268. package/dist/src/runtime/emit/scan.js +12 -8
  269. package/dist/src/runtime/emit/scan.js.map +1 -1
  270. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  271. package/dist/src/runtime/emit/schema-declarative.js +91 -14
  272. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  273. package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
  274. package/dist/src/runtime/emit/table-valued-function.js +4 -2
  275. package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
  276. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  277. package/dist/src/runtime/emit/update.js +8 -5
  278. package/dist/src/runtime/emit/update.js.map +1 -1
  279. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  280. package/dist/src/runtime/emit/window.js +732 -37
  281. package/dist/src/runtime/emit/window.js.map +1 -1
  282. package/dist/src/runtime/foreign-key-actions.js +7 -6
  283. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  284. package/dist/src/runtime/register.d.ts.map +1 -1
  285. package/dist/src/runtime/register.js +4 -0
  286. package/dist/src/runtime/register.js.map +1 -1
  287. package/dist/src/schema/catalog.d.ts +12 -0
  288. package/dist/src/schema/catalog.d.ts.map +1 -1
  289. package/dist/src/schema/catalog.js +47 -6
  290. package/dist/src/schema/catalog.js.map +1 -1
  291. package/dist/src/schema/column.d.ts +7 -0
  292. package/dist/src/schema/column.d.ts.map +1 -1
  293. package/dist/src/schema/column.js.map +1 -1
  294. package/dist/src/schema/function.d.ts +28 -3
  295. package/dist/src/schema/function.d.ts.map +1 -1
  296. package/dist/src/schema/function.js.map +1 -1
  297. package/dist/src/schema/manager.d.ts +42 -6
  298. package/dist/src/schema/manager.d.ts.map +1 -1
  299. package/dist/src/schema/manager.js +175 -23
  300. package/dist/src/schema/manager.js.map +1 -1
  301. package/dist/src/schema/rename-rewriter.d.ts +4 -0
  302. package/dist/src/schema/rename-rewriter.d.ts.map +1 -0
  303. package/dist/src/schema/rename-rewriter.js +506 -0
  304. package/dist/src/schema/rename-rewriter.js.map +1 -0
  305. package/dist/src/schema/schema-differ.d.ts +18 -1
  306. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  307. package/dist/src/schema/schema-differ.js +344 -42
  308. package/dist/src/schema/schema-differ.js.map +1 -1
  309. package/dist/src/schema/table.d.ts +65 -2
  310. package/dist/src/schema/table.d.ts.map +1 -1
  311. package/dist/src/schema/table.js +144 -0
  312. package/dist/src/schema/table.js.map +1 -1
  313. package/dist/src/types/logical-type.d.ts +11 -0
  314. package/dist/src/types/logical-type.d.ts.map +1 -1
  315. package/dist/src/types/logical-type.js.map +1 -1
  316. package/dist/src/util/ast-literal.d.ts +11 -0
  317. package/dist/src/util/ast-literal.d.ts.map +1 -0
  318. package/dist/src/util/ast-literal.js +26 -0
  319. package/dist/src/util/ast-literal.js.map +1 -0
  320. package/dist/src/util/async-iterator.d.ts +2 -1
  321. package/dist/src/util/async-iterator.d.ts.map +1 -1
  322. package/dist/src/util/async-iterator.js +4 -4
  323. package/dist/src/util/async-iterator.js.map +1 -1
  324. package/dist/src/util/patterns.d.ts.map +1 -1
  325. package/dist/src/util/patterns.js +58 -10
  326. package/dist/src/util/patterns.js.map +1 -1
  327. package/dist/src/vtab/best-access-plan.d.ts +48 -0
  328. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  329. package/dist/src/vtab/best-access-plan.js +29 -0
  330. package/dist/src/vtab/best-access-plan.js.map +1 -1
  331. package/dist/src/vtab/filter-info.d.ts +14 -0
  332. package/dist/src/vtab/filter-info.d.ts.map +1 -1
  333. package/dist/src/vtab/memory/index.d.ts +8 -0
  334. package/dist/src/vtab/memory/index.d.ts.map +1 -1
  335. package/dist/src/vtab/memory/index.js +11 -0
  336. package/dist/src/vtab/memory/index.js.map +1 -1
  337. package/dist/src/vtab/memory/layer/base.d.ts +8 -1
  338. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  339. package/dist/src/vtab/memory/layer/base.js +36 -2
  340. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  341. package/dist/src/vtab/memory/layer/manager.d.ts +5 -1
  342. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  343. package/dist/src/vtab/memory/layer/manager.js +63 -13
  344. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  345. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  346. package/dist/src/vtab/memory/layer/transaction.js +21 -2
  347. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  348. package/dist/src/vtab/memory/module.d.ts +45 -2
  349. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  350. package/dist/src/vtab/memory/module.js +268 -27
  351. package/dist/src/vtab/memory/module.js.map +1 -1
  352. package/dist/src/vtab/memory/utils/predicate.d.ts +27 -0
  353. package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -0
  354. package/dist/src/vtab/memory/utils/predicate.js +182 -0
  355. package/dist/src/vtab/memory/utils/predicate.js.map +1 -0
  356. package/dist/src/vtab/module.d.ts +24 -0
  357. package/dist/src/vtab/module.d.ts.map +1 -1
  358. package/package.json +3 -3
@@ -1,5 +1,5 @@
1
1
  import { PlanNodeType } from './plan-node-type.js';
2
- import { PlanNode, type Attribute, type RelationalPlanNode, type UnaryRelationalNode, type ScalarPlanNode } from './plan-node.js';
2
+ import { PlanNode, type Attribute, type RelationalPlanNode, type UnaryRelationalNode, type ScalarPlanNode, type PhysicalProperties } from './plan-node.js';
3
3
  import type { WindowFunctionCallNode } from './window-function.js';
4
4
  import type { RelationType } from '../../common/datatype.js';
5
5
  import type { Scope } from '../scopes/scope.js';
@@ -9,6 +9,58 @@ export interface WindowSpec {
9
9
  orderBy: AST.OrderByClause[];
10
10
  frame?: AST.WindowFrame;
11
11
  }
12
+ /**
13
+ * Per-function streaming mode chosen by `rule-monotonic-window`. Indexed
14
+ * parallel to `WindowNode.functions`.
15
+ *
16
+ * - rowNumber / rank / denseRank — single counter + last-key state.
17
+ * - lag / lead — ring/read-ahead buffer with a literal offset and default value.
18
+ * - firstValue — caches the first row's expression for the partition.
19
+ * - lastValue — under the streaming default frame (`UNBOUNDED PRECEDING TO
20
+ * CURRENT ROW`) `LAST_VALUE(expr)` is `expr` evaluated on the current row.
21
+ * - runningAgg — fold via the registered step/final hooks (default frame only).
22
+ * - slidingAgg — `SUM/COUNT/AVG/MIN/MAX/FIRST_VALUE/LAST_VALUE` over a sliding
23
+ * frame of the form `ROWS BETWEEN n PRECEDING AND m FOLLOWING` (literal `n`,
24
+ * `m`, both ≥ 0) or `RANGE BETWEEN <num> PRECEDING AND <num> FOLLOWING`
25
+ * (single numeric ORDER BY, literal non-negative offsets).
26
+ */
27
+ export type StreamingWindowFunctionMode = {
28
+ kind: 'rowNumber';
29
+ } | {
30
+ kind: 'rank';
31
+ } | {
32
+ kind: 'denseRank';
33
+ } | {
34
+ kind: 'lag';
35
+ offset: number;
36
+ } | {
37
+ kind: 'lead';
38
+ offset: number;
39
+ } | {
40
+ kind: 'firstValue';
41
+ } | {
42
+ kind: 'lastValue';
43
+ } | {
44
+ kind: 'runningAgg';
45
+ } | {
46
+ kind: 'slidingAgg';
47
+ /** Underlying aggregate / value function name (lower-case). */
48
+ name: 'sum' | 'count' | 'avg' | 'min' | 'max' | 'first_value' | 'last_value';
49
+ frameMode: 'rows' | 'range';
50
+ /** Non-negative integer literal for ROWS; non-negative numeric literal for RANGE. */
51
+ preceding: number;
52
+ /** Same constraints as preceding. */
53
+ following: number;
54
+ };
55
+ /**
56
+ * Marker added to a `WindowNode` by `rule-monotonic-window` when the source's
57
+ * emit order already covers `[PARTITION BY..., ORDER BY[0]]`. Drives the
58
+ * runtime's streaming emitter and signals to `computePhysical()` that the
59
+ * window output preserves the source's `monotonicOn` unchanged.
60
+ */
61
+ export interface StreamingWindowConfig {
62
+ readonly modes: ReadonlyArray<StreamingWindowFunctionMode>;
63
+ }
12
64
  /**
13
65
  * Represents a window operation that computes window functions over partitions of rows.
14
66
  * This node groups window functions that share the same window specification for efficiency.
@@ -22,17 +74,24 @@ export declare class WindowNode extends PlanNode implements UnaryRelationalNode
22
74
  readonly functionArguments: ScalarPlanNode[][];
23
75
  /** Optional predefined attributes for preserving IDs during optimization */
24
76
  readonly predefinedAttributes?: Attribute[] | undefined;
77
+ /** Set by `rule-monotonic-window` when the source streams in window order. */
78
+ readonly streaming?: StreamingWindowConfig | undefined;
25
79
  readonly nodeType = PlanNodeType.Window;
26
80
  private outputTypeCache;
27
81
  private attributesCache;
28
82
  constructor(scope: Scope, source: RelationalPlanNode, windowSpec: WindowSpec, functions: WindowFunctionCallNode[], partitionExpressions: ScalarPlanNode[], orderByExpressions: ScalarPlanNode[], functionArguments: ScalarPlanNode[][], estimatedCostOverride?: number,
29
83
  /** Optional predefined attributes for preserving IDs during optimization */
30
- predefinedAttributes?: Attribute[] | undefined);
84
+ predefinedAttributes?: Attribute[] | undefined,
85
+ /** Set by `rule-monotonic-window` when the source streams in window order. */
86
+ streaming?: StreamingWindowConfig | undefined);
31
87
  getType(): RelationType;
32
88
  getAttributes(): Attribute[];
33
89
  getChildren(): readonly PlanNode[];
34
90
  withChildren(newChildren: readonly PlanNode[]): PlanNode;
91
+ /** Return a new WindowNode with the given streaming config attached. */
92
+ withStreaming(config: StreamingWindowConfig): WindowNode;
35
93
  getRelations(): readonly [RelationalPlanNode];
94
+ computePhysical(childrenPhysical: PhysicalProperties[]): Partial<PhysicalProperties>;
36
95
  get estimatedRows(): number | undefined;
37
96
  toString(): string;
38
97
  getLogicalAttributes(): Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"window-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/window-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAClI,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAIhD,MAAM,WAAW,UAAU;IAC1B,WAAW,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;IAC9B,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,QAAS,YAAW,mBAAmB;aAQrD,MAAM,EAAE,kBAAkB;aAC1B,UAAU,EAAE,UAAU;aACtB,SAAS,EAAE,sBAAsB,EAAE;aACnC,oBAAoB,EAAE,cAAc,EAAE;aACtC,kBAAkB,EAAE,cAAc,EAAE;aACpC,iBAAiB,EAAE,cAAc,EAAE,EAAE;IAErD,4EAA4E;aAC5D,oBAAoB,CAAC,EAAE,SAAS,EAAE;IAfnD,SAAkB,QAAQ,uBAAuB;IAEjD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAAsB;gBAG5C,KAAK,EAAE,KAAK,EACI,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,sBAAsB,EAAE,EACnC,oBAAoB,EAAE,cAAc,EAAE,EACtC,kBAAkB,EAAE,cAAc,EAAE,EACpC,iBAAiB,EAAE,cAAc,EAAE,EAAE,EACrD,qBAAqB,CAAC,EAAE,MAAM;IAC9B,4EAA4E;IAC5D,oBAAoB,CAAC,EAAE,SAAS,EAAE,YAAA;IA2CnD,OAAO,IAAI,YAAY;IAIvB,aAAa,IAAI,SAAS,EAAE;IAI5B,WAAW,IAAI,SAAS,QAAQ,EAAE;IAelC,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IA4DxD,YAAY,IAAI,SAAS,CAAC,kBAAkB,CAAC;IAI7C,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAEQ,QAAQ,IAAI,MAAM;IAalB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAcxD"}
1
+ {"version":3,"file":"window-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/window-node.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { PlanNode } from './plan-node.js';
3
3
  import { Cached } from '../../util/cached.js';
4
4
  import { quereusError } from '../../common/errors.js';
5
5
  import { StatusCode } from '../../common/types.js';
6
+ import { ColumnReferenceNode } from './reference.js';
6
7
  /**
7
8
  * Represents a window operation that computes window functions over partitions of rows.
8
9
  * This node groups window functions that share the same window specification for efficiency.
@@ -15,12 +16,15 @@ export class WindowNode extends PlanNode {
15
16
  orderByExpressions;
16
17
  functionArguments;
17
18
  predefinedAttributes;
19
+ streaming;
18
20
  nodeType = PlanNodeType.Window;
19
21
  outputTypeCache;
20
22
  attributesCache;
21
23
  constructor(scope, source, windowSpec, functions, partitionExpressions, orderByExpressions, functionArguments, estimatedCostOverride,
22
24
  /** Optional predefined attributes for preserving IDs during optimization */
23
- predefinedAttributes) {
25
+ predefinedAttributes,
26
+ /** Set by `rule-monotonic-window` when the source streams in window order. */
27
+ streaming) {
24
28
  super(scope, estimatedCostOverride);
25
29
  this.source = source;
26
30
  this.windowSpec = windowSpec;
@@ -29,6 +33,7 @@ export class WindowNode extends PlanNode {
29
33
  this.orderByExpressions = orderByExpressions;
30
34
  this.functionArguments = functionArguments;
31
35
  this.predefinedAttributes = predefinedAttributes;
36
+ this.streaming = streaming;
32
37
  this.outputTypeCache = new Cached(() => {
33
38
  const sourceType = this.source.getType();
34
39
  // Add window function columns to the source columns
@@ -118,11 +123,61 @@ export class WindowNode extends PlanNode {
118
123
  // Preserve attributes only when the source is unchanged so that column IDs
119
124
  // stay consistent. If the source relation changed, let the WindowNode rebuild
120
125
  // its attribute list so that descriptors match the new underlying schema.
121
- sourceChanged ? undefined : originalAttributes);
126
+ sourceChanged ? undefined : originalAttributes, this.streaming);
127
+ }
128
+ /** Return a new WindowNode with the given streaming config attached. */
129
+ withStreaming(config) {
130
+ return new WindowNode(this.scope, this.source, this.windowSpec, this.functions, this.partitionExpressions, this.orderByExpressions, this.functionArguments, undefined, this.getAttributes(), config);
122
131
  }
123
132
  getRelations() {
124
133
  return [this.source];
125
134
  }
135
+ computePhysical(childrenPhysical) {
136
+ const sourcePhysical = childrenPhysical[0];
137
+ // Window output ordering is determined by [PARTITION BY, ORDER BY]:
138
+ // - streaming set: the runtime walks the source in source order and emits
139
+ // in source order — windowing is row-pass-through. Source's monotonicOn
140
+ // survives unchanged.
141
+ // - PARTITION BY non-empty (buffered): the runtime groups rows by partition
142
+ // key in insertion order then sorts within each partition, so a
143
+ // single-attribute monotonicOn does not survive at the relation level.
144
+ // - PARTITION BY empty, ORDER BY present (buffered): output is sorted by
145
+ // the window's ORDER BY — derive monotonicOn from the leading key
146
+ // (mirrors SortNode).
147
+ // - PARTITION BY empty, ORDER BY empty: rows pass through in source order;
148
+ // preserve source's monotonicOn unchanged.
149
+ // TODO: the partitioned case can be tightened (e.g. when the partition keys
150
+ // themselves are functionally determined by the candidate attribute) — out
151
+ // of scope for the carrier ticket.
152
+ let monotonicOn;
153
+ if (this.streaming) {
154
+ monotonicOn = sourcePhysical?.monotonicOn;
155
+ }
156
+ else if (this.partitionExpressions.length === 0) {
157
+ if (this.orderByExpressions.length === 0) {
158
+ monotonicOn = sourcePhysical?.monotonicOn;
159
+ }
160
+ else {
161
+ const leadExpr = this.orderByExpressions[0];
162
+ if (leadExpr instanceof ColumnReferenceNode) {
163
+ const sourceAttrs = this.source.getAttributes();
164
+ const leadAttrId = leadExpr.attributeId;
165
+ const leadIdx = sourceAttrs.findIndex(a => a.id === leadAttrId);
166
+ if (leadIdx >= 0) {
167
+ const direction = this.windowSpec.orderBy[0]?.direction === 'desc' ? 'desc' : 'asc';
168
+ const strict = (sourcePhysical?.uniqueKeys ?? []).some(key => key.length === 1 && key[0] === leadIdx);
169
+ monotonicOn = [{ attrId: leadAttrId, direction, strict }];
170
+ }
171
+ }
172
+ }
173
+ }
174
+ return {
175
+ estimatedRows: this.estimatedRows,
176
+ ordering: sourcePhysical?.ordering,
177
+ uniqueKeys: sourcePhysical?.uniqueKeys,
178
+ monotonicOn,
179
+ };
180
+ }
126
181
  get estimatedRows() {
127
182
  return this.source.estimatedRows; // Window functions don't change row count
128
183
  }
@@ -138,7 +193,7 @@ export class WindowNode extends PlanNode {
138
193
  return `WINDOW ${funcNames} OVER (${clauses})`;
139
194
  }
140
195
  getLogicalAttributes() {
141
- return {
196
+ const attrs = {
142
197
  windowSpec: {
143
198
  partitionBy: this.windowSpec.partitionBy.length,
144
199
  orderBy: this.windowSpec.orderBy.length,
@@ -150,6 +205,12 @@ export class WindowNode extends PlanNode {
150
205
  distinct: f.isDistinct
151
206
  }))
152
207
  };
208
+ if (this.streaming) {
209
+ attrs.streaming = {
210
+ modes: this.streaming.modes.map(m => m.kind),
211
+ };
212
+ }
213
+ return attrs;
153
214
  }
154
215
  }
155
216
  //# sourceMappingURL=window-node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"window-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/window-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"window-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/window-node.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,15 @@ export interface OptimizerTuning {
42
42
  /** Whether spill caching is enabled */
43
43
  readonly spillEnabled: boolean;
44
44
  };
45
+ /** AsofScan emitter strategy selection */
46
+ readonly asof: {
47
+ /**
48
+ * Right-side row count below which the hash strategy is preferred over
49
+ * merge. Below this threshold, hash buffering's constant factors beat
50
+ * the merge variant's per-row state bookkeeping.
51
+ */
52
+ readonly mergeRowThreshold: number;
53
+ };
45
54
  /** Set of rule IDs to skip during optimization (test/debug use) */
46
55
  readonly disabledRules?: ReadonlySet<string>;
47
56
  /** Development and debugging options */
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer-tuning.d.ts","sourceRoot":"","sources":["../../../src/planner/optimizer-tuning.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,8BAA8B;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAEpC,+DAA+D;IAC/D,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IAEtC,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE;QACd,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;QACvC,uCAAuC;QACvC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;QACxC,0DAA0D;QAC1D,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;QAC1C,8BAA8B;QAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;KACnC,CAAC;IAEF,uBAAuB;IACvB,QAAQ,CAAC,GAAG,EAAE;QACb,+CAA+C;QAC/C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,0CAA0C;QAC1C,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;QAC1C,uCAAuC;QACvC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;KACnC,CAAC;IAEF,kCAAkC;IAClC,QAAQ,CAAC,YAAY,EAAE;QACtB,4EAA4E;QAC5E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,sDAAsD;QACtD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;KACvC,CAAC;IAEF,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE;QACf,gEAAgE;QAChE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,kDAAkD;QAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,uCAAuC;QACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;KAC/B,CAAC;IAEF,mEAAmE;IACnE,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAE7C,wCAAwC;IACxC,QAAQ,CAAC,KAAK,EAAE;QACf,yDAAyD;QACzD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;KAC/B,CAAC;IAEF,wCAAwC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE;QACpB,wDAAwD;QACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,4DAA4D;QAC5D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,yDAAyD;QACzD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,wCAAwC;QACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;KAC1B,CAAC;CACF;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,eAgC5B,CAAC"}
1
+ {"version":3,"file":"optimizer-tuning.d.ts","sourceRoot":"","sources":["../../../src/planner/optimizer-tuning.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,8BAA8B;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAEpC,+DAA+D;IAC/D,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IAEtC,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE;QACd,4DAA4D;QAC5D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;QACvC,uCAAuC;QACvC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;QACxC,0DAA0D;QAC1D,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;QAC1C,8BAA8B;QAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;KACnC,CAAC;IAEF,uBAAuB;IACvB,QAAQ,CAAC,GAAG,EAAE;QACb,+CAA+C;QAC/C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,0CAA0C;QAC1C,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;QAC1C,uCAAuC;QACvC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;KACnC,CAAC;IAEF,kCAAkC;IAClC,QAAQ,CAAC,YAAY,EAAE;QACtB,4EAA4E;QAC5E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,sDAAsD;QACtD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;KACvC,CAAC;IAEF,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE;QACf,gEAAgE;QAChE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,kDAAkD;QAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,uCAAuC;QACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;KAC/B,CAAC;IAEF,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE;QACd;;;;WAIG;QACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;KACnC,CAAC;IAEF,mEAAmE;IACnE,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAE7C,wCAAwC;IACxC,QAAQ,CAAC,KAAK,EAAE;QACf,yDAAyD;QACzD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;KAC/B,CAAC;IAEF,wCAAwC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE;QACpB,wDAAwD;QACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,4DAA4D;QAC5D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,yDAAyD;QACzD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,wCAAwC;QACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;KAC1B,CAAC;CACF;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,eAmC5B,CAAC"}
@@ -24,6 +24,9 @@ export const DEFAULT_TUNING = {
24
24
  maxSpillBuffer: 10000,
25
25
  spillEnabled: true
26
26
  },
27
+ asof: {
28
+ mergeRowThreshold: 10000
29
+ },
27
30
  debug: {
28
31
  validatePlan: false // Default to disabled in production
29
32
  },
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer-tuning.js","sourceRoot":"","sources":["../../../src/planner/optimizer-tuning.ts"],"names":[],"mappings":"AAwEA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC9C,kBAAkB,EAAE,IAAI;IACxB,oBAAoB,EAAE,EAAE;IACxB,IAAI,EAAE;QACL,qBAAqB,EAAE,CAAC;QACxB,sBAAsB,EAAE,KAAK;QAC7B,wBAAwB,EAAE,CAAC;QAC3B,iBAAiB,EAAE,KAAK;KACxB;IACD,GAAG,EAAE;QACJ,iBAAiB,EAAE,KAAK;QACxB,wBAAwB,EAAE,CAAC;QAC3B,iBAAiB,EAAE,KAAK;KACxB;IACD,YAAY,EAAE;QACb,aAAa,EAAE,KAAK;QACpB,qBAAqB,EAAE,KAAK;KAC5B;IACD,KAAK,EAAE;QACN,cAAc,EAAE,MAAM;QACtB,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,IAAI;KAClB;IACD,KAAK,EAAE;QACN,YAAY,EAAE,KAAK,CAAC,oCAAoC;KACxD;IACD,SAAS,EAAE;QACV,QAAQ,EAAE,GAAG;QACb,WAAW,EAAE,GAAG;QAChB,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI;KACb;CACD,CAAC"}
1
+ {"version":3,"file":"optimizer-tuning.js","sourceRoot":"","sources":["../../../src/planner/optimizer-tuning.ts"],"names":[],"mappings":"AAkFA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC9C,kBAAkB,EAAE,IAAI;IACxB,oBAAoB,EAAE,EAAE;IACxB,IAAI,EAAE;QACL,qBAAqB,EAAE,CAAC;QACxB,sBAAsB,EAAE,KAAK;QAC7B,wBAAwB,EAAE,CAAC;QAC3B,iBAAiB,EAAE,KAAK;KACxB;IACD,GAAG,EAAE;QACJ,iBAAiB,EAAE,KAAK;QACxB,wBAAwB,EAAE,CAAC;QAC3B,iBAAiB,EAAE,KAAK;KACxB;IACD,YAAY,EAAE;QACb,aAAa,EAAE,KAAK;QACpB,qBAAqB,EAAE,KAAK;KAC5B;IACD,KAAK,EAAE;QACN,cAAc,EAAE,MAAM;QACtB,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,IAAI;KAClB;IACD,IAAI,EAAE;QACL,iBAAiB,EAAE,KAAK;KACxB;IACD,KAAK,EAAE;QACN,YAAY,EAAE,KAAK,CAAC,oCAAoC;KACxD;IACD,SAAS,EAAE;QACV,QAAQ,EAAE,GAAG;QACb,WAAW,EAAE,GAAG;QAChB,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI;KACb;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["../../../src/planner/optimizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,CAAC;AAI1B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA0BnE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAI/C;;GAEG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,eAAe,CAAqC;IACrD,MAAM,EAAE,eAAe,CAAC;gBAG9B,MAAM,GAAE,eAAgC,EACxC,KAAK,CAAC,EAAE,aAAa;IAUtB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAI3C,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAS;IAE7C;;OAEG;IAEH;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA6L7B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,QAAQ;IAgChD;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,QAAQ;IAe3D,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ;IAuC3D,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,QAAQ,IAAI,aAAa;IAIzB,qDAAqD;IACrD,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CAGjD"}
1
+ {"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["../../../src/planner/optimizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,CAAC;AAI1B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAgCnE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAI/C;;GAEG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,eAAe,CAAqC;IACrD,MAAM,EAAE,eAAe,CAAC;gBAG9B,MAAM,GAAE,eAAgC,EACxC,KAAK,CAAC,EAAE,aAAa;IAUtB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAI3C,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAS;IAE7C;;OAEG;IAEH;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwR7B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,QAAQ;IAgChD;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,QAAQ;IAe3D,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ;IAuC3D,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,QAAQ,IAAI,aAAa;IAIzB,qDAAqD;IACrD,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CAGjD"}
@@ -12,6 +12,9 @@ import { PassManager, PassId } from './framework/pass.js';
12
12
  import { ruleMaterializationAdvisory } from './rules/cache/rule-materialization-advisory.js';
13
13
  // Phase 1.5 rules
14
14
  import { ruleSelectAccessPath } from './rules/access/rule-select-access-path.js';
15
+ import { ruleMonotonicLimitPushdown } from './rules/access/rule-monotonic-limit-pushdown.js';
16
+ import { ruleMonotonicRangeAccess } from './rules/access/rule-monotonic-range-access.js';
17
+ import { ruleAsofStrategySelect } from './rules/access/rule-asof-strategy-select.js';
15
18
  import { ruleGrowRetrieve } from './rules/retrieve/rule-grow-retrieve.js';
16
19
  import { rulePredicatePushdown } from './rules/predicate/rule-predicate-pushdown.js';
17
20
  import { ruleFilterMerge } from './rules/predicate/rule-filter-merge.js';
@@ -22,6 +25,9 @@ import { ruleJoinGreedyCommute } from './rules/join/rule-join-greedy-commute.js'
22
25
  import { ruleAggregatePhysical } from './rules/aggregate/rule-aggregate-streaming.js';
23
26
  import { ruleQuickPickJoinEnumeration } from './rules/join/rule-quickpick-enumeration.js';
24
27
  import { ruleJoinPhysicalSelection } from './rules/join/rule-join-physical-selection.js';
28
+ import { ruleMonotonicMergeJoin } from './rules/join/rule-monotonic-merge-join.js';
29
+ import { ruleLateralTop1Asof } from './rules/join/rule-lateral-top1-asof.js';
30
+ import { ruleMonotonicWindow } from './rules/window/rule-monotonic-window.js';
25
31
  // Constraint rules removed - now handled in builders for correctness
26
32
  import { ruleCteOptimization } from './rules/cache/rule-cte-optimization.js';
27
33
  import { ruleMutatingSubqueryCache } from './rules/cache/rule-mutating-subquery-cache.js';
@@ -169,9 +175,42 @@ export class Optimizer {
169
175
  fn: ruleAggregatePhysical,
170
176
  priority: 20
171
177
  });
178
+ // Recognize lateral-top-1 asof. Runs in the Structural pass (before
179
+ // predicate-pushdown at priority 20) so the lateral's Filter still
180
+ // carries the asof predicate intact — predicate-pushdown would
181
+ // otherwise consume it into the inner Retrieve pipeline.
182
+ this.passManager.addRuleToPass(PassId.Structural, {
183
+ id: 'lateral-top1-asof',
184
+ nodeType: PlanNodeType.Join,
185
+ phase: 'rewrite',
186
+ fn: ruleLateralTop1Asof,
187
+ priority: 5
188
+ });
172
189
  // Post-optimization pass rules (bottom-up) - for cleanup and caching
173
190
  // Physical join selection runs here (after Physical pass) so QuickPick can
174
191
  // see the full logical join tree before any physical conversion happens.
192
+ // Monotonic-aware merge-join recognition runs first (lower priority) so
193
+ // it can recognise cases where both sides advertise MonotonicOn but
194
+ // `physical.ordering` does not match positionally — once it converts a
195
+ // Join into a MergeJoin, the ordering-based rule no-ops on it.
196
+ this.passManager.addRuleToPass(PassId.PostOptimization, {
197
+ id: 'monotonic-merge-join',
198
+ nodeType: PlanNodeType.Join,
199
+ phase: 'impl',
200
+ fn: ruleMonotonicMergeJoin,
201
+ priority: 4
202
+ });
203
+ // Monotonic streaming-window recognition. Runs after monotonic-merge-join
204
+ // (priority 4) so child joins have already become MergeJoins and
205
+ // propagate their `monotonicOn`; runs before monotonic-limit-pushdown
206
+ // (priority 8) but does not interact with it (different node type).
207
+ this.passManager.addRuleToPass(PassId.PostOptimization, {
208
+ id: 'monotonic-window',
209
+ nodeType: PlanNodeType.Window,
210
+ phase: 'impl',
211
+ fn: ruleMonotonicWindow,
212
+ priority: 6
213
+ });
175
214
  this.passManager.addRuleToPass(PassId.PostOptimization, {
176
215
  id: 'join-physical-selection',
177
216
  nodeType: PlanNodeType.Join,
@@ -179,6 +218,48 @@ export class Optimizer {
179
218
  fn: ruleJoinPhysicalSelection,
180
219
  priority: 5
181
220
  });
221
+ // Monotonic LIMIT/OFFSET pushdown: replace LimitOffset[/Sort]/access-leaf
222
+ // with OrdinalSlice when the leaf advertises supportsOrdinalSeek. Runs in
223
+ // PostOptimization so the leaf already carries its physical capabilities.
224
+ this.passManager.addRuleToPass(PassId.PostOptimization, {
225
+ id: 'monotonic-limit-pushdown',
226
+ nodeType: PlanNodeType.LimitOffset,
227
+ phase: 'impl',
228
+ fn: ruleMonotonicLimitPushdown,
229
+ priority: 8
230
+ });
231
+ // Monotonic range-scan recognition. Runs on physical leaves to annotate
232
+ // `rangeBoundedOn` when a handled range/equality bounds the monotonic
233
+ // column. Also runs on Filter nodes for the defensive escalation: drop
234
+ // `monotonicOn` from a leaf when an unhandled range predicate sits in a
235
+ // directly-overhead Filter. Runs after the limit pushdown (priority 9)
236
+ // so that an OrdinalSlice rewrite has already replaced any leaf it
237
+ // would have annotated; ordering vs. join-physical-selection (priority 5)
238
+ // is not load-bearing — `rangeBoundedOn` is a pure annotation today and
239
+ // the defensive drop only matters for downstream rules that check
240
+ // `physical.monotonicOn` (asof/merge-join/limit-pushdown), which run
241
+ // later in the same pass or have already run.
242
+ const rangeAccessLeafTypes = [
243
+ PlanNodeType.IndexScan,
244
+ PlanNodeType.IndexSeek,
245
+ PlanNodeType.SeqScan,
246
+ ];
247
+ for (const nodeType of rangeAccessLeafTypes) {
248
+ this.passManager.addRuleToPass(PassId.PostOptimization, {
249
+ id: `monotonic-range-access-${nodeType}`,
250
+ nodeType,
251
+ phase: 'rewrite',
252
+ fn: ruleMonotonicRangeAccess,
253
+ priority: 9
254
+ });
255
+ }
256
+ this.passManager.addRuleToPass(PassId.PostOptimization, {
257
+ id: 'monotonic-range-access-filter',
258
+ nodeType: PlanNodeType.Filter,
259
+ phase: 'rewrite',
260
+ fn: ruleMonotonicRangeAccess,
261
+ priority: 9
262
+ });
182
263
  this.passManager.addRuleToPass(PassId.PostOptimization, {
183
264
  id: 'mutating-subquery-cache',
184
265
  nodeType: PlanNodeType.Join,
@@ -186,6 +267,16 @@ export class Optimizer {
186
267
  fn: ruleMutatingSubqueryCache,
187
268
  priority: 10
188
269
  });
270
+ // AsofScan strategy selection (hash → merge). Runs after the leaves'
271
+ // physical.ordering / monotonicOn are finalized (range-access at
272
+ // priority 9) so the predicate-driven check can read them off.
273
+ this.passManager.addRuleToPass(PassId.PostOptimization, {
274
+ id: 'asof-strategy-select',
275
+ nodeType: PlanNodeType.AsofScan,
276
+ phase: 'impl',
277
+ fn: ruleAsofStrategySelect,
278
+ priority: 11
279
+ });
189
280
  this.passManager.addRuleToPass(PassId.PostOptimization, {
190
281
  id: 'cte-optimization',
191
282
  nodeType: PlanNodeType.CTE,
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../src/planner/optimizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../src/planner/optimizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Rule: AsofScan strategy selection (hash → merge).
3
+ *
4
+ * Promotes an `AsofScanNode` from the default `'hash'` strategy to the
5
+ * co-streaming `'merge'` strategy when:
6
+ *
7
+ * - Both children advertise `physical.ordering` whose leading
8
+ * `partitionAttrs.length + 1` entries form `[partition cols..., matchAttr]`.
9
+ * - At each partition position, left and right's attribute IDs pair up via
10
+ * a `partitionAttrs` equi-pair, in the same direction on both sides.
11
+ * - The trailing match-attr ordering on each side is ASC. The merge emitter
12
+ * walks both inputs forward — `direction='desc'` (latest right ≤ left)
13
+ * accumulates the largest qualifier seen; `direction='asc'` (earliest
14
+ * right ≥ left) returns the first qualifier. Both forms assume ASC sort
15
+ * on the matchAttr; that aligns with how access-path `monotonicOn` is
16
+ * advertised today (always ascending).
17
+ * - The right's estimated row count meets the configured
18
+ * `tuning.asof.mergeRowThreshold` — below it, hash's constant factors win.
19
+ *
20
+ * Bails to `null` (leaving the hash strategy) on any failure.
21
+ *
22
+ * The merge strategy streams memory O(1) and emits as left rows arrive,
23
+ * unlike the hash variant's O(R) buffering and full-right-arrival latency.
24
+ * Cost is O(L + R) for both — only constant factors differ — so this is a
25
+ * predicate-driven rewrite rather than enumerate-and-cost.
26
+ */
27
+ import type { PlanNode } from '../../nodes/plan-node.js';
28
+ import type { OptContext } from '../../framework/context.js';
29
+ export declare function ruleAsofStrategySelect(node: PlanNode, ctx: OptContext): PlanNode | null;
30
+ //# sourceMappingURL=rule-asof-strategy-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-asof-strategy-select.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-asof-strategy-select.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AA+B7D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CA6EvF"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Rule: AsofScan strategy selection (hash → merge).
3
+ *
4
+ * Promotes an `AsofScanNode` from the default `'hash'` strategy to the
5
+ * co-streaming `'merge'` strategy when:
6
+ *
7
+ * - Both children advertise `physical.ordering` whose leading
8
+ * `partitionAttrs.length + 1` entries form `[partition cols..., matchAttr]`.
9
+ * - At each partition position, left and right's attribute IDs pair up via
10
+ * a `partitionAttrs` equi-pair, in the same direction on both sides.
11
+ * - The trailing match-attr ordering on each side is ASC. The merge emitter
12
+ * walks both inputs forward — `direction='desc'` (latest right ≤ left)
13
+ * accumulates the largest qualifier seen; `direction='asc'` (earliest
14
+ * right ≥ left) returns the first qualifier. Both forms assume ASC sort
15
+ * on the matchAttr; that aligns with how access-path `monotonicOn` is
16
+ * advertised today (always ascending).
17
+ * - The right's estimated row count meets the configured
18
+ * `tuning.asof.mergeRowThreshold` — below it, hash's constant factors win.
19
+ *
20
+ * Bails to `null` (leaving the hash strategy) on any failure.
21
+ *
22
+ * The merge strategy streams memory O(1) and emits as left rows arrive,
23
+ * unlike the hash variant's O(R) buffering and full-right-arrival latency.
24
+ * Cost is O(L + R) for both — only constant factors differ — so this is a
25
+ * predicate-driven rewrite rather than enumerate-and-cost.
26
+ */
27
+ import { createLogger } from '../../../common/logger.js';
28
+ import { AsofScanNode } from '../../nodes/asof-scan-node.js';
29
+ const log = createLogger('optimizer:rule:asof-strategy-select');
30
+ /**
31
+ * Translate the leading `prefixLen` ordering entries on a child to
32
+ * (attrId, desc) pairs. Returns null when the ordering is shorter than
33
+ * required or contains entries that do not map to a known attribute.
34
+ */
35
+ function mapLeadingOrdering(ordering, attrs, prefixLen) {
36
+ if (!ordering || ordering.length < prefixLen)
37
+ return null;
38
+ const out = [];
39
+ for (let i = 0; i < prefixLen; i++) {
40
+ const entry = ordering[i];
41
+ const attr = attrs[entry.column];
42
+ if (!attr)
43
+ return null;
44
+ out.push({ attrId: attr.id, desc: entry.desc });
45
+ }
46
+ return out;
47
+ }
48
+ export function ruleAsofStrategySelect(node, ctx) {
49
+ if (!(node instanceof AsofScanNode))
50
+ return null;
51
+ if (node.strategy !== 'hash')
52
+ return null;
53
+ const partitionLen = node.partitionAttrs.length;
54
+ const prefixLen = partitionLen + 1;
55
+ const leftAttrs = node.left.getAttributes();
56
+ const rightAttrs = node.right.getAttributes();
57
+ const leftOrdering = mapLeadingOrdering(node.left.physical.ordering, leftAttrs, prefixLen);
58
+ if (!leftOrdering) {
59
+ log('Left does not provide a long enough ordering prefix (need %d)', prefixLen);
60
+ return null;
61
+ }
62
+ const rightOrdering = mapLeadingOrdering(node.right.physical.ordering, rightAttrs, prefixLen);
63
+ if (!rightOrdering) {
64
+ log('Right does not provide a long enough ordering prefix (need %d)', prefixLen);
65
+ return null;
66
+ }
67
+ // Partition prefix: at each ordering position, left's attr-id must be the
68
+ // `leftAttrId` of one of the partition pairs; the same position on the
69
+ // right must carry the corresponding `rightAttrId`. Directions must match.
70
+ const remainingPairs = node.partitionAttrs.slice();
71
+ for (let i = 0; i < partitionLen; i++) {
72
+ const leftEntry = leftOrdering[i];
73
+ const rightEntry = rightOrdering[i];
74
+ if (leftEntry.desc !== rightEntry.desc) {
75
+ log('Direction mismatch at partition position %d (left=%s, right=%s)', i, leftEntry.desc ? 'desc' : 'asc', rightEntry.desc ? 'desc' : 'asc');
76
+ return null;
77
+ }
78
+ const pairIdx = remainingPairs.findIndex(p => p.leftAttrId === leftEntry.attrId && p.rightAttrId === rightEntry.attrId);
79
+ if (pairIdx < 0) {
80
+ log('Position %d (left=%d, right=%d) does not pair via partitionAttrs', i, leftEntry.attrId, rightEntry.attrId);
81
+ return null;
82
+ }
83
+ remainingPairs.splice(pairIdx, 1);
84
+ }
85
+ // Trailing entry on each side must be the asof match attribute, ASC.
86
+ // The merge emitter walks both inputs forward; that requires ascending
87
+ // match-attr ordering on both sides regardless of the asof direction.
88
+ const tailLeft = leftOrdering[partitionLen];
89
+ const tailRight = rightOrdering[partitionLen];
90
+ if (tailLeft.attrId !== node.matchAttr.leftAttrId) {
91
+ log('Left ordering tail (attr=%d) is not the match attr (attr=%d)', tailLeft.attrId, node.matchAttr.leftAttrId);
92
+ return null;
93
+ }
94
+ if (tailRight.attrId !== node.matchAttr.rightAttrId) {
95
+ log('Right ordering tail (attr=%d) is not the match attr (attr=%d)', tailRight.attrId, node.matchAttr.rightAttrId);
96
+ return null;
97
+ }
98
+ if (tailLeft.desc || tailRight.desc) {
99
+ log('Match-attr ordering must be ASC on both sides (left=%s, right=%s)', tailLeft.desc ? 'desc' : 'asc', tailRight.desc ? 'desc' : 'asc');
100
+ return null;
101
+ }
102
+ // Threshold gate.
103
+ const tuning = ctx.tuning;
104
+ const rightRows = node.right.estimatedRows ?? tuning.defaultRowEstimate;
105
+ if (rightRows < tuning.asof.mergeRowThreshold) {
106
+ log('Right estimated rows (%d) below merge threshold (%d); keeping hash', rightRows, tuning.asof.mergeRowThreshold);
107
+ return null;
108
+ }
109
+ log('Promoting AsofScan to merge strategy (rightRows=%d, partitionCols=%d)', rightRows, partitionLen);
110
+ return node.withStrategy('merge');
111
+ }
112
+ //# sourceMappingURL=rule-asof-strategy-select.js.map