@quereus/quereus 2.8.0 → 3.0.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 (454) hide show
  1. package/README.md +224 -222
  2. package/dist/src/core/database-assertions.d.ts +36 -16
  3. package/dist/src/core/database-assertions.d.ts.map +1 -1
  4. package/dist/src/core/database-assertions.js +222 -118
  5. package/dist/src/core/database-assertions.js.map +1 -1
  6. package/dist/src/core/database-transaction.d.ts +96 -13
  7. package/dist/src/core/database-transaction.d.ts.map +1 -1
  8. package/dist/src/core/database-transaction.js +294 -35
  9. package/dist/src/core/database-transaction.js.map +1 -1
  10. package/dist/src/core/database-watchers.d.ts +58 -0
  11. package/dist/src/core/database-watchers.d.ts.map +1 -0
  12. package/dist/src/core/database-watchers.js +206 -0
  13. package/dist/src/core/database-watchers.js.map +1 -0
  14. package/dist/src/core/database.d.ts +78 -5
  15. package/dist/src/core/database.d.ts.map +1 -1
  16. package/dist/src/core/database.js +120 -20
  17. package/dist/src/core/database.js.map +1 -1
  18. package/dist/src/core/statement.d.ts +9 -0
  19. package/dist/src/core/statement.d.ts.map +1 -1
  20. package/dist/src/core/statement.js +29 -0
  21. package/dist/src/core/statement.js.map +1 -1
  22. package/dist/src/core/table-handle.d.ts +45 -0
  23. package/dist/src/core/table-handle.d.ts.map +1 -0
  24. package/dist/src/core/table-handle.js +54 -0
  25. package/dist/src/core/table-handle.js.map +1 -0
  26. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  27. package/dist/src/emit/ast-stringify.js +0 -3
  28. package/dist/src/emit/ast-stringify.js.map +1 -1
  29. package/dist/src/func/builtins/conversion.d.ts.map +1 -1
  30. package/dist/src/func/builtins/conversion.js +12 -1
  31. package/dist/src/func/builtins/conversion.js.map +1 -1
  32. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  33. package/dist/src/func/builtins/explain.js +22 -8
  34. package/dist/src/func/builtins/explain.js.map +1 -1
  35. package/dist/src/func/builtins/generation.d.ts.map +1 -1
  36. package/dist/src/func/builtins/generation.js +26 -1
  37. package/dist/src/func/builtins/generation.js.map +1 -1
  38. package/dist/src/func/builtins/index.d.ts.map +1 -1
  39. package/dist/src/func/builtins/index.js +5 -1
  40. package/dist/src/func/builtins/index.js.map +1 -1
  41. package/dist/src/func/builtins/json-tvf.d.ts.map +1 -1
  42. package/dist/src/func/builtins/json-tvf.js +16 -2
  43. package/dist/src/func/builtins/json-tvf.js.map +1 -1
  44. package/dist/src/func/builtins/schema.d.ts +4 -0
  45. package/dist/src/func/builtins/schema.d.ts.map +1 -1
  46. package/dist/src/func/builtins/schema.js +270 -11
  47. package/dist/src/func/builtins/schema.js.map +1 -1
  48. package/dist/src/func/registration.d.ts +19 -1
  49. package/dist/src/func/registration.d.ts.map +1 -1
  50. package/dist/src/func/registration.js +8 -3
  51. package/dist/src/func/registration.js.map +1 -1
  52. package/dist/src/index.d.ts +7 -1
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/index.js +5 -0
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/parser/ast.d.ts +3 -2
  57. package/dist/src/parser/ast.d.ts.map +1 -1
  58. package/dist/src/parser/parser.d.ts.map +1 -1
  59. package/dist/src/parser/parser.js +25 -8
  60. package/dist/src/parser/parser.js.map +1 -1
  61. package/dist/src/planner/analysis/assertion-classifier.d.ts +71 -0
  62. package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -0
  63. package/dist/src/planner/analysis/assertion-classifier.js +286 -0
  64. package/dist/src/planner/analysis/assertion-classifier.js.map +1 -0
  65. package/dist/src/planner/analysis/assertion-hoist-cache.d.ts +34 -0
  66. package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -0
  67. package/dist/src/planner/analysis/assertion-hoist-cache.js +119 -0
  68. package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -0
  69. package/dist/src/planner/analysis/binding-extractor.d.ts +58 -0
  70. package/dist/src/planner/analysis/binding-extractor.d.ts.map +1 -0
  71. package/dist/src/planner/analysis/binding-extractor.js +110 -0
  72. package/dist/src/planner/analysis/binding-extractor.js.map +1 -0
  73. package/dist/src/planner/analysis/change-scope.d.ts +184 -0
  74. package/dist/src/planner/analysis/change-scope.d.ts.map +1 -0
  75. package/dist/src/planner/analysis/change-scope.js +825 -0
  76. package/dist/src/planner/analysis/change-scope.js.map +1 -0
  77. package/dist/src/planner/analysis/check-extraction.d.ts +29 -0
  78. package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -0
  79. package/dist/src/planner/analysis/check-extraction.js +420 -0
  80. package/dist/src/planner/analysis/check-extraction.js.map +1 -0
  81. package/dist/src/planner/analysis/constraint-extractor.d.ts +47 -7
  82. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  83. package/dist/src/planner/analysis/constraint-extractor.js +169 -92
  84. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  85. package/dist/src/planner/analysis/partial-unique-extraction.d.ts +68 -0
  86. package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -0
  87. package/dist/src/planner/analysis/partial-unique-extraction.js +347 -0
  88. package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -0
  89. package/dist/src/planner/analysis/predicate-conjuncts.d.ts +14 -0
  90. package/dist/src/planner/analysis/predicate-conjuncts.d.ts.map +1 -0
  91. package/dist/src/planner/analysis/predicate-conjuncts.js +31 -0
  92. package/dist/src/planner/analysis/predicate-conjuncts.js.map +1 -0
  93. package/dist/src/planner/analysis/predicate-shape.d.ts +52 -0
  94. package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -0
  95. package/dist/src/planner/analysis/predicate-shape.js +119 -0
  96. package/dist/src/planner/analysis/predicate-shape.js.map +1 -0
  97. package/dist/src/planner/analysis/sat-checker.d.ts +43 -0
  98. package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -0
  99. package/dist/src/planner/analysis/sat-checker.js +393 -0
  100. package/dist/src/planner/analysis/sat-checker.js.map +1 -0
  101. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  102. package/dist/src/planner/building/foreign-key-builder.js +3 -2
  103. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  104. package/dist/src/planner/building/select.js +14 -2
  105. package/dist/src/planner/building/select.js.map +1 -1
  106. package/dist/src/planner/building/table.d.ts.map +1 -1
  107. package/dist/src/planner/building/table.js +1 -1
  108. package/dist/src/planner/building/table.js.map +1 -1
  109. package/dist/src/planner/building/update.d.ts.map +1 -1
  110. package/dist/src/planner/building/update.js +10 -6
  111. package/dist/src/planner/building/update.js.map +1 -1
  112. package/dist/src/planner/framework/characteristics.d.ts +13 -2
  113. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  114. package/dist/src/planner/framework/characteristics.js +31 -5
  115. package/dist/src/planner/framework/characteristics.js.map +1 -1
  116. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  117. package/dist/src/planner/framework/pass.js +46 -16
  118. package/dist/src/planner/framework/pass.js.map +1 -1
  119. package/dist/src/planner/framework/physical-utils.d.ts +21 -9
  120. package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
  121. package/dist/src/planner/framework/physical-utils.js +47 -31
  122. package/dist/src/planner/framework/physical-utils.js.map +1 -1
  123. package/dist/src/planner/nodes/aggregate-node.d.ts +25 -0
  124. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  125. package/dist/src/planner/nodes/aggregate-node.js +75 -8
  126. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  127. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  128. package/dist/src/planner/nodes/alias-node.js +8 -1
  129. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  130. package/dist/src/planner/nodes/asof-scan-node.d.ts +137 -0
  131. package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -0
  132. package/dist/src/planner/nodes/asof-scan-node.js +237 -0
  133. package/dist/src/planner/nodes/asof-scan-node.js.map +1 -0
  134. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  135. package/dist/src/planner/nodes/bloom-join-node.js +19 -9
  136. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  137. package/dist/src/planner/nodes/constraint-check-node.d.ts +3 -0
  138. package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
  139. package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
  140. package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
  141. package/dist/src/planner/nodes/distinct-node.js +17 -6
  142. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  143. package/dist/src/planner/nodes/empty-relation-node.d.ts +27 -0
  144. package/dist/src/planner/nodes/empty-relation-node.d.ts.map +1 -0
  145. package/dist/src/planner/nodes/empty-relation-node.js +61 -0
  146. package/dist/src/planner/nodes/empty-relation-node.js.map +1 -0
  147. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  148. package/dist/src/planner/nodes/filter.js +67 -5
  149. package/dist/src/planner/nodes/filter.js.map +1 -1
  150. package/dist/src/planner/nodes/function.d.ts +11 -1
  151. package/dist/src/planner/nodes/function.d.ts.map +1 -1
  152. package/dist/src/planner/nodes/function.js +94 -1
  153. package/dist/src/planner/nodes/function.js.map +1 -1
  154. package/dist/src/planner/nodes/hash-aggregate.d.ts +1 -1
  155. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  156. package/dist/src/planner/nodes/hash-aggregate.js +10 -6
  157. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  158. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  159. package/dist/src/planner/nodes/join-node.js +21 -10
  160. package/dist/src/planner/nodes/join-node.js.map +1 -1
  161. package/dist/src/planner/nodes/join-utils.d.ts +42 -1
  162. package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
  163. package/dist/src/planner/nodes/join-utils.js +132 -0
  164. package/dist/src/planner/nodes/join-utils.js.map +1 -1
  165. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  166. package/dist/src/planner/nodes/limit-offset.js +8 -1
  167. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  168. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  169. package/dist/src/planner/nodes/merge-join-node.js +22 -9
  170. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  171. package/dist/src/planner/nodes/ordinal-slice-node.d.ts +50 -0
  172. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -0
  173. package/dist/src/planner/nodes/ordinal-slice-node.js +130 -0
  174. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -0
  175. package/dist/src/planner/nodes/plan-node-type.d.ts +3 -0
  176. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  177. package/dist/src/planner/nodes/plan-node-type.js +3 -0
  178. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  179. package/dist/src/planner/nodes/plan-node.d.ts +316 -5
  180. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  181. package/dist/src/planner/nodes/plan-node.js +49 -0
  182. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  183. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  184. package/dist/src/planner/nodes/project-node.js +78 -28
  185. package/dist/src/planner/nodes/project-node.js.map +1 -1
  186. package/dist/src/planner/nodes/reference.d.ts +27 -2
  187. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  188. package/dist/src/planner/nodes/reference.js +117 -1
  189. package/dist/src/planner/nodes/reference.js.map +1 -1
  190. package/dist/src/planner/nodes/retrieve-node.d.ts +9 -1
  191. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  192. package/dist/src/planner/nodes/retrieve-node.js +21 -0
  193. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  194. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  195. package/dist/src/planner/nodes/returning-node.js +64 -28
  196. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  197. package/dist/src/planner/nodes/scalar.d.ts +8 -1
  198. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  199. package/dist/src/planner/nodes/scalar.js +112 -1
  200. package/dist/src/planner/nodes/scalar.js.map +1 -1
  201. package/dist/src/planner/nodes/set-operation-node.d.ts +2 -1
  202. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  203. package/dist/src/planner/nodes/set-operation-node.js +24 -0
  204. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  205. package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
  206. package/dist/src/planner/nodes/single-row.js +3 -1
  207. package/dist/src/planner/nodes/single-row.js.map +1 -1
  208. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  209. package/dist/src/planner/nodes/sort.js +28 -1
  210. package/dist/src/planner/nodes/sort.js.map +1 -1
  211. package/dist/src/planner/nodes/stream-aggregate.d.ts +1 -1
  212. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  213. package/dist/src/planner/nodes/stream-aggregate.js +10 -8
  214. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  215. package/dist/src/planner/nodes/table-access-nodes.d.ts +40 -5
  216. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  217. package/dist/src/planner/nodes/table-access-nodes.js +113 -18
  218. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  219. package/dist/src/planner/nodes/table-function-call.d.ts +4 -1
  220. package/dist/src/planner/nodes/table-function-call.d.ts.map +1 -1
  221. package/dist/src/planner/nodes/table-function-call.js +224 -14
  222. package/dist/src/planner/nodes/table-function-call.js.map +1 -1
  223. package/dist/src/planner/nodes/update-node.d.ts +1 -3
  224. package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
  225. package/dist/src/planner/nodes/update-node.js +3 -9
  226. package/dist/src/planner/nodes/update-node.js.map +1 -1
  227. package/dist/src/planner/nodes/window-node.d.ts +61 -2
  228. package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
  229. package/dist/src/planner/nodes/window-node.js +71 -3
  230. package/dist/src/planner/nodes/window-node.js.map +1 -1
  231. package/dist/src/planner/optimizer-tuning.d.ts +38 -1
  232. package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
  233. package/dist/src/planner/optimizer-tuning.js +6 -0
  234. package/dist/src/planner/optimizer-tuning.js.map +1 -1
  235. package/dist/src/planner/optimizer.d.ts.map +1 -1
  236. package/dist/src/planner/optimizer.js +278 -0
  237. package/dist/src/planner/optimizer.js.map +1 -1
  238. package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts +30 -0
  239. package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts.map +1 -0
  240. package/dist/src/planner/rules/access/rule-asof-strategy-select.js +112 -0
  241. package/dist/src/planner/rules/access/rule-asof-strategy-select.js.map +1 -0
  242. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts +33 -0
  243. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts.map +1 -0
  244. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js +162 -0
  245. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js.map +1 -0
  246. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts +29 -0
  247. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -0
  248. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +175 -0
  249. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -0
  250. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  251. package/dist/src/planner/rules/access/rule-select-access-path.js +53 -17
  252. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  253. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +30 -0
  254. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -0
  255. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +116 -0
  256. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -0
  257. package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts +7 -7
  258. package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts.map +1 -1
  259. package/dist/src/planner/rules/distinct/rule-distinct-elimination.js +18 -16
  260. package/dist/src/planner/rules/distinct/rule-distinct-elimination.js.map +1 -1
  261. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +61 -0
  262. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -0
  263. package/dist/src/planner/rules/join/equi-pair-extractor.js +155 -0
  264. package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -0
  265. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +56 -0
  266. package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -0
  267. package/dist/src/planner/rules/join/rule-join-elimination.js +326 -0
  268. package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -0
  269. package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
  270. package/dist/src/planner/rules/join/rule-join-greedy-commute.js +10 -2
  271. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
  272. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  273. package/dist/src/planner/rules/join/rule-join-physical-selection.js +2 -122
  274. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  275. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts +21 -0
  276. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -0
  277. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +405 -0
  278. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -0
  279. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +31 -0
  280. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -0
  281. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +113 -0
  282. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -0
  283. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts +20 -0
  284. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -0
  285. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +181 -0
  286. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -0
  287. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +46 -0
  288. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -0
  289. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +156 -0
  290. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -0
  291. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts +30 -0
  292. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -0
  293. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +60 -0
  294. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -0
  295. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts +45 -0
  296. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -0
  297. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +210 -0
  298. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -0
  299. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts +29 -0
  300. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts.map +1 -0
  301. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +161 -0
  302. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -0
  303. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +39 -0
  304. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts.map +1 -0
  305. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +91 -0
  306. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -0
  307. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts +35 -0
  308. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -0
  309. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +74 -0
  310. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -0
  311. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts +27 -0
  312. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -0
  313. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +103 -0
  314. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -0
  315. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  316. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +1 -25
  317. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  318. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +47 -0
  319. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -0
  320. package/dist/src/planner/rules/window/rule-monotonic-window.js +341 -0
  321. package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -0
  322. package/dist/src/planner/scopes/global.js +2 -2
  323. package/dist/src/planner/scopes/global.js.map +1 -1
  324. package/dist/src/planner/type-utils.d.ts.map +1 -1
  325. package/dist/src/planner/type-utils.js +11 -0
  326. package/dist/src/planner/type-utils.js.map +1 -1
  327. package/dist/src/planner/util/fd-utils.d.ts +245 -0
  328. package/dist/src/planner/util/fd-utils.d.ts.map +1 -0
  329. package/dist/src/planner/util/fd-utils.js +1416 -0
  330. package/dist/src/planner/util/fd-utils.js.map +1 -0
  331. package/dist/src/planner/util/ind-utils.d.ts +79 -0
  332. package/dist/src/planner/util/ind-utils.d.ts.map +1 -0
  333. package/dist/src/planner/util/ind-utils.js +146 -0
  334. package/dist/src/planner/util/ind-utils.js.map +1 -0
  335. package/dist/src/planner/util/key-utils.d.ts +75 -14
  336. package/dist/src/planner/util/key-utils.d.ts.map +1 -1
  337. package/dist/src/planner/util/key-utils.js +234 -57
  338. package/dist/src/planner/util/key-utils.js.map +1 -1
  339. package/dist/src/runtime/context-helpers.d.ts +9 -0
  340. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  341. package/dist/src/runtime/context-helpers.js +5 -0
  342. package/dist/src/runtime/context-helpers.js.map +1 -1
  343. package/dist/src/runtime/delta-executor.d.ts +134 -0
  344. package/dist/src/runtime/delta-executor.d.ts.map +1 -0
  345. package/dist/src/runtime/delta-executor.js +382 -0
  346. package/dist/src/runtime/delta-executor.js.map +1 -0
  347. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  348. package/dist/src/runtime/emit/alter-table.js +52 -16
  349. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  350. package/dist/src/runtime/emit/asof-scan.d.ts +10 -0
  351. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -0
  352. package/dist/src/runtime/emit/asof-scan.js +467 -0
  353. package/dist/src/runtime/emit/asof-scan.js.map +1 -0
  354. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  355. package/dist/src/runtime/emit/constraint-check.js +20 -0
  356. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  357. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  358. package/dist/src/runtime/emit/create-assertion.js +3 -2
  359. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  360. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  361. package/dist/src/runtime/emit/dml-executor.js +40 -13
  362. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  363. package/dist/src/runtime/emit/drop-assertion.js +1 -1
  364. package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
  365. package/dist/src/runtime/emit/empty-relation.d.ts +5 -0
  366. package/dist/src/runtime/emit/empty-relation.d.ts.map +1 -0
  367. package/dist/src/runtime/emit/empty-relation.js +11 -0
  368. package/dist/src/runtime/emit/empty-relation.js.map +1 -0
  369. package/dist/src/runtime/emit/ordinal-slice.d.ts +13 -0
  370. package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -0
  371. package/dist/src/runtime/emit/ordinal-slice.js +89 -0
  372. package/dist/src/runtime/emit/ordinal-slice.js.map +1 -0
  373. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  374. package/dist/src/runtime/emit/returning.js +9 -4
  375. package/dist/src/runtime/emit/returning.js.map +1 -1
  376. package/dist/src/runtime/emit/scan.d.ts +19 -3
  377. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  378. package/dist/src/runtime/emit/scan.js +12 -8
  379. package/dist/src/runtime/emit/scan.js.map +1 -1
  380. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  381. package/dist/src/runtime/emit/schema-declarative.js +91 -14
  382. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  383. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  384. package/dist/src/runtime/emit/window.js +732 -37
  385. package/dist/src/runtime/emit/window.js.map +1 -1
  386. package/dist/src/runtime/foreign-key-actions.d.ts +16 -0
  387. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  388. package/dist/src/runtime/foreign-key-actions.js +86 -5
  389. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  390. package/dist/src/runtime/register.d.ts.map +1 -1
  391. package/dist/src/runtime/register.js +6 -0
  392. package/dist/src/runtime/register.js.map +1 -1
  393. package/dist/src/schema/assertion.d.ts +8 -0
  394. package/dist/src/schema/assertion.d.ts.map +1 -1
  395. package/dist/src/schema/catalog.d.ts +10 -0
  396. package/dist/src/schema/catalog.d.ts.map +1 -1
  397. package/dist/src/schema/catalog.js +29 -6
  398. package/dist/src/schema/catalog.js.map +1 -1
  399. package/dist/src/schema/change-events.d.ts +5 -1
  400. package/dist/src/schema/change-events.d.ts.map +1 -1
  401. package/dist/src/schema/change-events.js.map +1 -1
  402. package/dist/src/schema/function.d.ts +89 -1
  403. package/dist/src/schema/function.d.ts.map +1 -1
  404. package/dist/src/schema/function.js +31 -0
  405. package/dist/src/schema/function.js.map +1 -1
  406. package/dist/src/schema/manager.d.ts +43 -0
  407. package/dist/src/schema/manager.d.ts.map +1 -1
  408. package/dist/src/schema/manager.js +105 -4
  409. package/dist/src/schema/manager.js.map +1 -1
  410. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  411. package/dist/src/schema/rename-rewriter.js +303 -102
  412. package/dist/src/schema/rename-rewriter.js.map +1 -1
  413. package/dist/src/schema/schema-differ.d.ts +18 -1
  414. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  415. package/dist/src/schema/schema-differ.js +307 -42
  416. package/dist/src/schema/schema-differ.js.map +1 -1
  417. package/dist/src/schema/table.d.ts +21 -2
  418. package/dist/src/schema/table.d.ts.map +1 -1
  419. package/dist/src/schema/table.js +17 -8
  420. package/dist/src/schema/table.js.map +1 -1
  421. package/dist/src/types/logical-type.d.ts +11 -0
  422. package/dist/src/types/logical-type.d.ts.map +1 -1
  423. package/dist/src/types/logical-type.js.map +1 -1
  424. package/dist/src/types/temporal-types.d.ts.map +1 -1
  425. package/dist/src/types/temporal-types.js +32 -0
  426. package/dist/src/types/temporal-types.js.map +1 -1
  427. package/dist/src/util/ast-literal.d.ts +11 -0
  428. package/dist/src/util/ast-literal.d.ts.map +1 -0
  429. package/dist/src/util/ast-literal.js +26 -0
  430. package/dist/src/util/ast-literal.js.map +1 -0
  431. package/dist/src/vtab/best-access-plan.d.ts +41 -0
  432. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  433. package/dist/src/vtab/best-access-plan.js +29 -0
  434. package/dist/src/vtab/best-access-plan.js.map +1 -1
  435. package/dist/src/vtab/events.d.ts +9 -0
  436. package/dist/src/vtab/events.d.ts.map +1 -1
  437. package/dist/src/vtab/events.js +19 -0
  438. package/dist/src/vtab/events.js.map +1 -1
  439. package/dist/src/vtab/filter-info.d.ts +14 -0
  440. package/dist/src/vtab/filter-info.d.ts.map +1 -1
  441. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  442. package/dist/src/vtab/memory/layer/manager.js +24 -5
  443. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  444. package/dist/src/vtab/memory/module.d.ts +39 -1
  445. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  446. package/dist/src/vtab/memory/module.js +206 -44
  447. package/dist/src/vtab/memory/module.js.map +1 -1
  448. package/dist/src/vtab/memory/utils/predicate.d.ts +2 -1
  449. package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
  450. package/dist/src/vtab/memory/utils/predicate.js +32 -1
  451. package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
  452. package/dist/src/vtab/module.d.ts +24 -0
  453. package/dist/src/vtab/module.d.ts.map +1 -1
  454. package/package.json +3 -3
