@quereus/quereus 4.6.0 → 4.7.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 (535) hide show
  1. package/README.md +2 -2
  2. package/dist/src/common/errors.d.ts +17 -0
  3. package/dist/src/common/errors.d.ts.map +1 -1
  4. package/dist/src/common/errors.js +21 -0
  5. package/dist/src/common/errors.js.map +1 -1
  6. package/dist/src/core/database-assertions.d.ts +4 -3
  7. package/dist/src/core/database-assertions.d.ts.map +1 -1
  8. package/dist/src/core/database-assertions.js +44 -14
  9. package/dist/src/core/database-assertions.js.map +1 -1
  10. package/dist/src/core/database-events.d.ts +62 -0
  11. package/dist/src/core/database-events.d.ts.map +1 -1
  12. package/dist/src/core/database-events.js +88 -2
  13. package/dist/src/core/database-events.js.map +1 -1
  14. package/dist/src/core/database-internal.d.ts +5 -2
  15. package/dist/src/core/database-internal.d.ts.map +1 -1
  16. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
  17. package/dist/src/core/database-materialized-views-plan-builders.js +4 -2
  18. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
  19. package/dist/src/core/database-materialized-views-plans.d.ts +12 -2
  20. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
  21. package/dist/src/core/database-materialized-views.d.ts +46 -0
  22. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  23. package/dist/src/core/database-materialized-views.js +75 -4
  24. package/dist/src/core/database-materialized-views.js.map +1 -1
  25. package/dist/src/core/database.d.ts +9 -1
  26. package/dist/src/core/database.d.ts.map +1 -1
  27. package/dist/src/core/database.js +36 -10
  28. package/dist/src/core/database.js.map +1 -1
  29. package/dist/src/core/derived-row-validator.d.ts.map +1 -1
  30. package/dist/src/core/derived-row-validator.js +7 -1
  31. package/dist/src/core/derived-row-validator.js.map +1 -1
  32. package/dist/src/core/statement.d.ts.map +1 -1
  33. package/dist/src/core/statement.js +15 -5
  34. package/dist/src/core/statement.js.map +1 -1
  35. package/dist/src/emit/ast-stringify.d.ts +18 -2
  36. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  37. package/dist/src/emit/ast-stringify.js +22 -4
  38. package/dist/src/emit/ast-stringify.js.map +1 -1
  39. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  40. package/dist/src/func/builtins/explain.js +19 -5
  41. package/dist/src/func/builtins/explain.js.map +1 -1
  42. package/dist/src/func/builtins/scalar.d.ts.map +1 -1
  43. package/dist/src/func/builtins/scalar.js +24 -20
  44. package/dist/src/func/builtins/scalar.js.map +1 -1
  45. package/dist/src/func/builtins/schema.d.ts.map +1 -1
  46. package/dist/src/func/builtins/schema.js +32 -5
  47. package/dist/src/func/builtins/schema.js.map +1 -1
  48. package/dist/src/index.d.ts +4 -4
  49. package/dist/src/index.d.ts.map +1 -1
  50. package/dist/src/index.js +4 -4
  51. package/dist/src/index.js.map +1 -1
  52. package/dist/src/parser/ast.d.ts +58 -1
  53. package/dist/src/parser/ast.d.ts.map +1 -1
  54. package/dist/src/parser/parser.js +1 -1
  55. package/dist/src/parser/parser.js.map +1 -1
  56. package/dist/src/parser/utils.d.ts +13 -1
  57. package/dist/src/parser/utils.d.ts.map +1 -1
  58. package/dist/src/parser/utils.js +14 -0
  59. package/dist/src/parser/utils.js.map +1 -1
  60. package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
  61. package/dist/src/planner/analysis/assertion-classifier.js +7 -2
  62. package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
  63. package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
  64. package/dist/src/planner/analysis/assertion-hoist-cache.js +5 -0
  65. package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
  66. package/dist/src/planner/analysis/change-scope.d.ts +11 -3
  67. package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
  68. package/dist/src/planner/analysis/change-scope.js +5 -4
  69. package/dist/src/planner/analysis/change-scope.js.map +1 -1
  70. package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -1
  71. package/dist/src/planner/analysis/coverage-prover.js +13 -5
  72. package/dist/src/planner/analysis/coverage-prover.js.map +1 -1
  73. package/dist/src/planner/analysis/equi-correlation.d.ts +6 -1
  74. package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -1
  75. package/dist/src/planner/analysis/equi-correlation.js +8 -1
  76. package/dist/src/planner/analysis/equi-correlation.js.map +1 -1
  77. package/dist/src/planner/analysis/predicate-dependencies.d.ts +34 -0
  78. package/dist/src/planner/analysis/predicate-dependencies.d.ts.map +1 -0
  79. package/dist/src/planner/analysis/predicate-dependencies.js +60 -0
  80. package/dist/src/planner/analysis/predicate-dependencies.js.map +1 -0
  81. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +1 -1
  82. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  83. package/dist/src/planner/analysis/query-rewrite-matcher.js +0 -26
  84. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  85. package/dist/src/planner/building/alter-table.d.ts.map +1 -1
  86. package/dist/src/planner/building/alter-table.js +53 -17
  87. package/dist/src/planner/building/alter-table.js.map +1 -1
  88. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  89. package/dist/src/planner/building/constraint-builder.js +9 -5
  90. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  91. package/dist/src/planner/building/create-assertion.d.ts.map +1 -1
  92. package/dist/src/planner/building/create-assertion.js +72 -1
  93. package/dist/src/planner/building/create-assertion.js.map +1 -1
  94. package/dist/src/planner/building/create-view.d.ts +6 -1
  95. package/dist/src/planner/building/create-view.d.ts.map +1 -1
  96. package/dist/src/planner/building/create-view.js +12 -3
  97. package/dist/src/planner/building/create-view.js.map +1 -1
  98. package/dist/src/planner/building/ddl.d.ts.map +1 -1
  99. package/dist/src/planner/building/ddl.js +6 -2
  100. package/dist/src/planner/building/ddl.js.map +1 -1
  101. package/dist/src/planner/building/delete.d.ts.map +1 -1
  102. package/dist/src/planner/building/delete.js +23 -10
  103. package/dist/src/planner/building/delete.js.map +1 -1
  104. package/dist/src/planner/building/dml-target.d.ts.map +1 -1
  105. package/dist/src/planner/building/dml-target.js +4 -0
  106. package/dist/src/planner/building/dml-target.js.map +1 -1
  107. package/dist/src/planner/building/drop-assertion.d.ts.map +1 -1
  108. package/dist/src/planner/building/drop-assertion.js +3 -1
  109. package/dist/src/planner/building/drop-assertion.js.map +1 -1
  110. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  111. package/dist/src/planner/building/foreign-key-builder.js +7 -5
  112. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  113. package/dist/src/planner/building/function-call.d.ts +35 -0
  114. package/dist/src/planner/building/function-call.d.ts.map +1 -1
  115. package/dist/src/planner/building/function-call.js +53 -40
  116. package/dist/src/planner/building/function-call.js.map +1 -1
  117. package/dist/src/planner/building/insert.d.ts.map +1 -1
  118. package/dist/src/planner/building/insert.js +185 -48
  119. package/dist/src/planner/building/insert.js.map +1 -1
  120. package/dist/src/planner/building/materialized-view.d.ts.map +1 -1
  121. package/dist/src/planner/building/materialized-view.js +3 -1
  122. package/dist/src/planner/building/materialized-view.js.map +1 -1
  123. package/dist/src/planner/building/schema-authored-context.d.ts +69 -0
  124. package/dist/src/planner/building/schema-authored-context.d.ts.map +1 -0
  125. package/dist/src/planner/building/schema-authored-context.js +75 -0
  126. package/dist/src/planner/building/schema-authored-context.js.map +1 -0
  127. package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
  128. package/dist/src/planner/building/schema-resolution.js +7 -4
  129. package/dist/src/planner/building/schema-resolution.js.map +1 -1
  130. package/dist/src/planner/building/select-aggregates.d.ts +187 -2
  131. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  132. package/dist/src/planner/building/select-aggregates.js +414 -81
  133. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  134. package/dist/src/planner/building/select-compound.js +2 -2
  135. package/dist/src/planner/building/select-compound.js.map +1 -1
  136. package/dist/src/planner/building/select-context.d.ts +91 -0
  137. package/dist/src/planner/building/select-context.d.ts.map +1 -1
  138. package/dist/src/planner/building/select-context.js +113 -0
  139. package/dist/src/planner/building/select-context.js.map +1 -1
  140. package/dist/src/planner/building/select-modifiers.d.ts +10 -3
  141. package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
  142. package/dist/src/planner/building/select-modifiers.js +29 -8
  143. package/dist/src/planner/building/select-modifiers.js.map +1 -1
  144. package/dist/src/planner/building/select-ordinal.d.ts +64 -19
  145. package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
  146. package/dist/src/planner/building/select-ordinal.js +79 -30
  147. package/dist/src/planner/building/select-ordinal.js.map +1 -1
  148. package/dist/src/planner/building/select-projections.d.ts +1 -1
  149. package/dist/src/planner/building/select-projections.d.ts.map +1 -1
  150. package/dist/src/planner/building/select-projections.js +18 -11
  151. package/dist/src/planner/building/select-projections.js.map +1 -1
  152. package/dist/src/planner/building/select-window.d.ts +13 -3
  153. package/dist/src/planner/building/select-window.d.ts.map +1 -1
  154. package/dist/src/planner/building/select-window.js +142 -37
  155. package/dist/src/planner/building/select-window.js.map +1 -1
  156. package/dist/src/planner/building/select.d.ts.map +1 -1
  157. package/dist/src/planner/building/select.js +129 -59
  158. package/dist/src/planner/building/select.js.map +1 -1
  159. package/dist/src/planner/building/update.d.ts.map +1 -1
  160. package/dist/src/planner/building/update.js +27 -13
  161. package/dist/src/planner/building/update.js.map +1 -1
  162. package/dist/src/planner/building/view-mutation-builder.d.ts +1 -1
  163. package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -1
  164. package/dist/src/planner/building/view-mutation-builder.js +102 -8
  165. package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
  166. package/dist/src/planner/building/with.d.ts.map +1 -1
  167. package/dist/src/planner/building/with.js +34 -4
  168. package/dist/src/planner/building/with.js.map +1 -1
  169. package/dist/src/planner/cache/correlation-detector.d.ts +15 -0
  170. package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -1
  171. package/dist/src/planner/cache/correlation-detector.js +26 -0
  172. package/dist/src/planner/cache/correlation-detector.js.map +1 -1
  173. package/dist/src/planner/cache/materialization-advisory.d.ts +7 -0
  174. package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
  175. package/dist/src/planner/cache/materialization-advisory.js +12 -3
  176. package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
  177. package/dist/src/planner/framework/characteristics.d.ts +9 -0
  178. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  179. package/dist/src/planner/framework/characteristics.js.map +1 -1
  180. package/dist/src/planner/framework/pass.d.ts +2 -0
  181. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  182. package/dist/src/planner/framework/pass.js +15 -0
  183. package/dist/src/planner/framework/pass.js.map +1 -1
  184. package/dist/src/planner/mutation/backward-body.d.ts.map +1 -1
  185. package/dist/src/planner/mutation/backward-body.js +4 -1
  186. package/dist/src/planner/mutation/backward-body.js.map +1 -1
  187. package/dist/src/planner/mutation/body-context.d.ts +23 -0
  188. package/dist/src/planner/mutation/body-context.d.ts.map +1 -0
  189. package/dist/src/planner/mutation/body-context.js +26 -0
  190. package/dist/src/planner/mutation/body-context.js.map +1 -0
  191. package/dist/src/planner/mutation/cte-flatten.js +15 -2
  192. package/dist/src/planner/mutation/cte-flatten.js.map +1 -1
  193. package/dist/src/planner/mutation/decomposition.d.ts +8 -0
  194. package/dist/src/planner/mutation/decomposition.d.ts.map +1 -1
  195. package/dist/src/planner/mutation/decomposition.js +8 -3
  196. package/dist/src/planner/mutation/decomposition.js.map +1 -1
  197. package/dist/src/planner/mutation/lens-enforcement.js +1 -1
  198. package/dist/src/planner/mutation/multi-source.d.ts +7 -0
  199. package/dist/src/planner/mutation/multi-source.d.ts.map +1 -1
  200. package/dist/src/planner/mutation/multi-source.js +5 -0
  201. package/dist/src/planner/mutation/multi-source.js.map +1 -1
  202. package/dist/src/planner/mutation/mutation-diagnostic.d.ts +1 -1
  203. package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -1
  204. package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -1
  205. package/dist/src/planner/mutation/scope-transform.d.ts +32 -0
  206. package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -1
  207. package/dist/src/planner/mutation/scope-transform.js +181 -33
  208. package/dist/src/planner/mutation/scope-transform.js.map +1 -1
  209. package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
  210. package/dist/src/planner/mutation/set-op.js +66 -16
  211. package/dist/src/planner/mutation/set-op.js.map +1 -1
  212. package/dist/src/planner/mutation/single-source.d.ts.map +1 -1
  213. package/dist/src/planner/mutation/single-source.js +100 -24
  214. package/dist/src/planner/mutation/single-source.js.map +1 -1
  215. package/dist/src/planner/nodes/add-constraint-node.d.ts +15 -1
  216. package/dist/src/planner/nodes/add-constraint-node.d.ts.map +1 -1
  217. package/dist/src/planner/nodes/add-constraint-node.js +10 -1
  218. package/dist/src/planner/nodes/add-constraint-node.js.map +1 -1
  219. package/dist/src/planner/nodes/aggregate-node.d.ts +14 -5
  220. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  221. package/dist/src/planner/nodes/aggregate-node.js +28 -21
  222. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  223. package/dist/src/planner/nodes/alter-table-node.d.ts +27 -2
  224. package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
  225. package/dist/src/planner/nodes/alter-table-node.js +49 -2
  226. package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
  227. package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
  228. package/dist/src/planner/nodes/constraint-check-node.js +17 -19
  229. package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
  230. package/dist/src/planner/nodes/create-assertion-node.d.ts +2 -1
  231. package/dist/src/planner/nodes/create-assertion-node.d.ts.map +1 -1
  232. package/dist/src/planner/nodes/create-assertion-node.js +5 -2
  233. package/dist/src/planner/nodes/create-assertion-node.js.map +1 -1
  234. package/dist/src/planner/nodes/cte-node.d.ts +19 -9
  235. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  236. package/dist/src/planner/nodes/cte-node.js +25 -9
  237. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  238. package/dist/src/planner/nodes/delete-node.d.ts +20 -2
  239. package/dist/src/planner/nodes/delete-node.d.ts.map +1 -1
  240. package/dist/src/planner/nodes/delete-node.js +11 -2
  241. package/dist/src/planner/nodes/delete-node.js.map +1 -1
  242. package/dist/src/planner/nodes/dml-executor-node.d.ts +58 -1
  243. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  244. package/dist/src/planner/nodes/dml-executor-node.js +107 -15
  245. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  246. package/dist/src/planner/nodes/drop-assertion-node.d.ts +2 -1
  247. package/dist/src/planner/nodes/drop-assertion-node.d.ts.map +1 -1
  248. package/dist/src/planner/nodes/drop-assertion-node.js +5 -2
  249. package/dist/src/planner/nodes/drop-assertion-node.js.map +1 -1
  250. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  251. package/dist/src/planner/nodes/filter.js +12 -6
  252. package/dist/src/planner/nodes/filter.js.map +1 -1
  253. package/dist/src/planner/nodes/hash-aggregate.d.ts +0 -5
  254. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  255. package/dist/src/planner/nodes/hash-aggregate.js +17 -20
  256. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  257. package/dist/src/planner/nodes/insert-node.d.ts +19 -2
  258. package/dist/src/planner/nodes/insert-node.d.ts.map +1 -1
  259. package/dist/src/planner/nodes/insert-node.js +10 -2
  260. package/dist/src/planner/nodes/insert-node.js.map +1 -1
  261. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts +42 -10
  262. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts.map +1 -1
  263. package/dist/src/planner/nodes/key-set-semi-join-node.js +85 -16
  264. package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -1
  265. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +5 -0
  266. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
  267. package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
  268. package/dist/src/planner/nodes/plan-node.d.ts +5 -0
  269. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  270. package/dist/src/planner/nodes/plan-node.js +12 -0
  271. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  272. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  273. package/dist/src/planner/nodes/project-node.js +16 -35
  274. package/dist/src/planner/nodes/project-node.js.map +1 -1
  275. package/dist/src/planner/nodes/retrieve-node.d.ts +16 -2
  276. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  277. package/dist/src/planner/nodes/retrieve-node.js +8 -1
  278. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  279. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  280. package/dist/src/planner/nodes/returning-node.js +13 -32
  281. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  282. package/dist/src/planner/nodes/stream-aggregate.d.ts +0 -5
  283. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  284. package/dist/src/planner/nodes/stream-aggregate.js +18 -24
  285. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  286. package/dist/src/planner/nodes/table-access-nodes.d.ts +89 -1
  287. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  288. package/dist/src/planner/nodes/table-access-nodes.js +64 -2
  289. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  290. package/dist/src/planner/nodes/update-node.d.ts +19 -2
  291. package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
  292. package/dist/src/planner/nodes/update-node.js +10 -2
  293. package/dist/src/planner/nodes/update-node.js.map +1 -1
  294. package/dist/src/planner/optimizer.d.ts +18 -0
  295. package/dist/src/planner/optimizer.d.ts.map +1 -1
  296. package/dist/src/planner/optimizer.js +59 -10
  297. package/dist/src/planner/optimizer.js.map +1 -1
  298. package/dist/src/planner/planning-context.d.ts +24 -0
  299. package/dist/src/planner/planning-context.d.ts.map +1 -1
  300. package/dist/src/planner/planning-context.js.map +1 -1
  301. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts +78 -20
  302. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -1
  303. package/dist/src/planner/rules/access/rule-key-set-seek.js +297 -71
  304. package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -1
  305. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
  306. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +2 -2
  307. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
  308. package/dist/src/planner/rules/access/rule-select-access-path.d.ts +11 -1
  309. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  310. package/dist/src/planner/rules/access/rule-select-access-path.js +46 -2
  311. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  312. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +7 -4
  313. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
  314. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +39 -5
  315. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
  316. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
  317. package/dist/src/planner/rules/cache/rule-cte-optimization.js +6 -2
  318. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
  319. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +10 -3
  320. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  321. package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -1
  322. package/dist/src/planner/rules/join/index-nested-loop.js +13 -7
  323. package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -1
  324. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts +4 -0
  325. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
  326. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +50 -15
  327. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
  328. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +6 -0
  329. package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
  330. package/dist/src/planner/rules/join/rule-join-elimination.js +25 -9
  331. package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
  332. package/dist/src/planner/rules/join/rule-join-key-inference.d.ts +7 -0
  333. package/dist/src/planner/rules/join/rule-join-key-inference.d.ts.map +1 -1
  334. package/dist/src/planner/rules/join/rule-join-key-inference.js +23 -11
  335. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +1 -1
  336. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +2 -2
  337. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  338. package/dist/src/planner/rules/join/rule-join-physical-selection.js +46 -16
  339. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  340. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +2 -0
  341. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
  342. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +14 -0
  343. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
  344. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts +2 -2
  345. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
  346. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +19 -22
  347. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
  348. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +33 -19
  349. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
  350. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +37 -18
  351. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -1
  352. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts +6 -3
  353. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts.map +1 -1
  354. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js +6 -3
  355. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js.map +1 -1
  356. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
  357. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +11 -21
  358. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
  359. package/dist/src/planner/rules/shared/access-leaf.d.ts +16 -3
  360. package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -1
  361. package/dist/src/planner/rules/shared/access-leaf.js +21 -5
  362. package/dist/src/planner/rules/shared/access-leaf.js.map +1 -1
  363. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
  364. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
  365. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +1 -1
  366. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
  367. package/dist/src/planner/stored-body-context.d.ts +57 -0
  368. package/dist/src/planner/stored-body-context.d.ts.map +1 -0
  369. package/dist/src/planner/stored-body-context.js +64 -0
  370. package/dist/src/planner/stored-body-context.js.map +1 -0
  371. package/dist/src/planner/util/ind-utils.d.ts +28 -20
  372. package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
  373. package/dist/src/planner/util/ind-utils.js +36 -27
  374. package/dist/src/planner/util/ind-utils.js.map +1 -1
  375. package/dist/src/planner/util/key-utils.d.ts +19 -4
  376. package/dist/src/planner/util/key-utils.d.ts.map +1 -1
  377. package/dist/src/planner/util/key-utils.js +23 -7
  378. package/dist/src/planner/util/key-utils.js.map +1 -1
  379. package/dist/src/planner/util/output-names.d.ts +12 -0
  380. package/dist/src/planner/util/output-names.d.ts.map +1 -0
  381. package/dist/src/planner/util/output-names.js +20 -0
  382. package/dist/src/planner/util/output-names.js.map +1 -0
  383. package/dist/src/planner/util/row-estimates.d.ts +11 -0
  384. package/dist/src/planner/util/row-estimates.d.ts.map +1 -1
  385. package/dist/src/planner/util/row-estimates.js +28 -0
  386. package/dist/src/planner/util/row-estimates.js.map +1 -1
  387. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  388. package/dist/src/runtime/deferred-constraint-queue.js +3 -2
  389. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  390. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  391. package/dist/src/runtime/emit/add-constraint.js +22 -6
  392. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  393. package/dist/src/runtime/emit/alter-schema-event.d.ts +59 -4
  394. package/dist/src/runtime/emit/alter-schema-event.d.ts.map +1 -1
  395. package/dist/src/runtime/emit/alter-schema-event.js +63 -4
  396. package/dist/src/runtime/emit/alter-schema-event.js.map +1 -1
  397. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  398. package/dist/src/runtime/emit/alter-table.js +212 -92
  399. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  400. package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
  401. package/dist/src/runtime/emit/analyze.js +15 -4
  402. package/dist/src/runtime/emit/analyze.js.map +1 -1
  403. package/dist/src/runtime/emit/assertion-drop-guard.d.ts +37 -0
  404. package/dist/src/runtime/emit/assertion-drop-guard.d.ts.map +1 -0
  405. package/dist/src/runtime/emit/assertion-drop-guard.js +59 -0
  406. package/dist/src/runtime/emit/assertion-drop-guard.js.map +1 -0
  407. package/dist/src/runtime/emit/assertion-rename-helpers.d.ts +33 -0
  408. package/dist/src/runtime/emit/assertion-rename-helpers.d.ts.map +1 -0
  409. package/dist/src/runtime/emit/assertion-rename-helpers.js +124 -0
  410. package/dist/src/runtime/emit/assertion-rename-helpers.js.map +1 -0
  411. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  412. package/dist/src/runtime/emit/constraint-check.js +10 -227
  413. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  414. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  415. package/dist/src/runtime/emit/create-assertion.js +31 -14
  416. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  417. package/dist/src/runtime/emit/cte.d.ts.map +1 -1
  418. package/dist/src/runtime/emit/cte.js +11 -6
  419. package/dist/src/runtime/emit/cte.js.map +1 -1
  420. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  421. package/dist/src/runtime/emit/dml-executor.js +169 -1
  422. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  423. package/dist/src/runtime/emit/drop-assertion.js +8 -8
  424. package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
  425. package/dist/src/runtime/emit/drop-column-guards.d.ts +151 -0
  426. package/dist/src/runtime/emit/drop-column-guards.d.ts.map +1 -0
  427. package/dist/src/runtime/emit/drop-column-guards.js +230 -0
  428. package/dist/src/runtime/emit/drop-column-guards.js.map +1 -0
  429. package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
  430. package/dist/src/runtime/emit/drop-table.js +6 -0
  431. package/dist/src/runtime/emit/drop-table.js.map +1 -1
  432. package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
  433. package/dist/src/runtime/emit/drop-view.js +4 -0
  434. package/dist/src/runtime/emit/drop-view.js.map +1 -1
  435. package/dist/src/runtime/emit/key-set-semi-join.d.ts.map +1 -1
  436. package/dist/src/runtime/emit/key-set-semi-join.js +5 -3
  437. package/dist/src/runtime/emit/key-set-semi-join.js.map +1 -1
  438. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +4 -4
  439. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  440. package/dist/src/runtime/emit/materialized-view-helpers.js +34 -22
  441. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  442. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  443. package/dist/src/runtime/emit/materialized-view.js +7 -2
  444. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  445. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  446. package/dist/src/runtime/emit/recursive-cte.js +4 -5
  447. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  448. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  449. package/dist/src/runtime/emit/update.js +18 -6
  450. package/dist/src/runtime/emit/update.js.map +1 -1
  451. package/dist/src/runtime/row-constraints.d.ts +85 -0
  452. package/dist/src/runtime/row-constraints.d.ts.map +1 -0
  453. package/dist/src/runtime/row-constraints.js +239 -0
  454. package/dist/src/runtime/row-constraints.js.map +1 -0
  455. package/dist/src/runtime/types.d.ts +8 -11
  456. package/dist/src/runtime/types.d.ts.map +1 -1
  457. package/dist/src/runtime/types.js.map +1 -1
  458. package/dist/src/schema/assertion.d.ts +14 -1
  459. package/dist/src/schema/assertion.d.ts.map +1 -1
  460. package/dist/src/schema/assertion.js +14 -1
  461. package/dist/src/schema/assertion.js.map +1 -1
  462. package/dist/src/schema/catalog-persistability.js +19 -3
  463. package/dist/src/schema/catalog-persistability.js.map +1 -1
  464. package/dist/src/schema/catalog.d.ts +6 -0
  465. package/dist/src/schema/catalog.d.ts.map +1 -1
  466. package/dist/src/schema/catalog.js +26 -36
  467. package/dist/src/schema/catalog.js.map +1 -1
  468. package/dist/src/schema/column-source-resolver.d.ts +18 -0
  469. package/dist/src/schema/column-source-resolver.d.ts.map +1 -0
  470. package/dist/src/schema/column-source-resolver.js +22 -0
  471. package/dist/src/schema/column-source-resolver.js.map +1 -0
  472. package/dist/src/schema/constraint-builder.d.ts.map +1 -1
  473. package/dist/src/schema/constraint-builder.js +7 -1
  474. package/dist/src/schema/constraint-builder.js.map +1 -1
  475. package/dist/src/schema/ddl-generator.js +8 -0
  476. package/dist/src/schema/ddl-generator.js.map +1 -1
  477. package/dist/src/schema/lens-compiler.d.ts.map +1 -1
  478. package/dist/src/schema/lens-compiler.js +203 -51
  479. package/dist/src/schema/lens-compiler.js.map +1 -1
  480. package/dist/src/schema/lens-prover.d.ts +2 -3
  481. package/dist/src/schema/lens-prover.d.ts.map +1 -1
  482. package/dist/src/schema/lens-prover.js +19 -11
  483. package/dist/src/schema/lens-prover.js.map +1 -1
  484. package/dist/src/schema/manager.d.ts +30 -12
  485. package/dist/src/schema/manager.d.ts.map +1 -1
  486. package/dist/src/schema/manager.js +49 -17
  487. package/dist/src/schema/manager.js.map +1 -1
  488. package/dist/src/schema/rename-rewriter.d.ts +142 -0
  489. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  490. package/dist/src/schema/rename-rewriter.js +254 -9
  491. package/dist/src/schema/rename-rewriter.js.map +1 -1
  492. package/dist/src/schema/reserved-tags.d.ts +1 -1
  493. package/dist/src/schema/reserved-tags.d.ts.map +1 -1
  494. package/dist/src/schema/reserved-tags.js +4 -3
  495. package/dist/src/schema/reserved-tags.js.map +1 -1
  496. package/dist/src/schema/schema-differ.d.ts +16 -0
  497. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  498. package/dist/src/schema/schema-differ.js +122 -11
  499. package/dist/src/schema/schema-differ.js.map +1 -1
  500. package/dist/src/schema/view.d.ts +11 -0
  501. package/dist/src/schema/view.d.ts.map +1 -1
  502. package/dist/src/schema/view.js +12 -0
  503. package/dist/src/schema/view.js.map +1 -1
  504. package/dist/src/types/builtin-types.d.ts +38 -0
  505. package/dist/src/types/builtin-types.d.ts.map +1 -1
  506. package/dist/src/types/builtin-types.js +77 -26
  507. package/dist/src/types/builtin-types.js.map +1 -1
  508. package/dist/src/types/index.d.ts +1 -1
  509. package/dist/src/types/index.d.ts.map +1 -1
  510. package/dist/src/types/index.js +1 -1
  511. package/dist/src/types/index.js.map +1 -1
  512. package/dist/src/util/{working-table-iterable.d.ts → array-row-iterable.d.ts} +6 -6
  513. package/dist/src/util/array-row-iterable.d.ts.map +1 -0
  514. package/dist/src/util/{working-table-iterable.js → array-row-iterable.js} +6 -6
  515. package/dist/src/util/array-row-iterable.js.map +1 -0
  516. package/dist/src/vtab/events.d.ts +3 -0
  517. package/dist/src/vtab/events.d.ts.map +1 -1
  518. package/dist/src/vtab/events.js.map +1 -1
  519. package/dist/src/vtab/manifest.d.ts +15 -0
  520. package/dist/src/vtab/manifest.d.ts.map +1 -1
  521. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  522. package/dist/src/vtab/memory/layer/manager.js +3 -69
  523. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  524. package/dist/src/vtab/memory/module.d.ts +16 -1
  525. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  526. package/dist/src/vtab/memory/module.js +62 -2
  527. package/dist/src/vtab/memory/module.js.map +1 -1
  528. package/dist/src/vtab/module.d.ts +26 -2
  529. package/dist/src/vtab/module.d.ts.map +1 -1
  530. package/dist/src/vtab/table.d.ts +8 -1
  531. package/dist/src/vtab/table.d.ts.map +1 -1
  532. package/dist/src/vtab/table.js.map +1 -1
  533. package/package.json +3 -3
  534. package/dist/src/util/working-table-iterable.d.ts.map +0 -1
  535. package/dist/src/util/working-table-iterable.js.map +0 -1
