@quereus/quereus 4.3.1 → 4.4.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 (788) hide show
  1. package/README.md +25 -7
  2. package/dist/src/common/types.d.ts +9 -59
  3. package/dist/src/common/types.d.ts.map +1 -1
  4. package/dist/src/common/types.js.map +1 -1
  5. package/dist/src/core/database-assertions.d.ts +2 -2
  6. package/dist/src/core/database-assertions.d.ts.map +1 -1
  7. package/dist/src/core/database-assertions.js +4 -3
  8. package/dist/src/core/database-assertions.js.map +1 -1
  9. package/dist/src/core/database-external-changes.d.ts +3 -3
  10. package/dist/src/core/database-external-changes.d.ts.map +1 -1
  11. package/dist/src/core/database-external-changes.js +13 -10
  12. package/dist/src/core/database-external-changes.js.map +1 -1
  13. package/dist/src/core/database-internal.d.ts.map +1 -1
  14. package/dist/src/core/database-materialized-views-analysis.d.ts +199 -0
  15. package/dist/src/core/database-materialized-views-analysis.d.ts.map +1 -0
  16. package/dist/src/core/database-materialized-views-analysis.js +502 -0
  17. package/dist/src/core/database-materialized-views-analysis.js.map +1 -0
  18. package/dist/src/core/database-materialized-views-apply.d.ts +422 -0
  19. package/dist/src/core/database-materialized-views-apply.d.ts.map +1 -0
  20. package/dist/src/core/database-materialized-views-apply.js +929 -0
  21. package/dist/src/core/database-materialized-views-apply.js.map +1 -0
  22. package/dist/src/core/database-materialized-views-plan-builders.d.ts +267 -0
  23. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -0
  24. package/dist/src/core/database-materialized-views-plan-builders.js +1423 -0
  25. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -0
  26. package/dist/src/core/database-materialized-views-plans.d.ts +641 -0
  27. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -0
  28. package/dist/src/core/database-materialized-views-plans.js +13 -0
  29. package/dist/src/core/database-materialized-views-plans.js.map +1 -0
  30. package/dist/src/core/database-materialized-views.d.ts +108 -860
  31. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  32. package/dist/src/core/database-materialized-views.js +212 -2165
  33. package/dist/src/core/database-materialized-views.js.map +1 -1
  34. package/dist/src/core/database-transaction.d.ts +10 -1
  35. package/dist/src/core/database-transaction.d.ts.map +1 -1
  36. package/dist/src/core/database-transaction.js +16 -4
  37. package/dist/src/core/database-transaction.js.map +1 -1
  38. package/dist/src/core/database-watchers.d.ts.map +1 -1
  39. package/dist/src/core/database-watchers.js +2 -1
  40. package/dist/src/core/database-watchers.js.map +1 -1
  41. package/dist/src/core/database.d.ts +99 -13
  42. package/dist/src/core/database.d.ts.map +1 -1
  43. package/dist/src/core/database.js +270 -50
  44. package/dist/src/core/database.js.map +1 -1
  45. package/dist/src/core/derived-row-validator.d.ts +1 -1
  46. package/dist/src/core/derived-row-validator.d.ts.map +1 -1
  47. package/dist/src/core/derived-row-validator.js +5 -3
  48. package/dist/src/core/derived-row-validator.js.map +1 -1
  49. package/dist/src/core/statement.d.ts +8 -0
  50. package/dist/src/core/statement.d.ts.map +1 -1
  51. package/dist/src/core/statement.js +98 -18
  52. package/dist/src/core/statement.js.map +1 -1
  53. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  54. package/dist/src/emit/ast-stringify.js +24 -13
  55. package/dist/src/emit/ast-stringify.js.map +1 -1
  56. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  57. package/dist/src/func/builtins/aggregate.js +127 -21
  58. package/dist/src/func/builtins/aggregate.js.map +1 -1
  59. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  60. package/dist/src/func/builtins/explain.js +2 -1
  61. package/dist/src/func/builtins/explain.js.map +1 -1
  62. package/dist/src/func/builtins/json.d.ts.map +1 -1
  63. package/dist/src/func/builtins/json.js +2 -1
  64. package/dist/src/func/builtins/json.js.map +1 -1
  65. package/dist/src/func/builtins/mutation.d.ts.map +1 -1
  66. package/dist/src/func/builtins/mutation.js +3 -2
  67. package/dist/src/func/builtins/mutation.js.map +1 -1
  68. package/dist/src/func/registration.d.ts +6 -1
  69. package/dist/src/func/registration.d.ts.map +1 -1
  70. package/dist/src/func/registration.js +16 -0
  71. package/dist/src/func/registration.js.map +1 -1
  72. package/dist/src/index.d.ts +16 -6
  73. package/dist/src/index.d.ts.map +1 -1
  74. package/dist/src/index.js +33 -7
  75. package/dist/src/index.js.map +1 -1
  76. package/dist/src/parser/ast.d.ts +2 -2
  77. package/dist/src/parser/lexer.d.ts +11 -1
  78. package/dist/src/parser/lexer.d.ts.map +1 -1
  79. package/dist/src/parser/lexer.js +40 -34
  80. package/dist/src/parser/lexer.js.map +1 -1
  81. package/dist/src/parser/parser.d.ts.map +1 -1
  82. package/dist/src/parser/parser.js +16 -9
  83. package/dist/src/parser/parser.js.map +1 -1
  84. package/dist/src/planner/analysis/authored-inverse.js +1 -1
  85. package/dist/src/planner/analysis/comparison-collation.d.ts +52 -0
  86. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
  87. package/dist/src/planner/analysis/comparison-collation.js +84 -7
  88. package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
  89. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  90. package/dist/src/planner/analysis/constraint-extractor.js +64 -17
  91. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  92. package/dist/src/planner/analysis/coverage-prover.d.ts +1 -1
  93. package/dist/src/planner/analysis/coverage-prover.js +1 -1
  94. package/dist/src/planner/analysis/equi-correlation.d.ts +26 -0
  95. package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -0
  96. package/dist/src/planner/analysis/equi-correlation.js +62 -0
  97. package/dist/src/planner/analysis/equi-correlation.js.map +1 -0
  98. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +54 -18
  99. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  100. package/dist/src/planner/analysis/query-rewrite-matcher.js +86 -42
  101. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  102. package/dist/src/planner/analysis/sat-checker.d.ts +8 -1
  103. package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -1
  104. package/dist/src/planner/analysis/sat-checker.js +117 -22
  105. package/dist/src/planner/analysis/sat-checker.js.map +1 -1
  106. package/dist/src/planner/analysis/scalar-invertibility.d.ts +13 -4
  107. package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -1
  108. package/dist/src/planner/analysis/scalar-invertibility.js +12 -3
  109. package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -1
  110. package/dist/src/planner/analysis/scalar-subqueries.d.ts +28 -0
  111. package/dist/src/planner/analysis/scalar-subqueries.d.ts.map +1 -0
  112. package/dist/src/planner/analysis/scalar-subqueries.js +60 -0
  113. package/dist/src/planner/analysis/scalar-subqueries.js.map +1 -0
  114. package/dist/src/planner/analysis/update-lineage.d.ts +1 -1
  115. package/dist/src/planner/analysis/update-lineage.js +1 -1
  116. package/dist/src/planner/analysis/update-lineage.js.map +1 -1
  117. package/dist/src/planner/analysis/view-complement.d.ts +2 -2
  118. package/dist/src/planner/building/delete.js +2 -2
  119. package/dist/src/planner/building/delete.js.map +1 -1
  120. package/dist/src/planner/building/dml-target.d.ts +2 -2
  121. package/dist/src/planner/building/dml-target.js +2 -2
  122. package/dist/src/planner/building/insert.d.ts.map +1 -1
  123. package/dist/src/planner/building/insert.js +53 -2
  124. package/dist/src/planner/building/insert.js.map +1 -1
  125. package/dist/src/planner/building/schema-resolution.d.ts +3 -0
  126. package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
  127. package/dist/src/planner/building/schema-resolution.js +4 -5
  128. package/dist/src/planner/building/schema-resolution.js.map +1 -1
  129. package/dist/src/planner/building/select.d.ts.map +1 -1
  130. package/dist/src/planner/building/select.js +18 -4
  131. package/dist/src/planner/building/select.js.map +1 -1
  132. package/dist/src/planner/building/update.js +2 -2
  133. package/dist/src/planner/building/update.js.map +1 -1
  134. package/dist/src/planner/building/view-mutation-builder.js +7 -7
  135. package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
  136. package/dist/src/planner/building/with.d.ts.map +1 -1
  137. package/dist/src/planner/building/with.js +5 -8
  138. package/dist/src/planner/building/with.js.map +1 -1
  139. package/dist/src/planner/cache/materialization-advisory.d.ts +34 -2
  140. package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
  141. package/dist/src/planner/cache/materialization-advisory.js +185 -42
  142. package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
  143. package/dist/src/planner/cache/reference-graph.d.ts +14 -5
  144. package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
  145. package/dist/src/planner/cache/reference-graph.js +31 -39
  146. package/dist/src/planner/cache/reference-graph.js.map +1 -1
  147. package/dist/src/planner/cost/index.d.ts +30 -5
  148. package/dist/src/planner/cost/index.d.ts.map +1 -1
  149. package/dist/src/planner/cost/index.js +26 -0
  150. package/dist/src/planner/cost/index.js.map +1 -1
  151. package/dist/src/planner/debug.d.ts +3 -2
  152. package/dist/src/planner/debug.d.ts.map +1 -1
  153. package/dist/src/planner/debug.js +9 -3
  154. package/dist/src/planner/debug.js.map +1 -1
  155. package/dist/src/planner/framework/characteristics.d.ts +46 -19
  156. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  157. package/dist/src/planner/framework/characteristics.js +50 -134
  158. package/dist/src/planner/framework/characteristics.js.map +1 -1
  159. package/dist/src/planner/framework/context.d.ts +8 -44
  160. package/dist/src/planner/framework/context.d.ts.map +1 -1
  161. package/dist/src/planner/framework/context.js +0 -91
  162. package/dist/src/planner/framework/context.js.map +1 -1
  163. package/dist/src/planner/framework/pass.d.ts +7 -0
  164. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  165. package/dist/src/planner/framework/pass.js +84 -0
  166. package/dist/src/planner/framework/pass.js.map +1 -1
  167. package/dist/src/planner/framework/registry.d.ts +13 -42
  168. package/dist/src/planner/framework/registry.d.ts.map +1 -1
  169. package/dist/src/planner/framework/registry.js +14 -182
  170. package/dist/src/planner/framework/registry.js.map +1 -1
  171. package/dist/src/planner/mutation/backward-body.d.ts +2 -2
  172. package/dist/src/planner/mutation/cte-flatten.js +1 -1
  173. package/dist/src/planner/mutation/decomposition.d.ts +2 -2
  174. package/dist/src/planner/mutation/decomposition.js +1 -1
  175. package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -1
  176. package/dist/src/planner/mutation/lens-enforcement.js +2 -1
  177. package/dist/src/planner/mutation/lens-enforcement.js.map +1 -1
  178. package/dist/src/planner/mutation/multi-source.d.ts +8 -8
  179. package/dist/src/planner/mutation/multi-source.js +11 -11
  180. package/dist/src/planner/mutation/multi-source.js.map +1 -1
  181. package/dist/src/planner/mutation/propagate.d.ts +1 -1
  182. package/dist/src/planner/mutation/propagate.js +1 -1
  183. package/dist/src/planner/mutation/scope-transform.d.ts +2 -2
  184. package/dist/src/planner/mutation/scope-transform.js +3 -3
  185. package/dist/src/planner/mutation/scope-transform.js.map +1 -1
  186. package/dist/src/planner/mutation/set-op.d.ts +1 -1
  187. package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
  188. package/dist/src/planner/mutation/set-op.js +3 -2
  189. package/dist/src/planner/mutation/set-op.js.map +1 -1
  190. package/dist/src/planner/mutation/single-source.d.ts +3 -3
  191. package/dist/src/planner/mutation/single-source.js +9 -9
  192. package/dist/src/planner/mutation/single-source.js.map +1 -1
  193. package/dist/src/planner/nodes/aggregate-function.d.ts +3 -1
  194. package/dist/src/planner/nodes/aggregate-function.d.ts.map +1 -1
  195. package/dist/src/planner/nodes/aggregate-function.js +1 -0
  196. package/dist/src/planner/nodes/aggregate-function.js.map +1 -1
  197. package/dist/src/planner/nodes/aggregate-node.d.ts +1 -0
  198. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  199. package/dist/src/planner/nodes/aggregate-node.js +8 -1
  200. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  201. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  202. package/dist/src/planner/nodes/alias-node.js +3 -1
  203. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  204. package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -1
  205. package/dist/src/planner/nodes/asof-scan-node.js +3 -2
  206. package/dist/src/planner/nodes/asof-scan-node.js.map +1 -1
  207. package/dist/src/planner/nodes/asserted-keys-node.d.ts +1 -1
  208. package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -1
  209. package/dist/src/planner/nodes/asserted-keys-node.js +5 -2
  210. package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -1
  211. package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
  212. package/dist/src/planner/nodes/async-gather-node.js +3 -1
  213. package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
  214. package/dist/src/planner/nodes/block.js +3 -3
  215. package/dist/src/planner/nodes/block.js.map +1 -1
  216. package/dist/src/planner/nodes/bloom-join-node.d.ts +2 -0
  217. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  218. package/dist/src/planner/nodes/bloom-join-node.js +5 -1
  219. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  220. package/dist/src/planner/nodes/cache-node.d.ts +19 -2
  221. package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
  222. package/dist/src/planner/nodes/cache-node.js +43 -3
  223. package/dist/src/planner/nodes/cache-node.js.map +1 -1
  224. package/dist/src/planner/nodes/cte-node.d.ts +16 -1
  225. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  226. package/dist/src/planner/nodes/cte-node.js +16 -3
  227. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  228. package/dist/src/planner/nodes/distinct-node.js +3 -3
  229. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  230. package/dist/src/planner/nodes/dml-executor-node.d.ts +21 -0
  231. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  232. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  233. package/dist/src/planner/nodes/envelope-scan-node.d.ts +1 -1
  234. package/dist/src/planner/nodes/envelope-scan-node.js +1 -1
  235. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
  236. package/dist/src/planner/nodes/fanout-lookup-join-node.js +4 -2
  237. package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
  238. package/dist/src/planner/nodes/filter.d.ts +10 -2
  239. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  240. package/dist/src/planner/nodes/filter.js +81 -14
  241. package/dist/src/planner/nodes/filter.js.map +1 -1
  242. package/dist/src/planner/nodes/hash-aggregate.d.ts +12 -1
  243. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  244. package/dist/src/planner/nodes/hash-aggregate.js +28 -1
  245. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  246. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts +3 -1
  247. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts.map +1 -1
  248. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js +1 -0
  249. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +1 -1
  250. package/dist/src/planner/nodes/join-node.d.ts +3 -1
  251. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  252. package/dist/src/planner/nodes/join-node.js +5 -5
  253. package/dist/src/planner/nodes/join-node.js.map +1 -1
  254. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
  255. package/dist/src/planner/nodes/lens-auxiliary-access-node.js +4 -1
  256. package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
  257. package/dist/src/planner/nodes/limit-offset.d.ts +1 -0
  258. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  259. package/dist/src/planner/nodes/limit-offset.js +4 -3
  260. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  261. package/dist/src/planner/nodes/merge-join-node.d.ts +2 -0
  262. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  263. package/dist/src/planner/nodes/merge-join-node.js +6 -1
  264. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  265. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
  266. package/dist/src/planner/nodes/ordinal-slice-node.js +3 -1
  267. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
  268. package/dist/src/planner/nodes/plan-node.d.ts +68 -5
  269. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  270. package/dist/src/planner/nodes/plan-node.js +137 -24
  271. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  272. package/dist/src/planner/nodes/project-node.d.ts +3 -2
  273. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  274. package/dist/src/planner/nodes/project-node.js +1 -0
  275. package/dist/src/planner/nodes/project-node.js.map +1 -1
  276. package/dist/src/planner/nodes/recursive-cte-node.d.ts +30 -1
  277. package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
  278. package/dist/src/planner/nodes/recursive-cte-node.js +38 -5
  279. package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
  280. package/dist/src/planner/nodes/reference.d.ts +5 -1
  281. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  282. package/dist/src/planner/nodes/reference.js +3 -0
  283. package/dist/src/planner/nodes/reference.js.map +1 -1
  284. package/dist/src/planner/nodes/remote-query-node.d.ts.map +1 -1
  285. package/dist/src/planner/nodes/remote-query-node.js +3 -1
  286. package/dist/src/planner/nodes/remote-query-node.js.map +1 -1
  287. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  288. package/dist/src/planner/nodes/retrieve-node.js +3 -1
  289. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  290. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  291. package/dist/src/planner/nodes/set-operation-node.js +3 -1
  292. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  293. package/dist/src/planner/nodes/sink-node.d.ts.map +1 -1
  294. package/dist/src/planner/nodes/sink-node.js +3 -1
  295. package/dist/src/planner/nodes/sink-node.js.map +1 -1
  296. package/dist/src/planner/nodes/sort.d.ts +2 -1
  297. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  298. package/dist/src/planner/nodes/sort.js +9 -5
  299. package/dist/src/planner/nodes/sort.js.map +1 -1
  300. package/dist/src/planner/nodes/stream-aggregate.d.ts +12 -1
  301. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  302. package/dist/src/planner/nodes/stream-aggregate.js +32 -3
  303. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  304. package/dist/src/planner/nodes/table-access-nodes.d.ts +2 -1
  305. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  306. package/dist/src/planner/nodes/table-access-nodes.js +2 -0
  307. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  308. package/dist/src/planner/nodes/view-mutation-node.d.ts +2 -2
  309. package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -1
  310. package/dist/src/planner/nodes/view-mutation-node.js +5 -1
  311. package/dist/src/planner/nodes/view-mutation-node.js.map +1 -1
  312. package/dist/src/planner/nodes/window-function.d.ts +3 -1
  313. package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
  314. package/dist/src/planner/nodes/window-function.js +1 -0
  315. package/dist/src/planner/nodes/window-function.js.map +1 -1
  316. package/dist/src/planner/optimizer.d.ts +52 -8
  317. package/dist/src/planner/optimizer.d.ts.map +1 -1
  318. package/dist/src/planner/optimizer.js +1014 -895
  319. package/dist/src/planner/optimizer.js.map +1 -1
  320. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  321. package/dist/src/planner/rules/access/rule-select-access-path.js +235 -202
  322. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  323. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
  324. package/dist/src/planner/rules/cache/rule-cte-optimization.js +8 -1
  325. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
  326. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts +7 -0
  327. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts.map +1 -1
  328. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js +14 -1
  329. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js.map +1 -1
  330. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +2 -2
  331. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -1
  332. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +55 -56
  333. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  334. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts.map +1 -1
  335. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js +6 -0
  336. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +1 -1
  337. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts +25 -0
  338. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -0
  339. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +176 -0
  340. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -0
  341. package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts +1 -1
  342. package/dist/src/planner/rules/cache/rule-scalar-cse.js +1 -1
  343. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts +29 -0
  344. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts.map +1 -0
  345. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js +66 -0
  346. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js.map +1 -0
  347. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +1 -1
  348. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +1 -1
  349. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
  350. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +1 -54
  351. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
  352. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +1 -1
  353. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +1 -1
  354. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +1 -1
  355. package/dist/src/planner/rules/join/rule-join-elimination.js +1 -1
  356. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +5 -6
  357. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
  358. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +1 -1
  359. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +1 -1
  360. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts +2 -2
  361. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
  362. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +4 -3
  363. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
  364. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +19 -0
  365. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -0
  366. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +48 -0
  367. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -0
  368. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +12 -1
  369. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -1
  370. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
  371. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +22 -20
  372. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  373. package/dist/src/planner/rules/shared/index-style-context.d.ts +39 -0
  374. package/dist/src/planner/rules/shared/index-style-context.d.ts.map +1 -0
  375. package/dist/src/planner/rules/shared/index-style-context.js +26 -0
  376. package/dist/src/planner/rules/shared/index-style-context.js.map +1 -0
  377. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +1 -1
  378. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +1 -1
  379. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts +1 -1
  380. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
  381. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts +191 -0
  382. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts.map +1 -0
  383. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js +623 -0
  384. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js.map +1 -0
  385. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts +10 -1
  386. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  387. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +242 -51
  388. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  389. package/dist/src/planner/stats/analyze.d.ts.map +1 -1
  390. package/dist/src/planner/stats/analyze.js +2 -20
  391. package/dist/src/planner/stats/analyze.js.map +1 -1
  392. package/dist/src/planner/stats/histogram.d.ts.map +1 -1
  393. package/dist/src/planner/stats/histogram.js +4 -0
  394. package/dist/src/planner/stats/histogram.js.map +1 -1
  395. package/dist/src/planner/util/fd-utils.d.ts +2 -3
  396. package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
  397. package/dist/src/planner/util/fd-utils.js +2 -3
  398. package/dist/src/planner/util/fd-utils.js.map +1 -1
  399. package/dist/src/planner/validation/plan-validator.d.ts +16 -0
  400. package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
  401. package/dist/src/planner/validation/plan-validator.js +36 -0
  402. package/dist/src/planner/validation/plan-validator.js.map +1 -1
  403. package/dist/src/runtime/async-util.d.ts +26 -0
  404. package/dist/src/runtime/async-util.d.ts.map +1 -1
  405. package/dist/src/runtime/async-util.js +139 -55
  406. package/dist/src/runtime/async-util.js.map +1 -1
  407. package/dist/src/runtime/cache/shared-cache.d.ts +7 -0
  408. package/dist/src/runtime/cache/shared-cache.d.ts.map +1 -1
  409. package/dist/src/runtime/cache/shared-cache.js +34 -1
  410. package/dist/src/runtime/cache/shared-cache.js.map +1 -1
  411. package/dist/src/runtime/context-helpers.d.ts +32 -4
  412. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  413. package/dist/src/runtime/context-helpers.js +26 -9
  414. package/dist/src/runtime/context-helpers.js.map +1 -1
  415. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  416. package/dist/src/runtime/deferred-constraint-queue.js +2 -1
  417. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  418. package/dist/src/runtime/emission-context.d.ts +27 -3
  419. package/dist/src/runtime/emission-context.d.ts.map +1 -1
  420. package/dist/src/runtime/emission-context.js +38 -7
  421. package/dist/src/runtime/emission-context.js.map +1 -1
  422. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  423. package/dist/src/runtime/emit/add-constraint.js +7 -1
  424. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  425. package/dist/src/runtime/emit/aggregate.d.ts +2 -3
  426. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  427. package/dist/src/runtime/emit/aggregate.js +23 -28
  428. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  429. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  430. package/dist/src/runtime/emit/alter-table.js +98 -9
  431. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  432. package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
  433. package/dist/src/runtime/emit/analyze.js +2 -1
  434. package/dist/src/runtime/emit/analyze.js.map +1 -1
  435. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  436. package/dist/src/runtime/emit/asof-scan.js +13 -10
  437. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  438. package/dist/src/runtime/emit/async-gather.d.ts.map +1 -1
  439. package/dist/src/runtime/emit/async-gather.js +4 -3
  440. package/dist/src/runtime/emit/async-gather.js.map +1 -1
  441. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  442. package/dist/src/runtime/emit/between.js +2 -1
  443. package/dist/src/runtime/emit/between.js.map +1 -1
  444. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  445. package/dist/src/runtime/emit/binary.js +122 -14
  446. package/dist/src/runtime/emit/binary.js.map +1 -1
  447. package/dist/src/runtime/emit/block.d.ts.map +1 -1
  448. package/dist/src/runtime/emit/block.js +2 -1
  449. package/dist/src/runtime/emit/block.js.map +1 -1
  450. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  451. package/dist/src/runtime/emit/bloom-join.js +20 -8
  452. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  453. package/dist/src/runtime/emit/cache.d.ts +7 -3
  454. package/dist/src/runtime/emit/cache.d.ts.map +1 -1
  455. package/dist/src/runtime/emit/cache.js +25 -7
  456. package/dist/src/runtime/emit/cache.js.map +1 -1
  457. package/dist/src/runtime/emit/case.d.ts.map +1 -1
  458. package/dist/src/runtime/emit/case.js +66 -45
  459. package/dist/src/runtime/emit/case.js.map +1 -1
  460. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  461. package/dist/src/runtime/emit/cast.js +2 -1
  462. package/dist/src/runtime/emit/cast.js.map +1 -1
  463. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  464. package/dist/src/runtime/emit/constraint-check.js +13 -7
  465. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  466. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  467. package/dist/src/runtime/emit/create-assertion.js +2 -1
  468. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  469. package/dist/src/runtime/emit/create-index.d.ts.map +1 -1
  470. package/dist/src/runtime/emit/create-index.js +12 -1
  471. package/dist/src/runtime/emit/create-index.js.map +1 -1
  472. package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
  473. package/dist/src/runtime/emit/create-table.js +12 -1
  474. package/dist/src/runtime/emit/create-table.js.map +1 -1
  475. package/dist/src/runtime/emit/cte-reference.d.ts.map +1 -1
  476. package/dist/src/runtime/emit/cte-reference.js +2 -1
  477. package/dist/src/runtime/emit/cte-reference.js.map +1 -1
  478. package/dist/src/runtime/emit/cte.d.ts.map +1 -1
  479. package/dist/src/runtime/emit/cte.js +45 -21
  480. package/dist/src/runtime/emit/cte.js.map +1 -1
  481. package/dist/src/runtime/emit/ddl-transaction-policy.d.ts +50 -0
  482. package/dist/src/runtime/emit/ddl-transaction-policy.d.ts.map +1 -0
  483. package/dist/src/runtime/emit/ddl-transaction-policy.js +69 -0
  484. package/dist/src/runtime/emit/ddl-transaction-policy.js.map +1 -0
  485. package/dist/src/runtime/emit/delete.d.ts.map +1 -1
  486. package/dist/src/runtime/emit/delete.js +2 -1
  487. package/dist/src/runtime/emit/delete.js.map +1 -1
  488. package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
  489. package/dist/src/runtime/emit/distinct.js +2 -1
  490. package/dist/src/runtime/emit/distinct.js.map +1 -1
  491. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  492. package/dist/src/runtime/emit/dml-executor.js +138 -74
  493. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  494. package/dist/src/runtime/emit/drop-assertion.d.ts.map +1 -1
  495. package/dist/src/runtime/emit/drop-assertion.js +2 -1
  496. package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
  497. package/dist/src/runtime/emit/drop-index.d.ts.map +1 -1
  498. package/dist/src/runtime/emit/drop-index.js +17 -1
  499. package/dist/src/runtime/emit/drop-index.js.map +1 -1
  500. package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
  501. package/dist/src/runtime/emit/drop-table.js +11 -1
  502. package/dist/src/runtime/emit/drop-table.js.map +1 -1
  503. package/dist/src/runtime/emit/eager-prefetch.d.ts.map +1 -1
  504. package/dist/src/runtime/emit/eager-prefetch.js +2 -1
  505. package/dist/src/runtime/emit/eager-prefetch.js.map +1 -1
  506. package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -1
  507. package/dist/src/runtime/emit/envelope-scan.js +2 -1
  508. package/dist/src/runtime/emit/envelope-scan.js.map +1 -1
  509. package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -1
  510. package/dist/src/runtime/emit/fanout-lookup-join.js +3 -2
  511. package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -1
  512. package/dist/src/runtime/emit/filter.d.ts.map +1 -1
  513. package/dist/src/runtime/emit/filter.js +8 -3
  514. package/dist/src/runtime/emit/filter.js.map +1 -1
  515. package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
  516. package/dist/src/runtime/emit/hash-aggregate.js +16 -11
  517. package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
  518. package/dist/src/runtime/emit/insert.d.ts.map +1 -1
  519. package/dist/src/runtime/emit/insert.js +2 -1
  520. package/dist/src/runtime/emit/insert.js.map +1 -1
  521. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  522. package/dist/src/runtime/emit/join.js +20 -6
  523. package/dist/src/runtime/emit/join.js.map +1 -1
  524. package/dist/src/runtime/emit/limit-offset.d.ts.map +1 -1
  525. package/dist/src/runtime/emit/limit-offset.js +2 -1
  526. package/dist/src/runtime/emit/limit-offset.js.map +1 -1
  527. package/dist/src/runtime/emit/literal.d.ts.map +1 -1
  528. package/dist/src/runtime/emit/literal.js +2 -1
  529. package/dist/src/runtime/emit/literal.js.map +1 -1
  530. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +22 -0
  531. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  532. package/dist/src/runtime/emit/materialized-view-helpers.js +128 -16
  533. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  534. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  535. package/dist/src/runtime/emit/materialized-view.js +6 -0
  536. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  537. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  538. package/dist/src/runtime/emit/merge-join.js +14 -4
  539. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  540. package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -1
  541. package/dist/src/runtime/emit/ordinal-slice.js +2 -1
  542. package/dist/src/runtime/emit/ordinal-slice.js.map +1 -1
  543. package/dist/src/runtime/emit/pragma.d.ts.map +1 -1
  544. package/dist/src/runtime/emit/pragma.js +2 -1
  545. package/dist/src/runtime/emit/pragma.js.map +1 -1
  546. package/dist/src/runtime/emit/project.d.ts.map +1 -1
  547. package/dist/src/runtime/emit/project.js +7 -2
  548. package/dist/src/runtime/emit/project.js.map +1 -1
  549. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  550. package/dist/src/runtime/emit/recursive-cte.js +61 -2
  551. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  552. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  553. package/dist/src/runtime/emit/returning.js +7 -2
  554. package/dist/src/runtime/emit/returning.js.map +1 -1
  555. package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
  556. package/dist/src/runtime/emit/scalar-function.js +2 -1
  557. package/dist/src/runtime/emit/scalar-function.js.map +1 -1
  558. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  559. package/dist/src/runtime/emit/scan.js +55 -17
  560. package/dist/src/runtime/emit/scan.js.map +1 -1
  561. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  562. package/dist/src/runtime/emit/schema-declarative.js +6 -5
  563. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  564. package/dist/src/runtime/emit/sequencing.d.ts.map +1 -1
  565. package/dist/src/runtime/emit/sequencing.js +2 -1
  566. package/dist/src/runtime/emit/sequencing.js.map +1 -1
  567. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  568. package/dist/src/runtime/emit/set-operation.js +6 -5
  569. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  570. package/dist/src/runtime/emit/sink.d.ts.map +1 -1
  571. package/dist/src/runtime/emit/sink.js +2 -1
  572. package/dist/src/runtime/emit/sink.js.map +1 -1
  573. package/dist/src/runtime/emit/sort.d.ts.map +1 -1
  574. package/dist/src/runtime/emit/sort.js +2 -1
  575. package/dist/src/runtime/emit/sort.js.map +1 -1
  576. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  577. package/dist/src/runtime/emit/subquery.js +42 -23
  578. package/dist/src/runtime/emit/subquery.js.map +1 -1
  579. package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
  580. package/dist/src/runtime/emit/table-valued-function.js +2 -1
  581. package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
  582. package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -1
  583. package/dist/src/runtime/emit/temporal-arithmetic.js +2 -1
  584. package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -1
  585. package/dist/src/runtime/emit/transaction.d.ts.map +1 -1
  586. package/dist/src/runtime/emit/transaction.js +2 -1
  587. package/dist/src/runtime/emit/transaction.js.map +1 -1
  588. package/dist/src/runtime/emit/unary.d.ts.map +1 -1
  589. package/dist/src/runtime/emit/unary.js +2 -1
  590. package/dist/src/runtime/emit/unary.js.map +1 -1
  591. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  592. package/dist/src/runtime/emit/update.js +2 -1
  593. package/dist/src/runtime/emit/update.js.map +1 -1
  594. package/dist/src/runtime/emit/values.d.ts.map +1 -1
  595. package/dist/src/runtime/emit/values.js +2 -1
  596. package/dist/src/runtime/emit/values.js.map +1 -1
  597. package/dist/src/runtime/emit/view-mutation.d.ts +1 -1
  598. package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -1
  599. package/dist/src/runtime/emit/view-mutation.js +6 -3
  600. package/dist/src/runtime/emit/view-mutation.js.map +1 -1
  601. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  602. package/dist/src/runtime/emit/window.js +26 -9
  603. package/dist/src/runtime/emit/window.js.map +1 -1
  604. package/dist/src/runtime/emitters.d.ts +11 -3
  605. package/dist/src/runtime/emitters.d.ts.map +1 -1
  606. package/dist/src/runtime/emitters.js +13 -22
  607. package/dist/src/runtime/emitters.js.map +1 -1
  608. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  609. package/dist/src/runtime/foreign-key-actions.js +39 -13
  610. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  611. package/dist/src/runtime/parallel-driver.d.ts +32 -4
  612. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  613. package/dist/src/runtime/parallel-driver.js +88 -18
  614. package/dist/src/runtime/parallel-driver.js.map +1 -1
  615. package/dist/src/runtime/scheduler.d.ts +56 -7
  616. package/dist/src/runtime/scheduler.d.ts.map +1 -1
  617. package/dist/src/runtime/scheduler.js +223 -200
  618. package/dist/src/runtime/scheduler.js.map +1 -1
  619. package/dist/src/runtime/strict-flags.d.ts +22 -0
  620. package/dist/src/runtime/strict-flags.d.ts.map +1 -0
  621. package/dist/src/runtime/strict-flags.js +26 -0
  622. package/dist/src/runtime/strict-flags.js.map +1 -0
  623. package/dist/src/runtime/strict-fork.d.ts +4 -4
  624. package/dist/src/runtime/strict-fork.d.ts.map +1 -1
  625. package/dist/src/runtime/strict-fork.js +175 -31
  626. package/dist/src/runtime/strict-fork.js.map +1 -1
  627. package/dist/src/runtime/types.d.ts +102 -4
  628. package/dist/src/runtime/types.d.ts.map +1 -1
  629. package/dist/src/runtime/types.js +37 -0
  630. package/dist/src/runtime/types.js.map +1 -1
  631. package/dist/src/runtime/utils.d.ts.map +1 -1
  632. package/dist/src/runtime/utils.js +8 -17
  633. package/dist/src/runtime/utils.js.map +1 -1
  634. package/dist/src/schema/column.d.ts +8 -0
  635. package/dist/src/schema/column.d.ts.map +1 -1
  636. package/dist/src/schema/column.js.map +1 -1
  637. package/dist/src/schema/ddl-generator.js +5 -0
  638. package/dist/src/schema/ddl-generator.js.map +1 -1
  639. package/dist/src/schema/function.d.ts +79 -0
  640. package/dist/src/schema/function.d.ts.map +1 -1
  641. package/dist/src/schema/function.js.map +1 -1
  642. package/dist/src/schema/lens-compiler.js +2 -2
  643. package/dist/src/schema/lens-compiler.js.map +1 -1
  644. package/dist/src/schema/lens-prover.d.ts.map +1 -1
  645. package/dist/src/schema/lens-prover.js +2 -3
  646. package/dist/src/schema/lens-prover.js.map +1 -1
  647. package/dist/src/schema/lens.d.ts +1 -1
  648. package/dist/src/schema/manager.d.ts.map +1 -1
  649. package/dist/src/schema/manager.js +7 -2
  650. package/dist/src/schema/manager.js.map +1 -1
  651. package/dist/src/schema/rename-rewriter.d.ts +61 -0
  652. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  653. package/dist/src/schema/rename-rewriter.js +77 -0
  654. package/dist/src/schema/rename-rewriter.js.map +1 -1
  655. package/dist/src/schema/table.d.ts +36 -8
  656. package/dist/src/schema/table.d.ts.map +1 -1
  657. package/dist/src/schema/table.js +61 -11
  658. package/dist/src/schema/table.js.map +1 -1
  659. package/dist/src/schema/unique-enforcement.d.ts +28 -5
  660. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  661. package/dist/src/schema/unique-enforcement.js +37 -5
  662. package/dist/src/schema/unique-enforcement.js.map +1 -1
  663. package/dist/src/schema/view.d.ts +1 -1
  664. package/dist/src/schema/view.js +1 -1
  665. package/dist/src/types/json-type.d.ts.map +1 -1
  666. package/dist/src/types/json-type.js +18 -8
  667. package/dist/src/types/json-type.js.map +1 -1
  668. package/dist/src/types/logical-type.d.ts +26 -0
  669. package/dist/src/types/logical-type.d.ts.map +1 -1
  670. package/dist/src/types/logical-type.js.map +1 -1
  671. package/dist/src/util/comparison.d.ts +83 -59
  672. package/dist/src/util/comparison.d.ts.map +1 -1
  673. package/dist/src/util/comparison.js +191 -131
  674. package/dist/src/util/comparison.js.map +1 -1
  675. package/dist/src/util/json-canonical.d.ts +34 -0
  676. package/dist/src/util/json-canonical.d.ts.map +1 -0
  677. package/dist/src/util/json-canonical.js +32 -0
  678. package/dist/src/util/json-canonical.js.map +1 -0
  679. package/dist/src/util/key-serializer.d.ts +10 -3
  680. package/dist/src/util/key-serializer.d.ts.map +1 -1
  681. package/dist/src/util/key-serializer.js +43 -17
  682. package/dist/src/util/key-serializer.js.map +1 -1
  683. package/dist/src/util/key-tuple-codec.d.ts +37 -0
  684. package/dist/src/util/key-tuple-codec.d.ts.map +1 -0
  685. package/dist/src/util/key-tuple-codec.js +65 -0
  686. package/dist/src/util/key-tuple-codec.js.map +1 -0
  687. package/dist/src/util/latches.d.ts +29 -3
  688. package/dist/src/util/latches.d.ts.map +1 -1
  689. package/dist/src/util/latches.js +60 -6
  690. package/dist/src/util/latches.js.map +1 -1
  691. package/dist/src/util/patterns.d.ts +22 -8
  692. package/dist/src/util/patterns.d.ts.map +1 -1
  693. package/dist/src/util/patterns.js +87 -16
  694. package/dist/src/util/patterns.js.map +1 -1
  695. package/dist/src/util/qualified-name.d.ts +10 -0
  696. package/dist/src/util/qualified-name.d.ts.map +1 -0
  697. package/dist/src/util/qualified-name.js +15 -0
  698. package/dist/src/util/qualified-name.js.map +1 -0
  699. package/dist/src/vtab/backing-host.d.ts +8 -1
  700. package/dist/src/vtab/backing-host.d.ts.map +1 -1
  701. package/dist/src/vtab/backing-host.js +7 -0
  702. package/dist/src/vtab/backing-host.js.map +1 -1
  703. package/dist/src/vtab/best-access-plan.d.ts +18 -0
  704. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  705. package/dist/src/vtab/best-access-plan.js +15 -0
  706. package/dist/src/vtab/best-access-plan.js.map +1 -1
  707. package/dist/src/vtab/capabilities.d.ts +44 -0
  708. package/dist/src/vtab/capabilities.d.ts.map +1 -1
  709. package/dist/src/vtab/filter-info.d.ts +42 -0
  710. package/dist/src/vtab/filter-info.d.ts.map +1 -1
  711. package/dist/src/vtab/filter-info.js +137 -1
  712. package/dist/src/vtab/filter-info.js.map +1 -1
  713. package/dist/src/vtab/idx-str.d.ts +62 -0
  714. package/dist/src/vtab/idx-str.d.ts.map +1 -0
  715. package/dist/src/vtab/idx-str.js +130 -0
  716. package/dist/src/vtab/idx-str.js.map +1 -0
  717. package/dist/src/vtab/index-descriptor.d.ts +122 -0
  718. package/dist/src/vtab/index-descriptor.d.ts.map +1 -0
  719. package/dist/src/vtab/index-descriptor.js +104 -0
  720. package/dist/src/vtab/index-descriptor.js.map +1 -0
  721. package/dist/src/vtab/mapping-advertisement.d.ts +1 -1
  722. package/dist/src/vtab/memory/index.d.ts +12 -4
  723. package/dist/src/vtab/memory/index.d.ts.map +1 -1
  724. package/dist/src/vtab/memory/index.js +17 -9
  725. package/dist/src/vtab/memory/index.js.map +1 -1
  726. package/dist/src/vtab/memory/layer/base.d.ts +85 -31
  727. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  728. package/dist/src/vtab/memory/layer/base.js +127 -86
  729. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  730. package/dist/src/vtab/memory/layer/connection.d.ts +27 -0
  731. package/dist/src/vtab/memory/layer/connection.d.ts.map +1 -1
  732. package/dist/src/vtab/memory/layer/connection.js +36 -1
  733. package/dist/src/vtab/memory/layer/connection.js.map +1 -1
  734. package/dist/src/vtab/memory/layer/interface.d.ts +24 -4
  735. package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
  736. package/dist/src/vtab/memory/layer/manager.d.ts +212 -16
  737. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  738. package/dist/src/vtab/memory/layer/manager.js +754 -170
  739. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  740. package/dist/src/vtab/memory/layer/plan-filter.d.ts +26 -1
  741. package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
  742. package/dist/src/vtab/memory/layer/plan-filter.js +29 -11
  743. package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
  744. package/dist/src/vtab/memory/layer/safe-iterate.d.ts +2 -2
  745. package/dist/src/vtab/memory/layer/safe-iterate.d.ts.map +1 -1
  746. package/dist/src/vtab/memory/layer/safe-iterate.js +2 -2
  747. package/dist/src/vtab/memory/layer/safe-iterate.js.map +1 -1
  748. package/dist/src/vtab/memory/layer/scan-layer.d.ts +5 -1
  749. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  750. package/dist/src/vtab/memory/layer/scan-layer.js +59 -24
  751. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  752. package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
  753. package/dist/src/vtab/memory/layer/scan-plan.js +13 -21
  754. package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
  755. package/dist/src/vtab/memory/layer/transaction.d.ts +169 -7
  756. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  757. package/dist/src/vtab/memory/layer/transaction.js +334 -9
  758. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  759. package/dist/src/vtab/memory/module.d.ts +11 -4
  760. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  761. package/dist/src/vtab/memory/module.js +35 -16
  762. package/dist/src/vtab/memory/module.js.map +1 -1
  763. package/dist/src/vtab/memory/table.d.ts +30 -4
  764. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  765. package/dist/src/vtab/memory/table.js +63 -15
  766. package/dist/src/vtab/memory/table.js.map +1 -1
  767. package/dist/src/vtab/memory/utils/predicate.d.ts +9 -1
  768. package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
  769. package/dist/src/vtab/memory/utils/predicate.js +35 -14
  770. package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
  771. package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -1
  772. package/dist/src/vtab/memory/utils/primary-key-encode.js +12 -6
  773. package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -1
  774. package/dist/src/vtab/memory/utils/primary-key.d.ts +6 -1
  775. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  776. package/dist/src/vtab/memory/utils/primary-key.js +12 -8
  777. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  778. package/dist/src/vtab/module.d.ts +38 -14
  779. package/dist/src/vtab/module.d.ts.map +1 -1
  780. package/dist/src/vtab/table.d.ts +41 -2
  781. package/dist/src/vtab/table.d.ts.map +1 -1
  782. package/dist/src/vtab/table.js +19 -0
  783. package/dist/src/vtab/table.js.map +1 -1
  784. package/package.json +5 -4
  785. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts +0 -18
  786. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts.map +0 -1
  787. package/dist/src/planner/rules/cache/rule-materialization-advisory.js +0 -65
  788. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
