@quereus/quereus 4.3.0 → 4.3.2

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 (730) 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 +1 -1
  10. package/dist/src/core/database-external-changes.js +1 -1
  11. package/dist/src/core/database-internal.d.ts.map +1 -1
  12. package/dist/src/core/database-materialized-views-analysis.d.ts +199 -0
  13. package/dist/src/core/database-materialized-views-analysis.d.ts.map +1 -0
  14. package/dist/src/core/database-materialized-views-analysis.js +502 -0
  15. package/dist/src/core/database-materialized-views-analysis.js.map +1 -0
  16. package/dist/src/core/database-materialized-views-apply.d.ts +280 -0
  17. package/dist/src/core/database-materialized-views-apply.d.ts.map +1 -0
  18. package/dist/src/core/database-materialized-views-apply.js +624 -0
  19. package/dist/src/core/database-materialized-views-apply.js.map +1 -0
  20. package/dist/src/core/database-materialized-views-plan-builders.d.ts +203 -0
  21. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -0
  22. package/dist/src/core/database-materialized-views-plan-builders.js +1084 -0
  23. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -0
  24. package/dist/src/core/database-materialized-views-plans.d.ts +417 -0
  25. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -0
  26. package/dist/src/core/database-materialized-views-plans.js +13 -0
  27. package/dist/src/core/database-materialized-views-plans.js.map +1 -0
  28. package/dist/src/core/database-materialized-views.d.ts +11 -819
  29. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  30. package/dist/src/core/database-materialized-views.js +60 -2069
  31. package/dist/src/core/database-materialized-views.js.map +1 -1
  32. package/dist/src/core/database-transaction.d.ts +10 -1
  33. package/dist/src/core/database-transaction.d.ts.map +1 -1
  34. package/dist/src/core/database-transaction.js +16 -4
  35. package/dist/src/core/database-transaction.js.map +1 -1
  36. package/dist/src/core/database-watchers.d.ts.map +1 -1
  37. package/dist/src/core/database-watchers.js +2 -1
  38. package/dist/src/core/database-watchers.js.map +1 -1
  39. package/dist/src/core/database.d.ts +99 -13
  40. package/dist/src/core/database.d.ts.map +1 -1
  41. package/dist/src/core/database.js +250 -33
  42. package/dist/src/core/database.js.map +1 -1
  43. package/dist/src/core/derived-row-validator.d.ts +1 -1
  44. package/dist/src/core/derived-row-validator.d.ts.map +1 -1
  45. package/dist/src/core/derived-row-validator.js +5 -3
  46. package/dist/src/core/derived-row-validator.js.map +1 -1
  47. package/dist/src/core/statement.d.ts +8 -0
  48. package/dist/src/core/statement.d.ts.map +1 -1
  49. package/dist/src/core/statement.js +98 -18
  50. package/dist/src/core/statement.js.map +1 -1
  51. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  52. package/dist/src/emit/ast-stringify.js +24 -13
  53. package/dist/src/emit/ast-stringify.js.map +1 -1
  54. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  55. package/dist/src/func/builtins/explain.js +2 -1
  56. package/dist/src/func/builtins/explain.js.map +1 -1
  57. package/dist/src/func/builtins/json.d.ts.map +1 -1
  58. package/dist/src/func/builtins/json.js +2 -1
  59. package/dist/src/func/builtins/json.js.map +1 -1
  60. package/dist/src/func/builtins/mutation.d.ts.map +1 -1
  61. package/dist/src/func/builtins/mutation.js +3 -2
  62. package/dist/src/func/builtins/mutation.js.map +1 -1
  63. package/dist/src/index.d.ts +16 -6
  64. package/dist/src/index.d.ts.map +1 -1
  65. package/dist/src/index.js +33 -7
  66. package/dist/src/index.js.map +1 -1
  67. package/dist/src/parser/ast.d.ts +2 -2
  68. package/dist/src/parser/lexer.d.ts +11 -1
  69. package/dist/src/parser/lexer.d.ts.map +1 -1
  70. package/dist/src/parser/lexer.js +40 -34
  71. package/dist/src/parser/lexer.js.map +1 -1
  72. package/dist/src/parser/parser.d.ts.map +1 -1
  73. package/dist/src/parser/parser.js +16 -9
  74. package/dist/src/parser/parser.js.map +1 -1
  75. package/dist/src/planner/analysis/authored-inverse.js +1 -1
  76. package/dist/src/planner/analysis/comparison-collation.d.ts +52 -0
  77. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
  78. package/dist/src/planner/analysis/comparison-collation.js +84 -7
  79. package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
  80. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  81. package/dist/src/planner/analysis/constraint-extractor.js +64 -17
  82. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  83. package/dist/src/planner/analysis/coverage-prover.d.ts +1 -1
  84. package/dist/src/planner/analysis/coverage-prover.js +1 -1
  85. package/dist/src/planner/analysis/sat-checker.d.ts +8 -1
  86. package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -1
  87. package/dist/src/planner/analysis/sat-checker.js +117 -22
  88. package/dist/src/planner/analysis/sat-checker.js.map +1 -1
  89. package/dist/src/planner/analysis/scalar-invertibility.d.ts +13 -4
  90. package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -1
  91. package/dist/src/planner/analysis/scalar-invertibility.js +12 -3
  92. package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -1
  93. package/dist/src/planner/analysis/update-lineage.d.ts +1 -1
  94. package/dist/src/planner/analysis/update-lineage.js +1 -1
  95. package/dist/src/planner/analysis/update-lineage.js.map +1 -1
  96. package/dist/src/planner/analysis/view-complement.d.ts +2 -2
  97. package/dist/src/planner/building/delete.d.ts.map +1 -1
  98. package/dist/src/planner/building/delete.js +13 -2
  99. package/dist/src/planner/building/delete.js.map +1 -1
  100. package/dist/src/planner/building/dml-target.d.ts +2 -2
  101. package/dist/src/planner/building/dml-target.js +2 -2
  102. package/dist/src/planner/building/insert.d.ts.map +1 -1
  103. package/dist/src/planner/building/insert.js +53 -2
  104. package/dist/src/planner/building/insert.js.map +1 -1
  105. package/dist/src/planner/building/schema-resolution.d.ts +3 -0
  106. package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
  107. package/dist/src/planner/building/schema-resolution.js +4 -5
  108. package/dist/src/planner/building/schema-resolution.js.map +1 -1
  109. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  110. package/dist/src/planner/building/select-aggregates.js +72 -4
  111. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  112. package/dist/src/planner/building/select.js +3 -3
  113. package/dist/src/planner/building/select.js.map +1 -1
  114. package/dist/src/planner/building/update.d.ts.map +1 -1
  115. package/dist/src/planner/building/update.js +16 -2
  116. package/dist/src/planner/building/update.js.map +1 -1
  117. package/dist/src/planner/building/view-mutation-builder.js +7 -7
  118. package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
  119. package/dist/src/planner/cache/materialization-advisory.d.ts +1 -2
  120. package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
  121. package/dist/src/planner/cache/materialization-advisory.js +21 -14
  122. package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
  123. package/dist/src/planner/cache/reference-graph.d.ts +14 -1
  124. package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
  125. package/dist/src/planner/cache/reference-graph.js +26 -26
  126. package/dist/src/planner/cache/reference-graph.js.map +1 -1
  127. package/dist/src/planner/cost/index.d.ts +7 -3
  128. package/dist/src/planner/cost/index.d.ts.map +1 -1
  129. package/dist/src/planner/cost/index.js.map +1 -1
  130. package/dist/src/planner/debug.d.ts +3 -2
  131. package/dist/src/planner/debug.d.ts.map +1 -1
  132. package/dist/src/planner/debug.js +9 -3
  133. package/dist/src/planner/debug.js.map +1 -1
  134. package/dist/src/planner/framework/characteristics.d.ts +46 -19
  135. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  136. package/dist/src/planner/framework/characteristics.js +50 -134
  137. package/dist/src/planner/framework/characteristics.js.map +1 -1
  138. package/dist/src/planner/framework/context.d.ts +8 -44
  139. package/dist/src/planner/framework/context.d.ts.map +1 -1
  140. package/dist/src/planner/framework/context.js +0 -91
  141. package/dist/src/planner/framework/context.js.map +1 -1
  142. package/dist/src/planner/framework/pass.d.ts +7 -0
  143. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  144. package/dist/src/planner/framework/pass.js +84 -0
  145. package/dist/src/planner/framework/pass.js.map +1 -1
  146. package/dist/src/planner/framework/registry.d.ts +13 -42
  147. package/dist/src/planner/framework/registry.d.ts.map +1 -1
  148. package/dist/src/planner/framework/registry.js +14 -182
  149. package/dist/src/planner/framework/registry.js.map +1 -1
  150. package/dist/src/planner/mutation/backward-body.d.ts +2 -2
  151. package/dist/src/planner/mutation/cte-flatten.js +1 -1
  152. package/dist/src/planner/mutation/decomposition.d.ts +2 -2
  153. package/dist/src/planner/mutation/decomposition.js +1 -1
  154. package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -1
  155. package/dist/src/planner/mutation/lens-enforcement.js +2 -1
  156. package/dist/src/planner/mutation/lens-enforcement.js.map +1 -1
  157. package/dist/src/planner/mutation/multi-source.d.ts +8 -8
  158. package/dist/src/planner/mutation/multi-source.js +11 -11
  159. package/dist/src/planner/mutation/multi-source.js.map +1 -1
  160. package/dist/src/planner/mutation/propagate.d.ts +1 -1
  161. package/dist/src/planner/mutation/propagate.js +1 -1
  162. package/dist/src/planner/mutation/scope-transform.d.ts +2 -2
  163. package/dist/src/planner/mutation/scope-transform.js +3 -3
  164. package/dist/src/planner/mutation/scope-transform.js.map +1 -1
  165. package/dist/src/planner/mutation/set-op.d.ts +1 -1
  166. package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
  167. package/dist/src/planner/mutation/set-op.js +3 -2
  168. package/dist/src/planner/mutation/set-op.js.map +1 -1
  169. package/dist/src/planner/mutation/single-source.d.ts +3 -3
  170. package/dist/src/planner/mutation/single-source.js +9 -9
  171. package/dist/src/planner/mutation/single-source.js.map +1 -1
  172. package/dist/src/planner/nodes/aggregate-function.d.ts +3 -1
  173. package/dist/src/planner/nodes/aggregate-function.d.ts.map +1 -1
  174. package/dist/src/planner/nodes/aggregate-function.js +1 -0
  175. package/dist/src/planner/nodes/aggregate-function.js.map +1 -1
  176. package/dist/src/planner/nodes/aggregate-node.d.ts +1 -0
  177. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  178. package/dist/src/planner/nodes/aggregate-node.js +8 -1
  179. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  180. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  181. package/dist/src/planner/nodes/alias-node.js +3 -1
  182. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  183. package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -1
  184. package/dist/src/planner/nodes/asof-scan-node.js +3 -2
  185. package/dist/src/planner/nodes/asof-scan-node.js.map +1 -1
  186. package/dist/src/planner/nodes/asserted-keys-node.d.ts +1 -1
  187. package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -1
  188. package/dist/src/planner/nodes/asserted-keys-node.js +5 -2
  189. package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -1
  190. package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
  191. package/dist/src/planner/nodes/async-gather-node.js +3 -1
  192. package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
  193. package/dist/src/planner/nodes/block.js +3 -3
  194. package/dist/src/planner/nodes/block.js.map +1 -1
  195. package/dist/src/planner/nodes/bloom-join-node.d.ts +2 -0
  196. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  197. package/dist/src/planner/nodes/bloom-join-node.js +5 -1
  198. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  199. package/dist/src/planner/nodes/cache-node.d.ts +1 -0
  200. package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
  201. package/dist/src/planner/nodes/cache-node.js +1 -0
  202. package/dist/src/planner/nodes/cache-node.js.map +1 -1
  203. package/dist/src/planner/nodes/cte-node.d.ts +1 -0
  204. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  205. package/dist/src/planner/nodes/cte-node.js +4 -1
  206. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  207. package/dist/src/planner/nodes/distinct-node.js +3 -3
  208. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  209. package/dist/src/planner/nodes/dml-executor-node.d.ts +21 -0
  210. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  211. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  212. package/dist/src/planner/nodes/envelope-scan-node.d.ts +1 -1
  213. package/dist/src/planner/nodes/envelope-scan-node.js +1 -1
  214. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
  215. package/dist/src/planner/nodes/fanout-lookup-join-node.js +4 -2
  216. package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
  217. package/dist/src/planner/nodes/filter.d.ts +10 -2
  218. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  219. package/dist/src/planner/nodes/filter.js +81 -14
  220. package/dist/src/planner/nodes/filter.js.map +1 -1
  221. package/dist/src/planner/nodes/hash-aggregate.d.ts +12 -1
  222. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  223. package/dist/src/planner/nodes/hash-aggregate.js +28 -1
  224. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  225. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts +3 -1
  226. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts.map +1 -1
  227. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js +1 -0
  228. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +1 -1
  229. package/dist/src/planner/nodes/join-node.d.ts +3 -1
  230. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  231. package/dist/src/planner/nodes/join-node.js +5 -5
  232. package/dist/src/planner/nodes/join-node.js.map +1 -1
  233. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
  234. package/dist/src/planner/nodes/lens-auxiliary-access-node.js +4 -1
  235. package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
  236. package/dist/src/planner/nodes/limit-offset.d.ts +1 -0
  237. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  238. package/dist/src/planner/nodes/limit-offset.js +4 -3
  239. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  240. package/dist/src/planner/nodes/merge-join-node.d.ts +2 -0
  241. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  242. package/dist/src/planner/nodes/merge-join-node.js +6 -1
  243. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  244. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
  245. package/dist/src/planner/nodes/ordinal-slice-node.js +3 -1
  246. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
  247. package/dist/src/planner/nodes/plan-node.d.ts +68 -5
  248. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  249. package/dist/src/planner/nodes/plan-node.js +137 -24
  250. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  251. package/dist/src/planner/nodes/project-node.d.ts +3 -2
  252. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  253. package/dist/src/planner/nodes/project-node.js +1 -0
  254. package/dist/src/planner/nodes/project-node.js.map +1 -1
  255. package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
  256. package/dist/src/planner/nodes/recursive-cte-node.js +8 -2
  257. package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
  258. package/dist/src/planner/nodes/reference.d.ts +5 -1
  259. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  260. package/dist/src/planner/nodes/reference.js +3 -0
  261. package/dist/src/planner/nodes/reference.js.map +1 -1
  262. package/dist/src/planner/nodes/remote-query-node.d.ts.map +1 -1
  263. package/dist/src/planner/nodes/remote-query-node.js +3 -1
  264. package/dist/src/planner/nodes/remote-query-node.js.map +1 -1
  265. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  266. package/dist/src/planner/nodes/retrieve-node.js +3 -1
  267. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  268. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  269. package/dist/src/planner/nodes/set-operation-node.js +3 -1
  270. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  271. package/dist/src/planner/nodes/sink-node.d.ts.map +1 -1
  272. package/dist/src/planner/nodes/sink-node.js +3 -1
  273. package/dist/src/planner/nodes/sink-node.js.map +1 -1
  274. package/dist/src/planner/nodes/sort.d.ts +2 -1
  275. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  276. package/dist/src/planner/nodes/sort.js +9 -5
  277. package/dist/src/planner/nodes/sort.js.map +1 -1
  278. package/dist/src/planner/nodes/stream-aggregate.d.ts +12 -1
  279. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  280. package/dist/src/planner/nodes/stream-aggregate.js +32 -3
  281. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  282. package/dist/src/planner/nodes/table-access-nodes.d.ts +2 -1
  283. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  284. package/dist/src/planner/nodes/table-access-nodes.js +2 -0
  285. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  286. package/dist/src/planner/nodes/view-mutation-node.d.ts +2 -2
  287. package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -1
  288. package/dist/src/planner/nodes/view-mutation-node.js +5 -1
  289. package/dist/src/planner/nodes/view-mutation-node.js.map +1 -1
  290. package/dist/src/planner/nodes/window-function.d.ts +3 -1
  291. package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
  292. package/dist/src/planner/nodes/window-function.js +1 -0
  293. package/dist/src/planner/nodes/window-function.js.map +1 -1
  294. package/dist/src/planner/optimizer.d.ts +52 -8
  295. package/dist/src/planner/optimizer.d.ts.map +1 -1
  296. package/dist/src/planner/optimizer.js +885 -894
  297. package/dist/src/planner/optimizer.js.map +1 -1
  298. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  299. package/dist/src/planner/rules/access/rule-select-access-path.js +235 -202
  300. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  301. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +2 -2
  302. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +2 -2
  303. package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts +1 -1
  304. package/dist/src/planner/rules/cache/rule-scalar-cse.js +1 -1
  305. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +1 -1
  306. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +1 -1
  307. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +1 -1
  308. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +1 -1
  309. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +1 -1
  310. package/dist/src/planner/rules/join/rule-join-elimination.js +1 -1
  311. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +5 -6
  312. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
  313. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +1 -1
  314. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +1 -1
  315. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts +2 -2
  316. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
  317. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +4 -3
  318. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
  319. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +19 -0
  320. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -0
  321. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +48 -0
  322. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -0
  323. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +12 -1
  324. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -1
  325. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
  326. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +90 -26
  327. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  328. package/dist/src/planner/rules/shared/index-style-context.d.ts +39 -0
  329. package/dist/src/planner/rules/shared/index-style-context.d.ts.map +1 -0
  330. package/dist/src/planner/rules/shared/index-style-context.js +26 -0
  331. package/dist/src/planner/rules/shared/index-style-context.js.map +1 -0
  332. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +1 -1
  333. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +1 -1
  334. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts +1 -1
  335. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
  336. package/dist/src/planner/scopes/registered.d.ts +21 -0
  337. package/dist/src/planner/scopes/registered.d.ts.map +1 -1
  338. package/dist/src/planner/scopes/registered.js +31 -1
  339. package/dist/src/planner/scopes/registered.js.map +1 -1
  340. package/dist/src/planner/stats/analyze.d.ts.map +1 -1
  341. package/dist/src/planner/stats/analyze.js +2 -20
  342. package/dist/src/planner/stats/analyze.js.map +1 -1
  343. package/dist/src/planner/stats/histogram.d.ts.map +1 -1
  344. package/dist/src/planner/stats/histogram.js +4 -0
  345. package/dist/src/planner/stats/histogram.js.map +1 -1
  346. package/dist/src/planner/util/fd-utils.d.ts +2 -3
  347. package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
  348. package/dist/src/planner/util/fd-utils.js +2 -3
  349. package/dist/src/planner/util/fd-utils.js.map +1 -1
  350. package/dist/src/planner/validation/plan-validator.d.ts +16 -0
  351. package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
  352. package/dist/src/planner/validation/plan-validator.js +36 -0
  353. package/dist/src/planner/validation/plan-validator.js.map +1 -1
  354. package/dist/src/runtime/async-util.d.ts +26 -0
  355. package/dist/src/runtime/async-util.d.ts.map +1 -1
  356. package/dist/src/runtime/async-util.js +139 -55
  357. package/dist/src/runtime/async-util.js.map +1 -1
  358. package/dist/src/runtime/context-helpers.d.ts +32 -4
  359. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  360. package/dist/src/runtime/context-helpers.js +26 -9
  361. package/dist/src/runtime/context-helpers.js.map +1 -1
  362. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  363. package/dist/src/runtime/deferred-constraint-queue.js +2 -1
  364. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  365. package/dist/src/runtime/emission-context.d.ts +27 -3
  366. package/dist/src/runtime/emission-context.d.ts.map +1 -1
  367. package/dist/src/runtime/emission-context.js +38 -7
  368. package/dist/src/runtime/emission-context.js.map +1 -1
  369. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  370. package/dist/src/runtime/emit/add-constraint.js +7 -1
  371. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  372. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  373. package/dist/src/runtime/emit/aggregate.js +17 -13
  374. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  375. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  376. package/dist/src/runtime/emit/alter-table.js +98 -9
  377. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  378. package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
  379. package/dist/src/runtime/emit/analyze.js +2 -1
  380. package/dist/src/runtime/emit/analyze.js.map +1 -1
  381. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  382. package/dist/src/runtime/emit/asof-scan.js +13 -10
  383. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  384. package/dist/src/runtime/emit/async-gather.d.ts.map +1 -1
  385. package/dist/src/runtime/emit/async-gather.js +4 -3
  386. package/dist/src/runtime/emit/async-gather.js.map +1 -1
  387. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  388. package/dist/src/runtime/emit/between.js +2 -1
  389. package/dist/src/runtime/emit/between.js.map +1 -1
  390. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  391. package/dist/src/runtime/emit/binary.js +122 -14
  392. package/dist/src/runtime/emit/binary.js.map +1 -1
  393. package/dist/src/runtime/emit/block.d.ts.map +1 -1
  394. package/dist/src/runtime/emit/block.js +2 -1
  395. package/dist/src/runtime/emit/block.js.map +1 -1
  396. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  397. package/dist/src/runtime/emit/bloom-join.js +20 -8
  398. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  399. package/dist/src/runtime/emit/cache.d.ts.map +1 -1
  400. package/dist/src/runtime/emit/cache.js +2 -1
  401. package/dist/src/runtime/emit/cache.js.map +1 -1
  402. package/dist/src/runtime/emit/case.d.ts.map +1 -1
  403. package/dist/src/runtime/emit/case.js +66 -45
  404. package/dist/src/runtime/emit/case.js.map +1 -1
  405. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  406. package/dist/src/runtime/emit/cast.js +2 -1
  407. package/dist/src/runtime/emit/cast.js.map +1 -1
  408. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  409. package/dist/src/runtime/emit/constraint-check.js +13 -7
  410. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  411. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  412. package/dist/src/runtime/emit/create-assertion.js +2 -1
  413. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  414. package/dist/src/runtime/emit/create-index.d.ts.map +1 -1
  415. package/dist/src/runtime/emit/create-index.js +12 -1
  416. package/dist/src/runtime/emit/create-index.js.map +1 -1
  417. package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
  418. package/dist/src/runtime/emit/create-table.js +12 -1
  419. package/dist/src/runtime/emit/create-table.js.map +1 -1
  420. package/dist/src/runtime/emit/cte-reference.d.ts.map +1 -1
  421. package/dist/src/runtime/emit/cte-reference.js +2 -1
  422. package/dist/src/runtime/emit/cte-reference.js.map +1 -1
  423. package/dist/src/runtime/emit/cte.d.ts.map +1 -1
  424. package/dist/src/runtime/emit/cte.js +2 -1
  425. package/dist/src/runtime/emit/cte.js.map +1 -1
  426. package/dist/src/runtime/emit/ddl-transaction-policy.d.ts +50 -0
  427. package/dist/src/runtime/emit/ddl-transaction-policy.d.ts.map +1 -0
  428. package/dist/src/runtime/emit/ddl-transaction-policy.js +69 -0
  429. package/dist/src/runtime/emit/ddl-transaction-policy.js.map +1 -0
  430. package/dist/src/runtime/emit/delete.d.ts.map +1 -1
  431. package/dist/src/runtime/emit/delete.js +2 -1
  432. package/dist/src/runtime/emit/delete.js.map +1 -1
  433. package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
  434. package/dist/src/runtime/emit/distinct.js +2 -1
  435. package/dist/src/runtime/emit/distinct.js.map +1 -1
  436. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  437. package/dist/src/runtime/emit/dml-executor.js +147 -34
  438. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  439. package/dist/src/runtime/emit/drop-assertion.d.ts.map +1 -1
  440. package/dist/src/runtime/emit/drop-assertion.js +2 -1
  441. package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
  442. package/dist/src/runtime/emit/drop-index.d.ts.map +1 -1
  443. package/dist/src/runtime/emit/drop-index.js +17 -1
  444. package/dist/src/runtime/emit/drop-index.js.map +1 -1
  445. package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
  446. package/dist/src/runtime/emit/drop-table.js +11 -1
  447. package/dist/src/runtime/emit/drop-table.js.map +1 -1
  448. package/dist/src/runtime/emit/eager-prefetch.d.ts.map +1 -1
  449. package/dist/src/runtime/emit/eager-prefetch.js +2 -1
  450. package/dist/src/runtime/emit/eager-prefetch.js.map +1 -1
  451. package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -1
  452. package/dist/src/runtime/emit/envelope-scan.js +2 -1
  453. package/dist/src/runtime/emit/envelope-scan.js.map +1 -1
  454. package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -1
  455. package/dist/src/runtime/emit/fanout-lookup-join.js +3 -2
  456. package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -1
  457. package/dist/src/runtime/emit/filter.d.ts.map +1 -1
  458. package/dist/src/runtime/emit/filter.js +8 -3
  459. package/dist/src/runtime/emit/filter.js.map +1 -1
  460. package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
  461. package/dist/src/runtime/emit/hash-aggregate.js +16 -11
  462. package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
  463. package/dist/src/runtime/emit/insert.d.ts.map +1 -1
  464. package/dist/src/runtime/emit/insert.js +2 -1
  465. package/dist/src/runtime/emit/insert.js.map +1 -1
  466. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  467. package/dist/src/runtime/emit/join.js +20 -6
  468. package/dist/src/runtime/emit/join.js.map +1 -1
  469. package/dist/src/runtime/emit/limit-offset.d.ts.map +1 -1
  470. package/dist/src/runtime/emit/limit-offset.js +2 -1
  471. package/dist/src/runtime/emit/limit-offset.js.map +1 -1
  472. package/dist/src/runtime/emit/literal.d.ts.map +1 -1
  473. package/dist/src/runtime/emit/literal.js +2 -1
  474. package/dist/src/runtime/emit/literal.js.map +1 -1
  475. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +22 -0
  476. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  477. package/dist/src/runtime/emit/materialized-view-helpers.js +123 -12
  478. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  479. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  480. package/dist/src/runtime/emit/materialized-view.js +6 -0
  481. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  482. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  483. package/dist/src/runtime/emit/merge-join.js +14 -4
  484. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  485. package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -1
  486. package/dist/src/runtime/emit/ordinal-slice.js +2 -1
  487. package/dist/src/runtime/emit/ordinal-slice.js.map +1 -1
  488. package/dist/src/runtime/emit/pragma.d.ts.map +1 -1
  489. package/dist/src/runtime/emit/pragma.js +2 -1
  490. package/dist/src/runtime/emit/pragma.js.map +1 -1
  491. package/dist/src/runtime/emit/project.d.ts.map +1 -1
  492. package/dist/src/runtime/emit/project.js +7 -2
  493. package/dist/src/runtime/emit/project.js.map +1 -1
  494. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  495. package/dist/src/runtime/emit/recursive-cte.js +2 -1
  496. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  497. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  498. package/dist/src/runtime/emit/returning.js +7 -2
  499. package/dist/src/runtime/emit/returning.js.map +1 -1
  500. package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
  501. package/dist/src/runtime/emit/scalar-function.js +2 -1
  502. package/dist/src/runtime/emit/scalar-function.js.map +1 -1
  503. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  504. package/dist/src/runtime/emit/scan.js +55 -17
  505. package/dist/src/runtime/emit/scan.js.map +1 -1
  506. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  507. package/dist/src/runtime/emit/schema-declarative.js +6 -5
  508. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  509. package/dist/src/runtime/emit/sequencing.d.ts.map +1 -1
  510. package/dist/src/runtime/emit/sequencing.js +2 -1
  511. package/dist/src/runtime/emit/sequencing.js.map +1 -1
  512. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  513. package/dist/src/runtime/emit/set-operation.js +6 -5
  514. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  515. package/dist/src/runtime/emit/sink.d.ts.map +1 -1
  516. package/dist/src/runtime/emit/sink.js +2 -1
  517. package/dist/src/runtime/emit/sink.js.map +1 -1
  518. package/dist/src/runtime/emit/sort.d.ts.map +1 -1
  519. package/dist/src/runtime/emit/sort.js +2 -1
  520. package/dist/src/runtime/emit/sort.js.map +1 -1
  521. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  522. package/dist/src/runtime/emit/subquery.js +42 -23
  523. package/dist/src/runtime/emit/subquery.js.map +1 -1
  524. package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
  525. package/dist/src/runtime/emit/table-valued-function.js +2 -1
  526. package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
  527. package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -1
  528. package/dist/src/runtime/emit/temporal-arithmetic.js +2 -1
  529. package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -1
  530. package/dist/src/runtime/emit/transaction.d.ts.map +1 -1
  531. package/dist/src/runtime/emit/transaction.js +2 -1
  532. package/dist/src/runtime/emit/transaction.js.map +1 -1
  533. package/dist/src/runtime/emit/unary.d.ts.map +1 -1
  534. package/dist/src/runtime/emit/unary.js +2 -1
  535. package/dist/src/runtime/emit/unary.js.map +1 -1
  536. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  537. package/dist/src/runtime/emit/update.js +2 -1
  538. package/dist/src/runtime/emit/update.js.map +1 -1
  539. package/dist/src/runtime/emit/values.d.ts.map +1 -1
  540. package/dist/src/runtime/emit/values.js +2 -1
  541. package/dist/src/runtime/emit/values.js.map +1 -1
  542. package/dist/src/runtime/emit/view-mutation.d.ts +1 -1
  543. package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -1
  544. package/dist/src/runtime/emit/view-mutation.js +6 -3
  545. package/dist/src/runtime/emit/view-mutation.js.map +1 -1
  546. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  547. package/dist/src/runtime/emit/window.js +26 -9
  548. package/dist/src/runtime/emit/window.js.map +1 -1
  549. package/dist/src/runtime/emitters.d.ts +11 -3
  550. package/dist/src/runtime/emitters.d.ts.map +1 -1
  551. package/dist/src/runtime/emitters.js +13 -22
  552. package/dist/src/runtime/emitters.js.map +1 -1
  553. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  554. package/dist/src/runtime/foreign-key-actions.js +39 -13
  555. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  556. package/dist/src/runtime/parallel-driver.d.ts +18 -4
  557. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  558. package/dist/src/runtime/parallel-driver.js +72 -18
  559. package/dist/src/runtime/parallel-driver.js.map +1 -1
  560. package/dist/src/runtime/scheduler.d.ts +56 -7
  561. package/dist/src/runtime/scheduler.d.ts.map +1 -1
  562. package/dist/src/runtime/scheduler.js +223 -200
  563. package/dist/src/runtime/scheduler.js.map +1 -1
  564. package/dist/src/runtime/strict-flags.d.ts +22 -0
  565. package/dist/src/runtime/strict-flags.d.ts.map +1 -0
  566. package/dist/src/runtime/strict-flags.js +26 -0
  567. package/dist/src/runtime/strict-flags.js.map +1 -0
  568. package/dist/src/runtime/strict-fork.d.ts +4 -4
  569. package/dist/src/runtime/strict-fork.d.ts.map +1 -1
  570. package/dist/src/runtime/strict-fork.js +175 -31
  571. package/dist/src/runtime/strict-fork.js.map +1 -1
  572. package/dist/src/runtime/types.d.ts +66 -4
  573. package/dist/src/runtime/types.d.ts.map +1 -1
  574. package/dist/src/runtime/types.js +37 -0
  575. package/dist/src/runtime/types.js.map +1 -1
  576. package/dist/src/runtime/utils.d.ts.map +1 -1
  577. package/dist/src/runtime/utils.js +8 -17
  578. package/dist/src/runtime/utils.js.map +1 -1
  579. package/dist/src/schema/column.d.ts +8 -0
  580. package/dist/src/schema/column.d.ts.map +1 -1
  581. package/dist/src/schema/column.js.map +1 -1
  582. package/dist/src/schema/ddl-generator.js +5 -0
  583. package/dist/src/schema/ddl-generator.js.map +1 -1
  584. package/dist/src/schema/lens-compiler.js +2 -2
  585. package/dist/src/schema/lens-compiler.js.map +1 -1
  586. package/dist/src/schema/lens-prover.d.ts.map +1 -1
  587. package/dist/src/schema/lens-prover.js +2 -3
  588. package/dist/src/schema/lens-prover.js.map +1 -1
  589. package/dist/src/schema/lens.d.ts +1 -1
  590. package/dist/src/schema/manager.d.ts.map +1 -1
  591. package/dist/src/schema/manager.js +7 -2
  592. package/dist/src/schema/manager.js.map +1 -1
  593. package/dist/src/schema/rename-rewriter.d.ts +61 -0
  594. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  595. package/dist/src/schema/rename-rewriter.js +77 -0
  596. package/dist/src/schema/rename-rewriter.js.map +1 -1
  597. package/dist/src/schema/table.d.ts +36 -8
  598. package/dist/src/schema/table.d.ts.map +1 -1
  599. package/dist/src/schema/table.js +61 -11
  600. package/dist/src/schema/table.js.map +1 -1
  601. package/dist/src/schema/unique-enforcement.d.ts +28 -5
  602. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  603. package/dist/src/schema/unique-enforcement.js +37 -5
  604. package/dist/src/schema/unique-enforcement.js.map +1 -1
  605. package/dist/src/schema/view.d.ts +1 -1
  606. package/dist/src/schema/view.js +1 -1
  607. package/dist/src/types/json-type.d.ts.map +1 -1
  608. package/dist/src/types/json-type.js +18 -8
  609. package/dist/src/types/json-type.js.map +1 -1
  610. package/dist/src/types/logical-type.d.ts +26 -0
  611. package/dist/src/types/logical-type.d.ts.map +1 -1
  612. package/dist/src/types/logical-type.js.map +1 -1
  613. package/dist/src/util/comparison.d.ts +83 -59
  614. package/dist/src/util/comparison.d.ts.map +1 -1
  615. package/dist/src/util/comparison.js +191 -131
  616. package/dist/src/util/comparison.js.map +1 -1
  617. package/dist/src/util/json-canonical.d.ts +34 -0
  618. package/dist/src/util/json-canonical.d.ts.map +1 -0
  619. package/dist/src/util/json-canonical.js +32 -0
  620. package/dist/src/util/json-canonical.js.map +1 -0
  621. package/dist/src/util/key-serializer.d.ts +10 -3
  622. package/dist/src/util/key-serializer.d.ts.map +1 -1
  623. package/dist/src/util/key-serializer.js +43 -17
  624. package/dist/src/util/key-serializer.js.map +1 -1
  625. package/dist/src/util/key-tuple-codec.d.ts +37 -0
  626. package/dist/src/util/key-tuple-codec.d.ts.map +1 -0
  627. package/dist/src/util/key-tuple-codec.js +65 -0
  628. package/dist/src/util/key-tuple-codec.js.map +1 -0
  629. package/dist/src/util/latches.d.ts +29 -3
  630. package/dist/src/util/latches.d.ts.map +1 -1
  631. package/dist/src/util/latches.js +60 -6
  632. package/dist/src/util/latches.js.map +1 -1
  633. package/dist/src/util/patterns.d.ts +22 -8
  634. package/dist/src/util/patterns.d.ts.map +1 -1
  635. package/dist/src/util/patterns.js +87 -16
  636. package/dist/src/util/patterns.js.map +1 -1
  637. package/dist/src/util/qualified-name.d.ts +10 -0
  638. package/dist/src/util/qualified-name.d.ts.map +1 -0
  639. package/dist/src/util/qualified-name.js +15 -0
  640. package/dist/src/util/qualified-name.js.map +1 -0
  641. package/dist/src/vtab/backing-host.d.ts +8 -1
  642. package/dist/src/vtab/backing-host.d.ts.map +1 -1
  643. package/dist/src/vtab/backing-host.js +7 -0
  644. package/dist/src/vtab/backing-host.js.map +1 -1
  645. package/dist/src/vtab/best-access-plan.d.ts +18 -0
  646. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  647. package/dist/src/vtab/best-access-plan.js +15 -0
  648. package/dist/src/vtab/best-access-plan.js.map +1 -1
  649. package/dist/src/vtab/capabilities.d.ts +44 -0
  650. package/dist/src/vtab/capabilities.d.ts.map +1 -1
  651. package/dist/src/vtab/filter-info.d.ts +42 -0
  652. package/dist/src/vtab/filter-info.d.ts.map +1 -1
  653. package/dist/src/vtab/filter-info.js +137 -1
  654. package/dist/src/vtab/filter-info.js.map +1 -1
  655. package/dist/src/vtab/idx-str.d.ts +62 -0
  656. package/dist/src/vtab/idx-str.d.ts.map +1 -0
  657. package/dist/src/vtab/idx-str.js +130 -0
  658. package/dist/src/vtab/idx-str.js.map +1 -0
  659. package/dist/src/vtab/index-descriptor.d.ts +122 -0
  660. package/dist/src/vtab/index-descriptor.d.ts.map +1 -0
  661. package/dist/src/vtab/index-descriptor.js +104 -0
  662. package/dist/src/vtab/index-descriptor.js.map +1 -0
  663. package/dist/src/vtab/mapping-advertisement.d.ts +1 -1
  664. package/dist/src/vtab/memory/index.d.ts +12 -4
  665. package/dist/src/vtab/memory/index.d.ts.map +1 -1
  666. package/dist/src/vtab/memory/index.js +17 -9
  667. package/dist/src/vtab/memory/index.js.map +1 -1
  668. package/dist/src/vtab/memory/layer/base.d.ts +85 -31
  669. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  670. package/dist/src/vtab/memory/layer/base.js +127 -86
  671. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  672. package/dist/src/vtab/memory/layer/connection.d.ts +27 -0
  673. package/dist/src/vtab/memory/layer/connection.d.ts.map +1 -1
  674. package/dist/src/vtab/memory/layer/connection.js +36 -1
  675. package/dist/src/vtab/memory/layer/connection.js.map +1 -1
  676. package/dist/src/vtab/memory/layer/interface.d.ts +24 -4
  677. package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
  678. package/dist/src/vtab/memory/layer/manager.d.ts +212 -16
  679. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  680. package/dist/src/vtab/memory/layer/manager.js +754 -170
  681. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  682. package/dist/src/vtab/memory/layer/plan-filter.d.ts +26 -1
  683. package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
  684. package/dist/src/vtab/memory/layer/plan-filter.js +29 -11
  685. package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
  686. package/dist/src/vtab/memory/layer/safe-iterate.d.ts +2 -2
  687. package/dist/src/vtab/memory/layer/safe-iterate.d.ts.map +1 -1
  688. package/dist/src/vtab/memory/layer/safe-iterate.js +2 -2
  689. package/dist/src/vtab/memory/layer/safe-iterate.js.map +1 -1
  690. package/dist/src/vtab/memory/layer/scan-layer.d.ts +5 -1
  691. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  692. package/dist/src/vtab/memory/layer/scan-layer.js +38 -22
  693. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  694. package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
  695. package/dist/src/vtab/memory/layer/scan-plan.js +13 -21
  696. package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
  697. package/dist/src/vtab/memory/layer/transaction.d.ts +169 -7
  698. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  699. package/dist/src/vtab/memory/layer/transaction.js +334 -9
  700. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  701. package/dist/src/vtab/memory/module.d.ts +21 -4
  702. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  703. package/dist/src/vtab/memory/module.js +45 -16
  704. package/dist/src/vtab/memory/module.js.map +1 -1
  705. package/dist/src/vtab/memory/table.d.ts +30 -4
  706. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  707. package/dist/src/vtab/memory/table.js +63 -15
  708. package/dist/src/vtab/memory/table.js.map +1 -1
  709. package/dist/src/vtab/memory/utils/predicate.d.ts +9 -1
  710. package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
  711. package/dist/src/vtab/memory/utils/predicate.js +35 -14
  712. package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
  713. package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -1
  714. package/dist/src/vtab/memory/utils/primary-key-encode.js +12 -6
  715. package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -1
  716. package/dist/src/vtab/memory/utils/primary-key.d.ts +6 -1
  717. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  718. package/dist/src/vtab/memory/utils/primary-key.js +12 -8
  719. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  720. package/dist/src/vtab/module.d.ts +64 -14
  721. package/dist/src/vtab/module.d.ts.map +1 -1
  722. package/dist/src/vtab/table.d.ts +41 -2
  723. package/dist/src/vtab/table.d.ts.map +1 -1
  724. package/dist/src/vtab/table.js +19 -0
  725. package/dist/src/vtab/table.js.map +1 -1
  726. package/package.json +5 -4
  727. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts +0 -18
  728. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts.map +0 -1
  729. package/dist/src/planner/rules/cache/rule-materialization-advisory.js +0 -65
  730. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