@@ -33,8 +33,9 @@ import { DistinctNode } from '../../nodes/distinct-node.js';
33
33
  import { ProjectNode } from '../../nodes/project-node.js';
34
34
  import { RetrieveNode } from '../../nodes/retrieve-node.js';
35
35
  import { AliasNode } from '../../nodes/alias-node.js';
36
- import { CapabilityDetectors, PlanNodeCharacteristics } from '../../framework/characteristics.js';
36
+ import { PlanNodeCharacteristics } from '../../framework/characteristics.js';
37
37
  import { normalizePredicate } from '../../analysis/predicate-normalizer.js';
38
+ import { collectPredicateAttributeIds } from '../../analysis/predicate-dependencies.js';
38
39
  import { collectBindingsInExpr } from '../../analysis/binding-collector.js';
39
40
  import { extractConstraints, createTableInfoFromNode } from '../../analysis/constraint-extractor.js';
40
41
  import { isIndexStyleContext } from '../shared/index-style-context.js';
@@ -132,31 +133,20 @@ function tryPushDown(child, predicate, scope) {
132
133
  }
133
134
  function canPushAcrossProject(project, predicate) {
134
135
  // If project preserves input columns and all predicate-attested attributes exist below, it's safe.
136
+ // The dependency set spans sub-query operands too: a correlated reference inside
137
+ // `exists (…)` reads an outer attribute exactly like a top-level one does, and pushing
138
+ // below the Project that mints it strands it at runtime.
139
+ // NOTE: this refuses one case it could allow — a correlation onto a GRANDPARENT scope's
140
+ // attribute, which the Project neither produces nor consumes, so the push would be safe.
141
+ // It is refused because the gate's rule is "must exist below", and an outer-scope id does
142
+ // not. Buying it back means distinguishing "outer-scope id" from "id this Project defines",
143
+ // e.g. by testing membership in the Project's own output attributes first.
135
144
  const sourceAttrIds = new Set(project.source.getAttributes().map(a => a.id));
136
- const referenced = collectReferencedAttributeIds(predicate);
145
+ const referenced = collectPredicateAttributeIds(predicate);
137
146
  for (const id of referenced) {
138
147
  if (!sourceAttrIds.has(id))
139
148
  return false;
140
149
  }
141
150
  return true;
142
151
  }
