@quereus/quereus 0.1.0 → 0.2.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 (465) hide show
  1. package/README.md +47 -23
  2. package/dist/src/core/database.d.ts +22 -4
  3. package/dist/src/core/database.d.ts.map +1 -1
  4. package/dist/src/core/database.js +44 -6
  5. package/dist/src/core/database.js.map +1 -1
  6. package/dist/src/core/statement.d.ts +0 -7
  7. package/dist/src/core/statement.d.ts.map +1 -1
  8. package/dist/src/core/statement.js +1 -51
  9. package/dist/src/core/statement.js.map +1 -1
  10. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  11. package/dist/src/func/builtins/explain.js +0 -11
  12. package/dist/src/func/builtins/explain.js.map +1 -1
  13. package/dist/src/index.d.ts +13 -5
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +5 -2
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/parser/ast.d.ts +9 -2
  18. package/dist/src/parser/ast.d.ts.map +1 -1
  19. package/dist/src/parser/parser.d.ts.map +1 -1
  20. package/dist/src/parser/parser.js +40 -44
  21. package/dist/src/parser/parser.js.map +1 -1
  22. package/dist/src/planner/analysis/const-pass.d.ts.map +1 -1
  23. package/dist/src/planner/analysis/const-pass.js +12 -6
  24. package/dist/src/planner/analysis/const-pass.js.map +1 -1
  25. package/dist/src/planner/building/constraint-builder.d.ts +11 -0
  26. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -0
  27. package/dist/src/planner/building/constraint-builder.js +79 -0
  28. package/dist/src/planner/building/constraint-builder.js.map +1 -0
  29. package/dist/src/planner/building/delete.d.ts.map +1 -1
  30. package/dist/src/planner/building/delete.js +6 -3
  31. package/dist/src/planner/building/delete.js.map +1 -1
  32. package/dist/src/planner/building/expression.d.ts +3 -0
  33. package/dist/src/planner/building/expression.d.ts.map +1 -1
  34. package/dist/src/planner/building/expression.js +33 -7
  35. package/dist/src/planner/building/expression.js.map +1 -1
  36. package/dist/src/planner/building/insert.d.ts.map +1 -1
  37. package/dist/src/planner/building/insert.js +4 -1
  38. package/dist/src/planner/building/insert.js.map +1 -1
  39. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  40. package/dist/src/planner/building/select-aggregates.js +46 -9
  41. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  42. package/dist/src/planner/building/select-context.js +20 -11
  43. package/dist/src/planner/building/select-context.js.map +1 -1
  44. package/dist/src/planner/building/select-modifiers.d.ts +5 -3
  45. package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
  46. package/dist/src/planner/building/select-modifiers.js +29 -20
  47. package/dist/src/planner/building/select-modifiers.js.map +1 -1
  48. package/dist/src/planner/building/select-projections.d.ts +3 -1
  49. package/dist/src/planner/building/select-projections.d.ts.map +1 -1
  50. package/dist/src/planner/building/select-projections.js +15 -20
  51. package/dist/src/planner/building/select-projections.js.map +1 -1
  52. package/dist/src/planner/building/select-window.d.ts.map +1 -1
  53. package/dist/src/planner/building/select-window.js +6 -3
  54. package/dist/src/planner/building/select-window.js.map +1 -1
  55. package/dist/src/planner/building/select.d.ts +25 -2
  56. package/dist/src/planner/building/select.d.ts.map +1 -1
  57. package/dist/src/planner/building/select.js +147 -24
  58. package/dist/src/planner/building/select.js.map +1 -1
  59. package/dist/src/planner/building/table.d.ts +0 -10
  60. package/dist/src/planner/building/table.d.ts.map +1 -1
  61. package/dist/src/planner/building/table.js +1 -35
  62. package/dist/src/planner/building/table.js.map +1 -1
  63. package/dist/src/planner/building/update.d.ts.map +1 -1
  64. package/dist/src/planner/building/update.js +7 -4
  65. package/dist/src/planner/building/update.js.map +1 -1
  66. package/dist/src/planner/building/with.d.ts.map +1 -1
  67. package/dist/src/planner/building/with.js +7 -8
  68. package/dist/src/planner/building/with.js.map +1 -1
  69. package/dist/src/planner/cache/correlation-detector.d.ts +11 -0
  70. package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -0
  71. package/dist/src/planner/cache/correlation-detector.js +73 -0
  72. package/dist/src/planner/cache/correlation-detector.js.map +1 -0
  73. package/dist/src/planner/cache/materialization-advisory.d.ts +12 -18
  74. package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
  75. package/dist/src/planner/cache/materialization-advisory.js +65 -46
  76. package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
  77. package/dist/src/planner/cache/reference-graph.d.ts +14 -9
  78. package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
  79. package/dist/src/planner/cache/reference-graph.js +93 -84
  80. package/dist/src/planner/cache/reference-graph.js.map +1 -1
  81. package/dist/src/planner/debug.d.ts +25 -0
  82. package/dist/src/planner/debug.d.ts.map +1 -1
  83. package/dist/src/planner/debug.js +127 -0
  84. package/dist/src/planner/debug.js.map +1 -1
  85. package/dist/src/planner/framework/context.d.ts +11 -0
  86. package/dist/src/planner/framework/context.d.ts.map +1 -1
  87. package/dist/src/planner/framework/context.js +25 -2
  88. package/dist/src/planner/framework/context.js.map +1 -1
  89. package/dist/src/planner/framework/registry.d.ts +3 -7
  90. package/dist/src/planner/framework/registry.d.ts.map +1 -1
  91. package/dist/src/planner/framework/registry.js +20 -31
  92. package/dist/src/planner/framework/registry.js.map +1 -1
  93. package/dist/src/planner/nodes/add-constraint-node.d.ts +2 -1
  94. package/dist/src/planner/nodes/add-constraint-node.d.ts.map +1 -1
  95. package/dist/src/planner/nodes/add-constraint-node.js +3 -0
  96. package/dist/src/planner/nodes/add-constraint-node.js.map +1 -1
  97. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  98. package/dist/src/planner/nodes/aggregate-node.js +6 -4
  99. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  100. package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
  101. package/dist/src/planner/nodes/cache-node.js +2 -2
  102. package/dist/src/planner/nodes/cache-node.js.map +1 -1
  103. package/dist/src/planner/nodes/constraint-check-node.d.ts +11 -4
  104. package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
  105. package/dist/src/planner/nodes/constraint-check-node.js +38 -12
  106. package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
  107. package/dist/src/planner/nodes/create-index-node.d.ts +2 -1
  108. package/dist/src/planner/nodes/create-index-node.d.ts.map +1 -1
  109. package/dist/src/planner/nodes/create-index-node.js +3 -0
  110. package/dist/src/planner/nodes/create-index-node.js.map +1 -1
  111. package/dist/src/planner/nodes/create-table-node.d.ts +2 -1
  112. package/dist/src/planner/nodes/create-table-node.d.ts.map +1 -1
  113. package/dist/src/planner/nodes/create-table-node.js +3 -0
  114. package/dist/src/planner/nodes/create-table-node.js.map +1 -1
  115. package/dist/src/planner/nodes/create-view-node.d.ts +2 -1
  116. package/dist/src/planner/nodes/create-view-node.d.ts.map +1 -1
  117. package/dist/src/planner/nodes/create-view-node.js +3 -0
  118. package/dist/src/planner/nodes/create-view-node.js.map +1 -1
  119. package/dist/src/planner/nodes/cte-node.d.ts +1 -1
  120. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  121. package/dist/src/planner/nodes/cte-node.js +33 -12
  122. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  123. package/dist/src/planner/nodes/cte-reference-node.d.ts +18 -4
  124. package/dist/src/planner/nodes/cte-reference-node.d.ts.map +1 -1
  125. package/dist/src/planner/nodes/cte-reference-node.js +40 -10
  126. package/dist/src/planner/nodes/cte-reference-node.js.map +1 -1
  127. package/dist/src/planner/nodes/delete-node.d.ts +4 -3
  128. package/dist/src/planner/nodes/delete-node.d.ts.map +1 -1
  129. package/dist/src/planner/nodes/delete-node.js +20 -6
  130. package/dist/src/planner/nodes/delete-node.js.map +1 -1
  131. package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
  132. package/dist/src/planner/nodes/distinct-node.js +2 -2
  133. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  134. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  135. package/dist/src/planner/nodes/dml-executor-node.js +2 -2
  136. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  137. package/dist/src/planner/nodes/drop-table-node.d.ts +2 -1
  138. package/dist/src/planner/nodes/drop-table-node.d.ts.map +1 -1
  139. package/dist/src/planner/nodes/drop-table-node.js +3 -0
  140. package/dist/src/planner/nodes/drop-table-node.js.map +1 -1
  141. package/dist/src/planner/nodes/drop-view-node.d.ts +2 -1
  142. package/dist/src/planner/nodes/drop-view-node.d.ts.map +1 -1
  143. package/dist/src/planner/nodes/drop-view-node.js +3 -0
  144. package/dist/src/planner/nodes/drop-view-node.js.map +1 -1
  145. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  146. package/dist/src/planner/nodes/filter.js +3 -3
  147. package/dist/src/planner/nodes/filter.js.map +1 -1
  148. package/dist/src/planner/nodes/insert-node.d.ts +2 -1
  149. package/dist/src/planner/nodes/insert-node.d.ts.map +1 -1
  150. package/dist/src/planner/nodes/insert-node.js +18 -5
  151. package/dist/src/planner/nodes/insert-node.js.map +1 -1
  152. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts +28 -0
  153. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts.map +1 -0
  154. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js +69 -0
  155. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +1 -0
  156. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  157. package/dist/src/planner/nodes/join-node.js +3 -3
  158. package/dist/src/planner/nodes/join-node.js.map +1 -1
  159. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  160. package/dist/src/planner/nodes/limit-offset.js +2 -2
  161. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  162. package/dist/src/planner/nodes/plan-node-type.d.ts +1 -1
  163. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  164. package/dist/src/planner/nodes/plan-node-type.js +1 -1
  165. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  166. package/dist/src/planner/nodes/plan-node.d.ts +23 -0
  167. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  168. package/dist/src/planner/nodes/plan-node.js +25 -2
  169. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  170. package/dist/src/planner/nodes/project-node.d.ts +5 -1
  171. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  172. package/dist/src/planner/nodes/project-node.js +39 -20
  173. package/dist/src/planner/nodes/project-node.js.map +1 -1
  174. package/dist/src/planner/nodes/recursive-cte-node.d.ts +2 -2
  175. package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
  176. package/dist/src/planner/nodes/recursive-cte-node.js +20 -8
  177. package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
  178. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  179. package/dist/src/planner/nodes/reference.js +4 -2
  180. package/dist/src/planner/nodes/reference.js.map +1 -1
  181. package/dist/src/planner/nodes/returning-node.d.ts +1 -1
  182. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  183. package/dist/src/planner/nodes/returning-node.js +21 -13
  184. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  185. package/dist/src/planner/nodes/scalar.d.ts +26 -2
  186. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  187. package/dist/src/planner/nodes/scalar.js +82 -10
  188. package/dist/src/planner/nodes/scalar.js.map +1 -1
  189. package/dist/src/planner/nodes/sequencing-node.d.ts.map +1 -1
  190. package/dist/src/planner/nodes/sequencing-node.js +2 -2
  191. package/dist/src/planner/nodes/sequencing-node.js.map +1 -1
  192. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  193. package/dist/src/planner/nodes/set-operation-node.js +3 -3
  194. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  195. package/dist/src/planner/nodes/single-row.d.ts +4 -2
  196. package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
  197. package/dist/src/planner/nodes/single-row.js +3 -0
  198. package/dist/src/planner/nodes/single-row.js.map +1 -1
  199. package/dist/src/planner/nodes/sink-node.d.ts +1 -1
  200. package/dist/src/planner/nodes/sink-node.d.ts.map +1 -1
  201. package/dist/src/planner/nodes/sink-node.js +4 -4
  202. package/dist/src/planner/nodes/sink-node.js.map +1 -1
  203. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  204. package/dist/src/planner/nodes/sort.js +2 -2
  205. package/dist/src/planner/nodes/sort.js.map +1 -1
  206. package/dist/src/planner/nodes/stream-aggregate.d.ts +1 -0
  207. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  208. package/dist/src/planner/nodes/stream-aggregate.js +64 -11
  209. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  210. package/dist/src/planner/nodes/subquery.d.ts +4 -4
  211. package/dist/src/planner/nodes/subquery.d.ts.map +1 -1
  212. package/dist/src/planner/nodes/subquery.js +68 -23
  213. package/dist/src/planner/nodes/subquery.js.map +1 -1
  214. package/dist/src/planner/nodes/table-access-nodes.d.ts +83 -0
  215. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -0
  216. package/dist/src/planner/nodes/table-access-nodes.js +226 -0
  217. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -0
  218. package/dist/src/planner/nodes/update-node.d.ts +4 -2
  219. package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
  220. package/dist/src/planner/nodes/update-node.js +26 -13
  221. package/dist/src/planner/nodes/update-node.js.map +1 -1
  222. package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
  223. package/dist/src/planner/nodes/window-node.js +25 -23
  224. package/dist/src/planner/nodes/window-node.js.map +1 -1
  225. package/dist/src/planner/optimizer.d.ts.map +1 -1
  226. package/dist/src/planner/optimizer.js +46 -50
  227. package/dist/src/planner/optimizer.js.map +1 -1
  228. package/dist/src/planner/planning-context.d.ts +13 -0
  229. package/dist/src/planner/planning-context.d.ts.map +1 -1
  230. package/dist/src/planner/planning-context.js.map +1 -1
  231. package/dist/src/planner/rules/access/rule-select-access-path.d.ts +1 -1
  232. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  233. package/dist/src/planner/rules/access/rule-select-access-path.js +59 -53
  234. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  235. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.d.ts.map +1 -1
  236. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js +62 -2
  237. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +1 -1
  238. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts.map +1 -1
  239. package/dist/src/planner/rules/cache/rule-materialization-advisory.js +31 -24
  240. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +1 -1
  241. package/dist/src/planner/scopes/base.d.ts +0 -10
  242. package/dist/src/planner/scopes/base.d.ts.map +1 -1
  243. package/dist/src/planner/scopes/base.js +0 -14
  244. package/dist/src/planner/scopes/base.js.map +1 -1
  245. package/dist/src/planner/scopes/empty.d.ts +0 -2
  246. package/dist/src/planner/scopes/empty.d.ts.map +1 -1
  247. package/dist/src/planner/scopes/empty.js +0 -8
  248. package/dist/src/planner/scopes/empty.js.map +1 -1
  249. package/dist/src/planner/scopes/multi.d.ts.map +1 -1
  250. package/dist/src/planner/scopes/multi.js +0 -1
  251. package/dist/src/planner/scopes/multi.js.map +1 -1
  252. package/dist/src/planner/scopes/param.d.ts.map +1 -1
  253. package/dist/src/planner/scopes/param.js +0 -1
  254. package/dist/src/planner/scopes/param.js.map +1 -1
  255. package/dist/src/planner/scopes/registered.d.ts +0 -10
  256. package/dist/src/planner/scopes/registered.d.ts.map +1 -1
  257. package/dist/src/planner/scopes/registered.js +1 -17
  258. package/dist/src/planner/scopes/registered.js.map +1 -1
  259. package/dist/src/planner/scopes/scope.d.ts +0 -8
  260. package/dist/src/planner/scopes/scope.d.ts.map +1 -1
  261. package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
  262. package/dist/src/planner/validation/plan-validator.js +1 -7
  263. package/dist/src/planner/validation/plan-validator.js.map +1 -1
  264. package/dist/src/runtime/context-helpers.d.ts +45 -0
  265. package/dist/src/runtime/context-helpers.d.ts.map +1 -0
  266. package/dist/src/runtime/context-helpers.js +139 -0
  267. package/dist/src/runtime/context-helpers.js.map +1 -0
  268. package/dist/src/runtime/emission-context.d.ts +1 -0
  269. package/dist/src/runtime/emission-context.d.ts.map +1 -1
  270. package/dist/src/runtime/emission-context.js +2 -1
  271. package/dist/src/runtime/emission-context.js.map +1 -1
  272. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  273. package/dist/src/runtime/emit/aggregate.js +119 -86
  274. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  275. package/dist/src/runtime/emit/between.d.ts +5 -0
  276. package/dist/src/runtime/emit/between.d.ts.map +1 -0
  277. package/dist/src/runtime/emit/between.js +38 -0
  278. package/dist/src/runtime/emit/between.js.map +1 -0
  279. package/dist/src/runtime/emit/binary.d.ts +0 -1
  280. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  281. package/dist/src/runtime/emit/binary.js +0 -36
  282. package/dist/src/runtime/emit/binary.js.map +1 -1
  283. package/dist/src/runtime/emit/column-reference.d.ts.map +1 -1
  284. package/dist/src/runtime/emit/column-reference.js +2 -26
  285. package/dist/src/runtime/emit/column-reference.js.map +1 -1
  286. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  287. package/dist/src/runtime/emit/constraint-check.js +14 -121
  288. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  289. package/dist/src/runtime/emit/cte-reference.d.ts.map +1 -1
  290. package/dist/src/runtime/emit/cte-reference.js +16 -48
  291. package/dist/src/runtime/emit/cte-reference.js.map +1 -1
  292. package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
  293. package/dist/src/runtime/emit/distinct.js +2 -8
  294. package/dist/src/runtime/emit/distinct.js.map +1 -1
  295. package/dist/src/runtime/emit/filter.d.ts.map +1 -1
  296. package/dist/src/runtime/emit/filter.js +6 -13
  297. package/dist/src/runtime/emit/filter.js.map +1 -1
  298. package/dist/src/runtime/emit/internal-recursive-cte-ref.d.ts +5 -0
  299. package/dist/src/runtime/emit/internal-recursive-cte-ref.d.ts.map +1 -0
  300. package/dist/src/runtime/emit/internal-recursive-cte-ref.js +23 -0
  301. package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +1 -0
  302. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  303. package/dist/src/runtime/emit/join.js +40 -40
  304. package/dist/src/runtime/emit/join.js.map +1 -1
  305. package/dist/src/runtime/emit/project.d.ts.map +1 -1
  306. package/dist/src/runtime/emit/project.js +13 -13
  307. package/dist/src/runtime/emit/project.js.map +1 -1
  308. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  309. package/dist/src/runtime/emit/recursive-cte.js +3 -14
  310. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  311. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  312. package/dist/src/runtime/emit/returning.js +7 -14
  313. package/dist/src/runtime/emit/returning.js.map +1 -1
  314. package/dist/src/runtime/emit/scan.d.ts +5 -2
  315. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  316. package/dist/src/runtime/emit/scan.js +21 -17
  317. package/dist/src/runtime/emit/scan.js.map +1 -1
  318. package/dist/src/runtime/emit/sort.d.ts.map +1 -1
  319. package/dist/src/runtime/emit/sort.js +8 -11
  320. package/dist/src/runtime/emit/sort.js.map +1 -1
  321. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  322. package/dist/src/runtime/emit/subquery.js +95 -40
  323. package/dist/src/runtime/emit/subquery.js.map +1 -1
  324. package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
  325. package/dist/src/runtime/emit/table-valued-function.js +7 -22
  326. package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
  327. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  328. package/dist/src/runtime/emit/update.js +20 -27
  329. package/dist/src/runtime/emit/update.js.map +1 -1
  330. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  331. package/dist/src/runtime/emit/window.js +55 -83
  332. package/dist/src/runtime/emit/window.js.map +1 -1
  333. package/dist/src/runtime/emitters.d.ts.map +1 -1
  334. package/dist/src/runtime/emitters.js +49 -1
  335. package/dist/src/runtime/emitters.js.map +1 -1
  336. package/dist/src/runtime/register.d.ts.map +1 -1
  337. package/dist/src/runtime/register.js +5 -4
  338. package/dist/src/runtime/register.js.map +1 -1
  339. package/dist/src/runtime/scheduler.d.ts.map +1 -1
  340. package/dist/src/runtime/scheduler.js +47 -42
  341. package/dist/src/runtime/scheduler.js.map +1 -1
  342. package/dist/src/runtime/types.d.ts +34 -0
  343. package/dist/src/runtime/types.d.ts.map +1 -1
  344. package/dist/src/runtime/types.js +21 -0
  345. package/dist/src/runtime/types.js.map +1 -1
  346. package/dist/src/schema/manager.d.ts.map +1 -1
  347. package/dist/src/schema/manager.js +29 -16
  348. package/dist/src/schema/manager.js.map +1 -1
  349. package/dist/src/util/plugin-loader.d.ts +10 -1
  350. package/dist/src/util/plugin-loader.d.ts.map +1 -1
  351. package/dist/src/util/plugin-loader.js +56 -1
  352. package/dist/src/util/plugin-loader.js.map +1 -1
  353. package/dist/src/util/working-table-iterable.d.ts.map +1 -1
  354. package/dist/src/util/working-table-iterable.js +8 -8
  355. package/dist/src/util/working-table-iterable.js.map +1 -1
  356. package/dist/src/vtab/manifest.d.ts +36 -0
  357. package/dist/src/vtab/manifest.d.ts.map +1 -1
  358. package/package.json +8 -3
  359. package/src/core/database.ts +48 -6
  360. package/src/core/statement.ts +1 -49
  361. package/src/func/builtins/explain.ts +0 -11
  362. package/src/index.ts +39 -5
  363. package/src/parser/ast.ts +11 -2
  364. package/src/parser/parser.ts +40 -47
  365. package/src/planner/analysis/const-pass.ts +281 -270
  366. package/src/planner/building/constraint-builder.ts +114 -0
  367. package/src/planner/building/delete.ts +16 -3
  368. package/src/planner/building/expression.ts +35 -7
  369. package/src/planner/building/insert.ts +14 -1
  370. package/src/planner/building/select-aggregates.ts +57 -11
  371. package/src/planner/building/select-context.ts +22 -12
  372. package/src/planner/building/select-modifiers.ts +35 -21
  373. package/src/planner/building/select-projections.ts +25 -26
  374. package/src/planner/building/select-window.ts +14 -9
  375. package/src/planner/building/select.ts +163 -31
  376. package/src/planner/building/table.ts +1 -40
  377. package/src/planner/building/update.ts +19 -4
  378. package/src/planner/building/with.ts +12 -13
  379. package/src/planner/cache/correlation-detector.ts +83 -0
  380. package/src/planner/cache/materialization-advisory.ts +71 -50
  381. package/src/planner/cache/reference-graph.ts +115 -91
  382. package/src/planner/debug.ts +163 -0
  383. package/src/planner/framework/context.ts +36 -2
  384. package/src/planner/framework/registry.ts +261 -274
  385. package/src/planner/nodes/add-constraint-node.ts +5 -1
  386. package/src/planner/nodes/aggregate-node.ts +6 -4
  387. package/src/planner/nodes/cache-node.ts +2 -2
  388. package/src/planner/nodes/constraint-check-node.ts +47 -13
  389. package/src/planner/nodes/create-index-node.ts +5 -1
  390. package/src/planner/nodes/create-table-node.ts +5 -1
  391. package/src/planner/nodes/create-view-node.ts +5 -1
  392. package/src/planner/nodes/cte-node.ts +45 -14
  393. package/src/planner/nodes/cte-reference-node.ts +49 -13
  394. package/src/planner/nodes/delete-node.ts +31 -7
  395. package/src/planner/nodes/distinct-node.ts +2 -2
  396. package/src/planner/nodes/dml-executor-node.ts +2 -2
  397. package/src/planner/nodes/drop-table-node.ts +5 -1
  398. package/src/planner/nodes/drop-view-node.ts +5 -1
  399. package/src/planner/nodes/filter.ts +3 -3
  400. package/src/planner/nodes/function.ts +93 -93
  401. package/src/planner/nodes/insert-node.ts +28 -5
  402. package/src/planner/nodes/internal-recursive-cte-ref-node.ts +76 -0
  403. package/src/planner/nodes/join-node.ts +3 -3
  404. package/src/planner/nodes/limit-offset.ts +2 -2
  405. package/src/planner/nodes/plan-node-type.ts +1 -1
  406. package/src/planner/nodes/plan-node.ts +39 -2
  407. package/src/planner/nodes/project-node.ts +39 -19
  408. package/src/planner/nodes/recursive-cte-node.ts +37 -9
  409. package/src/planner/nodes/reference.ts +4 -2
  410. package/src/planner/nodes/returning-node.ts +25 -13
  411. package/src/planner/nodes/scalar.ts +95 -11
  412. package/src/planner/nodes/sequencing-node.ts +2 -2
  413. package/src/planner/nodes/set-operation-node.ts +3 -3
  414. package/src/planner/nodes/single-row.ts +7 -2
  415. package/src/planner/nodes/sink-node.ts +5 -5
  416. package/src/planner/nodes/sort.ts +2 -2
  417. package/src/planner/nodes/stream-aggregate.ts +76 -12
  418. package/src/planner/nodes/subquery.ts +90 -27
  419. package/src/planner/nodes/{physical-access-nodes.ts → table-access-nodes.ts} +6 -6
  420. package/src/planner/nodes/update-node.ts +31 -13
  421. package/src/planner/nodes/window-node.ts +28 -22
  422. package/src/planner/optimizer.ts +257 -263
  423. package/src/planner/planning-context.ts +15 -0
  424. package/src/planner/rules/access/rule-select-access-path.ts +68 -64
  425. package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +74 -2
  426. package/src/planner/rules/cache/rule-materialization-advisory.ts +31 -27
  427. package/src/planner/scopes/base.ts +0 -17
  428. package/src/planner/scopes/empty.ts +0 -10
  429. package/src/planner/scopes/multi.ts +0 -1
  430. package/src/planner/scopes/param.ts +0 -1
  431. package/src/planner/scopes/registered.ts +1 -20
  432. package/src/planner/scopes/scope.ts +0 -12
  433. package/src/planner/validation/plan-validator.ts +1 -8
  434. package/src/runtime/context-helpers.ts +191 -0
  435. package/src/runtime/emission-context.ts +5 -2
  436. package/src/runtime/emit/aggregate.ts +131 -85
  437. package/src/runtime/emit/between.ts +51 -0
  438. package/src/runtime/emit/binary.ts +0 -46
  439. package/src/runtime/emit/column-reference.ts +3 -36
  440. package/src/runtime/emit/constraint-check.ts +17 -142
  441. package/src/runtime/emit/cte-reference.ts +23 -60
  442. package/src/runtime/emit/distinct.ts +2 -7
  443. package/src/runtime/emit/filter.ts +6 -13
  444. package/src/runtime/emit/internal-recursive-cte-ref.ts +37 -0
  445. package/src/runtime/emit/join.ts +45 -43
  446. package/src/runtime/emit/project.ts +18 -12
  447. package/src/runtime/emit/recursive-cte.ts +3 -12
  448. package/src/runtime/emit/returning.ts +7 -14
  449. package/src/runtime/emit/scan.ts +25 -23
  450. package/src/runtime/emit/sort.ts +8 -11
  451. package/src/runtime/emit/subquery.ts +108 -48
  452. package/src/runtime/emit/table-valued-function.ts +7 -20
  453. package/src/runtime/emit/update.ts +22 -29
  454. package/src/runtime/emit/window.ts +74 -88
  455. package/src/runtime/emitters.ts +52 -1
  456. package/src/runtime/register.ts +5 -4
  457. package/src/runtime/scheduler.ts +54 -54
  458. package/src/runtime/types.ts +45 -0
  459. package/src/schema/manager.ts +34 -19
  460. package/src/util/plugin-loader.ts +78 -4
  461. package/src/util/working-table-iterable.ts +15 -7
  462. package/src/vtab/manifest.ts +42 -0
  463. package/src/planner/nodes/scan.ts +0 -103
  464. package/src/planner/rules/physical/rule-mark-physical.ts +0 -37
  465. package/src/runtime/emit/table-reference.ts +0 -92
