@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
@@ -15,7 +15,28 @@ let transactionLayerCounter = 1000;
15
15
  export class TransactionLayer {
16
16
  layerId;
17
17
  parentLayer;
18
- tableSchemaAtCreation; // Schema when this layer was started
18
+ /**
19
+ * Inherited verbatim from the parent layer: this layer's secondary BTrees are
20
+ * built over the parent's (`new MemoryIndex(..., parentSecondaryTree)`), so the
21
+ * child's `compareKeys` must come from the same collation function the parent
22
+ * ordered those nodes with.
23
+ */
24
+ collationResolver;
25
+ /**
26
+ * Schema when this layer was started. Replaced when DDL runs inside this layer's own
27
+ * transaction: by {@link adoptSchema} for additive index/constraint DDL, a secondary-index
28
+ * re-key from `alter column … set collate`, and index/constraint removal (`drop index` /
29
+ * `drop constraint`), and by {@link rekeyPrimaryKey} when that collate change lands on a
30
+ * primary-key column. The column set is identical across every such swap.
31
+ */
32
+ tableSchemaAtCreation;
33
+ /**
34
+ * Derived from {@link tableSchemaAtCreation}'s primary key definition, so the primary
35
+ * tree, every inherited secondary index, and every scan share one comparator/encoder
36
+ * set — and one pass of collation resolution. Rebuilt only by {@link rekeyPrimaryKey},
37
+ * which rebuilds the structures keyed by them in the same call.
38
+ */
39
+ pkFunctions;
19
40
  // Primary modifications BTree that inherits from parent
20
41
  primaryModifications;
21
42
  // Secondary index BTrees that inherit from parent's indexes
@@ -24,23 +45,33 @@ export class TransactionLayer {
24
45
  _hasModifications = false;
25
46
  /** Pending changes for event emission. Null if tracking disabled. */
26
47
  pendingChanges = null;
48
+ // NOTE: always-on, one entry per record{Upsert,Delete} call — an ordered
49
+ // list, so repeated writes to the same PK are all retained (last-write-wins is
50
+ // applied at replay by re-deriving each key's effective row on the new head).
51
+ // If a write-heavy transaction ever shows memory pressure from this log,
52
+ // collapse it to a PK-keyed last-write map (only the net per-PK effect is ever
53
+ // replayed).
54
+ /** Always-maintained log of this layer's own structural writes (see {@link OwnWrite}). */
55
+ ownWrites = [];
27
56
  constructor(parent) {
28
57
  this.layerId = transactionLayerCounter++;
29
58
  this.parentLayer = parent;
59
+ this.collationResolver = parent.collationResolver;
30
60
  const schema = parent.getSchema();
31
61
  if (!schema) {
32
62
  throw new QuereusError(`TransactionLayer: parent layer ${parent.getLayerId()} has no schema. ` +
33
63
  'This usually means a savepoint snapshot was created before the overlay was initialised.', StatusCode.INTERNAL);
34
64
  }
35
65
  this.tableSchemaAtCreation = schema; // Schema is fixed at creation
66
+ this.pkFunctions = createPrimaryKeyFunctions(schema, this.collationResolver);
36
67
  // Initialize primary modifications BTree with parent's primary tree as base
37
- const { primaryKeyExtractorFromRow, primaryKeyComparator } = this.getPkExtractorsAndComparators(this.tableSchemaAtCreation);
68
+ const { extractFromRow, compare: primaryKeyComparator } = this.pkFunctions;
38
69
  const btreeKeyFromValue = (value) => {
39
- const result = primaryKeyExtractorFromRow(value);
70
+ const result = extractFromRow(value);
40
71
  return result;
41
72
  };
42
73
  const parentPrimaryTree = parent.getModificationTree('primary');
43
- this.primaryModifications = new BTree(btreeKeyFromValue, primaryKeyComparator, parentPrimaryTree || undefined // Use parent's primary tree as base
74
+ this.primaryModifications = new BTree(btreeKeyFromValue, primaryKeyComparator, { base: parentPrimaryTree || undefined } // Use parent's primary tree as base
44
75
  );
45
76
  // Initialize secondary indexes that inherit from parent's secondary indexes
46
77
  this.secondaryIndexes = new Map();
@@ -53,15 +84,301 @@ export class TransactionLayer {
53
84
  // All layers of a table derive the PK comparator and encoder from the same PK
54
85
  // definition, so an inherited entry's `primaryKeys` Map keys stay valid for this
55
86
  // layer's value add/remove on each MemoryIndex entry.
56
- const pkFunctions = createPrimaryKeyFunctions(schema);
87
+ const pkFunctions = this.pkFunctions;
57
88
  for (const indexSchema of schema.indexes) {
58
89
  const parentSecondaryTree = this.parentLayer.getSecondaryIndexTree?.(indexSchema.name);
59
90
  // Create MemoryIndex with inherited BTree
60
- const memoryIndex = new MemoryIndex(indexSchema, schema.columns, pkFunctions.compare, pkFunctions.encode, parentSecondaryTree || undefined // Use parent's secondary index tree as base
91
+ const memoryIndex = new MemoryIndex(indexSchema, schema.columns, this.collationResolver, pkFunctions.compare, pkFunctions.encode, schema.name, parentSecondaryTree || undefined // Use parent's secondary index tree as base
61
92
  );
62
93
  this.secondaryIndexes.set(indexSchema.name, memoryIndex);
63
94
  }
64
95
  }
96
+ /**
97
+ * Adopts a schema change that was applied to the table while THIS layer's transaction
98
+ * is still open, so the rest of that transaction reads and enforces the new structures.
99
+ * Three kinds of change reach here:
100
+ *
101
+ * - **Additive** (`create index` / `create unique index` / `add constraint … unique`):
102
+ * a name absent from {@link secondaryIndexes} is built and added. Without it, a layer
103
+ * created before the DDL keeps its creation-time schema: it has neither the new
104
+ * `IndexSchema` (so an index scan raises "Secondary index not found") nor the derived
105
+ * `uniqueConstraints` entry (so `checkUniqueConstraints` silently skips it and a
106
+ * colliding insert is accepted).
107
+ * - **Re-keying** (`alter column … set collate`): an index whose `IndexSchema` object
108
+ * is no longer the one this layer holds is REPLACED. `BaseLayer.rebuildAllSecondaryIndexes`
109
+ * hands every index a fresh BTree under the new collation, so a layer that kept its old
110
+ * `MemoryIndex` would go on comparing under the old collation over an orphaned tree —
111
+ * and, once it becomes the committed head at commit, would shadow the base's rebuilt
112
+ * structures entirely.
113
+ * - **Removal** (`drop index` / `drop constraint`): an index whose name the new schema no
114
+ * longer declares is DROPPED from {@link secondaryIndexes}. Without it the layer keeps the
115
+ * derived `uniqueConstraints` entry in its frozen schema and goes on enforcing a constraint
116
+ * that no longer exists, and an index scan can still reach the orphaned tree via
117
+ * {@link getSecondaryIndexTree}. An empty/undefined `newSchema.indexes` drops all of them.
118
+ * Like the additive side, a removal is NOT undone by `rollback to savepoint`: every layer in
119
+ * the chain adopts it, so the restored snapshot has the index dropped too (DDL is not
120
+ * transactional here — see `feat-ddl-transaction-capability`).
121
+ *
122
+ * An index is considered unchanged only when the NEW schema's `IndexSchema` is the very
123
+ * object the old schema carried. Every DDL path that re-keys rebuilds those objects, and
124
+ * every additive path preserves them, so identity is the exact discriminator.
125
+ *
126
+ * The caller MUST apply this to a whole parent chain oldest-first: each layer builds its
127
+ * `MemoryIndex` over its parent's tree for that index, so the parent's must already be the
128
+ * new one. Only the layer's OWN writes are re-indexed — everything below is inherited
129
+ * copy-on-write, exactly as {@link initializeSecondaryIndexes} does at construction.
130
+ *
131
+ * Never applied to a column-set or primary-key change: either would invalidate
132
+ * {@link pkFunctions} and the primary tree. A PK-column collation change goes to
133
+ * {@link rekeyPrimaryKey} instead, and `ensureSchemaChangeSafety` raises BUSY when any
134
+ * connection other than the DDL issuer holds a pending layer.
135
+ */
136
+ adoptSchema(newSchema) {
137
+ const oldSchema = this.tableSchemaAtCreation;
138
+ this.tableSchemaAtCreation = newSchema;
139
+ // Additive + re-key: add an index the layer lacks, replace one the new schema rebuilt.
140
+ for (const indexSchema of newSchema.indexes ?? []) {
141
+ const held = this.secondaryIndexes.get(indexSchema.name);
142
+ const previous = oldSchema.indexes?.find(ix => ix.name === indexSchema.name);
143
+ if (held && previous === indexSchema)
144
+ continue;
145
+ const parentSecondaryTree = this.parentLayer.getSecondaryIndexTree?.(indexSchema.name);
146
+ const memoryIndex = new MemoryIndex(indexSchema, newSchema.columns, this.collationResolver, this.pkFunctions.compare, this.pkFunctions.encode, newSchema.name, parentSecondaryTree || undefined);
147
+ this.reindexOwnWrites(memoryIndex);
148
+ this.secondaryIndexes.set(indexSchema.name, memoryIndex);
149
+ }
150
+ // Removal (`drop index` / `drop constraint`): drop every held index the new schema no
151
+ // longer declares (empty/undefined `newSchema.indexes` drops all). Enforcement stops the
152
+ // moment the frozen schema loses the derived `uniqueConstraints` entry; dropping the
153
+ // orphaned `MemoryIndex` additionally keeps an index scan from reaching it.
154
+ const declared = new Set((newSchema.indexes ?? []).map(ix => ix.name));
155
+ for (const name of [...this.secondaryIndexes.keys()]) {
156
+ if (!declared.has(name))
157
+ this.secondaryIndexes.delete(name);
158
+ }
159
+ }
160
+ /**
161
+ * Adopts a schema change that re-keys the PRIMARY KEY — `alter column … set collate` on a
162
+ * PK column — applied while THIS layer's transaction is still open. Rebuilds
163
+ * {@link pkFunctions}, the primary tree, and every secondary index (each of which derives
164
+ * its `primaryKeyComparator` / `encode` from the PK definition), so nothing this layer owns
165
+ * survives the ALTER still keyed under the old collation.
166
+ *
167
+ * Like {@link adoptSchema}, the caller MUST apply this to a whole parent chain oldest-first
168
+ * (base layer already re-keyed): the new tree inherits copy-on-write from the parent's new
169
+ * one, so the parent's must already exist.
170
+ *
171
+ * ### Why {@link ownWrites} is rewritten to its net effect
172
+ *
173
+ * `ownWrites` is an ordered log that may touch one key repeatedly, and under the new
174
+ * comparator two keys that were distinct in that log can collapse into one. Replaying it
175
+ * verbatim would let a later write land on an earlier write's row, or a deletion remove a
176
+ * row a subsequent upsert had already placed. So the log is REWRITTEN here, in place, to
177
+ * one entry per key: the layer's effective row (read out of the pre-rekey tree), or a
178
+ * deletion — deletions first, and a deletion whose key an upsert now occupies is dropped
179
+ * entirely. The rewritten log is what every later reader of it replays: this method's own
180
+ * index rebuild, a `create index` later in the same transaction ({@link adoptSchema} →
181
+ * {@link reindexOwnWrites}), and `MemoryTableManager.commitTransaction`'s rebase.
182
+ *
183
+ * Soundness rests on a precondition `MemoryTableManager.validateRekeyedPrimaryKey` enforces
184
+ * before any of this runs: NO layer in the chain — base included — holds two rows that
185
+ * collide under the new comparator. Given that, every key here resolves to at most one row
186
+ * in the parent, so a deletion removes exactly the row this layer removed and an upsert
187
+ * lands at exactly one key.
188
+ *
189
+ * NOTE: the deletion replay assumes a key this layer deleted was a key the PARENT held.
190
+ * That holds because every DML operation gets its own layer (`MemoryTableConnection`'s
191
+ * statement savepoints), so no layer both creates and destroys a key. If a single layer
192
+ * ever does, `rekeyed.find(key)` can land on a *colliding* parent row and delete it: at
193
+ * that point the deletion needs to verify, under the OLD comparator, that the row it found
194
+ * is the row it removed.
195
+ */
196
+ rekeyPrimaryKey(newSchema) {
197
+ const preRekeyTree = this.primaryModifications;
198
+ const preRekeyEncode = this.pkFunctions.encode;
199
+ this.tableSchemaAtCreation = newSchema;
200
+ this.pkFunctions = createPrimaryKeyFunctions(newSchema, this.collationResolver);
201
+ const { extractFromRow, compare } = this.pkFunctions;
202
+ const parentPrimaryTree = this.parentLayer.getModificationTree('primary');
203
+ const rekeyed = new BTree((value) => extractFromRow(value), compare, { base: parentPrimaryTree || undefined });
204
+ // Net per-key effect of this layer's own writes, read out of the pre-rekey tree
205
+ // (`get` traverses the inheritance chain, so it yields the layer's EFFECTIVE row).
206
+ const deletions = [];
207
+ const upserts = [];
208
+ const seen = new Set();
209
+ for (const write of this.ownWrites) {
210
+ const encoded = preRekeyEncode(write.primaryKey);
211
+ if (seen.has(encoded))
212
+ continue;
213
+ seen.add(encoded);
214
+ const effectiveRow = preRekeyTree.get(write.primaryKey);
215
+ if (effectiveRow === undefined)
216
+ deletions.push(write.primaryKey);
217
+ else
218
+ upserts.push(effectiveRow);
219
+ }
220
+ for (const primaryKey of deletions) {
221
+ const path = rekeyed.find(primaryKey);
222
+ if (path.on)
223
+ rekeyed.deleteAt(path);
224
+ }
225
+ for (const row of upserts) {
226
+ rekeyed.upsert(row);
227
+ }
228
+ this.primaryModifications = rekeyed;
229
+ // A deleted key an upsert has since re-occupied (`update t set v='A' where v='a'` under
230
+ // NOCASE) is no longer a deletion of anything: keeping it would make the log claim both
231
+ // a deletion and an upsert of the same key.
232
+ const survivingDeletions = deletions.filter(primaryKey => rekeyed.get(primaryKey) === undefined);
233
+ this.ownWrites.length = 0;
234
+ for (const primaryKey of survivingDeletions) {
235
+ this.ownWrites.push({ type: 'delete', primaryKey });
236
+ }
237
+ for (const row of upserts) {
238
+ this.ownWrites.push({ type: 'upsert', primaryKey: extractFromRow(row), newRow: row });
239
+ }
240
+ // Every secondary index's key encoding and PK bookkeeping derive from `pkFunctions`,
241
+ // and each inherits the parent's freshly-rebuilt tree — so all of them are rebuilt,
242
+ // including ones the altered column does not appear in.
243
+ this.secondaryIndexes = new Map();
244
+ this.initializeSecondaryIndexes();
245
+ for (const index of this.secondaryIndexes.values()) {
246
+ this.reindexOwnWrites(index);
247
+ }
248
+ }
249
+ /**
250
+ * Adopts an `alter column … set data type` / `set not null` backfill conversion applied while
251
+ * THIS layer's transaction is still open: swaps in the new schema and rewrites the CONVERTED value
252
+ * into every own-written row at `colIndex`, so the rest of the transaction — and, at commit, the
253
+ * committed head — read the new value instead of the raw one the transaction wrote. This is what
254
+ * fills the transaction's OWN pending NULL rows for SET NOT NULL backfill, which live in this
255
+ * layer, not the base.
256
+ *
257
+ * NON-primary-key column, or a key column whose bytes are unchanged. `MemoryTableManager.alterColumn`
258
+ * rejects a physical retype of a key column before any mutation, and SET NOT NULL leaves the key
259
+ * bytes intact, so the primary key encoding is unchanged: {@link pkFunctions} and the primary tree
260
+ * keep their keys, and only the value at `colIndex` moves. (Contrast {@link rekeyPrimaryKey}, which
261
+ * must rebuild the tree because the keys themselves change.)
262
+ *
263
+ * Like {@link adoptSchema} / {@link rekeyPrimaryKey}, the caller MUST apply this oldest-first
264
+ * (base already converted): the layer's copy-on-write base inherits the parent's already-converted
265
+ * rows, so only this layer's OWN writes are rewritten here.
266
+ *
267
+ * `ownWrites` is collapsed to its net per-key effect (as {@link rekeyPrimaryKey} does) so an
268
+ * intermediate value a later write overwrote never reaches `convert`, and the rewritten log —
269
+ * carrying converted values — is what the rebase (`MemoryTableManager.rebaseLayerOntoHead`) and
270
+ * any later `create index` ({@link reindexOwnWrites}) replay.
271
+ *
272
+ * NULL own-values pass through untouched UNLESS `convertNulls` is set (the SET NOT NULL backfill
273
+ * maps null → DEFAULT). A value that fails to convert is left as-is (not an error): the manager
274
+ * validated every value in the effective VIEW before calling, so an unconvertible own value here is
275
+ * one a higher layer has shadowed — it is never read through this layer, and re-converting it would
276
+ * double-fault a value the transaction cannot see. It matches the base rewrite's same-reasoned skip.
277
+ */
278
+ convertColumn(colIndex, convert, newSchema, convertNulls = false) {
279
+ const preTree = this.primaryModifications;
280
+ this.tableSchemaAtCreation = newSchema;
281
+ // The parent's primary tree has been REPLACED by the conversion (base rebuilt from fresh
282
+ // rows, or a parent layer already converted oldest-first), so this layer's own tree — which
283
+ // derived from the OLD one — must be rebuilt over the parent's NEW tree, exactly as
284
+ // rekeyPrimaryKey does. The PK is unchanged (a key-column retype is rejected upstream), so
285
+ // pkFunctions and the keys stay; only the value at colIndex moves.
286
+ const { extractFromRow, compare } = this.pkFunctions;
287
+ const parentPrimaryTree = this.parentLayer.getModificationTree('primary');
288
+ const rebuilt = new BTree((value) => extractFromRow(value), compare, { base: parentPrimaryTree || undefined });
289
+ // Net per-key effect of this layer's own writes, read out of the pre-conversion tree. The PK
290
+ // is unchanged, so a key is either finally-deleted or finally-upserted, never both — no key
291
+ // can collapse onto another (unlike rekeyPrimaryKey).
292
+ const seen = new Set();
293
+ const survivingDeletions = [];
294
+ const upserts = [];
295
+ for (const write of this.ownWrites) {
296
+ const encoded = this.pkFunctions.encode(write.primaryKey);
297
+ if (seen.has(encoded))
298
+ continue;
299
+ seen.add(encoded);
300
+ // `get` traverses the inheritance chain, so this is the layer's EFFECTIVE row:
301
+ // undefined when the layer deleted the key, the layer's own row otherwise.
302
+ const effectiveRow = preTree.get(write.primaryKey);
303
+ if (effectiveRow === undefined) {
304
+ survivingDeletions.push(write.primaryKey);
305
+ continue;
306
+ }
307
+ const oldVal = effectiveRow[colIndex];
308
+ let newRow = effectiveRow;
309
+ if (oldVal !== null || convertNulls) {
310
+ try {
311
+ const newVal = convert(oldVal);
312
+ newRow = effectiveRow.map((v, i) => i === colIndex ? newVal : v);
313
+ }
314
+ catch {
315
+ // Shadowed unconvertible own value — leave as-is (see method doc).
316
+ }
317
+ }
318
+ upserts.push(newRow);
319
+ }
320
+ for (const primaryKey of survivingDeletions) {
321
+ const path = rebuilt.find(primaryKey);
322
+ if (path.on)
323
+ rebuilt.deleteAt(path);
324
+ }
325
+ for (const row of upserts) {
326
+ rebuilt.upsert(row);
327
+ }
328
+ this.primaryModifications = rebuilt;
329
+ this.ownWrites.length = 0;
330
+ for (const primaryKey of survivingDeletions) {
331
+ this.ownWrites.push({ type: 'delete', primaryKey });
332
+ }
333
+ for (const row of upserts) {
334
+ this.ownWrites.push({ type: 'upsert', primaryKey: extractFromRow(row), newRow: row });
335
+ }
336
+ // Any secondary index on the column holds keys extracted from the OLD value. Rebuild every
337
+ // index over the parent's freshly-converted trees (matching the base's unconditional rebuild),
338
+ // then re-file this layer's own converted writes.
339
+ this.secondaryIndexes = new Map();
340
+ this.initializeSecondaryIndexes();
341
+ for (const index of this.secondaryIndexes.values()) {
342
+ this.reindexOwnWrites(index);
343
+ }
344
+ }
345
+ /**
346
+ * Brings a newly-inherited `MemoryIndex` (built over the parent's tree, which
347
+ * already covers the parent chain's effective rows) up to date with this layer's own
348
+ * writes: for each primary key this layer touched, drop the parent's entry and add
349
+ * this layer's effective row, if any. Both operations copy-on-write into this
350
+ * layer's tree, leaving the parent's entries untouched.
351
+ *
352
+ * Driven by {@link ownWrites} (deduplicated by primary key — the log is an ordered
353
+ * list that may touch one key repeatedly) rather than a full scan, so the cost is
354
+ * proportional to the transaction's writes, not the table's size.
355
+ *
356
+ * The parent's entry is dropped under the PARENT row's own primary key, not under the
357
+ * key the write names. After {@link rekeyPrimaryKey} the two can differ — a write of
358
+ * `'A'` resolves, under NOCASE, to a parent row keyed `'a'` — and filing the removal
359
+ * under the write's key would leave the parent's entry in place, so an index scan would
360
+ * return the row twice.
361
+ */
362
+ reindexOwnWrites(index) {
363
+ const parentPrimaryTree = this.parentLayer.getModificationTree('primary');
364
+ const seen = new Set();
365
+ for (const write of this.ownWrites) {
366
+ const encoded = this.pkFunctions.encode(write.primaryKey);
367
+ if (seen.has(encoded))
368
+ continue;
369
+ seen.add(encoded);
370
+ const parentRow = parentPrimaryTree?.get(write.primaryKey);
371
+ if (parentRow !== undefined && index.rowMatchesPredicate(parentRow)) {
372
+ index.removeEntry(index.keyFromRow(parentRow), this.pkFunctions.extractFromRow(parentRow));
373
+ }
374
+ // `get` traverses the inheritance chain, so this is the layer's EFFECTIVE row:
375
+ // undefined when the layer deleted the key, the layer's own row otherwise.
376
+ const ownRow = this.primaryModifications.get(write.primaryKey);
377
+ if (ownRow !== undefined && index.rowMatchesPredicate(ownRow)) {
378
+ index.addEntry(index.keyFromRow(ownRow), this.pkFunctions.extractFromRow(ownRow));
379
+ }
380
+ }
381
+ }
65
382
  getLayerId() {
66
383
  return this.layerId;
67
384
  }
@@ -97,16 +414,20 @@ export class TransactionLayer {
97
414
  getPendingChanges() {
98
415
  return this.pendingChanges ?? [];
99
416
  }
417
+ /** This layer's own structural writes, oldest-first — the rebase replay source. */
418
+ getOwnWrites() {
419
+ return this.ownWrites;
420
+ }
100
421
  getPkExtractorsAndComparators(schema) {
101
422
  if (schema !== this.tableSchemaAtCreation) {
102
423
  warnLog("TransactionLayer.getPkExtractorsAndComparators called with a schema different from its creation schema. Using creation schema.");
103
424
  }
104
425
  // Use the centralized primary key functions instead of duplicating the logic
105
426
  // This ensures consistent handling of empty primary key definitions
106
- const pkFunctions = createPrimaryKeyFunctions(this.tableSchemaAtCreation);
107
427
  return {
108
- primaryKeyExtractorFromRow: pkFunctions.extractFromRow,
109
- primaryKeyComparator: pkFunctions.compare
428
+ primaryKeyExtractorFromRow: this.pkFunctions.extractFromRow,
429
+ primaryKeyComparator: this.pkFunctions.compare,
430
+ primaryKeyEncoder: this.pkFunctions.encode
110
431
  };
111
432
  }
112
433
  getModificationTree(indexName) {
@@ -126,6 +447,8 @@ export class TransactionLayer {
126
447
  throw new QuereusError("Cannot modify a committed layer");
127
448
  this._hasModifications = true;
128
449
  this.primaryModifications.upsert(newRowData);
450
+ // Always-on replay log (independent of change tracking).
451
+ this.ownWrites.push({ type: 'upsert', primaryKey, newRow: newRowData });
129
452
  // Track change for event emission
130
453
  if (this.pendingChanges) {
131
454
  this.pendingChanges.push({
@@ -193,6 +516,8 @@ export class TransactionLayer {
193
516
  }
194
517
  // If key doesn't exist, there's nothing to delete - no deletion marker needed
195
518
  // Inheritree's copy-on-write semantics handle this properly
519
+ // Always-on replay log (independent of change tracking).
520
+ this.ownWrites.push({ type: 'delete', primaryKey });
196
521
  // Track change for event emission
197
522
  if (this.pendingChanges) {
198
523
  this.pendingChanges.push({
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/transaction.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { Database } from '../../core/database.js';
2
2
  import { type TableSchema, type IndexSchema } from '../../schema/table.js';
3
3
  import { MemoryTable } from './table.js';
4
- import type { VirtualTableModule, SchemaChangeInfo } from '../module.js';
4
+ import type { VirtualTableModule, SchemaChangeInfo, EffectiveRowSource } from '../module.js';
5
5
  import { MemoryTableManager } from './layer/manager.js';
6
6
  import type { BackingHost } from '../backing-host.js';
7
7
  import type { MemoryTableConfig } from './types.js';
@@ -37,6 +37,16 @@ export declare class MemoryTableModule implements VirtualTableModule<MemoryTable
37
37
  * an in-place layer collapser would force this back to `'serial'`.
38
38
  */
39
39
  readonly concurrencyMode: "reentrant-reads";
40
+ /**
41
+ * Memory tables snapshot the connection's read layer once at `query()` entry
42
+ * and iterate the captured layer's immutable BTree (see `concurrencyMode`
43
+ * above and `layer/connection.ts`). A `DELETE`/`UPDATE` that mutates the table
44
+ * mid-scan writes a fresh child layer, leaving the in-flight scan's captured
45
+ * layer untouched — so the scan cursor never observes its own statement's
46
+ * writes. That is exactly per-scan snapshot isolation, so the DML executor may
47
+ * STREAM predicate DELETE/UPDATE against memory tables (no eager buffering).
48
+ */
49
+ readonly scanSnapshotIsolation: true;
40
50
  readonly tables: Map<string, MemoryTableManager>;
41
51
  private eventEmitter?;
42
52
  constructor(eventEmitter?: VTableEventEmitter);
@@ -96,7 +106,14 @@ export declare class MemoryTableModule implements VirtualTableModule<MemoryTable
96
106
  */
97
107
  private findEqualityMatches;
98
108
  /**
99
- * Find range match for a column
109
+ * Find range match for a column.
110
+ *
111
+ * Claims at most the FIRST lower ('>'/'>=') and the FIRST upper ('<'/'<=') bound,
112
+ * matching what `rule-select-access-path` actually turns into seek bounds (it picks
113
+ * per column by position). Claiming a redundant same-side bound as handled would
114
+ * drop it from the residual filter without ever applying it — `where v > 10 and
115
+ * v > 30` would wrongly return the `v > 10` rows. Redundant bounds stay unhandled
116
+ * and survive as a residual `Filter`.
100
117
  */
101
118
  private findRangeMatch;
102
119
  /**
@@ -161,11 +178,11 @@ export declare class MemoryTableModule implements VirtualTableModule<MemoryTable
161
178
  /**
162
179
  * Alters an existing memory table's structure (ADD/DROP/RENAME COLUMN).
163
180
  */
164
- alterTable(db: Database, schemaName: string, tableName: string, change: SchemaChangeInfo): Promise<TableSchema>;
181
+ alterTable(db: Database, schemaName: string, tableName: string, change: SchemaChangeInfo, rows?: EffectiveRowSource): Promise<TableSchema>;
165
182
  /**
166
183
  * Creates an index on a memory table
167
184
  */
168
- createIndex(db: Database, schemaName: string, tableName: string, indexSchema: IndexSchema): Promise<void>;
185
+ createIndex(db: Database, schemaName: string, tableName: string, indexSchema: IndexSchema, rows?: EffectiveRowSource): Promise<void>;
169
186
  /**
170
187
  * Drops an index from a memory table
171
188
  */
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/vtab/memory/module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/vtab/memory/module.ts"],"names":[],"mappings":"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"}