143
- function collectReferencedAttributeIds(expr) {
144
- const ids = new Set();
145
- walkExpr(expr, node => {
146
- if (CapabilityDetectors.isColumnReference(node)) {
147
- ids.add(node.attributeId);
148
- }
149
- });
150
- return ids;
151
- }
152
- function walkExpr(expr, fn) {
153
- fn(expr);
154
- for (const c of expr.getChildren()) {
155
- // Only scalar children
156
- if (!isRelationalNode(c)) {
157
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
158
- walkExpr(c, fn);
159
- }
160
- }
161
- }
162
152
  //# sourceMappingURL=rule-predicate-pushdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rule-predicate-pushdown.js","sourceRoot":"","sources":["../../../../../src/planner/rules/predicate/rule-predicate-pushdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-predicate-pushdown.js","sourceRoot":"","sources":["../../../../../src/planner/rules/predicate/rule-predicate-pushdown.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  * decline.
11
11
  */
12
12
  import type { RelationalPlanNode } from '../../nodes/plan-node.js';
13
- import { SeqScanNode, IndexScanNode } from '../../nodes/table-access-nodes.js';
13
+ import { SeqScanNode, IndexScanNode, IndexSeekNode } from '../../nodes/table-access-nodes.js';
14
14
  import { ProjectNode } from '../../nodes/project-node.js';