@@ -0,0 +1,623 @@
1
+ /**
2
+ * Rule: Scalar-Aggregate Subquery Decorrelation
3
+ *
4
+ * Rewrites a correlated scalar-aggregate subquery in a SELECT projection into a
5
+ * grouped LEFT JOIN, so the inner table is scanned/aggregated ONCE instead of
6
+ * once per outer row:
7
+ *
8
+ * Project[..., ScalarSubquery(Agg(Filter(corr ∧ rest, inner))) ...](outer)
9
+ * becomes
10
+ * Project[..., <guarded value read> ...]
11
+ * LeftJoin[corr] -- outer.a = inner.k, verbatim
12
+ * outer
13
+ * Aggregate(groupBy=[inner.k...], aggregates=[orig agg])
14
+ * Filter(rest, inner) -- residual inner-only predicates
15
+ *
16
+ * In SQL terms: `(select agg(x) from c where c.fk = o.k)` →
17
+ * `left join (select fk, agg(x) as val from c group by fk) g on g.fk = o.k`.
18
+ *
19
+ * The grouped aggregate PRESERVES the inner correlation attribute ids as its
20
+ * group-by output attribute ids (the same id-preservation ProjectNode applies
21
+ * to bare column-reference projections), so the original correlation conjuncts
22
+ * serve verbatim as the join condition and hash-join equi-pair extraction sees
23
+ * plain `colref = colref` pairs.
24
+ *
25
+ * Empty-group semantics ("the count bug"): a scalar aggregate over zero rows
26
+ * still yields one row (`count(*)` → 0, `sum(x)` → NULL), but the grouped join
27
+ * produces NO group for an outer row with no matches. The aggregate's
28
+ * empty-input value is computed at plan time via the exact runtime path
29
+ * (`finalizeFunction(cloneInitialValue(initialValue))`):
30
+ * - empty value NULL (sum/min/max/avg/json_group_array/…): the join miss
31
+ * already yields NULL — the replacement is a bare column reference;
32
+ * - otherwise (count/total): the replacement is
33
+ * `CASE WHEN <group key> IS NULL THEN <empty literal> ELSE <value> END`.
34
+ * A matched row always has a non-NULL group key (the equality matched), and
35
+ * an inner group with a NULL key can never match any outer row, so
36
+ * `key IS NULL` holds exactly on join misses — a separate `1 AS __present`
37
+ * marker column is unnecessary. This is a marker, not `coalesce(...)`, so
38
+ * an aggregate legitimately returning NULL on non-empty input stays NULL.
39
+ *
40
+ * Outer references OUTSIDE the correlation conjuncts (e.g. in aggregate
41
+ * arguments: `json_object('entryId', e.id, …)`) are remapped to the inner
42
+ * column they are equated with — justified by the equality predicate — but only
43
+ * when the equality is value-faithful (value-discriminating collation AND same
44
+ * logical type); otherwise the rule bails and the subquery stays correlated.
45
+ *
46
+ * Bail (leave the subquery correlated) when:
47
+ * - the subquery is uncorrelated, or correlates beyond the immediate outer;
48
+ * - the inner subtree carries a side effect (per-row firing is observable);
49
+ * - the subquery root is not a bare zero-group single-aggregate beneath
50
+ * bare pass-through Project/Alias wrappers (a Sort/LimitOffset wrapper, a
51
+ * GROUP BY, a composite expression over aggregates, or a non-aggregate
52
+ * `... limit 1` shape all keep today's behavior, including the >1-row
53
+ * scalar-subquery runtime error);
54
+ * - the aggregate's source is not a Filter whose predicate splits into
55
+ * `outer.col = inner.col` equi-conjuncts plus inner-only residuals
56
+ * (non-equi correlation such as `inner.ts < outer.ts` bails);
57
+ * - the aggregate's empty-input value cannot be folded to a plan-time
58
+ * literal (finalize throws, is async, non-deterministic, or yields a
59
+ * non-primitive);
60
+ * - an outer reference outside the conjuncts is not value-faithfully
61
+ * remappable.
62
+ *
63
+ * Registered unconditionally (no cost gate) after `fanout-lookup-join`, so the
64
+ * remote-latency fan-out path keeps first claim on the branches it is tuned
65
+ * for; the tiny-outer/huge-inner cost tradeoff is tracked in
66
+ * `backlog/feat-decorrelation-cost-model`.
67
+ *
68
+ * FOUR MATCH SITES share the identical per-subquery rewrite (`decorrelateOne`):
69
+ * - `ruleScalarAggDecorrelation` — subqueries in a ProjectNode's projection
70
+ * expressions; the join stack lands between the Project and its source.
71
+ * - `ruleScalarAggDecorrelationAggregate` — subqueries inside an
72
+ * AggregateNode's aggregate-argument (and group-by) expressions; the join
73
+ * stack lands BELOW the aggregate, between it and its source. Cardinality
74
+ * safety: the grouped subtree's GROUP BY keys are a unique key on its
75
+ * output, so the LEFT join matches at most one row per source row — the
76
+ * aggregate's input row count and multiplicity are preserved exactly, and
77
+ * every existing group-by/aggregate reference resolves unchanged by
78
+ * attribute id (left-side attributes stay visible through the join).
79
+ * - `ruleScalarAggDecorrelationFilter` — subqueries anywhere in a FilterNode's
80
+ * predicate (WHERE, and HAVING — a HAVING clause plans as a FilterNode whose
81
+ * source is an AggregateNode); the join stack lands between the Filter and
82
+ * its source, and the subquery reference in the predicate is substituted with
83
+ * the guarded value read. A FilterNode publishes its source's attributes
84
+ * verbatim, so the LEFT join's appended grouped-aggregate columns would leak
85
+ * to whatever consumes the filter — and a HAVING filter is frequently the
86
+ * query's output node itself (the SELECT projection is fused into the
87
+ * Aggregate below it, leaving no capping Project). The rule therefore caps its
88
+ * own result with a bare pass-through Project that re-exposes exactly the
89
+ * Filter's original attributes; the outer columns keep their original indices
90
+ * (the LEFT join places the outer on the left), so that projection's column
91
+ * references — and everything above — resolve unchanged.
92
+ * - `ruleScalarAggDecorrelationSort` — subqueries in a SortNode's sort-key
93
+ * expressions (`order by (select count(*) from c where c.fk = o.k)`); the
94
+ * join stack lands BELOW the Sort so the sort key can read the grouped
95
+ * value column. A SortNode publishes its source's attributes VERBATIM (it
96
+ * never consumes/hides columns the way a Project does), so the LEFT join's
97
+ * appended grouped-aggregate columns would otherwise leak upward and change
98
+ * the row shape every ancestor (a capping Project, a view body, a compound
99
+ * arm, LIMIT/OFFSET) sees. Like the Filter site, the rule caps its result
100
+ * with the same bare pass-through Project (`capToAttributes`) that
101
+ * re-exposes exactly the Sort's original attributes; the outer columns keep
102
+ * their original indices (the LEFT join places the outer on the left), so
103
+ * that projection — and everything above — resolves unchanged.
104
+ *
105
+ * SCOPE: like every site, `decorrelateOne` requires the correlation columns
106
+ * to be attributes of the Sort's OWN source. That holds for identity
107
+ * projections (`select o.* … order by (select … where c.fk = o.k)`) and
108
+ * for any query that also selects the correlation column. When the SELECT
109
+ * list projects the correlation column AWAY (`select o.id from o order by
110
+ * (select … where c.fk = o.k)`), the Sort sits above a stripping Project
111
+ * whose output no longer carries `o.k`, so the rule BAILS and the subquery
112
+ * stays correlated — still correct, because the runtime resolves `o.k` from
113
+ * the still-live base-scan row context below the Project; it is merely not
114
+ * decorrelated. Threading the grouped value column up through a stripping
115
+ * Project is tracked in
116
+ * `backlog/feat-decorrelate-order-by-subquery-nonselected-column`.
117
+ *
118
+ * NESTED subqueries converge level by level: the Structural pass is top-down
119
+ * with rules firing BEFORE descent, so the grouped aggregate built by one
120
+ * level's rewrite (whose aggregate argument carries the next level's subquery,
121
+ * outer references already remapped to the enclosing inner columns) is itself
122
+ * visited later in the same pass, where the Aggregate-site rule fires on it.
123
+ */
124
+ import { createLogger } from '../../../common/logger.js';
125
+ import { isRelationalNode } from '../../nodes/plan-node.js';
126
+ import { FunctionFlags } from '../../../common/constants.js';
127
+ import { ProjectNode } from '../../nodes/project-node.js';
128
+ import { AliasNode } from '../../nodes/alias-node.js';
129
+ import { FilterNode } from '../../nodes/filter.js';
130
+ import { SortNode } from '../../nodes/sort.js';
131
+ import { AggregateNode } from '../../nodes/aggregate-node.js';
132
+ import { JoinNode } from '../../nodes/join-node.js';
133
+ import { ColumnReferenceNode } from '../../nodes/reference.js';
134
+ import { UnaryOpNode, LiteralNode, CaseExprNode } from '../../nodes/scalar.js';
135
+ import { AggregateFunctionCallNode } from '../../nodes/aggregate-function.js';
136
+ import { isAggregateFunctionSchema } from '../../../schema/function.js';
137
+ import { cloneInitialValue } from '../../../func/registration.js';
138
+ import { splitConjuncts, combineConjuncts } from '../../analysis/predicate-conjuncts.js';
139
+ import { isEquiCorrelation, referencesAnyAttr } from '../../analysis/equi-correlation.js';
140
+ import { collectScalarSubqueries, substituteSubqueries } from '../../analysis/scalar-subqueries.js';
141
+ import { collectExternalReferences } from '../../cache/correlation-detector.js';
142
+ import { isValueDiscriminatingEquality } from '../../analysis/comparison-collation.js';
143
+ import { PlanNodeCharacteristics } from '../../framework/characteristics.js';
144
+ const log = createLogger('optimizer:rule:scalar-agg-decorrelation');
145
+ export function ruleScalarAggDecorrelation(node, _context) {
146
+ if (!(node instanceof ProjectNode))
147
+ return null;
148
+ // Collect candidate subqueries across all projection expression trees
149
+ // (bare and wrapped), deduplicated by node identity.
150
+ const candidates = collectCandidates(node.projections.map(p => p.node));
151
+ if (candidates.length === 0)
152
+ return null;
153
+ const rewrite = decorrelateAll(candidates, node.source);
154
+ if (!rewrite)
155
+ return null;
156
+ log('Decorrelated %d scalar-aggregate subquery(ies) into grouped left join(s)', rewrite.replacements.size);
157
+ return rebuildProject(node, rewrite.source, rewrite.replacements);
158
+ }
159
+ /**
160
+ * Aggregate-argument match site: the same rewrite for subqueries embedded in
161
+ * an AggregateNode's aggregate-argument (or group-by) expressions — the shape
162
+ * a nested aggregate subquery takes after the Project-site rewrite of its
163
+ * enclosing level (the enclosing rewrite's outer-reference remap makes a
164
+ * two-level correlation local to the new grouped aggregate's source). The join
165
+ * stack lands below the aggregate; see the module header for cardinality
166
+ * safety and multi-level convergence.
167
+ *
168
+ * NOTE: this site can also fire on an aggregate INSIDE a still-correlated
169
+ * subquery (e.g. when the enclosing level's remap bailed but the nested
170
+ * correlation is local). That is correct but the grouped subtree then
171
+ * re-executes per outer row — whether it beats the per-inner-row correlated
172
+ * plan is data-dependent; if a workload regresses here, gate this site on the
173
+ * enclosing subtree being decorrelated (part of
174
+ * `backlog/feat-decorrelation-cost-model`).
175
+ */
176
+ export function ruleScalarAggDecorrelationAggregate(node, _context) {
177
+ if (!(node instanceof AggregateNode))
178
+ return null;
179
+ // Both aggregate arguments and group-by expressions are scalar trees
180
+ // evaluated per source row, so substitution is uniform across them.
181
+ const candidates = collectCandidates([
182
+ ...node.groupBy,
183
+ ...node.aggregates.map(a => a.expression),
184
+ ]);
185
+ if (candidates.length === 0)
186
+ return null;
187
+ const rewrite = decorrelateAll(candidates, node.source);
188
+ if (!rewrite)
189
+ return null;
190
+ log('Decorrelated %d scalar-aggregate subquery(ies) below an enclosing aggregate', rewrite.replacements.size);
191
+ return rebuildAggregate(node, rewrite.source, rewrite.replacements);
192
+ }
193
+ /**
194
+ * Filter match site (WHERE and HAVING): the same rewrite for a correlated
195
+ * scalar-aggregate subquery used anywhere in a FilterNode's predicate —
196
+ * `where o.total > (select avg(c.amount) from c where c.fk = o.k)`. The join
197
+ * stack lands between the Filter and its source, and the subquery reference in
198
+ * the predicate is substituted with the guarded value read; the result is
199
+ * `Filter[pred'](LeftJoin(outer, groupedAgg))`.
200
+ *
201
+ * HAVING needs no special-casing: `... group by o.k having sum(o.v) > (select …)`
202
+ * plans as a FilterNode whose source is an AggregateNode, so the aggregate's
203
+ * group-key / aggregate-result attributes are exactly the outer attributes the
204
+ * subquery correlates to — `decorrelateAll` treats the AggregateNode as the outer
205
+ * like any other relation.
206
+ *
207
+ * The LEFT join is load-bearing (an outer row with no inner match survives
208
+ * carrying the aggregate's empty-input value, which the replacement reproduces
209
+ * byte-for-byte), so three-valued predicate logic is preserved with no new code.
210
+ *
211
+ * The rewritten Filter's source gains the grouped join's columns; a FilterNode
212
+ * publishes its source's attributes verbatim, so the result is capped with a bare
213
+ * pass-through Project (see `capToAttributes`) that re-exposes exactly the
214
+ * original Filter attributes — without it the extra columns leak to the query
215
+ * output whenever the Filter is not already under a projection (the common HAVING
216
+ * shape, where the SELECT list is fused into the Aggregate below the filter).
217
+ */
218
+ export function ruleScalarAggDecorrelationFilter(node, _context) {
219
+ if (!(node instanceof FilterNode))
220
+ return null;
221
+ // The predicate is a single scalar tree; collect every scalar-agg subquery in it.
222
+ const candidates = collectCandidates([node.predicate]);
223
+ if (candidates.length === 0)
224
+ return null;
225
+ // Original Filter attributes (= its source's) — the signature the cap restores.
226
+ const filterAttrs = node.getAttributes();
227
+ const rewrite = decorrelateAll(candidates, node.source);
228
+ if (!rewrite)
229
+ return null;
230
+ log('Decorrelated %d scalar-aggregate subquery(ies) in a filter predicate into grouped left join(s)', rewrite.replacements.size);
231
+ const decorrelatedFilter = new FilterNode(node.scope, rewrite.source, substituteSubqueries(node.predicate, rewrite.replacements));
232
+ return capToAttributes(node.scope, decorrelatedFilter, filterAttrs);
233
+ }
234
+ /**
235
+ * Sort match site: a correlated scalar-aggregate subquery in a SortNode's
236
+ * sort-key expression — `order by (select count(*) from c where c.fk = o.k)`.
237
+ * The join stack lands BELOW the Sort (so the sort key can read the grouped
238
+ * value column), and each recognized subquery reference in the keys is
239
+ * substituted with the guarded value read; direction/nulls are copied verbatim.
240
+ *
241
+ * A SortNode publishes its source's attributes verbatim, so the LEFT join's
242
+ * appended columns would leak upward and change the row shape every ancestor
243
+ * sees. The result is therefore capped with the same bare pass-through Project
244
+ * as the Filter site (`capToAttributes`), re-exposing exactly the Sort's
245
+ * original attributes — invariant output shape regardless of whether an
246
+ * enclosing Project exists (view body / compound arm / bare top-level Sort).
247
+ *
248
+ * Ordering is stable: the substituted value is byte-identical to the scalar the
249
+ * subquery would return (same empty-input replacement as the other sites), and
250
+ * the LEFT join matches at most one row per outer row (unique group keys), so
251
+ * row count, multiplicity, and per-row sort-key values are all unchanged.
252
+ */
253
+ export function ruleScalarAggDecorrelationSort(node, _context) {
254
+ if (!(node instanceof SortNode))
255
+ return null;
256
+ const candidates = collectCandidates(node.sortKeys.map(k => k.expression));
257
+ if (candidates.length === 0)
258
+ return null;
259
+ // NOTE: decorrelateAll requires the correlation columns to be in this Sort's
260
+ // OWN source. A `select o.id from o order by (select … where c.fk = o.k)`
261
+ // puts the Sort above a Project that stripped o.k, so decorrelateOne bails and
262
+ // the subquery stays correlated (still correct — the runtime reads o.k from the
263
+ // live base-scan context below the Project). Pushing the join through a
264
+ // stripping Project is backlog/feat-decorrelate-order-by-subquery-nonselected-column.
265
+ // Original Sort attributes (= its source's) — the signature the cap restores.
266
+ const sortAttrs = node.getAttributes();
267
+ const rewrite = decorrelateAll(candidates, node.source);
268
+ if (!rewrite)
269
+ return null;
270
+ log('Decorrelated %d scalar-aggregate subquery(ies) in an ORDER BY key into grouped left join(s)', rewrite.replacements.size);
271
+ const newKeys = node.sortKeys.map(k => ({
272
+ expression: substituteSubqueries(k.expression, rewrite.replacements),
273
+ direction: k.direction,
274
+ nulls: k.nulls,
275
+ }));
276
+ const decorrelatedSort = new SortNode(node.scope, rewrite.source, newKeys);
277
+ return capToAttributes(node.scope, decorrelatedSort, sortAttrs);
278
+ }
279
+ /**
280
+ * Wrap `source` in a bare pass-through Project that re-exposes exactly
281
+ * `origAttrs` (the decorrelated Filter's or Sort's original output signature),
282
+ * discarding the grouped LEFT join's appended columns. The outer columns sit at
283
+ * indices `0..origAttrs.length-1` of the join output (LEFT join places the outer
284
+ * on the left), so each projection is a plain column reference at its original
285
+ * index and every id is preserved — consumers above resolve unchanged.
286
+ */
287
+ function capToAttributes(scope, source, origAttrs) {
288
+ const projections = origAttrs.map((attr, index) => ({
289
+ node: new ColumnReferenceNode(scope, { type: 'column', name: attr.name }, attr.type, attr.id, index),
290
+ attributeId: attr.id,
291
+ }));
292
+ // preserveInputColumns: false — output is exactly the projected columns, and
293
+ // predefinedAttributes pins the ids/types to the original signature.
294
+ // NOTE: for a WHERE filter / ORDER BY already under a SELECT Project this cap
295
+ // is a redundant pass-through (the outer Project would re-cap anyway); it is
296
+ // NOT eliminated because its source carries MORE attributes, so no
297
+ // trivial-project rule sees it as an identity. Harmless (one extra Project
298
+ // node, correct output). If this shows up in plan-shape noise or profiling,
299
+ // skip the cap when `node`'s consumer is already a Project that outputs a
300
+ // subset of `origAttrs`.
301
+ return new ProjectNode(scope, source, projections, undefined, [...origAttrs], false);
302
+ }
303
+ /**
304
+ * Collect candidate `ScalarSubqueryNode`s across a list of scalar expression
305
+ * trees (bare and wrapped), deduplicated by node identity, in deterministic
306
+ * expression-order pre-order.
307
+ */
308
+ function collectCandidates(exprs) {
309
+ const candidates = [];
310
+ const seen = new Set();
311
+ for (const expr of exprs) {
312
+ const found = [];
313
+ collectScalarSubqueries(expr, found);
314
+ for (const cand of found) {
315
+ if (!seen.has(cand)) {
316
+ seen.add(cand);
317
+ candidates.push(cand);
318
+ }
319
+ }
320
+ }
321
+ return candidates;
322
+ }
323
+ /**
324
+ * Decorrelate every recognizable candidate against `outer`. Each recognized
325
+ * subquery becomes its own LEFT JOIN, stacked left-deep on the outer in
326
+ * deterministic (collection-order) sequence. The outer's attributes stay
327
+ * visible through every stacked left join, so later subqueries' correlations
328
+ * still resolve. Returns null when no candidate is recognized.
329
+ */
330
+ function decorrelateAll(candidates, outer) {
331
+ const outerAttrIds = new Set(outer.getAttributes().map(a => a.id));
332
+ let currentSource = outer;
333
+ const replacements = new Map();
334
+ for (const cand of candidates) {
335
+ const rewrite = decorrelateOne(cand, outerAttrIds, currentSource);
336
+ if (!rewrite)
337
+ continue;
338
+ currentSource = rewrite.join;
339
+ replacements.set(cand, rewrite.replacement);
340
+ }
341
+ if (replacements.size === 0)
342
+ return null;
343
+ return { source: currentSource, replacements };
344
+ }
345
+ /**
346
+ * Attempt to decorrelate one scalar-aggregate subquery into a grouped LEFT
347
+ * JOIN over `leftSource`. Returns null (leaving the subquery correlated) when
348
+ * any recognition or safety gate fails. Never mutates the original tree.
349
+ */
350
+ function decorrelateOne(cand, outerAttrIds, leftSource) {
351
+ const subquery = cand.subquery;
352
+ // Correlated, and every external reference resolves to the immediate outer.
353
+ const external = collectExternalReferences(subquery);
354
+ if (external.size === 0)
355
+ return null;
356
+ for (const id of external) {
357
+ if (!outerAttrIds.has(id))
358
+ return null;
359
+ }
360
+ // Decorrelation changes the inner subtree's execution count (per outer row
361
+ // → once); per-row firing of a write is contractually observable.
362
+ if (PlanNodeCharacteristics.subtreeHasSideEffects(subquery))
363
+ return null;
364
+ // A scalar subquery exposes exactly one output attribute (validated at
365
+ // build); anything else is not this shape.
366
+ const subAttrs = subquery.getAttributes();
367
+ if (subAttrs.length !== 1)
368
+ return null;
369
+ // Descend bare pass-through wrappers to the logical AggregateNode. A
370
+ // Sort/LimitOffset wrapper is NOT descended: a `limit 0` would change the
371
+ // one-row-per-group contract, and dropping an ordering wrapper silently is
372
+ // exactly the trap this rule must not fall into — bail conservatively.
373
+ let root = subquery;
374
+ while (!(root instanceof AggregateNode)) {
375
+ if (root instanceof ProjectNode || root instanceof AliasNode) {
376
+ const src = root.getRelations()[0];
377
+ if (!src || !isRelationalNode(src))
378
+ return null;
379
+ root = src;
380
+ continue;
381
+ }
382
+ return null;
383
+ }
384
+ const agg = root;
385
+ // Zero grouping keys ⇒ exactly one row per outer row. A GROUP BY subquery
386
+ // can yield >1 row and must keep the scalar-context runtime error.
387
+ if (agg.groupBy.length !== 0)
388
+ return null;
389
+ // Phase-1 scope: exactly one bare aggregate — the value column IS the
390
+ // aggregate output. Composite expressions over aggregates (`max(x)-min(x)`)
391
+ // plan as multi-aggregate nodes under a computing Project and bail here.
392
+ if (agg.aggregates.length !== 1)
393
+ return null;
394
+ // The exposed value column must be the aggregate's own output attribute:
395
+ // bare column-reference Project wrappers and Alias preserve attribute ids,
396
+ // while an aliasing/computing wrapper mints a fresh id and fails this check.
397
+ const aggAttrs = agg.getAttributes();
398
+ if (aggAttrs.length !== 1 || aggAttrs[0].id !== subAttrs[0].id)
399
+ return null;
400
+ const valueAttr = aggAttrs[0];
401
+ const aggExpr = agg.aggregates[0].expression;
402
+ if (!(aggExpr instanceof AggregateFunctionCallNode))
403
+ return null;
404
+ const schema = aggExpr.functionSchema;
405
+ if (!isAggregateFunctionSchema(schema))
406
+ return null;
407
+ // A non-deterministic finalize could yield a different empty value at
408
+ // runtime than the one folded here.
409
+ if ((schema.flags & FunctionFlags.DETERMINISTIC) === 0)
410
+ return null;
411
+ const emptyValue = computeEmptyInputValue(schema);
412
+ if (!emptyValue)
413
+ return null;
414
+ // Correlation extraction: the aggregate's source must be a Filter whose
415
+ // predicate splits into outer=inner equi-conjuncts + inner-only residuals.
416
+ // (Predicate pushdown leaves correlated conjuncts in a FilterNode above the
417
+ // Retrieve boundary — same shape the EXISTS/IN decorrelation rule relies on.)
418
+ if (!(agg.source instanceof FilterNode))
419
+ return null;
420
+ const filter = agg.source;
421
+ const innerSource = filter.source;
422
+ // Top-level attributes only: the correlation columns become GROUP BY keys
423
+ // evaluated against the aggregate's source rows, so they must be visible in
424
+ // the source's own output row (not buried below a projection).
425
+ const innerTopAttrIds = new Set(innerSource.getAttributes().map(a => a.id));
426
+ const conjuncts = splitConjuncts(filter.predicate);
427
+ const corrConjuncts = [];
428
+ const residualConjuncts = [];
429
+ for (const conj of conjuncts) {
430
+ if (isEquiCorrelation(conj, outerAttrIds, innerTopAttrIds)) {
431
+ corrConjuncts.push(conj);
432
+ }
433
+ else {
434
+ residualConjuncts.push(conj);
435
+ }
436
+ }
437
+ if (corrConjuncts.length === 0)
438
+ return null;
439
+ // Residual conjuncts must be inner-only: a correlated conjunct that did not
440
+ // match the strict equi-pattern (non-equi `inner.ts < outer.ts`, casts,
441
+ // deep-projected inner columns) cannot be turned into a group key — bail.
442
+ for (const conj of residualConjuncts) {
443
+ if (referencesAnyAttr(conj, outerAttrIds))
444
+ return null;
445
+ }
446
+ const pairs = corrConjuncts.map(c => {
447
+ const left = c.left;
448
+ const right = c.right;
449
+ return outerAttrIds.has(left.attributeId)
450
+ ? { outerRef: left, innerRef: right }
451
+ : { outerRef: right, innerRef: left };
452
+ });
453
+ // Remap outer references remaining in the retained subtrees (aggregate
454
+ // arguments, deeper inner source) to the inner column each is equated with.
455
+ const pairsByOuterId = new Map();
456
+ for (const p of pairs) {
457
+ if (!pairsByOuterId.has(p.outerRef.attributeId)) {
458
+ pairsByOuterId.set(p.outerRef.attributeId, p);
459
+ }
460
+ }
461
+ const remappedInnerSource = remapOuterRefs(innerSource, outerAttrIds, pairsByOuterId);
462
+ if (!remappedInnerSource || !isRelationalNode(remappedInnerSource))
463
+ return null;
464
+ const remappedAggExpr = remapOuterRefs(aggExpr, outerAttrIds, pairsByOuterId);
465
+ if (!remappedAggExpr)
466
+ return null;
467
+ // Rebuild the inner pipeline: residual inner-only predicates stay as a
468
+ // Filter over the (possibly remapped) inner source.
469
+ const residualPredicate = combineConjuncts(residualConjuncts);
470
+ const groupedSource = residualPredicate
471
+ ? new FilterNode(filter.scope, remappedInnerSource, residualPredicate)
472
+ : remappedInnerSource;
473
+ // Group keys: one per distinct inner correlation attribute (a duplicate
474
+ // conjunct pair on the same inner column contributes one key). The group-by
475
+ // expressions are the inner column references themselves, and the grouped
476
+ // aggregate PRESERVES their attribute ids as its group-output ids so the
477
+ // original correlation conjuncts serve verbatim as the join condition.
478
+ const keyRefs = [];
479
+ const seenKeys = new Set();
480
+ for (const p of pairs) {
481
+ if (!seenKeys.has(p.innerRef.attributeId)) {
482
+ seenKeys.add(p.innerRef.attributeId);
483
+ keyRefs.push(p.innerRef);
484
+ }
485
+ }
486
+ const innerAttrById = new Map(innerSource.getAttributes().map(a => [a.id, a]));
487
+ const groupAttrs = [];
488
+ for (const ref of keyRefs) {
489
+ const attr = innerAttrById.get(ref.attributeId);
490
+ if (!attr)
491
+ return null;
492
+ groupAttrs.push({ ...attr });
493
+ }
494
+ const groupedAgg = new AggregateNode(agg.scope, groupedSource, keyRefs, [{ expression: remappedAggExpr, alias: agg.aggregates[0].alias }], undefined, [...groupAttrs, valueAttr]);
495
+ // Correctness backstop: the rebuilt right side must be fully decorrelated.
496
+ // (E.g. an outer reference the remap map did not cover would surface here.)
497
+ if (collectExternalReferences(groupedAgg).size !== 0)
498
+ return null;
499
+ const joinCondition = combineConjuncts(corrConjuncts);
500
+ const join = new JoinNode(cand.scope, leftSource, groupedAgg, 'left', joinCondition);
501
+ const leftWidth = leftSource.getAttributes().length;
502
+ const nullable = (t) => (t.nullable ? t : { ...t, nullable: true });
503
+ const valueColRef = new ColumnReferenceNode(cand.scope, { type: 'column', name: valueAttr.name }, nullable(valueAttr.type), valueAttr.id, leftWidth + groupAttrs.length);
504
+ let replacement;
505
+ if (emptyValue.value === null) {
506
+ // Join miss already yields NULL — exactly the aggregate's empty value.
507
+ replacement = valueColRef;
508
+ }
509
+ else {
510
+ // `CASE WHEN <group key> IS NULL THEN <empty literal> ELSE <value> END`.
511
+ // See the module header for why the group key is a sound miss marker.
512
+ const keyAttr = groupAttrs[0];
513
+ const keyColRef = new ColumnReferenceNode(cand.scope, { type: 'column', name: keyAttr.name }, nullable(keyAttr.type), keyAttr.id, leftWidth);
514
+ const isNullNode = new UnaryOpNode(cand.scope, { type: 'unary', operator: 'IS NULL', expr: keyColRef.expression }, keyColRef);
515
+ const emptyLiteral = new LiteralNode(cand.scope, { type: 'literal', value: emptyValue.value }, { ...valueAttr.type, nullable: false });
516
+ replacement = new CaseExprNode(cand.scope, {
517
+ type: 'case',
518
+ whenThenClauses: [{ when: isNullNode.expression, then: emptyLiteral.expression }],
519
+ elseExpr: valueColRef.expression,
520
+ }, undefined, [{ when: isNullNode, then: emptyLiteral }], valueColRef);
521
+ }
522
+ log('Decorrelated scalar %s() subquery into grouped LEFT JOIN on %d key(s)', aggExpr.functionName, groupAttrs.length);
523
+ return { join, replacement };
524
+ }
525
+ /**
526
+ * Compute the aggregate's empty-input value by the SAME path the runtime uses
527
+ * for a zero-row scalar aggregate: a fresh accumulator through
528
+ * `finalizeFunction` (see the stream/hash aggregate emitters). Returns null
529
+ * when the value cannot be folded to a plan-time literal: finalize throws, is
530
+ * async, or yields a non-primitive (e.g. a native JSON array/object).
531
+ */
532
+ function computeEmptyInputValue(schema) {
533
+ let value;
534
+ try {
535
+ value = schema.finalizeFunction(cloneInitialValue(schema.initialValue));
536
+ }
537
+ catch {
538
+ return null;
539
+ }
540
+ if (value === null ||
541
+ typeof value === 'string' ||
542
+ typeof value === 'number' ||
543
+ typeof value === 'bigint' ||
544
+ typeof value === 'boolean' ||
545
+ value instanceof Uint8Array) {
546
+ return { value };
547
+ }
548
+ return null;
549
+ }
550
+ /**
551
+ * The remap safety gate: replacing a reference to `outer.a` with `inner.b`
552
+ * (justified by the `outer.a = inner.b` conjunct) is value-faithful only when
553
+ * the equality is value-discriminating (no weak collation — a NOCASE `=`
554
+ * passes byte-different values) AND both sides share a logical type (a lossy
555
+ * cross-affinity `=` can equate values that render differently).
556
+ */
557
+ function isValueFaithfulPair(pair) {
558
+ if (!isValueDiscriminatingEquality(pair.outerRef, pair.innerRef))
559
+ return false;
560
+ return pair.outerRef.getType().logicalType.name === pair.innerRef.getType().logicalType.name;
561
+ }
562
+ /**
563
+ * Deep-rewrite `node`, replacing every column reference to an outer attribute
564
+ * with the inner column reference it is equated with. Returns null (bail) when
565
+ * an outer reference has no value-faithful mapping. Untouched subtrees are
566
+ * shared, and `withChildren` rebuilds preserve output attribute ids along the
567
+ * changed path.
568
+ */
569
+ function remapOuterRefs(node, outerAttrIds, pairsByOuterId) {
570
+ if (node instanceof ColumnReferenceNode) {
571
+ if (!outerAttrIds.has(node.attributeId))
572
+ return node;
573
+ const pair = pairsByOuterId.get(node.attributeId);
574
+ if (!pair || !isValueFaithfulPair(pair))
575
+ return null;
576
+ return pair.innerRef;
577
+ }
578
+ const children = node.getChildren();
579
+ if (children.length === 0)
580
+ return node;
581
+ const newChildren = [];
582
+ let changed = false;
583
+ for (const child of children) {
584
+ const replaced = remapOuterRefs(child, outerAttrIds, pairsByOuterId);
585
+ if (replaced === null)
586
+ return null;
587
+ newChildren.push(replaced);
588
+ if (replaced !== child)
589
+ changed = true;
590
+ }
591
+ return changed ? node.withChildren(newChildren) : node;
592
+ }
593
+ /**
594
+ * Rebuild the outer projection over the join-stacked source, substituting each
595
+ * decorrelated `ScalarSubqueryNode` with its replacement expression (bare
596
+ * column read or empty-value CASE guard) while preserving the projection's
597
+ * output attribute ids.
598
+ */
599
+ function rebuildProject(project, newSource, replacements) {
600
+ const attributes = project.getAttributes();
601
+ const newProjections = project.projections.map((p, i) => ({
602
+ node: substituteSubqueries(p.node, replacements),
603
+ alias: p.alias,
604
+ attributeId: attributes[i].id,
605
+ }));
606
+ return new ProjectNode(project.scope, newSource, newProjections, undefined, attributes, project.preserveInputColumns);
607
+ }
608
+ /**
609
+ * Rebuild the enclosing aggregate over the join-stacked source, substituting
610
+ * each decorrelated `ScalarSubqueryNode` in its group-by / aggregate-argument
611
+ * expressions while preserving the aggregate's output attribute ids (so
612
+ * group-by references, HAVING filters, and everything above resolve
613
+ * unchanged). The inserted LEFT joins each match at most one row per source
614
+ * row (the grouped subtree's GROUP BY keys are a unique key on its output),
615
+ * so group contents — row count and multiplicity — are preserved exactly.
616
+ */
617
+ function rebuildAggregate(agg, newSource, replacements) {
618
+ return new AggregateNode(agg.scope, newSource, agg.groupBy.map(expr => substituteSubqueries(expr, replacements)), agg.aggregates.map(a => ({
619
+ expression: substituteSubqueries(a.expression, replacements),
620
+ alias: a.alias,
621
+ })), undefined, agg.getAttributes());
622
+ }
623
+ //# sourceMappingURL=rule-scalar-agg-decorrelation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-scalar-agg-decorrelation.js","sourceRoot":"","sources":["../../../../../src/planner/rules/subquery/rule-scalar-agg-decorrelation.ts"],"names":[],"mappings":"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"}