@@ -21,6 +21,25 @@ import { extractConstraintsForTable, createTableInfoFromNode } from '../../analy
21
21
  import { LiteralNode } from '../../nodes/scalar.js';
22
22
  import { IndexConstraintOp } from '../../../common/constants.js';
23
23
  const log = createLogger('optimizer:rule:select-access-path');
24
+ /**
25
+ * Extract the monotonic-ordering advertisement from a `BestAccessPlanResult`,
26
+ * or return undefined when nothing is advertised. The result is forwarded to
27
+ * the physical leaf node so it can lift the advertisement onto its
28
+ * `physical.monotonicOn` / `physical.accessCapabilities`.
29
+ */
30
+ function extractAdvertisement(plan) {
31
+ if (!plan.monotonicOn && !plan.supportsOrdinalSeek && !plan.supportsAsofRight) {
32
+ return undefined;
33
+ }
34
+ const advertisement = {};
35
+ if (plan.monotonicOn)
36
+ advertisement.monotonicOn = plan.monotonicOn;
37
+ if (plan.supportsOrdinalSeek)
38
+ advertisement.supportsOrdinalSeek = true;
39
+ if (plan.supportsAsofRight)
40
+ advertisement.supportsAsofRight = true;
41
+ return advertisement;
42
+ }
24
43
  export function ruleSelectAccessPath(node, context) {
25
44
  // Guard: node must be a RetrieveNode
26
45
  if (!(node instanceof RetrieveNode)) {
@@ -43,7 +62,15 @@ export function ruleSelectAccessPath(node, context) {
43
62
  }
44
63
  return physicalLeaf;
45
64
  }
46
- // Check if module supports query-based execution via supports() method
65
+ // Check if module supports query-based execution via supports() method.
66
+ // `supports()` is consulted FIRST because it can collapse multi-operator
67
+ // pipelines (e.g. Aggregate-over-scan) into a single `RemoteQueryNode`.
68
+ // When `supports()` declines, fall through to `getBestAccessPlan()` so a
69
+ // module that exposes BOTH methods (the lamina-quereus adapter) can still
70
+ // have its index-based access plan honoured — without this fall-through
71
+ // the rule would `createSeqScan` immediately and silently drop every
72
+ // WHERE constraint, since `supports()` only handles whole-subtree shapes.
73
+ // See `tickets/complete/quereus-vtab-equality-filter-ignored`.
47
74
  if (vtabModule.supports && typeof vtabModule.supports === 'function') {
48
75
  log('Module has supports() method - checking support for current pipeline');
49
76
  // Check if module supports the current pipeline
@@ -52,19 +79,26 @@ export function ruleSelectAccessPath(node, context) {
52
79
  log('Pipeline supported - creating RemoteQueryNode (cost: %d)', assessment.cost);
53
80
  return new RemoteQueryNode(retrieveNode.scope, retrieveNode.source, retrieveNode.tableRef, assessment.ctx);
54
81
  }
55
- else {
56
- log('Pipeline not supported by module - falling back to sequential scan');
57
- return createSeqScan(retrieveNode.tableRef);
58
- }
82
+ log('Pipeline not supported by module - falling through to index-based access path');
59
83
  }
60
84
  // Check if module supports index-based execution via getBestAccessPlan() method
61
85
  if (vtabModule.getBestAccessPlan && typeof vtabModule.getBestAccessPlan === 'function') {
62
86
  log('Module has getBestAccessPlan() method - using index-based execution for %s', tableSchema.name);
63
87
  return createIndexBasedAccess(retrieveNode, context);
64
88
  }
65
- // Fall back to sequential scan if module has no access planning support
89
+ // Fall back to sequential scan if module has no access planning support.
90
+ // When the Retrieve's `source` carries additional operators (Filter, Sort,
91
+ // LimitOffset) — typically produced when `rule-grow-retrieve` previously
92
+ // slid them in — we MUST re-apply them above the `SeqScan`. Without this
93
+ // the operators would be silently dropped and downstream callers would
94
+ // see unfiltered rows. See
95
+ // `tickets/complete/quereus-vtab-equality-filter-ignored`.
66
96
  log('No access planning support, using sequential scan for %s', tableSchema.name);
67
- return createSeqScan(retrieveNode.tableRef);
97
+ const seqScan = createSeqScan(retrieveNode.tableRef);
98
+ if (retrieveNode.source === retrieveNode.tableRef) {
99
+ return seqScan;
100
+ }
101
+ return rebuildPipelineWithNewLeaf(retrieveNode.source, retrieveNode.tableRef, seqScan);
68
102
  }