15
15
  import type { BestAccessPlanRequest, PredicateConstraint } from '../../../vtab/best-access-plan.js';
16
16
  import type { TableSchema } from '../../../schema/table.js';
@@ -24,8 +24,21 @@ export type AccessLeafNode = SeqScanNode | IndexScanNode;
24
24
  export declare function isTrivialProject(project: ProjectNode): boolean;
25
25
  /**
26
26
  * Walk down from `chainRoot` toward the access leaf, descending only through
27
- * Alias / trivial Project / Filter wrappers. Returns null when anything else
28
- * appears before an admissible leaf.
27
+ * Alias / trivial Project / Filter wrappers, admitting constrained seek leaves
28
+ * as well as every-row walks. Returns null when anything else appears before
29
+ * an admissible leaf.
30
+ *
31
+ * Callers that can honour an `IndexSeekNode`'s pushed predicates (by
32
+ * re-applying `pushedConstraints` above their rewrite) use this directly;
33
+ * callers that would silently drop them use {@link peelToAccessLeaf}.
34
+ */
35
+ export declare function peelToSeekableAccessLeaf(chainRoot: RelationalPlanNode): AccessLeafNode | IndexSeekNode | null;
36
+ /**
37
+ * {@link peelToSeekableAccessLeaf} restricted to unconstrained walks. An
38
+ * `IndexSeekNode` peels to null: its `FilterInfo` is the sole enforcer of the
39
+ * predicates recorded in `pushedConstraints`, so a caller that replaces the
40
+ * leaf without re-applying them (`index-nested-loop`, which would otherwise
41
+ * re-plan a leaf that already has constraints) must decline on it.
29
42
  */
30
43
  export declare function peelToAccessLeaf(chainRoot: RelationalPlanNode): AccessLeafNode | null;