@@ -3,7 +3,7 @@ import { PlanNodeType } from './nodes/plan-node-type.js';
3
3
  import { DEFAULT_TUNING } from './optimizer-tuning.js';
4
4
  // Re-export for convenience
5
5
  export { DEFAULT_TUNING };
6
- import { applyRules, clearVisitedRules, registerRules, createRule } from './framework/registry.js';
6
+ import { applyRules, registerRules, createRule } from './framework/registry.js';
7
7
  import { tracePhaseStart, tracePhaseEnd, traceNodeStart, traceNodeEnd } from './framework/trace.js';
8
8
  import { defaultStatsProvider } from './stats/index.js';
9
9
  import { createOptContext } from './framework/context.js';
@@ -16,7 +16,6 @@ import { ruleAggregateStreaming } from './rules/aggregate/rule-aggregate-streami
16
16
  // Constraint rules removed - now handled in builders for correctness
17
17
  import { ruleCteOptimization } from './rules/cache/rule-cte-optimization.js';
18
18
  import { ruleMutatingSubqueryCache } from './rules/cache/rule-mutating-subquery-cache.js';
19
- import { ruleMarkPhysical } from './rules/physical/rule-mark-physical.js';
20
19
  // Phase 3 rules
21
20
  import { validatePhysicalTree } from './validation/plan-validator.js';