69
103
  /**
70
104
  * Create index-based access for modules that support getBestAccessPlan()
@@ -203,6 +237,7 @@ function selectPhysicalNode(tableRef, accessPlan, constraints) {
203
237
  * Works for both primary key and secondary indexes.
204
238
  */
205
239
  function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInfo, providesOrdering) {
240
+ const advertisement = extractAdvertisement(accessPlan);
206
241
  const seekCols = accessPlan.seekColumnIndexes;
207
242
  // Map accessPlan.indexName to physical node indexName ('_primary_' → 'primary')
208
243
  const physicalIndexName = accessPlan.indexName === '_primary_' ? 'primary' : accessPlan.indexName;
@@ -259,7 +294,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
259
294
  idxStr: `idx=${idxStrName}(0);plan=5;inCount=${inValues.length}`,
260
295
  };
261
296
  log('Using index multi-seek on %s (IN with %d values)', physicalIndexName, inValues.length);
262
- return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, false, providesOrdering, accessPlan.cost);
297
+ return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, false, providesOrdering, accessPlan.cost, advertisement);
263
298
  }
264
299
  if (hasMultiValueIn && seekCols.length > 1) {
265
300
  // Composite IN multi-seek: generate cross-product of all column values
@@ -301,7 +336,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
301
336
  idxStr: `idx=${idxStrName}(0);plan=5;inCount=${crossProduct.length};seekWidth=${seekWidth}`,
302
337
  };