31
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"access-leaf.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/shared/access-leaf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAY,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,KAAK,EAAE,qBAAqB,EAAc,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAChH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,oFAAoF;AACpF,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,GAAG,cAAc,GAAG,IAAI,CAoBrF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC3B,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,kBAAkB,GACzB,kBAAkB,CAOpB;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAChC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,SAAS,mBAAmB,EAAE,GACrC,qBAAqB,CAYvB"}
1
+ {"version":3,"file":"access-leaf.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/shared/access-leaf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAY,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAE9F,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,KAAK,EAAE,qBAAqB,EAAc,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAChH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,oFAAoF;AACpF,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,kBAAkB,GAAG,cAAc,GAAG,aAAa,GAAG,IAAI,CAoB7G;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,GAAG,cAAc,GAAG,IAAI,CAGrF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC3B,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,kBAAkB,GACzB,kBAAkB,CAOpB;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAChC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,SAAS,mBAAmB,EAAE,GACrC,qBAAqB,CAYvB"}
@@ -10,7 +10,7 @@
10
10
  * decline.
11
11
  */
12
12
  import { isRelationalNode } from '../../nodes/plan-node.js';
13
- import { SeqScanNode, IndexScanNode } from '../../nodes/table-access-nodes.js';
13
+ import { SeqScanNode, IndexScanNode, IndexSeekNode } from '../../nodes/table-access-nodes.js';
14
14
  import { AliasNode } from '../../nodes/alias-node.js';
15
15
  import { ProjectNode } from '../../nodes/project-node.js';
16
16
  import { FilterNode } from '../../nodes/filter.js';
@@ -25,14 +25,19 @@ export function isTrivialProject(project) {
25
25
  }
26
26
  /**
27
27
  * Walk down from `chainRoot` toward the access leaf, descending only through
28
- * Alias / trivial Project / Filter wrappers. Returns null when anything else
29
- * appears before an admissible leaf.
28
+ * Alias / trivial Project / Filter wrappers, admitting constrained seek leaves
29
+ * as well as every-row walks. Returns null when anything else appears before
30
+ * an admissible leaf.
31
+ *
32
+ * Callers that can honour an `IndexSeekNode`'s pushed predicates (by
33
+ * re-applying `pushedConstraints` above their rewrite) use this directly;
34
+ * callers that would silently drop them use {@link peelToAccessLeaf}.
30
35
  */