22
21
  import { performConstantFolding } from './analysis/const-pass.js';
@@ -44,14 +43,15 @@ export class Optimizer {
44
43
  }
45
44
  Optimizer.globalRulesRegistered = true;
46
45
  const toRegister = [];
47
- // Single-pass constant folding is now done before rules, so no individual rules needed
48
- // Core optimization rules (converted from old system)
49
- toRegister.push(createRule('aggregate-streaming', PlanNodeType.Aggregate, 'impl', ruleAggregateStreaming, 40 // High priority - fundamental logical→physical transformation
50
- ));
46
+ // Note: Single-pass constant folding is done before rules
51
47
  // Mutating subquery cache injection - critical for correctness
52
48
  toRegister.push(createRule('mutating-subquery-cache', PlanNodeType.Join, 'rewrite', ruleMutatingSubqueryCache, 20 // Very high priority - correctness fix to prevent multiple execution
53
49
  ));
54
- toRegister.push(createRule('cte-optimization', PlanNodeType.CTE, 'impl', ruleCteOptimization, 70 // Lower priority - caching optimization
50
+ // Phase 1.5 rules
51
+ toRegister.push(createRule('select-access-path', PlanNodeType.TableReference, 'impl', ruleSelectAccessPath, 25 // High priority - fundamental access path selection
52
+ ));
53
+ // Core optimization rules (converted from old system)
54
+ toRegister.push(createRule('aggregate-streaming', PlanNodeType.Aggregate, 'impl', ruleAggregateStreaming, 40 // High priority - fundamental logical→physical transformation
55
55
  ));
56
56
  // toRegister.push(createRule(
57
57
  // 'project-optimization',
@@ -67,31 +67,28 @@ export class Optimizer {
67
67
  // ruleFilterOptimization,
68
68
  // 50 // Medium priority - basic optimization
69
69
  // ));
70
- // Phase 1.5 rules
71
- toRegister.push(createRule('select-access-path', PlanNodeType.TableScan, 'impl', ruleSelectAccessPath, 30 // High priority - fundamental access path selection
72
- ));
73
- // Phase 2 rules
74
- toRegister.push(createRule('materialization-advisory', PlanNodeType.Block, // Apply to root-level nodes
75
- 'rewrite', ruleMaterializationAdvisory, 90 // Low priority - run last for global analysis
70
+ toRegister.push(createRule('cte-optimization', PlanNodeType.CTE, 'impl', ruleCteOptimization, 70 // Lower priority - caching optimization
76
71
  ));
77
- // Fallback rule - must run last with lowest priority
78
- // We need to register this for multiple node types that might need fallback handling
79
- const fallbackNodeTypes = [
80
- // Relational nodes
81
- PlanNodeType.TableScan, PlanNodeType.Values, PlanNodeType.TableFunctionCall,
82
- PlanNodeType.Join, PlanNodeType.NestedLoopJoin, PlanNodeType.SingleRow,
83
- PlanNodeType.SetOperation, PlanNodeType.Distinct, PlanNodeType.LimitOffset,
84
- PlanNodeType.Window, PlanNodeType.Block, PlanNodeType.CTEReference,
85
- PlanNodeType.Cache, PlanNodeType.Sequencing, PlanNodeType.UpdateExecutor,
86
- // Scalar nodes
87
- PlanNodeType.Literal, PlanNodeType.ColumnReference, PlanNodeType.ParameterReference,
88
- PlanNodeType.BinaryOp, PlanNodeType.UnaryOp, PlanNodeType.CaseExpr,
89
- PlanNodeType.Cast, PlanNodeType.Collate, PlanNodeType.ScalarFunctionCall,
90
- PlanNodeType.Between, PlanNodeType.IsNull, PlanNodeType.IsNotNull, PlanNodeType.Like,
91
- PlanNodeType.ScalarSubquery, PlanNodeType.WindowFunctionCall, PlanNodeType.ArrayIndex
72
+ // Phase 2 rules - Materialization advisory
73
+ // TODO: Can we apply this more generally rather than assuming certain node types?
74
+ // Register for all node types that can have relational children
75
+ const nodeTypesWithRelationalChildren = [
76
+ PlanNodeType.Block, // Contains statements
77
+ PlanNodeType.ScalarSubquery, // Contains relational subquery
78
+ PlanNodeType.Exists, // Contains relational subquery
79
+ PlanNodeType.In, // Can contain relational subquery
80
+ PlanNodeType.Insert, // Has source relation
81
+ PlanNodeType.Update, // Has source relation
82
+ PlanNodeType.Delete, // Has source relation
83
+ PlanNodeType.CTE, // Has definition relation
84
+ PlanNodeType.RecursiveCTE, // Has anchor/recursive relations
85
+ PlanNodeType.Returning, // Wraps DML operations
86
+ // Scalar nodes that might contain subqueries
87
+ PlanNodeType.ScalarFunctionCall, // Function args might be subqueries
88
+ PlanNodeType.CaseExpr, // CASE conditions might be subqueries
92
89
  ];
93
- for (const nodeType of fallbackNodeTypes) {
94
- toRegister.push(createRule(`mark-physical-${nodeType.toLowerCase()}`, nodeType, 'impl', ruleMarkPhysical, 100 // Lowest priority - absolute fallback
90
+ for (const nodeType of nodeTypesWithRelationalChildren) {
91
+ toRegister.push(createRule('materialization-advisory', nodeType, 'rewrite', ruleMaterializationAdvisory, 90 // Low priority - run last for global analysis
95
92
  ));
96
93
  }
97
94
  // Register all rules at once
@@ -102,8 +99,6 @@ export class Optimizer {
102
99
  */
103
100
  optimize(plan, db) {
104
101
  log('Starting optimization of plan', plan.nodeType);
105
- // Clear rule tracking from previous runs
106
- clearVisitedRules();
107
102
  // Create optimization context
108
103
  const context = createOptContext(this, this.stats, this.tuning, db);
109
104
  tracePhaseStart('optimization');
@@ -135,28 +130,25 @@ export class Optimizer {
135
130
  * Perform single-pass constant folding over the entire plan tree
136
131
  */
137
132
  performConstantFolding(plan, context) {
138
- try {
139
- // Create runtime expression evaluator
140
- const evaluator = createRuntimeExpressionEvaluator(context.db);
141
- // Perform single-pass constant folding
142
- const result = performConstantFolding(plan, evaluator);
143
- log('Constant folding completed');
144
- return result;
145
- }
146
- catch (error) {
147
- log('Constant folding failed: %s', error);
148
- // Return original plan on failure
149
- return plan;
150
- }
133
+ // Create runtime expression evaluator
134
+ const evaluator = createRuntimeExpressionEvaluator(context.db);
135
+ // Perform single-pass constant folding
136
+ const result = performConstantFolding(plan, evaluator);
137
+ log('Constant folding completed');
138
+ return result;
151
139
  }
152
140
  optimizeNode(node, context) {
153
141
  traceNodeStart(node);
154
- // If already physical, just recurse on children
155
- if (node.physical) {
156
- const result = this.optimizeChildren(node, context);
157
- traceNodeEnd(node, result);
158
- return result;
142
+ // Check if we've already optimized this exact node instance
143
+ const cached = context.optimizedNodes.get(node.id);
144
+ if (cached) {
145
+ log('Reusing optimized version of shared node %s (%s)', node.id, node.nodeType);
146
+ traceNodeEnd(node, cached);
147
+ return cached;
159
148
  }
149
+ // Note: We removed the broken `if (node.physical)` check here
150
+ // The `physical` property is always truthy (it returns a PhysicalProperties object)
151
+ // Physical vs logical distinction should be handled by the rules themselves
160
152
  // First optimize all children
161
153
  const optimizedNode = this.optimizeChildren(node, context);
162
154
  // Apply rules
@@ -165,10 +157,14 @@ export class Optimizer {
165
157
  // Rules transformed the node
166
158
  log(`Rules applied to ${optimizedNode.nodeType}, transformed to ${rulesApplied.nodeType}`);
167
159
  traceNodeEnd(node, rulesApplied);
160
+ // Cache the final result
161
+ context.optimizedNodes.set(node.id, rulesApplied);
168
162
  return rulesApplied;
169
163
  }
170
164
  // No rule applied - assume node is physical
171
165
  traceNodeEnd(node, optimizedNode);
166
+ // Cache the result even if no rules applied
167
+ context.optimizedNodes.set(node.id, optimizedNode);
172
168
  return optimizedNode;
173
169
  }
174
170
  optimizeChildren(node, context) {
@@ -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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"}
@@ -3,6 +3,8 @@ import type { Database } from '../core/database.js';
3
3
  import type { SchemaManager } from '../schema/manager.js';
4
4
  import type { Scope } from './scopes/scope.js';
5
5
  import type { ScalarPlanNode } from './nodes/plan-node.js';
6
+ import type { CTEPlanNode } from './nodes/cte-node.js';
7
+ import type { CTEReferenceNode } from './nodes/cte-reference-node.js';
6
8
  /**
7
9
  * Debug options for query planning and execution.
8
10
  */
@@ -99,6 +101,12 @@ export interface PlanningContext {
99
101
  columnIndex: number;
100
102
  attributeId: number;
101
103
  }>;
104
+ /**
105
+ * Active CTEs available in the current planning context.
106
+ * This map contains all CTEs from the current WITH clause and any parent WITH clauses,
107
+ * allowing subqueries in expressions to resolve CTE references correctly.
108
+ */
109
+ readonly cteNodes?: Map<string, CTEPlanNode>;
102
110
  /**
103
111
  * Schema dependency tracker for this planning session.
104
112
  */
@@ -107,5 +115,10 @@ export interface PlanningContext {
107
115
  * Schema object cache for resolved objects during planning.
108
116
  */
109
117
  readonly schemaCache: Map<string, any>;
118
+ /**
119
+ * Cache for CTE reference nodes to ensure consistent attribute IDs across multiple references
120
+ * to the same CTE with the same alias. Key format: "cteName:alias"
121
+ */
122
+ cteReferenceCache?: Map<string, CTEReferenceNode>;
110
123
  }
111
124
  //# sourceMappingURL=planning-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"planning-context.d.ts","sourceRoot":"","sources":["../../../src/planner/planning-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,0BAA0B;IACtC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,qBAAqB,CAAyB;IAEtD;;OAEG;IACH,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI;IAM1D;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKzD;;OAEG;IACH,cAAc,IAAI,OAAO;IAUzB;;OAEG;IACH,eAAe,IAAI,gBAAgB,EAAE;IAIrC;;OAEG;IACH,kBAAkB,IAAI,OAAO;IAI7B;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAU1B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,kBAAkB;CAS1B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAEtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAE9B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;QAC1B,UAAU,EAAE,cAAc,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH;;OAEG;IACH,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;IAExD;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACxC"}
1
+ {"version":3,"file":"planning-context.d.ts","sourceRoot":"","sources":["../../../src/planner/planning-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,0BAA0B;IACtC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,qBAAqB,CAAyB;IAEtD;;OAEG;IACH,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI;IAM1D;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKzD;;OAEG;IACH,cAAc,IAAI,OAAO;IAUzB;;OAEG;IACH,eAAe,IAAI,gBAAgB,EAAE;IAIrC;;OAEG;IACH,kBAAkB,IAAI,OAAO;IAI7B;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAU1B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,kBAAkB;CAS1B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAEtC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAE9B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;QAC1B,UAAU,EAAE,cAAc,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;IAExD;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEvC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"planning-context.js","sourceRoot":"","sources":["../../../src/planner/planning-context.ts"],"names":[],"mappings":"AA+BA;;GAEG;AACH,MAAM,OAAO,0BAA0B;IAC9B,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,eAAe,GAAG,IAAI,GAAG,EAAwB,CAAC;IAClD,qBAAqB,GAAG,IAAI,GAAG,EAAc,CAAC;IAEtD;;OAEG;IACH,gBAAgB,CAAC,GAAqB,EAAE,MAAW;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,QAAoB;QAC3C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,cAAc;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,SAAS,EAAE,CAAC;gBACnC,sDAAsD;gBACtD,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACH,eAAe;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,kBAAkB;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,kBAAkB;QACjB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACnD,IAAI,CAAC;gBACJ,QAAQ,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;QACF,CAAC;IACF,CAAC;IAEO,aAAa,CAAC,GAAqB;QAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC;QACvC,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC;IAC7D,CAAC;IAEO,kBAAkB,CAAC,GAAW;QACrC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO;YACN,IAAI,EAAE,IAAgC;YACtC,UAAU,EAAE,UAAU,IAAI,SAAS;YACnC,UAAU;YACV,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS;SAChD,CAAC;IACH,CAAC;CACD"}
1
+ {"version":3,"file":"planning-context.js","sourceRoot":"","sources":["../../../src/planner/planning-context.ts"],"names":[],"mappings":"AAiCA;;GAEG;AACH,MAAM,OAAO,0BAA0B;IAC9B,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,eAAe,GAAG,IAAI,GAAG,EAAwB,CAAC;IAClD,qBAAqB,GAAG,IAAI,GAAG,EAAc,CAAC;IAEtD;;OAEG;IACH,gBAAgB,CAAC,GAAqB,EAAE,MAAW;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,QAAoB;QAC3C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,cAAc;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,SAAS,EAAE,CAAC;gBACnC,sDAAsD;gBACtD,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACH,eAAe;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,kBAAkB;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,kBAAkB;QACjB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACnD,IAAI,CAAC;gBACJ,QAAQ,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;QACF,CAAC;IACF,CAAC;IAEO,aAAa,CAAC,GAAqB;QAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC;QACvC,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC;IAC7D,CAAC;IAEO,kBAAkB,CAAC,GAAW;QACrC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO;YACN,IAAI,EAAE,IAAgC;YACtC,UAAU,EAAE,UAAU,IAAI,SAAS;YACnC,UAAU;YACV,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS;SAChD,CAAC;IACH,CAAC;CACD"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Rule: Select Access Path
3
3
  *
4
- * Transforms: TableScanNode → SeqScanNode | IndexScanNode | IndexSeekNode
4
+ * Transforms: TableReferenceNode → SeqScanNode | IndexScanNode | IndexSeekNode
5
5
  * Conditions: When logical table access needs to be made physical
6
6
  * Benefits: Enables cost-based access path selection and index utilization
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"rule-select-access-path.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-select-access-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAQ7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAwDzF"}
1
+ {"version":3,"file":"rule-select-access-path.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-select-access-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAU7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAmDzF"}
@@ -1,36 +1,32 @@
1
1
  /**
2
2
  * Rule: Select Access Path
3
3
  *
4
- * Transforms: TableScanNode → SeqScanNode | IndexScanNode | IndexSeekNode
4
+ * Transforms: TableReferenceNode → SeqScanNode | IndexScanNode | IndexSeekNode
5
5
  * Conditions: When logical table access needs to be made physical
6
6
  * Benefits: Enables cost-based access path selection and index utilization
7
7
  */
8
8
  import { createLogger } from '../../../common/logger.js';
9
- import { TableScanNode } from '../../nodes/scan.js';
10
- import { SeqScanNode, IndexScanNode, IndexSeekNode } from '../../nodes/physical-access-nodes.js';
9
+ import { TableReferenceNode } from '../../nodes/reference.js';
10
+ import { SeqScanNode, IndexScanNode, IndexSeekNode } from '../../nodes/table-access-nodes.js';
11
11
  import { seqScanCost } from '../../cost/index.js';
12
12
  const log = createLogger('optimizer:rule:select-access-path');
13
13
  export function ruleSelectAccessPath(node, context) {
14
- // Guard: only apply to TableScanNode
15
- if (!(node instanceof TableScanNode)) {
14
+ // Guard: only apply to TableReferenceNode
15
+ if (!(node instanceof TableReferenceNode)) {
16
16
  return null;
17
17
  }
18
- // Guard: already physical
19
- if (node.physical) {
20
- return null;
21
- }
22
- log('Selecting access path for table %s', node.source.tableSchema.name);
18
+ log('Selecting access path for table %s', node.tableSchema.name);
23
19
  try {
24
20
  // Get table schema and virtual table module
25
- const tableSchema = node.source.tableSchema;
21
+ const tableSchema = node.tableSchema;
26
22
  const vtabModule = tableSchema.vtabModule;
27
23
  // If no virtual table module, fall back to sequential scan
28
24
  if (!vtabModule || typeof vtabModule !== 'object' || !('getBestAccessPlan' in vtabModule)) {
29
25
  log('No getBestAccessPlan support, using sequential scan for %s', tableSchema.name);
30
- return createSeqScan(node);
26
+ return createSeqScan(node, undefined);
31
27
  }
32
28
  // Extract constraints from current filter info
33
- const constraints = extractConstraintsFromFilterInfo(node, tableSchema);
29
+ const constraints = []; // TODO: Extract from parent Filter node if any
34
30
  // Build request for getBestAccessPlan
35
31
  const request = {
36
32
  columns: tableSchema.columns.map((col, index) => ({
@@ -41,7 +37,7 @@ export function ruleSelectAccessPath(node, context) {
41
37
  isUnique: col.primaryKey || false // For now, assume only PK columns are unique
42
38
  })),
43
39
  filters: constraints,
44
- estimatedRows: node.source.estimatedRows
40
+ estimatedRows: node.estimatedRows
45
41
  };
46
42
  // Call getBestAccessPlan
47
43
  const accessPlan = vtabModule.getBestAccessPlan(context.db, tableSchema, request);
@@ -51,47 +47,36 @@ export function ruleSelectAccessPath(node, context) {
51
47
  return physicalNode;
52
48
  }
53
49
  catch (error) {
54
- log('Error selecting access path for %s: %s', node.source.tableSchema.name, error);
50
+ log('Error selecting access path for %s: %s', node.tableSchema.name, error);
55
51
  // Fall back to sequential scan on error
56
52
  return createSeqScan(node);
57
53
  }
58
54
  }
59
- /**
60
- * Extract predicate constraints from FilterInfo
61
- */
62
- function extractConstraintsFromFilterInfo(node, _tableSchema) {
63
- const constraints = [];
64
- // Extract from FilterInfo.indexInfoOutput.aConstraint if available
65
- const indexConstraints = node.filterInfo.indexInfoOutput.aConstraint;
66
- if (indexConstraints) {
67
- for (let i = 0; i < indexConstraints.length; i++) {
68
- const constraint = indexConstraints[i];
69
- if (constraint && constraint.usable) {
70
- constraints.push({
71
- columnIndex: constraint.iColumn,
72
- op: mapConstraintOp(constraint.op),
73
- usable: constraint.usable,
74
- // Note: actual value would need to be extracted from args
75
- value: undefined
76
- });
77
- }
78
- }
79
- }
80
- return constraints;
81
- }
82
- /**
83
- * Map internal constraint op to public constraint op
84
- */
85
- function mapConstraintOp(_internalOp) {
86
- // This mapping would need to be based on the actual constants used
87
- // For now, assume equality - in a real implementation this would map
88
- // from IndexConstraintOp constants to ConstraintOp
89
- return '=';
90
- }
91
55
  /**
92
56
  * Select the appropriate physical node based on access plan
93
57
  */
94
58
  function selectPhysicalNode(originalNode, accessPlan, constraints) {
59
+ // Create a default FilterInfo for the physical nodes
60
+ const filterInfo = {
61
+ idxNum: 0,
62
+ idxStr: 'fullscan',
63
+ constraints: [],
64
+ args: [],
65
+ indexInfoOutput: {
66
+ nConstraint: 0,
67
+ aConstraint: [],
68
+ nOrderBy: 0,
69
+ aOrderBy: [],
70
+ aConstraintUsage: [],
71
+ idxNum: 0,
72
+ idxStr: 'fullscan',
73
+ orderByConsumed: false,
74
+ estimatedCost: accessPlan.cost,
75
+ estimatedRows: BigInt(accessPlan.rows || 1000),
76
+ idxFlags: 0,
77
+ colUsed: 0n,
78
+ }
79
+ };
95
80
  // Analyze the access plan to determine node type
96
81
  const hasEqualityConstraints = constraints.some(c => c.op === '=' && accessPlan.handledFilters[constraints.indexOf(c)]);
97
82
  const hasRangeConstraints = constraints.some(c => ['>', '>=', '<', '<='].includes(c.op) && accessPlan.handledFilters[constraints.indexOf(c)]);
@@ -104,7 +89,7 @@ function selectPhysicalNode(originalNode, accessPlan, constraints) {
104
89
  if (hasEqualityConstraints && (accessPlan.rows || 0) <= 10) {
105
90
  // Small result set with equality - use index seek
106
91
  log('Using index seek (equality constraint, small result)');
107
- return new IndexSeekNode(originalNode.scope, originalNode.source, originalNode.filterInfo, 'primary', // Default to primary index
92
+ return new IndexSeekNode(originalNode.scope, originalNode, filterInfo, 'primary', // Default to primary index
108
93
  [], // seekKeys would be populated from constraints
109
94
  false, // not a range
110
95
  providesOrdering, accessPlan.cost);
@@ -112,22 +97,43 @@ function selectPhysicalNode(originalNode, accessPlan, constraints) {
112
97
  else if (hasRangeConstraints || providesOrdering) {
113
98
  // Range constraints or ordering required - use index scan
114
99
  log('Using index scan (range constraints or ordering)');
115
- return new IndexScanNode(originalNode.scope, originalNode.source, originalNode.filterInfo, 'primary', // Default to primary index
100
+ return new IndexScanNode(originalNode.scope, originalNode, filterInfo, 'primary', // Default to primary index
116
101
  providesOrdering, accessPlan.cost);
117
102
  }
118
103
  else {
119
104
  // Fall back to sequential scan
120
105
  log('Using sequential scan (no beneficial index access)');
121
- return createSeqScan(originalNode, accessPlan.cost);
106
+ return createSeqScan(originalNode, filterInfo, accessPlan.cost);
122
107
  }
123
108
  }
124
109
  /**
125
110
  * Create a sequential scan node
126
111
  */
127
- function createSeqScan(originalNode, cost) {
128
- const tableRows = originalNode.source.estimatedRows || 1000;
112
+ function createSeqScan(originalNode, filterInfo, cost) {
113
+ const tableRows = originalNode.estimatedRows || 1000;
129
114
  const scanCost = cost ?? seqScanCost(tableRows);
130
- const seqScan = new SeqScanNode(originalNode.scope, originalNode.source, originalNode.filterInfo, scanCost);
115
+ // Create default FilterInfo if not provided
116
+ const effectiveFilterInfo = filterInfo || {
117
+ idxNum: 0,
118
+ idxStr: 'fullscan',
119
+ constraints: [],
120
+ args: [],
121
+ indexInfoOutput: {
122
+ nConstraint: 0,
123
+ aConstraint: [],
124
+ nOrderBy: 0,
125
+ aOrderBy: [],
126
+ aConstraintUsage: [],
127
+ idxNum: 0,
128
+ idxStr: 'fullscan',
129
+ orderByConsumed: false,
130
+ estimatedCost: scanCost,
131
+ estimatedRows: BigInt(tableRows),
132
+ idxFlags: 0,
133
+ colUsed: 0n,
134
+ }
135
+ };
136
+ const seqScan = new SeqScanNode(originalNode.scope, originalNode, effectiveFilterInfo, scanCost);
131
137
  return seqScan;
132
138
  }
133
139
  //# sourceMappingURL=rule-select-access-path.js.map
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rule-aggregate-streaming.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/aggregate/rule-aggregate-streaming.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAO7D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CA0D5F"}
1
+ {"version":3,"file":"rule-aggregate-streaming.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/aggregate/rule-aggregate-streaming.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAO7D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAkI5F"}
@@ -31,8 +31,38 @@ export function ruleAggregateStreaming(node, _context) {
31
31
  nulls: undefined
32
32
  }));
33
33
  const sortNode = new SortNode(node.scope, source, sortKeys);
34
+ // Create combined attributes: AggregateNode attributes + source attributes
35
+ // This ensures both GROUP BY/aggregate AND source column attribute IDs are preserved
36
+ const aggregateAttrs = node.getAttributes();
37
+ const sourceAttrs = node.source.getAttributes();
38
+ // Deduplicate by column NAME to avoid duplicate columns like 'id'
39
+ // (The same logical column can have different attribute IDs between aggregate and source)
40
+ const seenNames = new Set();
41
+ const combinedAttrs = [];
42
+ // Add aggregate attributes first (GROUP BY + aggregates)
43
+ for (const attr of aggregateAttrs) {
44
+ combinedAttrs.push(attr);
45
+ seenNames.add(attr.name);
46
+ }
47
+ // Add source attributes that aren't already present by name
48
+ for (const attr of sourceAttrs) {
49
+ if (!seenNames.has(attr.name)) {
50
+ combinedAttrs.push(attr);
51
+ seenNames.add(attr.name);
52
+ }
53
+ }
54
+ // Final safety-pass: filter duplicates that may have slipped through
55
+ const uniqueByName = new Set();
56
+ const deduped = [];
57
+ for (const attr of combinedAttrs) {
58
+ if (!uniqueByName.has(attr.name)) {
59
+ deduped.push(attr);
60
+ uniqueByName.add(attr.name);
61
+ }
62
+ }
63
+ const finalAttrs = deduped;
34
64
  const result = new StreamAggregateNode(node.scope, sortNode, node.groupBy, node.aggregates, undefined, // estimatedCostOverride
35
- node.getAttributes() // **CRITICAL**: Preserve original attribute IDs
65
+ finalAttrs // unique list
36
66
  );
37
67
  // Let framework set physical properties via markPhysical()
38
68
  // Both SortNode and StreamAggregateNode have getPhysical() methods
@@ -41,8 +71,38 @@ export function ruleAggregateStreaming(node, _context) {
41
71
  }
42
72
  else {
43
73
  // No GROUP BY - can stream aggregate without sorting
74
+ // Create combined attributes: AggregateNode attributes + source attributes
75
+ // This ensures both GROUP BY/aggregate AND source column attribute IDs are preserved
76
+ const aggregateAttrs = node.getAttributes();
77
+ const sourceAttrs = node.source.getAttributes();
78
+ // Deduplicate by column NAME to avoid duplicate columns like 'id'
79
+ // (The same logical column can have different attribute IDs between aggregate and source)
80
+ const seenNames = new Set();
81
+ const combinedAttrs = [];
82
+ // Add aggregate attributes first (GROUP BY + aggregates)
83
+ for (const attr of aggregateAttrs) {
84
+ combinedAttrs.push(attr);
85
+ seenNames.add(attr.name);
86
+ }
87
+ // Add source attributes that aren't already present by name
88
+ for (const attr of sourceAttrs) {
89
+ if (!seenNames.has(attr.name)) {
90
+ combinedAttrs.push(attr);
91
+ seenNames.add(attr.name);
92
+ }
93
+ }
94
+ // Final safety-pass: filter duplicates that may have slipped through
95
+ const uniqueByName = new Set();
96
+ const deduped = [];
97
+ for (const attr of combinedAttrs) {
98
+ if (!uniqueByName.has(attr.name)) {
99
+ deduped.push(attr);
100
+ uniqueByName.add(attr.name);
101
+ }
102
+ }
103
+ const finalAttrs = deduped;
44
104
  const result = new StreamAggregateNode(node.scope, source, node.groupBy, node.aggregates, undefined, // estimatedCostOverride
45
- node.getAttributes() // **CRITICAL**: Preserve original attribute IDs
105
+ finalAttrs // unique list
46
106
  );
47
107
  // Let framework set physical properties via markPhysical()
48
108
  // StreamAggregateNode has getPhysical() method
@@ -1 +1 @@
1
- {"version":3,"file":"rule-aggregate-streaming.js","sourceRoot":"","sources":["../../../../../src/planner/rules/aggregate/rule-aggregate-streaming.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,oCAAoC,CAAC,CAAC;AAE/D,MAAM,UAAU,sBAAsB,CAAC,IAAc,EAAE,QAAoB;IAC1E,qCAAqC;IACrC,IAAI,CAAC,CAAC,IAAI,YAAY,aAAa,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,GAAG,CAAC,8CAA8C,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAE7D,2CAA2C;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAE3B,sCAAsC;IACtC,sDAAsD;IACtD,oDAAoD;IAEpD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,kDAAkD;QAClD,gCAAgC;QAChC,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1C,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,KAAc;YACzB,KAAK,EAAE,SAAS;SAChB,CAAC,CAAC,CAAC;QAEJ,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,IAAI,mBAAmB,CACrC,IAAI,CAAC,KAAK,EACV,QAAQ,EACR,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,UAAU,EACf,SAAS,EAAE,wBAAwB;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC,gDAAgD;SACrE,CAAC;QAEF,2DAA2D;QAC3D,mEAAmE;QAEnE,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC;IACf,CAAC;SAAM,CAAC;QACP,qDAAqD;QACrD,MAAM,MAAM,GAAG,IAAI,mBAAmB,CACrC,IAAI,CAAC,KAAK,EACV,MAAM,EACN,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,UAAU,EACf,SAAS,EAAE,wBAAwB;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC,gDAAgD;SACrE,CAAC;QAEF,2DAA2D;QAC3D,+CAA+C;QAE/C,GAAG,CAAC,+DAA+D,CAAC,CAAC;QACrE,OAAO,MAAM,CAAC;IACf,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"rule-aggregate-streaming.js","sourceRoot":"","sources":["../../../../../src/planner/rules/aggregate/rule-aggregate-streaming.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rule-materialization-advisory.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/cache/rule-materialization-advisory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAK7D,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAkDhG"}
1
+ {"version":3,"file":"rule-materialization-advisory.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/cache/rule-materialization-advisory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAK7D,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAsDhG"}