303
338
  log('Using composite index multi-seek on %s (cross-product of %d seeks, width %d)', physicalIndexName, crossProduct.length, seekWidth);
304
- return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, false, providesOrdering, accessPlan.cost);
339
+ return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, false, providesOrdering, accessPlan.cost, advertisement);
305
340
  }
306
341
  // Standard equality seek on all seek columns
307
342
  const seekKeys = seekCols.map(colIdx => {
@@ -321,7 +356,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
321
356
  idxStr: `idx=${idxStrName}(0);plan=2`,
322
357
  };
323
358
  log('Using index seek on %s (equality)', physicalIndexName);
324
- return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, false, providesOrdering, accessPlan.cost);
359
+ return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, false, providesOrdering, accessPlan.cost, advertisement);
325
360
  }
326
361
  // Check for prefix-equality + trailing-range pattern
327
362
  if (!allEquality && seekCols.length > 1) {
@@ -376,7 +411,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
376
411
  idxStr: `idx=${idxStrName}(0);plan=7;prefixLen=${prefixEqCols.length}`,
377
412
  };
378
413
  log('Using index prefix-range seek on %s (prefix=%d cols)', physicalIndexName, prefixEqCols.length);
379
- return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, true, providesOrdering, accessPlan.cost);
414
+ return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, true, providesOrdering, accessPlan.cost, advertisement);
380
415
  }