@@ -0,0 +1,624 @@
1
+ /**
2
+ * Materialized-view maintenance — **delta apply**. The per-row / per-flush appliers that
3
+ * take a compiled {@link MaintenancePlan} plus a source {@link BackingRowChange}, compute the
4
+ * bounded backing delta (or the full-rebuild diff), and write it through the backing table's
5
+ * coordinated transaction connection — plus the residual runners, backing-host / connection
6
+ * resolvers, derived-row and parent-side referential enforcement, and the small key-compare
7
+ * helpers they share. Extracted from database-materialized-views.ts as free functions over
8
+ * {@link MaterializedViewManagerContext}; the manager's orchestration methods
9
+ * (`maintainRowTime`, `flushDeferredRebuilds`, `lookupCoveringConflicts`) call in.
10
+ */
11
+ import { QuereusError } from '../common/errors.js';
12
+ import { StatusCode } from '../common/types.js';
13
+ import { createStrictRowContextMap, wrapTableContextsStrict } from '../runtime/strict-fork.js';
14
+ import { isAsyncIterable } from '../runtime/utils.js';
15
+ import { resolveBackingHost, nullInNotNullSeededPkError } from '../runtime/emit/materialized-view-helpers.js';
16
+ import { assertTransitiveRestrictsForParentMutation, executeForeignKeyActionsAndLens } from '../runtime/foreign-key-actions.js';
17
+ import { validateDerivedRowImage } from './derived-row-validator.js';
18
+ import { buildPrimaryKeyFromValues } from '../vtab/memory/utils/primary-key.js';
19
+ import { compareSqlValuesFast, rowsValueIdentical } from '../util/comparison.js';
20
+ import { canonKeyValues } from './database-materialized-views-analysis.js';
21
+ /**
22
+ * Compute an `'inverse-projection'` plan's per-row backing delta, apply it, and
23
+ * return the **effective** {@link BackingRowChange}(s) the backing layer realized.
24
+ * An out-of-scope row (or a delete of an absent backing key) yields no change. This
25
+ * body is the shipped covering-index maintenance, lifted verbatim from the former
26
+ * `applyRowTimeChange`, plus the equal-image short-circuit: an UPDATE whose old and
27
+ * new projected images are value-identical (both in scope) projects to NO backing
28
+ * delta — the dominant no-op echo (a source update touching only unprojected columns,
29
+ * or rewriting a projected column to its existing value) is suppressed before any
30
+ * backing-connection work. Accurate by the maintenance invariant (the backing row IS
31
+ * the old image's projection), so nothing would have changed; the host's
32
+ * value-identical upsert skip (vtab/backing-host.ts) remains the effective-state
33
+ * backstop for the paths that do emit ops.
34
+ */
35
+ export async function applyInverseProjection(ctx, plan, change, cache) {
36
+ const inScope = (row) => plan.predicate === undefined || plan.predicate.evaluate(row) === true;
37
+ const project = (row) => plan.projectors.map(p => p.kind === 'passthrough' ? row[p.sourceCol] : p.eval(row));
38
+ const keyOf = (backingRow) => buildPrimaryKeyFromValues(plan.backingPkDefinition.map(d => backingRow[d.index]), plan.backingPkDefinition);
39
+ const ops = [];
40
+ if (change.op === 'insert') {
41
+ if (inScope(change.newRow))
42
+ ops.push({ kind: 'upsert', row: project(change.newRow) });
43
+ }
44
+ else if (change.op === 'delete') {
45
+ if (inScope(change.oldRow))
46
+ ops.push({ kind: 'delete-key', key: keyOf(project(change.oldRow)) });
47
+ }
48
+ else {
49
+ // UPDATE: a both-in-scope, same-backing-key change is one upsert (the host
50
+ // reports a single `update`); otherwise delete the old image if it was in
51
+ // scope and upsert the new image if it is — predicate-scope transitions and
52
+ // key-changing updates are genuinely two-sided. The scope check reads the
53
+ // SOURCE row (the predicate may reference unprojected columns), so both
54
+ // images must be in scope for the equal-image short-circuit.
55
+ const oldIn = inScope(change.oldRow);
56
+ const newIn = inScope(change.newRow);
57
+ if (oldIn && newIn) {
58
+ const oldImage = project(change.oldRow);
59
+ const newImage = project(change.newRow);
60
+ // Byte-faithful identity (rowsValueIdentical): subsumes key equality, and a
61
+ // collation-equal / byte-different image is NOT suppressed (it must re-key
62
+ // the stored bytes) — the same discipline as the host-level upsert skip.
63
+ if (rowsValueIdentical(oldImage, newImage))
64
+ return [];
65
+ if (backingPkEqual(plan.backingPkDefinition, oldImage, newImage)) {
66
+ // Same backing key (collation-aware — a collation-equal / byte-different
67
+ // key is the SAME btree identity, and the upsert re-keys the stored
68
+ // bytes): one upsert replaces the row wholesale, so the host reports
69
+ // a single `update` — matching the residual arms' post-suppression
70
+ // shape (one cascade dispatch, one change-log entry, no secondary-index
71
+ // churn from a delete+insert at an unchanged key).
72
+ ops.push({ kind: 'upsert', row: newImage });
73
+ }
74
+ else {
75
+ ops.push({ kind: 'delete-key', key: keyOf(oldImage) });
76
+ ops.push({ kind: 'upsert', row: newImage });
77
+ }
78
+ }
79
+ else {
80
+ if (oldIn)
81
+ ops.push({ kind: 'delete-key', key: keyOf(project(change.oldRow)) });
82
+ if (newIn)
83
+ ops.push({ kind: 'upsert', row: project(change.newRow) });
84
+ }
85
+ }
86
+ if (ops.length === 0)
87
+ return [];
88
+ const backing = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
89
+ if (!backing) {
90
+ throw new QuereusError(`Internal error: backing table '${plan.backingTableName}' for materialized view '${plan.mv.name}' not found`, StatusCode.INTERNAL);
91
+ }
92
+ const host = backingHost(ctx, backing);
93
+ const connection = await getBackingConnection(ctx, host, `${plan.backingSchema}.${plan.backingTableName}`, cache);
94
+ return host.applyMaintenance(connection, ops);
95
+ }
96
+ /**
97
+ * Validate the row images a maintenance apply WROTE (insert/update
98
+ * {@link BackingRowChange}s — a delete writes no image) against the plan's
99
+ * compiled {@link DerivedRowConstraintValidator}. Inline checks abort the
100
+ * writing statement with the maintained-table-attributed CONSTRAINT error;
101
+ * auto-deferred checks (subquery CHECK, every child-side FK) queue to the
102
+ * deferred-constraint queue and validate at commit. Deferred entries are
103
+ * pinned to the backing connection the maintenance write used (resolved from
104
+ * the per-statement cache, or re-resolved deterministically — the same
105
+ * connection either way) so commit-time evaluation reads the same pending
106
+ * state, mirroring the DML pipeline's active-connection capture.
107
+ */
108
+ export async function validateDerivedChanges(ctx, plan, validator, changes, cache) {
109
+ let connectionId;
110
+ if (validator.checks.some(c => c.needsDeferred)) {
111
+ const backing = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
112
+ if (backing) {
113
+ const host = backingHost(ctx, backing);
114
+ const conn = await getBackingConnection(ctx, host, `${plan.backingSchema}.${plan.backingTableName}`, cache);
115
+ connectionId = conn.connectionId;
116
+ }
117
+ }
118
+ for (const change of changes) {
119
+ if (change.op === 'delete')
120
+ continue;
121
+ await validateDerivedRowImage(ctx, validator, change.newRow, connectionId);
122
+ }
123
+ }
124
+ /**
125
+ * Row-time guard: reject a maintenance write that would store a NULL into a backing column
126
+ * the schema declares NOT NULL *and* that is a physical-PK member whose re-derived body
127
+ * output turned nullable — the row-time analogue of the refresh-path
128
+ * `assertNoNullInNotNullSeededPk` (runtime/emit/materialized-view-helpers.ts). Row-time
129
+ * maintenance is the PRIMARY silent-corruption vector: it fires at the source
130
+ * insert/update, before any refresh, so without this guard a NULL lands in a
131
+ * declared-NOT-NULL PK column with no error.
132
+ *
133
+ * The offending skew (a NOT-NULL ordering-seeded PK column over a loosened source) is
134
+ * precomputed once at plan build into {@link MaintenancePlanCommon.nullGuardColumns}
135
+ * (`undefined` for nearly every MV — the zero-overhead gate), so the common path pays a
136
+ * single boolean check per maintained write and only the rare skewed MV scans its guarded
137
+ * columns per change. A `delete` writes no image and is skipped. The throw unwinds the source
138
+ * statement with nothing committed — the backing write rides the pending layer, discarded on
139
+ * a throw before commit, exactly like {@link validateDerivedChanges}. Called BEFORE the
140
+ * MV-over-MV cascade so a NULL row never reaches a consumer. See
141
+ * fix/bug-mv-rowtime-null-into-notnull-seeded-pk.
142
+ */
143
+ export function assertNoNullInNotNullSeededPkRowTime(plan, changes) {
144
+ const guard = plan.nullGuardColumns;
145
+ if (!guard)
146
+ return;
147
+ for (const change of changes) {
148
+ if (change.op === 'delete')
149
+ continue; // a delete writes no image
150
+ for (const g of guard) {
151
+ const v = change.newRow[g.index];
152
+ if (v === null || v === undefined) {
153
+ throw nullInNotNullSeededPkError(plan.mv.schemaName, plan.mv.name, g.name);
154
+ }
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * Fire **parent-side** referential enforcement over the backing rows a maintenance
160
+ * apply REMOVED or re-keyed (delete / key-update {@link BackingRowChange}s — an insert
161
+ * has no parent-side action). When the maintained table `M` is the PARENT (FK target)
162
+ * of an FK declared on an ordinary table `C` (`create table C (… references M(col) …)`),
163
+ * a maintenance-driven delete/key-update of the referenced `M` row would silently orphan
164
+ * `C`'s rows, bypassing the declared RESTRICT / referential action. This is the
165
+ * **dual** of {@link validateDerivedChanges} (constraints declared *on* `M`); the FK here
166
+ * lives on `C` and references `M`, so it is invisible to `M`'s own plan/validator.
167
+ *
168
+ * It reuses the SAME shared referential-action engine the DML executor and the
169
+ * external-change ingestion seam use — no third copy — applying its two functions over
170
+ * each backing change exactly as `database-external-changes.ts` does:
171
+ * - {@link assertTransitiveRestrictsForParentMutation} — pre-walk the transitive cascade
172
+ * closure and throw a CONSTRAINT error naming `M` on any surviving RESTRICT child;
173
+ * - {@link executeForeignKeyActionsAndLens} — run declared CASCADE / SET NULL / SET DEFAULT,
174
+ * re-entering the DML executor (the already-holding-the-mutex variant) for each cascaded
175
+ * child write, so `C`'s own constraints, watches, nested cascades, and (if `C` is itself
176
+ * an MV source) its own maintenance all fire.
177
+ *
178
+ * Ordering: called AFTER the backing delta has landed in the pending layer (the RESTRICT
179
+ * walk runs POST-application — the child rows it keys off still exist because the cascade
180
+ * has not run yet) and AFTER `M`'s own image is validated, matching the DML executor's
181
+ * per-change order (capture → MV maintenance → FK actions) and the external-changes seam.
182
+ * `lensRouted = false`: a maintenance backing write is a physical basis write (maintained
183
+ * tables are not lens basis spines). A surviving RESTRICT throws up through
184
+ * {@link maintainRowTime} → the DML executor → the statement, rolling back the source write
185
+ * attributed to `M`.
186
+ *
187
+ * Gate: a cheap `foreign_keys`-pragma early-return keeps the pragma-off path free (the
188
+ * engine also early-returns, but skipping the `getTable` + loop avoids all per-change work).
189
+ * NOT gated on `plan.derivedRowValidator` — that gate is child-side (constraints *on* `M`);
190
+ * an inbound FK lives on `C` and leaves `M`'s plan untouched. Beyond the gate it fires
191
+ * unconditionally per delete/update change, but the engine no longer pays an `O(catalog)`
192
+ * scan: both calls route through `SchemaManager.getReferencingForeignKeys`, the precomputed
193
+ * reverse-FK index, so an `M` that nothing references resolves to the shared empty bucket and
194
+ * each call early-returns in O(1) — a maintained table with no inbound FK (the common case)
195
+ * pays only the pragma check plus one map lookup per delete/key-update change.
196
+ */
197
+ export async function enforceParentSideReferentialActions(ctx, plan, changes) {
198
+ const db = ctx;
199
+ if (!db.options.getBooleanOption('foreign_keys'))
200
+ return; // cheap gate; engine early-returns too
201
+ // The backing `TableSchema` — same object validateDerivedChanges resolves; its `.name`
202
+ // equals `M`'s, so an FK on `C` (`references M`) matches the engine's referencing scan.
203
+ const parent = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
204
+ if (!parent)
205
+ return; // backing gone ⇒ MV already broken
206
+ for (const change of changes) {
207
+ if (change.op === 'insert')
208
+ continue; // inserts have no parent-side actions
209
+ await assertTransitiveRestrictsForParentMutation(db, parent, change.op, change.oldRow, change.newRow);
210
+ await executeForeignKeyActionsAndLens(db, parent, change.op, change.oldRow, change.newRow);
211
+ }
212
+ }
213
+ /**
214
+ * Resolve the {@link BackingHost} capability surface for a backing table —
215
+ * see `vtab/backing-host.ts` for the contract. The host is resolved fresh per
216
+ * use (a map lookup on the owning module), so a drop+recreate of the backing
217
+ * always yields the new incarnation's host.
218
+ */
219
+ export function backingHost(ctx, backing) {
220
+ // The ctx IS the Database (same construction as buildMaintenancePlan's cast).
221
+ return resolveBackingHost(ctx, backing);
222
+ }
223
+ /**
224
+ * Obtain (lazily create + register) the backing table's
225
+ * {@link VirtualTableConnection} for the current transaction. Reuses the same
226
+ * connection a `select` from the MV resolves to (so reads-own-writes holds) —
227
+ * matched among the Database's registered connections by
228
+ * {@link BackingHost.ownsConnection}, which is pinned to the live backing
229
+ * incarnation; a freshly created connection is registered with the Database so
230
+ * the coordinated commit/rollback covers its pending state in lockstep with the
231
+ * source write.
232
+ *
233
+ * When an optional per-statement {@link BackingConnectionCache} is supplied, the
234
+ * scan over the Database's active connections (the dominant per-row cost on a bulk
235
+ * write) is paid once per (statement, backing): a hit returns the cached connection
236
+ * directly, and a miss caches whichever connection the scan resolves — or the one it
237
+ * lazily creates + registers. Caching the resolved/created connection is sound
238
+ * because the scan is deterministic within a statement (nothing interleaves between
239
+ * a statement's rows to change which connection a `select` from the MV picks), so the
240
+ * cache holds exactly what an uncached re-resolution would return.
241
+ */
242
+ export async function getBackingConnection(ctx, host, qualifiedName, cache) {
243
+ const cacheKey = qualifiedName.toLowerCase();
244
+ const cached = cache?.get(cacheKey);
245
+ if (cached)
246
+ return cached;
247
+ for (const c of ctx.getConnectionsForTable(qualifiedName)) {
248
+ if (host.ownsConnection(c)) {
249
+ cache?.set(cacheKey, c);
250
+ return c;
251
+ }
252
+ }
253
+ const conn = host.connect();
254
+ await ctx.registerConnection(conn);
255
+ cache?.set(cacheKey, conn);
256
+ return conn;
257
+ }
258
+ /**
259
+ * Execute a cached key-filtered residual for one affected key tuple, returning its
260
+ * result rows (0 or 1 for the aggregate shape; 0..N for the lateral-TVF fan-out shape).
261
+ * Bound through a fresh {@link RuntimeContext} on the live `db` so the residual's source
262
+ * scan reuses `T`'s transaction connection and reads this statement's pending writes
263
+ * (reads-own-writes) — the synchronous analogue of
264
+ * `database-assertions.ts:executeResidualPerTuple`. Shared by the residual-recompute
265
+ * (`'gk'`) and prefix-delete (`'pk'`) arms.
266
+ */
267
+ export async function runResidual(ctx, residualScheduler, bindParamPrefix, keyTuple) {
268
+ const params = {};
269
+ for (let i = 0; i < keyTuple.length; i++) {
270
+ params[`${bindParamPrefix}${i}`] = keyTuple[i];
271
+ }
272
+ return runScheduler(ctx, residualScheduler, params);
273
+ }
274
+ /**
275
+ * Run a cached maintenance scheduler to completion against **live mid-transaction source
276
+ * state** and collect its result rows. Bound through a fresh strict {@link RuntimeContext}
277
+ * on the live `db` so the scan reuses the source's transaction connection and reads this
278
+ * statement's pending writes (reads-own-writes). The no-`stmt`, fresh-context shape is the
279
+ * synchronous analogue of `database-assertions.ts:executeResidualPerTuple`. Shared by the
280
+ * key-filtered residual arms ({@link runResidual}, parameterized) and the whole-body
281
+ * full-rebuild arm ({@link applyFullRebuild}, no params).
282
+ */
283
+ export async function runScheduler(ctx, scheduler, params) {
284
+ const rctx = {
285
+ db: ctx,
286
+ stmt: undefined,
287
+ params,
288
+ context: createStrictRowContextMap(),
289
+ tableContexts: wrapTableContextsStrict(new Map()),
290
+ enableMetrics: false,
291
+ };
292
+ const result = await scheduler.run(rctx);
293
+ const rows = [];
294
+ if (isAsyncIterable(result)) {
295
+ for await (const r of result)
296
+ rows.push(r);
297
+ }
298
+ return rows;
299
+ }
300
+ /**
301
+ * Compute a **forward** key-filtered residual plan's per-row backing delta and apply it:
302
+ * derive the affected binding key(s) from the changed row (OLD ∪ NEW, deduped), re-run
303
+ * the key-filtered residual against live source state for each, and apply the **keyed
304
+ * diff**: a non-empty recomputed slice is upserted (the backing key IS the affected key,
305
+ * so the upsert replaces the old row wholesale — no delete-first — and the host's
306
+ * value-identical upsert skip turns a no-op recompute into ZERO effective changes
307
+ * instead of delete+insert churn); an emptied slice (residual returns nothing) emits the
308
+ * point delete, removing the stale backing row (nothing reported if it was already
309
+ * absent). Returns the effective {@link BackingRowChange}(s) the backing layer realized,
310
+ * for the MV-over-MV cascade — a real same-key change now reports one `update`.
311
+ *
312
+ * Shared by the single-source aggregate (`'residual-recompute'`, group key, ≤1 row per
313
+ * key) and the 1:1-join (`'join-residual'`, the driving table `T`'s PK, exactly the one
314
+ * joined row per key) arms — both bind on the forward driving source via
315
+ * {@link ForwardResidualPlan}; the only difference is the binding (group vs PK).
316
+ *
317
+ * Per-row recompute is correct without per-statement batching: every change to a key
318
+ * triggers a full recompute of that key's slice from live (reads-own-writes) state, so
319
+ * the last change to touch a key writes the authoritative backing row. Batching/dedup
320
+ * across a whole statement is an affordability optimization deferred with the
321
+ * statement-flush boundary (see the ticket handoff).
322
+ */
323
+ export async function applyForwardResidual(ctx, plan, change, cache) {
324
+ // Distinct affected keys (OLD ∪ NEW), deduped on the backing-key values: a
325
+ // non-key-changing update recomputes the group once; a key-changing update
326
+ // recomputes both the old and the new group.
327
+ const affected = new Map();
328
+ const addFrom = (row) => {
329
+ const keyVals = plan.backingPkSourceCols.map(sc => row[sc]);
330
+ const dedupKey = canonKeyValues(keyVals);
331
+ if (affected.has(dedupKey))
332
+ return;
333
+ affected.set(dedupKey, {
334
+ keyTuple: plan.bindColumns.map(c => row[c]),
335
+ keyVals,
336
+ deleteKey: buildPrimaryKeyFromValues(keyVals, plan.backingPkDefinition),
337
+ });
338
+ };
339
+ if (change.op === 'insert')
340
+ addFrom(change.newRow);
341
+ else if (change.op === 'delete')
342
+ addFrom(change.oldRow);
343
+ else {
344
+ addFrom(change.oldRow);
345
+ addFrom(change.newRow);
346
+ }
347
+ const ops = [];
348
+ for (const { keyTuple, keyVals, deleteKey } of affected.values()) {
349
+ const recomputed = await runResidual(ctx, plan.residualScheduler, plan.bindParamPrefix, keyTuple);
350
+ // Keep only the recomputed rows whose backing key equals the affected key.
351
+ // The residual for key K must only contribute K's slice; any other row is
352
+ // spurious and is dropped. This is the soundness net for an emptied group: when
353
+ // no source row matches the key, a *correct* grouped residual returns zero rows,
354
+ // but a constant-pinned multi-column grouped aggregate is mis-collapsed by the
355
+ // optimizer into a *scalar* aggregate that emits one all-NULL `count=0` row over
356
+ // the empty input (a pre-existing optimizer bug, filed separately as
357
+ // `fix/optimizer-constant-group-aggregate-empty-input-spurious-row`). That row's
358
+ // key ≠ K, so it is filtered here and the delete-without-upsert correctly removes
359
+ // the emptied group's backing row.
360
+ const slice = recomputed.filter(row => residualRowMatchesKey(plan, row, keyVals));
361
+ if (slice.length === 0) {
362
+ // Emptied slice: delete-without-upsert removes the stale backing row (the
363
+ // host reports nothing if the key was already absent).
364
+ ops.push({ kind: 'delete-key', key: deleteKey });
365
+ }
366
+ else {
367
+ // The slice shares the affected backing key, so each upsert REPLACES the old
368
+ // backing row — no delete-first — and the host's value-identical skip
369
+ // (vtab/backing-host.ts) suppresses a recompute that changed nothing.
370
+ for (const row of slice)
371
+ ops.push({ kind: 'upsert', row });
372
+ }
373
+ }
374
+ if (ops.length === 0)
375
+ return [];
376
+ const backing = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
377
+ if (!backing) {
378
+ throw new QuereusError(`Internal error: backing table '${plan.backingTableName}' for materialized view '${plan.mv.name}' not found`, StatusCode.INTERNAL);
379
+ }
380
+ const host = backingHost(ctx, backing);
381
+ const connection = await getBackingConnection(ctx, host, `${plan.backingSchema}.${plan.backingTableName}`, cache);
382
+ return host.applyMaintenance(connection, ops);
383
+ }
384
+ /**
385
+ * True iff `row`'s backing primary-key columns equal `keyVals` (the affected binding
386
+ * key, in `backingPkDefinition` order), under each column's collation. Used to keep
387
+ * only the residual row(s) belonging to the recomputed key — see
388
+ * {@link applyForwardResidual}.
389
+ */
390
+ export function residualRowMatchesKey(plan, row, keyVals) {
391
+ for (let i = 0; i < plan.backingPkDefinition.length; i++) {
392
+ const d = plan.backingPkDefinition[i];
393
+ if (compareSqlValuesFast(row[d.index], keyVals[i], d.collationFn) !== 0)
394
+ return false;
395
+ }
396
+ return true;
397
+ }
398
+ /**
399
+ * Dispatch a `'join-residual'` plan on **which source changed**. A write to the driving
400
+ * table `T` (`changedBase === plan.sourceBase`) is the forward case — recompute the one
401
+ * joined row keyed on `T`'s PK, identical to a size-1 `'row'`-binding residual — so it
402
+ * delegates straight to {@link applyForwardResidual} (delete old backing slice → run the
403
+ * `T`-keyed residual → upsert). A write to the lookup table `P` is the reverse case,
404
+ * handled by {@link applyLookupResidual}.
405
+ */
406
+ export async function applyJoinResidual(ctx, plan, change, changedBase, cache) {
407
+ if (changedBase === plan.sourceBase) {
408
+ return applyForwardResidual(ctx, plan, change, cache);
409
+ }
410
+ return applyLookupResidual(ctx, plan, change, cache);
411
+ }
412
+ /**
413
+ * Maintain a `'join-residual'` MV for a **lookup-side (`P`)** change: refresh the joined
414
+ * rows referencing each affected `P` key. Derive the affected `P` key(s) from the changed
415
+ * row (OLD ∪ NEW, deduped on `P`'s PK), and for each run the in-scope lookup-keyed residual
416
+ * (`… where P.pk = :pk0`, the body's WHERE retained) against live source state — returning
417
+ * every currently in-scope joined row, each carrying its `T.pk` backing key — and **upsert**
418
+ * each.
419
+ *
420
+ * **Upsert-only is sound for a no-WHERE / `T`-only-WHERE body.** For an inner/cross join with
421
+ * enforced RI and a predicate that cannot reference `P`, the *set* of backing rows referencing
422
+ * a given `P` row is `{ T : T.fk = P.pk }`, determined entirely by `T.fk` (a `T` column the
423
+ * `P` write cannot change), and the WHERE — over `T` only — cannot flip on a `P` write. So a
424
+ * `P` change can only re-derive the lookup-projected columns of those existing backing rows
425
+ * (an upsert at the unchanged `T.pk` key), never add or remove one: a `P` insert with no
426
+ * referencing `T` rows yields an empty residual (no-op); a `P` delete is only admissible (RI)
427
+ * when no `T` references it (empty residual); a `P` payload update upserts the affected rows
428
+ * with the new value.
429
+ *
430
+ * **A `P`-referencing WHERE needs the delete-capable pass.** When the body WHERE references
431
+ * `P`, a `P` write can flip a joined row's WHERE truth and so add or remove its backing row —
432
+ * which the in-scope upsert above (it returns *only* in-scope rows) could never delete. The
433
+ * builder then supplies `lookupMembershipResidualScheduler` (the body with the WHERE stripped,
434
+ * keyed on `P`). Per affected `P` key this runs both residuals against the same live state and
435
+ * applies the **keyed diff**: it **deletes** only the membership keys the in-scope recompute no
436
+ * longer produces (rows that left scope — the delete keys come from live `T` via the join, so
437
+ * they match existing backing keys and touch nothing belonging to another `P`; membership and
438
+ * in-scope rows read the same live state, so their key bytes match exactly), and **upserts**
439
+ * every in-scope row. A row leaving scope is deleted (removed); a row entering scope is
440
+ * upserted (added); an unchanged in-scope row's upsert is suppressed by the host's
441
+ * value-identical skip (vtab/backing-host.ts) — ZERO effective changes instead of the former
442
+ * delete+insert refresh churn; a changed in-scope row reports one `update`. The membership
443
+ * residual MUST ignore the WHERE — else a row leaving scope would never be deleted.
444
+ *
445
+ * A `T`-side membership change (insert/delete/FK-move) is the *forward* path's job and fires
446
+ * its own maintenance. Returns the effective {@link BackingRowChange}(s) for the MV-over-MV
447
+ * cascade. Per-row recompute is correct without batching for the same
448
+ * last-write-wins-against-live-state reason as {@link applyForwardResidual}.
449
+ */
450
+ export async function applyLookupResidual(ctx, plan, change, cache) {
451
+ // Distinct affected lookup keys (OLD ∪ NEW), deduped on `P`'s PK values.
452
+ const affected = new Map();
453
+ const addFrom = (row) => {
454
+ const keyTuple = plan.lookupBindColumns.map(c => row[c]);
455
+ const dedupKey = canonKeyValues(keyTuple);
456
+ if (!affected.has(dedupKey))
457
+ affected.set(dedupKey, keyTuple);
458
+ };
459
+ if (change.op === 'insert')
460
+ addFrom(change.newRow);
461
+ else if (change.op === 'delete')
462
+ addFrom(change.oldRow);
463
+ else {
464
+ addFrom(change.oldRow);
465
+ addFrom(change.newRow);
466
+ }
467
+ const ops = [];
468
+ for (const keyTuple of affected.values()) {
469
+ const recomputed = await runResidual(ctx, plan.lookupResidualScheduler, plan.lookupBindParamPrefix, keyTuple);
470
+ // Delete-capable (P-referencing WHERE): keyed diff of the membership residual
471
+ // (WHERE stripped) against the in-scope recompute — delete ONLY the membership
472
+ // keys the recompute no longer produces (rows that left the WHERE scope), not
473
+ // every member. Both residuals read the same live state, so a surviving row's
474
+ // key bytes match exactly (the byte-canonical set lookup is exact). Deletes
475
+ // precede upserts, preserving the prior arm's ordering discipline.
476
+ if (plan.lookupMembershipResidualScheduler) {
477
+ const produced = new Set(recomputed.map(row => canonKeyValues(plan.backingPkDefinition.map(d => row[d.index]))));
478
+ const members = await runResidual(ctx, plan.lookupMembershipResidualScheduler, plan.lookupBindParamPrefix, keyTuple);
479
+ for (const row of members) {
480
+ const keyVals = plan.backingPkDefinition.map(d => row[d.index]);
481
+ if (produced.has(canonKeyValues(keyVals)))
482
+ continue; // still in scope — upserted below
483
+ ops.push({ kind: 'delete-key', key: buildPrimaryKeyFromValues(keyVals, plan.backingPkDefinition) });
484
+ }
485
+ }
486
+ // Upsert every in-scope row; the host's value-identical skip suppresses the
487
+ // unchanged ones (an in-scope refresh that changed nothing reports nothing).
488
+ for (const row of recomputed)
489
+ ops.push({ kind: 'upsert', row });
490
+ }
491
+ if (ops.length === 0)
492
+ return [];
493
+ const backing = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
494
+ if (!backing) {
495
+ throw new QuereusError(`Internal error: backing table '${plan.backingTableName}' for materialized view '${plan.mv.name}' not found`, StatusCode.INTERNAL);
496
+ }
497
+ const host = backingHost(ctx, backing);
498
+ const connection = await getBackingConnection(ctx, host, `${plan.backingSchema}.${plan.backingTableName}`, cache);
499
+ return host.applyMaintenance(connection, ops);
500
+ }
501
+ /**
502
+ * Compute a `'prefix-delete'` plan's per-row backing delta and apply it: derive the
503
+ * affected base key(s) from the changed row (OLD ∪ NEW, deduped on the base key), and
504
+ * for each — re-run the base-PK-keyed residual against live source state and apply the
505
+ * **keyed diff against the existing effective fan-out slice** (read via the host's
506
+ * `scanEffective` with the base prefix, pending over committed — the same contiguous
507
+ * range the former wholesale `'delete-by-prefix'` removed): delete ONLY the existing
508
+ * keys the recompute no longer produces, upsert every recomputed row (the host's
509
+ * value-identical skip suppresses the unchanged ones). A base-PK-changing UPDATE
510
+ * recomputes both the OLD base key (slice diffs to all-deletes; the residual returns
511
+ * nothing for the now-absent old PK) and the NEW base key (new fan-out upserted); a
512
+ * DELETE diffs the old slice to all-deletes; an INSERT diffs against an empty slice
513
+ * (all upserts). An emptied/shrunk fan-out keeps the delete-without-upsert exactly —
514
+ * a disappearance is never "skipped". Returns the effective
515
+ * {@link BackingRowChange}(s) the backing layer realized, for the MV-over-MV cascade.
516
+ *
517
+ * Prefix-scan soundness is unchanged from the wholesale arm: the diff's slice read
518
+ * uses the same binary `equalityPrefix` scan `'delete-by-prefix'` used, sound under
519
+ * the build-time collation gate (the backing base-PK prefix inherits the source PK
520
+ * collation, and source-PK uniqueness collapses each collation class to one binary
521
+ * value). The stored slice's prefix bytes always equal the OLD image's (the slice was
522
+ * projected from that very source row), and OLD ∪ NEW both iterate, so a case-only
523
+ * base-PK rewrite still converges: the OLD-prefix pass pairs the slice with the
524
+ * recomputed rows (key pairing is collation-aware — the btree's identity — so a
525
+ * collation-equal key is REPLACED by its upsert, never also deleted) and the byte
526
+ * change surfaces as `update`s that re-key the stored bytes.
527
+ *
528
+ * Structurally the same as {@link applyForwardResidual}, differing only in the
529
+ * **prefix-slice** diff (one base row owns N backing rows sharing the prefix) and the
530
+ * **N-row** residual. Per-row recompute is correct without per-statement batching: the
531
+ * residual reads live (reads-own-writes) state, so the last write to a base key produces
532
+ * the authoritative slice. (Statement-level dedup of distinct base keys is the same
533
+ * affordability optimization deferred for the aggregate arm.)
534
+ */
535
+ export async function applyPrefixDelete(ctx, plan, change, cache) {
536
+ // Distinct affected base keys (OLD ∪ NEW), deduped on the base-PK values. `keyTuple`
537
+ // binds the residual (`pk{i}`); `prefix` is the slice's leading-PK equality key (the
538
+ // base-PK values in backing-PK order — identical here since the base PK leads the
539
+ // backing PK, but kept distinct for clarity).
540
+ const affected = new Map();
541
+ const addFrom = (row) => {
542
+ const keyTuple = plan.bindColumns.map(c => row[c]);
543
+ const dedupKey = canonKeyValues(keyTuple);
544
+ if (affected.has(dedupKey))
545
+ return;
546
+ affected.set(dedupKey, { keyTuple, prefix: plan.backingPrefixSourceCols.map(sc => row[sc]) });
547
+ };
548
+ if (change.op === 'insert')
549
+ addFrom(change.newRow);
550
+ else if (change.op === 'delete')
551
+ addFrom(change.oldRow);
552
+ else {
553
+ addFrom(change.oldRow);
554
+ addFrom(change.newRow);
555
+ }
556
+ // Resolved up front (unlike the point-op arms): the keyed diff reads the existing
557
+ // effective slice before any op exists. The former wholesale arm always emitted ops,
558
+ // so this resolves no more connections than it did.
559
+ const backing = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
560
+ if (!backing) {
561
+ throw new QuereusError(`Internal error: backing table '${plan.backingTableName}' for materialized view '${plan.mv.name}' not found`, StatusCode.INTERNAL);
562
+ }
563
+ const host = backingHost(ctx, backing);
564
+ const connection = await getBackingConnection(ctx, host, `${plan.backingSchema}.${plan.backingTableName}`, cache);
565
+ const ops = [];
566
+ for (const { keyTuple, prefix } of affected.values()) {
567
+ const recomputed = await runResidual(ctx, plan.residualScheduler, plan.bindParamPrefix, keyTuple);
568
+ // The residual for base key K filters T to K, so every row it returns shares K's
569
+ // base-PK prefix; the prefix-match guard is a defensive soundness net (mirrors
570
+ // the aggregate arm's `residualRowMatchesKey`).
571
+ const slice = recomputed.filter(row => residualRowMatchesBasePrefix(plan, row, prefix));
572
+ // Existing effective fan-out rows for this base prefix (pending over committed).
573
+ const existing = [];
574
+ for await (const row of host.scanEffective(connection, { equalityPrefix: prefix })) {
575
+ existing.push(row);
576
+ }
577
+ // Keyed diff. Key pairing is collation-aware over the full backing PK (the btree's
578
+ // identity): a recomputed row whose key is collation-equal to an existing row
579
+ // REPLACES it via the upsert below, so it must not also be deleted. Deletes precede
580
+ // upserts (the wholesale arm's ordering discipline). The delete keys are built from
581
+ // the EXISTING rows' stored values, so the host's collation-aware point lookup
582
+ // always finds them.
583
+ for (const ex of existing) {
584
+ if (slice.some(row => backingPkEqual(plan.backingPkDefinition, row, ex)))
585
+ continue;
586
+ ops.push({
587
+ kind: 'delete-key',
588
+ key: buildPrimaryKeyFromValues(plan.backingPkDefinition.map(d => ex[d.index]), plan.backingPkDefinition),
589
+ });
590
+ }
591
+ for (const row of slice)
592
+ ops.push({ kind: 'upsert', row });
593
+ }
594
+ if (ops.length === 0)
595
+ return [];
596
+ return host.applyMaintenance(connection, ops);
597
+ }
598
+ /**
599
+ * True iff two backing rows agree on every backing-PK column under that column's
600
+ * collation — the btree's key identity. Pairs an existing slice row with the
601
+ * recomputed row that replaces it in {@link applyPrefixDelete}'s keyed diff.
602
+ */
603
+ export function backingPkEqual(pkDef, a, b) {
604
+ for (const d of pkDef) {
605
+ if (compareSqlValuesFast(a[d.index], b[d.index], d.collationFn) !== 0)
606
+ return false;
607
+ }
608
+ return true;
609
+ }
610
+ /**
611
+ * True iff `row`'s **leading** (base-prefix) backing-PK columns equal `prefixVals` (the
612
+ * affected base key, in backing-PK order), under each column's collation. Keeps only the
613
+ * residual fan-out row(s) belonging to the recomputed base key — see
614
+ * {@link applyPrefixDelete}.
615
+ */
616
+ export function residualRowMatchesBasePrefix(plan, row, prefixVals) {
617
+ for (let i = 0; i < plan.basePrefixLength; i++) {
618
+ const d = plan.backingPkDefinition[i];
619
+ if (compareSqlValuesFast(row[d.index], prefixVals[i], d.collationFn) !== 0)
620
+ return false;
621
+ }
622
+ return true;
623
+ }
624
+ //# sourceMappingURL=database-materialized-views-apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-materialized-views-apply.js","sourceRoot":"","sources":["../../../src/core/database-materialized-views-apply.ts"],"names":[],"mappings":"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"}