31
- export function peelToAccessLeaf(chainRoot) {
36
+ export function peelToSeekableAccessLeaf(chainRoot) {
32
37
  let cursor = chainRoot;
33
38
  let safety = 16;
34
39
  while (safety-- > 0) {
35
- if (cursor instanceof SeqScanNode || cursor instanceof IndexScanNode)
40
+ if (cursor instanceof SeqScanNode || cursor instanceof IndexScanNode || cursor instanceof IndexSeekNode)
36
41
  return cursor;
37
42
  if (cursor instanceof AliasNode) {
38
43
  cursor = cursor.source;
@@ -50,6 +55,17 @@ export function peelToAccessLeaf(chainRoot) {
50
55
  }
51
56
  return null;
52
57
  }
58
+ /**
59
+ * {@link peelToSeekableAccessLeaf} restricted to unconstrained walks. An
60
+ * `IndexSeekNode` peels to null: its `FilterInfo` is the sole enforcer of the
61
+ * predicates recorded in `pushedConstraints`, so a caller that replaces the
62
+ * leaf without re-applying them (`index-nested-loop`, which would otherwise
63
+ * re-plan a leaf that already has constraints) must decline on it.
64
+ */
65
+ export function peelToAccessLeaf(chainRoot) {
66
+ const leaf = peelToSeekableAccessLeaf(chainRoot);
67
+ return leaf instanceof IndexSeekNode ? null : leaf;
68
+ }
53
69
  /**
54
70
  * Rebuild the chain `chainRoot → … → oldLeaf` with `oldLeaf` replaced by
55
71
  * `newLeaf`, reconstructing each intermediate node via `withChildren` (same
@@ -1 +1 @@
1
- {"version":3,"file":"access-leaf.js","sourceRoot":"","sources":["../../../../../src/planner/rules/shared/access-leaf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAO/D;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAoB;IACpD,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,mBAAmB,CAAC,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA6B;IAC7D,IAAI,MAAM,GAAuB,SAAS,CAAC;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,OAAO,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,MAAM,YAAY,WAAW,IAAI,MAAM,YAAY,aAAa;YAAE,OAAO,MAAM,CAAC;QACpF,IAAI,MAAM,YAAY,SAAS,EAAE,CAAC;YACjC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,SAAS;QACV,CAAC;QACD,IAAI,MAAM,YAAY,WAAW,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,SAAS;QACV,CAAC;QACD,IAAI,MAAM,YAAY,UAAU,EAAE,CAAC;YAClC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,SAAS;QACV,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC3B,SAA6B,EAC7B,OAA2B,EAC3B,OAA2B;IAE3B,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,MAAM,WAAW,GAAe,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CACnE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1E,OAAO,SAAS,CAAC,YAAY,CAAC,WAAW,CAAuB,CAAC;AAClE,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,iBAAiB,CAChC,WAAwB,EACxB,SAA6B,EAC7B,OAAuC;IAEvC,OAAO;QACN,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACjD,KAAK;YACL,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,WAAW;YACrB,YAAY,EAAE,GAAG,CAAC,UAAU,IAAI,KAAK;YACrC,QAAQ,EAAE,GAAG,CAAC,UAAU,IAAI,KAAK;SAClB,CAAA,CAAC;QACjB,OAAO;QACP,aAAa,EAAE,SAAS;KACxB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"access-leaf.js","sourceRoot":"","sources":["../../../../../src/planner/rules/shared/access-leaf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAO/D;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAoB;IACpD,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,mBAAmB,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAA6B;IACrE,IAAI,MAAM,GAAuB,SAAS,CAAC;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,OAAO,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,MAAM,YAAY,WAAW,IAAI,MAAM,YAAY,aAAa,IAAI,MAAM,YAAY,aAAa;YAAE,OAAO,MAAM,CAAC;QACvH,IAAI,MAAM,YAAY,SAAS,EAAE,CAAC;YACjC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,SAAS;QACV,CAAC;QACD,IAAI,MAAM,YAAY,WAAW,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,SAAS;QACV,CAAC;QACD,IAAI,MAAM,YAAY,UAAU,EAAE,CAAC;YAClC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,SAAS;QACV,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA6B;IAC7D,MAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,IAAI,YAAY,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC3B,SAA6B,EAC7B,OAA2B,EAC3B,OAA2B;IAE3B,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,MAAM,WAAW,GAAe,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CACnE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1E,OAAO,SAAS,CAAC,YAAY,CAAC,WAAW,CAAuB,CAAC;AAClE,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,iBAAiB,CAChC,WAAwB,EACxB,SAA6B,EAC7B,OAAuC;IAEvC,OAAO;QACN,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACjD,KAAK;YACL,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,WAAW;YACrB,YAAY,EAAE,GAAG,CAAC,UAAU,IAAI,KAAK;YACrC,QAAQ,EAAE,GAAG,CAAC,UAAU,IAAI,KAAK;SAClB,CAAA,CAAC;QACjB,OAAO;QACP,aAAa,EAAE,SAAS;KACxB,CAAC;AACH,CAAC"}
@@ -77,7 +77,7 @@ export function ruleAntiJoinFkEmpty(node, _context) {
77
77
  // IND `L.fk ⊆ R.pk` doesn't guarantee a match in the filtered relation. A
78
78
  // projection is peeled (it never drops rows); its column renaming is already
79
79
  // accounted for by the mapping above.
80
- if (!isRowPreservingPathToTable(node.right, { throughProject: true }))
80
+ if (!isRowPreservingPathToTable(node.right))
81
81
  return null;
82
82
  // Refuse to fold to Empty when either participating subtree carries a write —
83
83
  // the anti-join collapses to EmptyRelation(L's attrs), dropping both sides.
@@ -1 +1 @@
1
- {"version":3,"file":"rule-anti-join-fk-empty.js","sourceRoot":"","sources":["../../../../../src/planner/rules/subquery/rule-anti-join-fk-empty.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-anti-join-fk-empty.js","sourceRoot":"","sources":["../../../../../src/planner/rules/subquery/rule-anti-join-fk-empty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACrI,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,GAAG,GAAG,YAAY,CAAC,mCAAmC,CAAC,CAAC;AAE9D,MAAM,UAAU,mBAAmB,CAAC,IAAc,EAAE,QAAoB;IACvE,IAAI,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACnF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,+EAA+E;IAC/E,+EAA+E;IAC/E,6EAA6E;IAC7E,4CAA4C;IAC5C,MAAM,WAAW,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;IAC7E,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;IAChF,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAEnD,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;IACtC,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;IACxC,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IACvF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,0EAA0E;IAC1E,wEAAwE;IACxE,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEhC,0EAA0E;IAC1E,0EAA0E;IAC1E,6EAA6E;IAC7E,sCAAsC;IACtC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzD,8EAA8E;IAC9E,4EAA4E;IAC5E,IAAI,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;WACxD,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,sEAAsE,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACb,CAAC;IAED,GAAG,CAAC,+CAA+C,EAClD,UAAU,CAAC,IAAI,EACf,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACrE,WAAW,CAAC,IAAI,CAChB,CAAC;IAEF,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1F,CAAC"}
@@ -72,7 +72,7 @@ export function ruleSemiJoinFkTrivial(node, _context) {
72
72
  // subquery verbatim, so R is a `Project` over the parent table, and a
73
73
  // projection never drops rows. Its column renaming is already accounted for
74
74
  // by the mapping above.
75
- if (!isRowPreservingPathToTable(node.right, { throughProject: true }))
75
+ if (!isRowPreservingPathToTable(node.right))
76
76
  return null;
77
77
  // Refuse to drop the R side when it carries a write — the rewrite replaces
78
78
  // the semi-join with L (or Filter(L)) and the R subtree is dropped entirely.
@@ -1 +1 @@
1
- {"version":3,"file":"rule-semi-join-fk-trivial.js","sourceRoot":"","sources":["../../../../../src/planner/rules/subquery/rule-semi-join-fk-trivial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-semi-join-fk-trivial.js","sourceRoot":"","sources":["../../../../../src/planner/rules/subquery/rule-semi-join-fk-trivial.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACrI,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,GAAG,GAAG,YAAY,CAAC,qCAAqC,CAAC,CAAC;AAEhE,MAAM,UAAU,qBAAqB,CAAC,IAAc,EAAE,QAAoB;IACzE,IAAI,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACnF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,+EAA+E;IAC/E,+EAA+E;IAC/E,6EAA6E;IAC7E,4CAA4C;IAC5C,MAAM,WAAW,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,iBAAiB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;IAChF,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAEnD,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;IACtC,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;IACxC,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IACvF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,0EAA0E;IAC1E,4EAA4E;IAC5E,wEAAwE;IACxE,sEAAsE;IACtE,4EAA4E;IAC5E,wBAAwB;IACxB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzD,2EAA2E;IAC3E,6EAA6E;IAC7E,IAAI,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrB,GAAG,CAAC,2EAA2E,EAC9E,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,6EAA6E;IAC7E,4EAA4E;IAC5E,wEAAwE;IACxE,kCAAkC;IAClC,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAClF,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,GAAG,CAAC,8EAA8E,EACjF,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAC/B,KAAY,EACZ,SAA+B,EAC/B,IAA2B;IAE3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,SAAS,GAAqB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAClD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAmB,IAAI,CAAC,YAAY;YAChD,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;YAC/D,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAChF,MAAM,UAAU,GAAkB;YACjC,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,aAAa;YACvB,IAAI,EAAE,OAAO;SACb,CAAC;QACF,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,MAAM,GAAmB;YAC9B,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,GAAG,CAAC,UAAU;YACpB,KAAK,EAAE,GAAG,CAAC,UAAU;SACrB,CAAC;QACF,OAAO,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { PlanningContext } from './planning-context.js';
2
+ /**
3
+ * The planning context ANY stored body (view / materialized-view derivation) plans under,
4
+ * on either the read or the write path. Isolates the whole naming environment the caller
5
+ * could otherwise inject into the body, so a stored body binds the same objects on every
6
+ * reference:
7
+ *
8
+ * - `schemaPath` → the object's own home path — the database default schema-resolution
9
+ * order rooted at `schemaName` ({@link import('../core/database.js').Database._homeSchemaPath}),
10
+ * independent of the referencing statement's search path. A body that declares its own
11
+ * `with schema` path overrides this: on the read path its top-level `SelectStmt.schemaPath`
12
+ * applies right after this call; on the write path `building/select.ts` applies the same
13
+ * path carried on the fragment's marker. That override is deliberately NOT folded in here
14
+ * — this function takes only a schema name and has no access to the body AST;
15
+ * - `cteNodes` → cleared, so a caller `with` clause whose name matches a body source
16
+ * cannot shadow it. The body's OWN leading `with` clause still resolves — it is built
17
+ * by `buildWithContext` from the body statement, not inherited. Clearing here is what
18
+ * closes the write path: `select-context.ts` falls back to `ctx.cteNodes` whenever the
19
+ * explicit `parentCTEs` argument is empty, so passing an empty map is not sufficient.
20
+ * - `cteReferenceCache` → cleared, so the body's own CTE references get fresh
21
+ * `CTEReferenceNode`s. The cache is keyed by bare `cteName:alias`, so a caller CTE and
22
+ * a body-local CTE that share a name would otherwise collide on the same entry and the
23
+ * body would read the caller's relation.
24
+ * - `storedBodyOf` → `schemaName`, marking this context AS that body's home environment.
25
+ * A write through a view is not executed as the body plan — it is *lowered* into a
26
+ * base-table INSERT/UPDATE/DELETE, and definition-derived fragments copied into that
27
+ * lowered statement are planned on the CALLER's context. Such a fragment carries a
28
+ * {@link import('../parser/ast.js').StoredBodyEnv} marker instead, and
29
+ * `building/select.ts` re-enters the home environment through this function when it
30
+ * meets one. `storedBodyOf` is what makes that marker inert while the body itself is
31
+ * being planned here (the context already IS the home environment), so the body's own
32
+ * `with` clause survives.
33
+ *
34
+ * Callers that plan a body derived from the caller's own statement (an ephemeral write
35
+ * target, a rewritten base op) must NOT use this — see `bodyPlanningContext` in
36
+ * `mutation/body-context.ts`, which guards the ephemeral case and delegates here otherwise.
37
+ *
38
+ * The OTHER kind of stored, schema-authored SQL — a column `DEFAULT`, a generated-column
39
+ * expression, a `CHECK` constraint, a synthesized foreign-key probe — is built INLINE in
40
+ * the caller's statement rather than re-entered as its own plan, so it keeps the caller's
41
+ * scope and never sets the `storedBodyOf` marker; it clears the CTE namespace and narrows
42
+ * the schema path more strictly than here (the owning table's schema ONLY, with no
43
+ * default-path fallback). See the sibling
44
+ * {@link import('./building/schema-authored-context.js').schemaAuthoredContext}.
45
+ *
46
+ * Lives at the top level of `planner/` (not under `building/` or `mutation/`) because both
47
+ * directories consume it: `building/select.ts` on the read path, `mutation/body-context.ts`
48
+ * on the write path. Neither should import from the other for this.
49
+ *
50
+ * NOTE: the caller's `scope` and `aggregates` are deliberately still inherited. A stored body
51
+ * only contains names that resolved when it was created, and its own FROM shadows the caller's
52
+ * scope, so neither is exploitable today (probed: a view body aggregate built inside a caller
53
+ * HAVING context does not match the caller's aggregate). If a future feature lets a body name
54
+ * resolve outward — a parameterized view, a lateral/correlated stored body — clear them here too.
55
+ */
56
+ export declare function storedBodyContext(ctx: PlanningContext, schemaName: string): PlanningContext;
57
+ //# sourceMappingURL=stored-body-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stored-body-context.d.ts","sourceRoot":"","sources":["../../../src/planner/stored-body-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,CAQ3F"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * The planning context ANY stored body (view / materialized-view derivation) plans under,
3
+ * on either the read or the write path. Isolates the whole naming environment the caller
4
+ * could otherwise inject into the body, so a stored body binds the same objects on every
5
+ * reference:
6
+ *
7
+ * - `schemaPath` → the object's own home path — the database default schema-resolution
8
+ * order rooted at `schemaName` ({@link import('../core/database.js').Database._homeSchemaPath}),
9
+ * independent of the referencing statement's search path. A body that declares its own
10
+ * `with schema` path overrides this: on the read path its top-level `SelectStmt.schemaPath`
11
+ * applies right after this call; on the write path `building/select.ts` applies the same
12
+ * path carried on the fragment's marker. That override is deliberately NOT folded in here
13
+ * — this function takes only a schema name and has no access to the body AST;
14
+ * - `cteNodes` → cleared, so a caller `with` clause whose name matches a body source
15
+ * cannot shadow it. The body's OWN leading `with` clause still resolves — it is built
16
+ * by `buildWithContext` from the body statement, not inherited. Clearing here is what
17
+ * closes the write path: `select-context.ts` falls back to `ctx.cteNodes` whenever the
18
+ * explicit `parentCTEs` argument is empty, so passing an empty map is not sufficient.
19
+ * - `cteReferenceCache` → cleared, so the body's own CTE references get fresh
20
+ * `CTEReferenceNode`s. The cache is keyed by bare `cteName:alias`, so a caller CTE and
21
+ * a body-local CTE that share a name would otherwise collide on the same entry and the
22
+ * body would read the caller's relation.
23
+ * - `storedBodyOf` → `schemaName`, marking this context AS that body's home environment.
24
+ * A write through a view is not executed as the body plan — it is *lowered* into a
25
+ * base-table INSERT/UPDATE/DELETE, and definition-derived fragments copied into that
26
+ * lowered statement are planned on the CALLER's context. Such a fragment carries a
27
+ * {@link import('../parser/ast.js').StoredBodyEnv} marker instead, and
28
+ * `building/select.ts` re-enters the home environment through this function when it
29
+ * meets one. `storedBodyOf` is what makes that marker inert while the body itself is
30
+ * being planned here (the context already IS the home environment), so the body's own
31
+ * `with` clause survives.
32
+ *
33
+ * Callers that plan a body derived from the caller's own statement (an ephemeral write
34
+ * target, a rewritten base op) must NOT use this — see `bodyPlanningContext` in
35
+ * `mutation/body-context.ts`, which guards the ephemeral case and delegates here otherwise.
36
+ *
37
+ * The OTHER kind of stored, schema-authored SQL — a column `DEFAULT`, a generated-column
38
+ * expression, a `CHECK` constraint, a synthesized foreign-key probe — is built INLINE in
39
+ * the caller's statement rather than re-entered as its own plan, so it keeps the caller's
40
+ * scope and never sets the `storedBodyOf` marker; it clears the CTE namespace and narrows
41
+ * the schema path more strictly than here (the owning table's schema ONLY, with no
42
+ * default-path fallback). See the sibling
43
+ * {@link import('./building/schema-authored-context.js').schemaAuthoredContext}.
44
+ *
45
+ * Lives at the top level of `planner/` (not under `building/` or `mutation/`) because both
46
+ * directories consume it: `building/select.ts` on the read path, `mutation/body-context.ts`
47
+ * on the write path. Neither should import from the other for this.
48
+ *
49
+ * NOTE: the caller's `scope` and `aggregates` are deliberately still inherited. A stored body
50
+ * only contains names that resolved when it was created, and its own FROM shadows the caller's
51
+ * scope, so neither is exploitable today (probed: a view body aggregate built inside a caller
52
+ * HAVING context does not match the caller's aggregate). If a future feature lets a body name
53
+ * resolve outward — a parameterized view, a lateral/correlated stored body — clear them here too.
54
+ */
55
+ export function storedBodyContext(ctx, schemaName) {
56
+ return {
57
+ ...ctx,
58
+ schemaPath: ctx.db._homeSchemaPath(schemaName),
59
+ cteNodes: undefined,
60
+ cteReferenceCache: undefined,
61
+ storedBodyOf: schemaName,
62
+ };
63
+ }
64
+ //# sourceMappingURL=stored-body-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stored-body-context.js","sourceRoot":"","sources":["../../../src/planner/stored-body-context.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAoB,EAAE,UAAkB;IACzE,OAAO;QACN,GAAG,GAAG;QACN,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC;QAC9C,QAAQ,EAAE,SAAS;QACnB,iBAAiB,EAAE,SAAS;QAC5B,YAAY,EAAE,UAAU;KACxB,CAAC;AACH,CAAC"}
@@ -13,11 +13,15 @@
13
13
  * underlying base table (no row-reducing wrapper between the join and the
14
14
  * table).
15
15
  *
16
- * `extractTableSchema` and `checkFkPkAlignment` live in `key-utils.ts` because
17
- * they also serve non-IND callers (key coverage, FD propagation). This file
18
- * adds the IND-specific extensions: a covering-FK lookup that *returns* the
19
- * matched FK (so callers can inspect nullability), the output-column →
20
- * table-column mapping, and the row-preserving path walker.
16
+ * `checkFkPkAlignment` lives in `key-utils.ts` because it also serves non-IND
17
+ * callers (key coverage, FD propagation). This file adds the IND-specific
18
+ * extensions: a covering-FK lookup that *returns* the matched FK (so callers can
19
+ * inspect nullability), the output-column → table-column mapping, and the
20
+ * row-preserving path walker.
21
+ *
22
+ * FK-alignment callers resolve a subtree with `resolveTableColumnMapping` here,
23
+ * never with `key-utils.ts`'s `extractTableSchema` — a bare schema loses the
24
+ * output-column → table-column map the alignment check needs.
21
25
  */
22
26
  import type { TableSchema, ForeignKeyConstraintSchema } from '../../schema/table.js';
23
27
  import type { InclusionDependency, RelationalPlanNode } from '../nodes/plan-node.js';
@@ -41,6 +45,12 @@ export interface CoveringFKMatch {
41
45
  * Returns the matched FK plus a nullability bit (true iff any FK child column
42
46
  * is nullable).
43
47
  *
48
+ * **`childEquiCols` / `parentEquiCols` must be BASE-TABLE column indices** —
49
+ * same contract as `checkFkPkAlignment`. Translate a subtree's output column
50
+ * positions through {@link resolveTableColumnMapping} / {@link mapColumnsToTable}
51
+ * first; an output index compared against an FK declaration silently names a
52
+ * different column whenever a projection sits between the table and the join.
53
+ *
44
54
  * Alignment is *positional*: for each `i`, the equi-pair partner of
45
55
  * `fk.columns[i]` must equal `fk.referencedColumns[i]`. A composite FK
46
56
  * `(fa, fb) REFERENCES p(a, b)` guarantees `fa → a` and `fb → b` in that
@@ -120,25 +130,23 @@ export declare function mapColumnsToTable(cols: ReadonlyArray<number>, mapping:
120
130
  *
121
131
  * Allowed wrappers: TableReferenceNode (base), RetrieveNode whose pipeline is
122
132
  * the bare TableReferenceNode (no pushed-down pipeline filter), AliasNode,
123
- * SortNode — all preserve row count *and* attribute-id mapping of their
124
- * source. Anything else (Filter, LimitOffset, Distinct, Join, Aggregate,
125
- * Window, CTE, SetOperation, …) disqualifies.
133
+ * SortNode, ProjectNode — none of them can remove a row. Anything else (Filter,
134
+ * LimitOffset, Distinct, Join, Aggregate, Window, CTE, SetOperation, …)
135
+ * disqualifies.
126
136
  *
127
- * `ProjectNode` is excluded by default even though a projection never removes
128
- * rows: it may rename, reorder, or drop columns, which breaks the
129
- * table-column-index ≡ output-index assumption callers who pass raw output
130
- * indices to the FK→PK alignment check rely on. Callers that translate their
131
- * column indices through {@link resolveTableColumnMapping} first are immune to
132
- * that and pass `throughProject: true` to peel projections as well.
137
+ * This predicate answers *rows only*. A `ProjectNode` may rename, reorder, or
138
+ * drop **columns**, so a caller that also pairs column indices against the base
139
+ * table's schema (FK→PK alignment) must translate those indices through
140
+ * {@link resolveTableColumnMapping} / {@link mapColumnsToTable} first — this
141
+ * function makes no claim that output index ≡ table column index. Every current
142
+ * caller does exactly that.
133
143
  *
134
144
  * Used by: INNER join elimination (PK side must be unfiltered), aggregate
135
145
  * elimination over FK-covered joins (same reason — a row-reducing wrapper on
136
146
  * the eliminable side would have dropped rows the FK→PK guarantee assumes are
137
- * present), and the semi/anti-join FK folds (which opt into `throughProject`,
138
- * since the uncorrelated `IN` arm hands the join a bare `Project` over the
139
- * parent table).
147
+ * present), the fan-out lookup join's `atMostOne-inner` branch, and the
148
+ * semi/anti-join FK folds (whose uncorrelated `IN` arm hands the join a bare
149
+ * `Project` over the parent table).
140
150
  */
141
- export declare function isRowPreservingPathToTable(node: RelationalPlanNode, options?: {
142
- throughProject?: boolean;
143
- }): boolean;
151
+ export declare function isRowPreservingPathToTable(node: RelationalPlanNode): boolean;
144
152
  //# sourceMappingURL=ind-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ind-utils.d.ts","sourceRoot":"","sources":["../../../../src/planner/util/ind-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAErF,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAOrF;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,0BAA0B,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC/B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,WAAW,EACzB,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,EACpC,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,GACnC,eAAe,GAAG,SAAS,CAkD7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,WAAW,EAAE,WAAW,EACxB,EAAE,EAAE,0BAA0B,GAC5B,OAAO,CAKT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACtC,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,GAC5E,mBAAmB,EAAE,CA4CvB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC5C;AAkBD;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,SAAS,CAWlG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,OAAO,EAAE,kBAAkB,GACzB,MAAM,EAAE,GAAG,SAAS,CAQtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,0BAA0B,CACzC,IAAI,EAAE,kBAAkB,EACxB,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,OAAO,CAeT"}
1
+ {"version":3,"file":"ind-utils.d.ts","sourceRoot":"","sources":["../../../../src/planner/util/ind-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAErF,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAOrF;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,0BAA0B,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gBAAgB,CAC/B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,WAAW,EACzB,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,EACpC,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,GACnC,eAAe,GAAG,SAAS,CAkD7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,WAAW,EAAE,WAAW,EACxB,EAAE,EAAE,0BAA0B,GAC5B,OAAO,CAKT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACtC,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,GAC5E,mBAAmB,EAAE,CA4CvB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC5C;AAkBD;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,SAAS,CAWlG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,OAAO,EAAE,kBAAkB,GACzB,MAAM,EAAE,GAAG,SAAS,CAQtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAa5E"}
@@ -13,11 +13,15 @@
13
13
  * underlying base table (no row-reducing wrapper between the join and the
14
14
  * table).
15
15
  *
16
- * `extractTableSchema` and `checkFkPkAlignment` live in `key-utils.ts` because
17
- * they also serve non-IND callers (key coverage, FD propagation). This file
18
- * adds the IND-specific extensions: a covering-FK lookup that *returns* the
19
- * matched FK (so callers can inspect nullability), the output-column →
20
- * table-column mapping, and the row-preserving path walker.
16
+ * `checkFkPkAlignment` lives in `key-utils.ts` because it also serves non-IND
17
+ * callers (key coverage, FD propagation). This file adds the IND-specific
18
+ * extensions: a covering-FK lookup that *returns* the matched FK (so callers can
19
+ * inspect nullability), the output-column → table-column mapping, and the
20
+ * row-preserving path walker.
21
+ *
22
+ * FK-alignment callers resolve a subtree with `resolveTableColumnMapping` here,
23
+ * never with `key-utils.ts`'s `extractTableSchema` — a bare schema loses the
24
+ * output-column → table-column map the alignment check needs.
21
25
  */
22
26
  import { resolveReferencedColumns } from '../../schema/table.js';
23
27
  import { TableReferenceNode } from '../nodes/reference.js';
@@ -34,6 +38,12 @@ import { ProjectNode } from '../nodes/project-node.js';
34
38
  * Returns the matched FK plus a nullability bit (true iff any FK child column
35
39
  * is nullable).
36
40
  *
41
+ * **`childEquiCols` / `parentEquiCols` must be BASE-TABLE column indices** —
42
+ * same contract as `checkFkPkAlignment`. Translate a subtree's output column
43
+ * positions through {@link resolveTableColumnMapping} / {@link mapColumnsToTable}
44
+ * first; an output index compared against an FK declaration silently names a
45
+ * different column whenever a projection sits between the table and the join.
46
+ *
37
47
  * Alignment is *positional*: for each `i`, the equi-pair partner of
38
48
  * `fk.columns[i]` must equal `fk.referencedColumns[i]`. A composite FK
39
49
  * `(fa, fb) REFERENCES p(a, b)` guarantees `fa → a` and `fb → b` in that
@@ -241,41 +251,40 @@ export function mapColumnsToTable(cols, mapping) {
241
251
  *
242
252
  * Allowed wrappers: TableReferenceNode (base), RetrieveNode whose pipeline is
243
253
  * the bare TableReferenceNode (no pushed-down pipeline filter), AliasNode,
244
- * SortNode — all preserve row count *and* attribute-id mapping of their
245
- * source. Anything else (Filter, LimitOffset, Distinct, Join, Aggregate,
246
- * Window, CTE, SetOperation, …) disqualifies.
254
+ * SortNode, ProjectNode — none of them can remove a row. Anything else (Filter,
255
+ * LimitOffset, Distinct, Join, Aggregate, Window, CTE, SetOperation, …)
256
+ * disqualifies.
247
257
  *
248
- * `ProjectNode` is excluded by default even though a projection never removes
249
- * rows: it may rename, reorder, or drop columns, which breaks the
250
- * table-column-index ≡ output-index assumption callers who pass raw output
251
- * indices to the FK→PK alignment check rely on. Callers that translate their
252
- * column indices through {@link resolveTableColumnMapping} first are immune to
253
- * that and pass `throughProject: true` to peel projections as well.
258
+ * This predicate answers *rows only*. A `ProjectNode` may rename, reorder, or
259
+ * drop **columns**, so a caller that also pairs column indices against the base
260
+ * table's schema (FK→PK alignment) must translate those indices through
261
+ * {@link resolveTableColumnMapping} / {@link mapColumnsToTable} first — this
262
+ * function makes no claim that output index ≡ table column index. Every current
263
+ * caller does exactly that.
254
264
  *
255
265
  * Used by: INNER join elimination (PK side must be unfiltered), aggregate
256
266
  * elimination over FK-covered joins (same reason — a row-reducing wrapper on
257
267
  * the eliminable side would have dropped rows the FK→PK guarantee assumes are
258
- * present), and the semi/anti-join FK folds (which opt into `throughProject`,
259
- * since the uncorrelated `IN` arm hands the join a bare `Project` over the
260
- * parent table).
268
+ * present), the fan-out lookup join's `atMostOne-inner` branch, and the
269
+ * semi/anti-join FK folds (whose uncorrelated `IN` arm hands the join a bare
270
+ * `Project` over the parent table).
261
271
  */
262
- export function isRowPreservingPathToTable(node, options = {}) {
272
+ export function isRowPreservingPathToTable(node) {
263
273
  if (node instanceof TableReferenceNode)
264
274
  return true;
265
275
  if (node instanceof RetrieveNode) {
266
- // NOTE: `throughProject` deliberately stops at the Retrieve boundary — a
267
- // pushed-down pipeline is only accepted when it is the bare table. If a
268
- // module ever accepts projection pushdown on a semi/anti-join parent side,
269
- // this declines a fold it could take; recurse with `options` then.
276
+ // NOTE: the walk deliberately stops at the Retrieve boundary — a pushed-down
277
+ // pipeline is only accepted when it is the bare table. If a module ever
278
+ // accepts projection pushdown on a semi/anti-join parent side, this declines
279
+ // a fold it could take; recurse into the pipeline then.
270
280
  return node.source instanceof TableReferenceNode;
271
281
  }
272
282
  if (node instanceof AliasNode)
273
- return isRowPreservingPathToTable(node.source, options);
283
+ return isRowPreservingPathToTable(node.source);
274
284
  if (node instanceof SortNode)
275
- return isRowPreservingPathToTable(node.source, options);
276
- if (options.throughProject && node instanceof ProjectNode) {
277
- return isRowPreservingPathToTable(node.source, options);
278
- }
285
+ return isRowPreservingPathToTable(node.source);
286
+ if (node instanceof ProjectNode)
287
+ return isRowPreservingPathToTable(node.source);
279
288
  return false;
280
289
  }
281
290
  //# sourceMappingURL=ind-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ind-utils.js","sourceRoot":"","sources":["../../../../src/planner/util/ind-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ind-utils.js","sourceRoot":"","sources":["../../../../src/planner/util/ind-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAcvD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,gBAAgB,CAC/B,WAAwB,EACxB,YAAyB,EACzB,aAAoC,EACpC,cAAqC;IAErC,IAAI,CAAC,WAAW,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACrE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAEjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAE9E,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,SAAS;QACnF,IAAI,YAAY,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC7D,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,YAAY,CAAC,oBAAoB,CAAC,MAAM;YAAE,SAAS;QAC7E,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM;YAAE,SAAS;QAEzD,oEAAoE;QACpE,wEAAwE;QACxE,IAAI,OAA8B,CAAC;QACnC,IAAI,CAAC;YACJ,OAAO,GAAG,wBAAwB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM;YAAE,SAAS;QAEnD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,sEAAsE;YACtE,sCAAsC;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,OAAO,GAAG,KAAK,CAAC;gBAChB,MAAM;YACP,CAAC;YACD,sEAAsE;YACtE,wEAAwE;YACxE,kDAAkD;YAClD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5B,OAAO,GAAG,KAAK,CAAC;gBAChB,MAAM;YACP,CAAC;QACF,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC9B,WAAwB,EACxB,EAA8B;IAE9B,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO;YAAE,OAAO,IAAI,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CACtC,WAAwB,EACxB,UAA8E;IAE9E,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC;IACpC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAExC,MAAM,IAAI,GAA0B,EAAE,CAAC;IACvC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACtB,MAAM,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,IAAI,WAAW,CAAC,UAAU,CAAC;QACvE,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,MAAM,KAAK,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,SAAS;QAEjD,IAAI,OAA8B,CAAC;QACnC,IAAI,CAAC;YACJ,OAAO,GAAG,wBAAwB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM;YAAE,SAAS;QAEnD,0EAA0E;QAC1E,2EAA2E;QAC3E,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAAC,KAAK,GAAG,KAAK,CAAC;gBAAC,MAAM;YAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,IAAI,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE;YACxB,MAAM,EAAE;gBACP,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,MAAM,CAAC,UAAU;gBACzB,KAAK,EAAE,MAAM,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE;aAC3B;YACD,aAAa,EAAE,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;SAC/C,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAoBD;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,IAAwB;IACvD,IAAI,IAAI,YAAY,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,IAAI,YAAY,YAAY;QAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;IAEvD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAwB;IACjE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAEnF,OAAO;QACN,MAAM,EAAE,QAAQ,CAAC,WAAW;QAC5B,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACpE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAChC,IAA2B,EAC3B,OAA2B;IAE3B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAwB;IAClE,IAAI,IAAI,YAAY,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;QAClC,6EAA6E;QAC7E,wEAAwE;QACxE,6EAA6E;QAC7E,wDAAwD;QACxD,OAAO,IAAI,CAAC,MAAM,YAAY,kBAAkB,CAAC;IAClD,CAAC;IACD,IAAI,IAAI,YAAY,SAAS;QAAE,OAAO,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9E,IAAI,IAAI,YAAY,QAAQ;QAAE,OAAO,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7E,IAAI,IAAI,YAAY,WAAW;QAAE,OAAO,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChF,OAAO,KAAK,CAAC;AACd,CAAC"}