381
416
  }
382
417
  // Check for range constraints on the seek columns
@@ -408,7 +443,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
408
443
  idxStr: `idx=${idxStrName}(0);plan=3`,
409
444
  };
410
445
  log('Using index seek (range) on %s', physicalIndexName);
411
- return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, true, providesOrdering, accessPlan.cost);
446
+ return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, true, providesOrdering, accessPlan.cost, advertisement);
412
447
  }
413
448
  // Check for OR_RANGE constraint on a seek column
414
449
  const orRangeConstraint = constraints.find(c => c.op === 'OR_RANGE' && c.ranges && c.ranges.length > 0 &&
@@ -445,7 +480,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
445
480
  idxStr: `idx=${idxStrName}(0);plan=6;rangeCount=${ranges.length};rangeOps=${rangeOps.join(',')}`,
446
481
  };
447
482
  log('Using index multi-range seek on %s (%d ranges)', physicalIndexName, ranges.length);
448
- return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, true, providesOrdering, accessPlan.cost);
483
+ return new IndexSeekNode(tableRef.scope, tableRef, fi, physicalIndexName, seekKeys, true, providesOrdering, accessPlan.cost, advertisement);
449
484
  }
450
485
  // Ordering-only index scan
451
486
  if (providesOrdering) {
@@ -461,7 +496,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
461
496
  orderByConsumed: true,
462
497
  }
463
498
  };
464
- return new IndexScanNode(tableRef.scope, tableRef, orderingFilterInfo, orderingIndexName, providesOrdering, accessPlan.cost);
499
+ return new IndexScanNode(tableRef.scope, tableRef, orderingFilterInfo, orderingIndexName, providesOrdering, accessPlan.cost, advertisement);
465
500
  }
466
501
  // Fall back to sequential scan
467
502
  log('Using sequential scan (index %s: no usable seek/range constraints)', physicalIndexName);
@@ -472,6 +507,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
472
507
  * doesn't provide indexName/seekColumnIndexes (PK-based heuristics).
473
508
  */
474
509
  function selectPhysicalNodeLegacy(tableRef, accessPlan, constraints, filterInfo, providesOrdering) {
510
+ const advertisement = extractAdvertisement(accessPlan);
475
511
  // Analyze the access plan to determine node type
476
512
  const handledByCol = new Set();
477
513
  constraints.forEach((c, i) => {
@@ -505,7 +541,7 @@ function selectPhysicalNodeLegacy(tableRef, accessPlan, constraints, filterInfo,
505
541
  idxStr: 'idx=_primary_(0);plan=2',
506
542
  };
507
543
  log('Using index seek on primary key (legacy)');
508
- return new IndexSeekNode(tableRef.scope, tableRef, fi, 'primary', seekKeys, false, providesOrdering, accessPlan.cost);
544
+ return new IndexSeekNode(tableRef.scope, tableRef, fi, 'primary', seekKeys, false, providesOrdering, accessPlan.cost, advertisement);
509
545
  }
510
546
  if (hasRangeConstraints) {
511
547
  const rangeCols = constraints
@@ -533,7 +569,7 @@ function selectPhysicalNodeLegacy(tableRef, accessPlan, constraints, filterInfo,
533
569
  idxStr: 'idx=_primary_(0);plan=3',
534
570
  };
535
571
  log('Using index seek (range) on primary key (legacy)');
536
- return new IndexSeekNode(tableRef.scope, tableRef, fi, 'primary', seekKeys, true, providesOrdering, accessPlan.cost);
572
+ return new IndexSeekNode(tableRef.scope, tableRef, fi, 'primary', seekKeys, true, providesOrdering, accessPlan.cost, advertisement);
537
573
  }
538
574
  if (providesOrdering) {
539
575
  const indexName = accessPlan.orderingIndexName ?? 'primary';
@@ -548,7 +584,7 @@ function selectPhysicalNodeLegacy(tableRef, accessPlan, constraints, filterInfo,
548
584
  orderByConsumed: true,
549
585
  }
550
586
  };
551
- return new IndexScanNode(tableRef.scope, tableRef, orderingFilterInfo, indexName, providesOrdering, accessPlan.cost);
587
+ return new IndexScanNode(tableRef.scope, tableRef, orderingFilterInfo, indexName, providesOrdering, accessPlan.cost, advertisement);
552
588
  }
553
589
  log('Using sequential scan (no beneficial index access)');
554
590
  return createSeqScan(tableRef, filterInfo, accessPlan.cost);
@@ -1 +1 @@
1
- {"version":3,"file":"rule-select-access-path.js","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-select-access-path.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-select-access-path.js","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-select-access-path.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Rule: GROUP BY FD simplification
3
+ *
4
+ * Drops GROUP BY columns that are functionally determined by other remaining
5
+ * GROUP BY columns under the aggregate-output FDs and equivalence classes.
6
+ * Each dropped column is re-emitted as a `MIN(<original-column>)` picker
7
+ * aggregate so the output attribute IDs (and therefore downstream binding)
8
+ * are preserved.
9
+ *
10
+ * The aggregate's own `physical.fds` and `physical.equivClasses` are already
11
+ * projected onto its output column indices by `propagateAggregateFds`, so
12
+ * the rule reasons in aggregate-output space directly:
13
+ *
14
+ * - candidate set = bare `ColumnReferenceNode` GROUP BY output indices
15
+ * - ECs expand to bi-directional FDs over those indices
16
+ * - `minimalCover` returns the surviving indices; the rest are dropped
17
+ *
18
+ * Soundness: aggregate-output FDs only survive for bare-column GROUP BYs
19
+ * (per `propagateAggregateFds`), and EC-derived FDs from `WHERE a = b` are
20
+ * sound because every surviving row has equal values on the EC members.
21
+ *
22
+ * Rewrite preserves the output schema (positions may shift, attribute IDs do
23
+ * not): kept GROUP BYs come first, then the picker MIN aggregates re-emitting
24
+ * the dropped columns at their original attribute IDs (via
25
+ * `preserveAttributeIds`), then the original aggregate expressions.
26
+ */
27
+ import type { PlanNode } from '../../nodes/plan-node.js';
28
+ import type { OptContext } from '../../framework/context.js';
29
+ export declare function ruleGroupByFdSimplification(node: PlanNode, context: OptContext): PlanNode | null;
30
+ //# sourceMappingURL=rule-groupby-fd-simplification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-groupby-fd-simplification.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/aggregate/rule-groupby-fd-simplification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAA6B,MAAM,0BAA0B,CAAC;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAU7D,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CA2GhG"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Rule: GROUP BY FD simplification
3
+ *
4
+ * Drops GROUP BY columns that are functionally determined by other remaining
5
+ * GROUP BY columns under the aggregate-output FDs and equivalence classes.
6
+ * Each dropped column is re-emitted as a `MIN(<original-column>)` picker
7
+ * aggregate so the output attribute IDs (and therefore downstream binding)
8
+ * are preserved.
9
+ *
10
+ * The aggregate's own `physical.fds` and `physical.equivClasses` are already
11
+ * projected onto its output column indices by `propagateAggregateFds`, so
12
+ * the rule reasons in aggregate-output space directly:
13
+ *
14
+ * - candidate set = bare `ColumnReferenceNode` GROUP BY output indices
15
+ * - ECs expand to bi-directional FDs over those indices
16
+ * - `minimalCover` returns the surviving indices; the rest are dropped
17
+ *
18
+ * Soundness: aggregate-output FDs only survive for bare-column GROUP BYs
19
+ * (per `propagateAggregateFds`), and EC-derived FDs from `WHERE a = b` are
20
+ * sound because every surviving row has equal values on the EC members.
21
+ *
22
+ * Rewrite preserves the output schema (positions may shift, attribute IDs do
23
+ * not): kept GROUP BYs come first, then the picker MIN aggregates re-emitting
24
+ * the dropped columns at their original attribute IDs (via
25
+ * `preserveAttributeIds`), then the original aggregate expressions.
26
+ */
27
+ import { createLogger } from '../../../common/logger.js';
28
+ import { AggregateNode } from '../../nodes/aggregate-node.js';
29
+ import { AggregateFunctionCallNode } from '../../nodes/aggregate-function.js';
30
+ import { ColumnReferenceNode } from '../../nodes/reference.js';
31
+ import { expandEcsToFds, minimalCover } from '../../util/fd-utils.js';
32
+ import { isAggregateFunctionSchema } from '../../../schema/function.js';
33
+ const log = createLogger('optimizer:rule:groupby-fd-simplification');
34
+ export function ruleGroupByFdSimplification(node, context) {
35
+ if (!(node instanceof AggregateNode))
36
+ return null;
37
+ if (node.groupBy.length <= 1)
38
+ return null;
39
+ const aggAttrs = node.getAttributes();
40
+ // Build the set of candidate output indices: bare-column GROUP BYs only.
41
+ // Map outIdx → original ColumnReferenceNode so we can wire pickers later.
42
+ const candidateExprs = new Map();
43
+ for (let i = 0; i < node.groupBy.length; i++) {
44
+ const gb = node.groupBy[i];
45
+ if (gb instanceof ColumnReferenceNode) {
46
+ candidateExprs.set(i, gb);
47
+ }
48
+ }
49
+ if (candidateExprs.size <= 1)
50
+ return null;
51
+ const candidateSet = new Set(candidateExprs.keys());
52
+ const sourceFds = node.physical.fds ?? [];
53
+ const ecs = node.physical.equivClasses ?? [];
54
+ const combinedFds = expandEcsToFds(ecs, sourceFds);
55
+ const cover = minimalCover(candidateSet, combinedFds);
56
+ if (cover.size === candidateSet.size)
57
+ return null;
58
+ const dropped = new Set();
59
+ for (const idx of candidateSet) {
60
+ if (!cover.has(idx))
61
+ dropped.add(idx);
62
+ }
63
+ if (dropped.size === 0)
64
+ return null;
65
+ // Build new groupBy: keep non-candidates (expressions) AND kept candidates,
66
+ // preserving original relative order. Track the new output index each old
67
+ // index maps to so we can rebuild preserveAttributeIds correctly.
68
+ const keptGroupBy = [];
69
+ const keptGroupByOldIdx = [];
70
+ const droppedOldIdx = [];
71
+ for (let i = 0; i < node.groupBy.length; i++) {
72
+ if (candidateSet.has(i) && !cover.has(i)) {
73
+ droppedOldIdx.push(i);
74
+ }
75
+ else {
76
+ keptGroupBy.push(node.groupBy[i]);
77
+ keptGroupByOldIdx.push(i);
78
+ }
79
+ }
80
+ // Synthesize picker MIN aggregates for each dropped column, in original order.
81
+ const minSchema = context.db._findFunction('min', 1);
82
+ if (!minSchema || !isAggregateFunctionSchema(minSchema)) {
83
+ log('min/1 not registered as aggregate; skipping');
84
+ return null;
85
+ }
86
+ const pickerAggregates = [];
87
+ for (const oldIdx of droppedOldIdx) {
88
+ const colRef = candidateExprs.get(oldIdx);
89
+ const origAttr = aggAttrs[oldIdx];
90
+ const minExpr = {
91
+ type: 'function',
92
+ name: 'min',
93
+ args: [colRef.expression],
94
+ distinct: false,
95
+ };
96
+ const inferredType = minSchema.inferReturnType
97
+ ? minSchema.inferReturnType([colRef.getType().logicalType])
98
+ : undefined;
99
+ const pickerCall = new AggregateFunctionCallNode(node.scope, minExpr, 'min', minSchema, [colRef], false, undefined, undefined, inferredType);
100
+ pickerAggregates.push({ expression: pickerCall, alias: origAttr.name });
101
+ }
102
+ // Rebuild preserveAttributeIds in the new physical order:
103
+ // [kept-gb attrs..., dropped-gb attrs (as picker outputs)..., orig-agg attrs...]
104
+ const groupByCount = node.groupBy.length;
105
+ const newAttrs = [];
106
+ for (const oldIdx of keptGroupByOldIdx)
107
+ newAttrs.push(aggAttrs[oldIdx]);
108
+ for (const oldIdx of droppedOldIdx)
109
+ newAttrs.push(aggAttrs[oldIdx]);
110
+ for (let i = groupByCount; i < aggAttrs.length; i++)
111
+ newAttrs.push(aggAttrs[i]);
112
+ const newAggregates = [...pickerAggregates, ...node.aggregates];
113
+ log('Dropped %d/%d GROUP BY column(s); picker aggregates: %d', dropped.size, candidateSet.size, pickerAggregates.length);
114
+ return new AggregateNode(node.scope, node.source, keptGroupBy, newAggregates, undefined, newAttrs);
115
+ }
116
+ //# sourceMappingURL=rule-groupby-fd-simplification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-groupby-fd-simplification.js","sourceRoot":"","sources":["../../../../../src/planner/rules/aggregate/rule-groupby-fd-simplification.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,15 @@ import type { OptContext } from '../../framework/context.js';
3
3
  /**
4
4
  * Rule: DISTINCT Elimination
5
5
  *
6
- * When a DistinctNode's source already guarantees unique rows (via logical keys
7
- * from RelationType or physical uniqueKeys), the DISTINCT is redundant and can
8
- * be removed.
6
+ * When a DistinctNode's source already guarantees unique rows, the DISTINCT is
7
+ * redundant and can be removed.
9
8
  *
10
- * Checks both:
11
- * 1. Physical uniqueKeys (from computePhysical, available after physical pass)
12
- * 2. Logical keys (from RelationType.keys, available at any time)
9
+ * Sources of uniqueness proof:
10
+ * 1. Logical keys (`RelationType.keys`) — schema-declared, available at any time.
11
+ * 2. Physical FD set — encodes derived keys as `K all_other_cols` FDs, plus
12
+ * the singleton `∅ → all_cols` for at-most-one-row claims.
13
13
  *
14
- * A key that is present in the source proves it already produces unique rows —
14
+ * A non-empty key proof on the source proves it already produces unique rows —
15
15
  * DISTINCT is a no-op.
16
16
  */
17
17
  export declare function ruleDistinctElimination(node: PlanNode, _context: OptContext): PlanNode | null;
@@ -1 +1 @@
1
- {"version":3,"file":"rule-distinct-elimination.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/distinct/rule-distinct-elimination.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAK7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAoB7F"}
1
+ {"version":3,"file":"rule-distinct-elimination.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/distinct/rule-distinct-elimination.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAM7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAqB7F"}
@@ -1,37 +1,39 @@
1
1
  import { createLogger } from '../../../common/logger.js';
2
2
  import { DistinctNode } from '../../nodes/distinct-node.js';
3
+ import { hasAnyKey, hasSingletonFd } from '../../util/fd-utils.js';
3
4
  const log = createLogger('optimizer:rule:distinct-elimination');
4
5
  /**
5
6
  * Rule: DISTINCT Elimination
6
7
  *
7
- * When a DistinctNode's source already guarantees unique rows (via logical keys
8
- * from RelationType or physical uniqueKeys), the DISTINCT is redundant and can
9
- * be removed.
8
+ * When a DistinctNode's source already guarantees unique rows, the DISTINCT is
9
+ * redundant and can be removed.
10
10
  *
11
- * Checks both:
12
- * 1. Physical uniqueKeys (from computePhysical, available after physical pass)
13
- * 2. Logical keys (from RelationType.keys, available at any time)
11
+ * Sources of uniqueness proof:
12
+ * 1. Logical keys (`RelationType.keys`) — schema-declared, available at any time.
13
+ * 2. Physical FD set — encodes derived keys as `K all_other_cols` FDs, plus
14
+ * the singleton `∅ → all_cols` for at-most-one-row claims.
14
15
  *
15
- * A key that is present in the source proves it already produces unique rows —
16
+ * A non-empty key proof on the source proves it already produces unique rows —
16
17
  * DISTINCT is a no-op.
17
18
  */
18
19
  export function ruleDistinctElimination(node, _context) {
19
20
  if (!(node instanceof DistinctNode))
20
21
  return null;
21
- // Check physical uniqueKeys (available if physical pass has run or compute is triggered)
22
- const sourcePhys = node.source.physical;
23
- if (sourcePhys?.uniqueKeys && sourcePhys.uniqueKeys.length > 0) {
24
- log('Eliminating redundant DISTINCT: source has physical uniqueKeys %j', sourcePhys.uniqueKeys);
25
- return node.source;
26
- }
27
- // Check logical keys from RelationType
28
- // If the source's logical type declares any key, the source already produces
29
- // unique rows (since any superset of a key is also unique).
22
+ // Logical keys (RelationType.keys) are the schema-level claim.
30
23
  const sourceType = node.source.getType();
31
24
  if (sourceType.keys && sourceType.keys.length > 0) {
32
25
  log('Eliminating redundant DISTINCT: source has logical keys %j', sourceType.keys);
33
26
  return node.source;
34
27
  }
28
+ // Physical FDs: an FD whose determinants form a non-trivial superkey of the
29
+ // source columns proves uniqueness; the singleton `∅ → all_cols` proves
30
+ // at-most-one-row (also unique).
31
+ const sourcePhys = node.source.physical;
32
+ const colCount = node.source.getAttributes().length;
33
+ if (hasAnyKey(sourcePhys?.fds, colCount) || hasSingletonFd(sourcePhys?.fds, colCount)) {
34
+ log('Eliminating redundant DISTINCT: source FDs imply unique rows');
35
+ return node.source;
36
+ }
35
37
  return null;
36
38
  }
37
39
  //# sourceMappingURL=rule-distinct-elimination.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rule-distinct-elimination.js","sourceRoot":"","sources":["../../../../../src/planner/rules/distinct/rule-distinct-elimination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,GAAG,GAAG,YAAY,CAAC,qCAAqC,CAAC,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAc,EAAE,QAAoB;IAC3E,IAAI,CAAC,CAAC,IAAI,YAAY,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,yFAAyF;IACzF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IACxC,IAAI,UAAU,EAAE,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,mEAAmE,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;QAChG,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,uCAAuC;IACvC,6EAA6E;IAC7E,4DAA4D;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACzC,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,4DAA4D,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"rule-distinct-elimination.js","sourceRoot":"","sources":["../../../../../src/planner/rules/distinct/rule-distinct-elimination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,GAAG,GAAG,YAAY,CAAC,qCAAqC,CAAC,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAc,EAAE,QAAoB;IAC3E,IAAI,CAAC,CAAC,IAAI,YAAY,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,+DAA+D;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACzC,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,4DAA4D,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,4EAA4E;IAC5E,wEAAwE;IACxE,iCAAiC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC;IACpD,IAAI,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,8DAA8D,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Shared helper: extract equi-join pairs and residual predicate from an ON
3
+ * condition. Used by both `rule-join-physical-selection` (ordering-based) and
4
+ * `rule-monotonic-merge-join` (MonotonicOn-based).
5
+ */
6
+ import type { ScalarPlanNode, RelationalPlanNode } from '../../nodes/plan-node.js';
7
+ import type { EquiJoinPair } from '../../nodes/join-utils.js';
8
+ export interface EquiPairExtraction {
9
+ equiPairs: EquiJoinPair[];
10
+ residual: ScalarPlanNode | undefined;
11
+ /**
12
+ * For each entry in `equiPairs`, the original `=` ScalarPlanNode it was
13
+ * extracted from (or `undefined` for USING-derived pairs that have no
14
+ * source node). Same length and order as `equiPairs`. Useful when a rule
15
+ * wants to demote a subset of equi-pairs back into the residual (e.g., the
16
+ * monotonic-merge rule keeps only the monotonic-driving pair as the merge
17
+ * key and pushes the rest into the residual).
18
+ */
19
+ equiPairNodes: Array<ScalarPlanNode | undefined>;
20
+ }
21
+ /**
22
+ * Check whether `source`'s `physical.ordering` covers the given equi-pair
23
+ * columns positionally for the chosen `side` (the merge-join emitter compares
24
+ * keys in equi-pair order, so the source must be ASC-sorted on each
25
+ * equi-pair attribute at exactly that position). Returns false on the first
26
+ * mismatch.
27
+ */
28
+ export declare function isOrderedOnEquiPairs(source: RelationalPlanNode, equiPairs: readonly EquiJoinPair[], side: 'left' | 'right'): boolean;
29
+ /**
30
+ * Reorder equi-pairs so they line up with the left source's ordering prefix,
31
+ * and verify the right source agrees on the same reordered key sequence.
32
+ * Returns null when no reordering can satisfy both sides simultaneously.
33
+ */
34
+ export declare function reorderEquiPairsForMerge(equiPairs: readonly EquiJoinPair[], left: RelationalPlanNode, right: RelationalPlanNode): EquiJoinPair[] | null;
35
+ /**
36
+ * True when both sides' physical ordering covers ALL equi-pairs in the
37
+ * exact (or reorderable) order required by the merge-join emitter. When this
38
+ * holds the ordering-based rule will produce a multi-key merge join with
39
+ * proper unique-key propagation; rules that demote pairs to residual should
40
+ * defer to that path instead of taking a single-pair merge.
41
+ */
42
+ export declare function isMergeReadyOnAllPairs(left: RelationalPlanNode, right: RelationalPlanNode, equiPairs: readonly EquiJoinPair[]): boolean;
43
+ /** Combine an existing residual and a list of extra scalar conjuncts into a single AND-tree. */
44
+ export declare function combineResidual(base: ScalarPlanNode | undefined, extras: ReadonlyArray<ScalarPlanNode>): ScalarPlanNode | undefined;
45
+ /**
46
+ * Extract equi-join pairs and residual predicates from an ON condition.
47
+ * Returns null if no equi-pairs are found.
48
+ */
49
+ export declare function extractEquiPairs(condition: ScalarPlanNode | undefined, leftAttrIds: Set<number>, rightAttrIds: Set<number>): EquiPairExtraction | null;
50
+ /**
51
+ * Convert USING-column names into equi-pairs given the left/right attributes.
52
+ * Returns null if no pairs could be matched.
53
+ */
54
+ export declare function extractEquiPairsFromUsing(usingColumns: readonly string[] | undefined, leftAttrs: ReadonlyArray<{
55
+ id: number;
56
+ name: string;
57
+ }>, rightAttrs: ReadonlyArray<{
58
+ id: number;
59
+ name: string;
60
+ }>): EquiPairExtraction | null;
61
+ //# sourceMappingURL=equi-pair-extractor.d.ts.map