@quereus/quereus 4.3.1 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (788) hide show
  1. package/README.md +25 -7
  2. package/dist/src/common/types.d.ts +9 -59
  3. package/dist/src/common/types.d.ts.map +1 -1
  4. package/dist/src/common/types.js.map +1 -1
  5. package/dist/src/core/database-assertions.d.ts +2 -2
  6. package/dist/src/core/database-assertions.d.ts.map +1 -1
  7. package/dist/src/core/database-assertions.js +4 -3
  8. package/dist/src/core/database-assertions.js.map +1 -1
  9. package/dist/src/core/database-external-changes.d.ts +3 -3
  10. package/dist/src/core/database-external-changes.d.ts.map +1 -1
  11. package/dist/src/core/database-external-changes.js +13 -10
  12. package/dist/src/core/database-external-changes.js.map +1 -1
  13. package/dist/src/core/database-internal.d.ts.map +1 -1
  14. package/dist/src/core/database-materialized-views-analysis.d.ts +199 -0
  15. package/dist/src/core/database-materialized-views-analysis.d.ts.map +1 -0
  16. package/dist/src/core/database-materialized-views-analysis.js +502 -0
  17. package/dist/src/core/database-materialized-views-analysis.js.map +1 -0
  18. package/dist/src/core/database-materialized-views-apply.d.ts +422 -0
  19. package/dist/src/core/database-materialized-views-apply.d.ts.map +1 -0
  20. package/dist/src/core/database-materialized-views-apply.js +929 -0
  21. package/dist/src/core/database-materialized-views-apply.js.map +1 -0
  22. package/dist/src/core/database-materialized-views-plan-builders.d.ts +267 -0
  23. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -0
  24. package/dist/src/core/database-materialized-views-plan-builders.js +1423 -0
  25. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -0
  26. package/dist/src/core/database-materialized-views-plans.d.ts +641 -0
  27. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -0
  28. package/dist/src/core/database-materialized-views-plans.js +13 -0
  29. package/dist/src/core/database-materialized-views-plans.js.map +1 -0
  30. package/dist/src/core/database-materialized-views.d.ts +108 -860
  31. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  32. package/dist/src/core/database-materialized-views.js +212 -2165
  33. package/dist/src/core/database-materialized-views.js.map +1 -1
  34. package/dist/src/core/database-transaction.d.ts +10 -1
  35. package/dist/src/core/database-transaction.d.ts.map +1 -1
  36. package/dist/src/core/database-transaction.js +16 -4
  37. package/dist/src/core/database-transaction.js.map +1 -1
  38. package/dist/src/core/database-watchers.d.ts.map +1 -1
  39. package/dist/src/core/database-watchers.js +2 -1
  40. package/dist/src/core/database-watchers.js.map +1 -1
  41. package/dist/src/core/database.d.ts +99 -13
  42. package/dist/src/core/database.d.ts.map +1 -1
  43. package/dist/src/core/database.js +270 -50
  44. package/dist/src/core/database.js.map +1 -1
  45. package/dist/src/core/derived-row-validator.d.ts +1 -1
  46. package/dist/src/core/derived-row-validator.d.ts.map +1 -1
  47. package/dist/src/core/derived-row-validator.js +5 -3
  48. package/dist/src/core/derived-row-validator.js.map +1 -1
  49. package/dist/src/core/statement.d.ts +8 -0
  50. package/dist/src/core/statement.d.ts.map +1 -1
  51. package/dist/src/core/statement.js +98 -18
  52. package/dist/src/core/statement.js.map +1 -1
  53. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  54. package/dist/src/emit/ast-stringify.js +24 -13
  55. package/dist/src/emit/ast-stringify.js.map +1 -1
  56. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  57. package/dist/src/func/builtins/aggregate.js +127 -21
  58. package/dist/src/func/builtins/aggregate.js.map +1 -1
  59. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  60. package/dist/src/func/builtins/explain.js +2 -1
  61. package/dist/src/func/builtins/explain.js.map +1 -1
  62. package/dist/src/func/builtins/json.d.ts.map +1 -1
  63. package/dist/src/func/builtins/json.js +2 -1
  64. package/dist/src/func/builtins/json.js.map +1 -1
  65. package/dist/src/func/builtins/mutation.d.ts.map +1 -1
  66. package/dist/src/func/builtins/mutation.js +3 -2
  67. package/dist/src/func/builtins/mutation.js.map +1 -1
  68. package/dist/src/func/registration.d.ts +6 -1
  69. package/dist/src/func/registration.d.ts.map +1 -1
  70. package/dist/src/func/registration.js +16 -0
  71. package/dist/src/func/registration.js.map +1 -1
  72. package/dist/src/index.d.ts +16 -6
  73. package/dist/src/index.d.ts.map +1 -1
  74. package/dist/src/index.js +33 -7
  75. package/dist/src/index.js.map +1 -1
  76. package/dist/src/parser/ast.d.ts +2 -2
  77. package/dist/src/parser/lexer.d.ts +11 -1
  78. package/dist/src/parser/lexer.d.ts.map +1 -1
  79. package/dist/src/parser/lexer.js +40 -34
  80. package/dist/src/parser/lexer.js.map +1 -1
  81. package/dist/src/parser/parser.d.ts.map +1 -1
  82. package/dist/src/parser/parser.js +16 -9
  83. package/dist/src/parser/parser.js.map +1 -1
  84. package/dist/src/planner/analysis/authored-inverse.js +1 -1
  85. package/dist/src/planner/analysis/comparison-collation.d.ts +52 -0
  86. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
  87. package/dist/src/planner/analysis/comparison-collation.js +84 -7
  88. package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
  89. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  90. package/dist/src/planner/analysis/constraint-extractor.js +64 -17
  91. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  92. package/dist/src/planner/analysis/coverage-prover.d.ts +1 -1
  93. package/dist/src/planner/analysis/coverage-prover.js +1 -1
  94. package/dist/src/planner/analysis/equi-correlation.d.ts +26 -0
  95. package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -0
  96. package/dist/src/planner/analysis/equi-correlation.js +62 -0
  97. package/dist/src/planner/analysis/equi-correlation.js.map +1 -0
  98. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +54 -18
  99. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  100. package/dist/src/planner/analysis/query-rewrite-matcher.js +86 -42
  101. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  102. package/dist/src/planner/analysis/sat-checker.d.ts +8 -1
  103. package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -1
  104. package/dist/src/planner/analysis/sat-checker.js +117 -22
  105. package/dist/src/planner/analysis/sat-checker.js.map +1 -1
  106. package/dist/src/planner/analysis/scalar-invertibility.d.ts +13 -4
  107. package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -1
  108. package/dist/src/planner/analysis/scalar-invertibility.js +12 -3
  109. package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -1
  110. package/dist/src/planner/analysis/scalar-subqueries.d.ts +28 -0
  111. package/dist/src/planner/analysis/scalar-subqueries.d.ts.map +1 -0
  112. package/dist/src/planner/analysis/scalar-subqueries.js +60 -0
  113. package/dist/src/planner/analysis/scalar-subqueries.js.map +1 -0
  114. package/dist/src/planner/analysis/update-lineage.d.ts +1 -1
  115. package/dist/src/planner/analysis/update-lineage.js +1 -1
  116. package/dist/src/planner/analysis/update-lineage.js.map +1 -1
  117. package/dist/src/planner/analysis/view-complement.d.ts +2 -2
  118. package/dist/src/planner/building/delete.js +2 -2
  119. package/dist/src/planner/building/delete.js.map +1 -1
  120. package/dist/src/planner/building/dml-target.d.ts +2 -2
  121. package/dist/src/planner/building/dml-target.js +2 -2
  122. package/dist/src/planner/building/insert.d.ts.map +1 -1
  123. package/dist/src/planner/building/insert.js +53 -2
  124. package/dist/src/planner/building/insert.js.map +1 -1
  125. package/dist/src/planner/building/schema-resolution.d.ts +3 -0
  126. package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
  127. package/dist/src/planner/building/schema-resolution.js +4 -5
  128. package/dist/src/planner/building/schema-resolution.js.map +1 -1
  129. package/dist/src/planner/building/select.d.ts.map +1 -1
  130. package/dist/src/planner/building/select.js +18 -4
  131. package/dist/src/planner/building/select.js.map +1 -1
  132. package/dist/src/planner/building/update.js +2 -2
  133. package/dist/src/planner/building/update.js.map +1 -1
  134. package/dist/src/planner/building/view-mutation-builder.js +7 -7
  135. package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
  136. package/dist/src/planner/building/with.d.ts.map +1 -1
  137. package/dist/src/planner/building/with.js +5 -8
  138. package/dist/src/planner/building/with.js.map +1 -1
  139. package/dist/src/planner/cache/materialization-advisory.d.ts +34 -2
  140. package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
  141. package/dist/src/planner/cache/materialization-advisory.js +185 -42
  142. package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
  143. package/dist/src/planner/cache/reference-graph.d.ts +14 -5
  144. package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
  145. package/dist/src/planner/cache/reference-graph.js +31 -39
  146. package/dist/src/planner/cache/reference-graph.js.map +1 -1
  147. package/dist/src/planner/cost/index.d.ts +30 -5
  148. package/dist/src/planner/cost/index.d.ts.map +1 -1
  149. package/dist/src/planner/cost/index.js +26 -0
  150. package/dist/src/planner/cost/index.js.map +1 -1
  151. package/dist/src/planner/debug.d.ts +3 -2
  152. package/dist/src/planner/debug.d.ts.map +1 -1
  153. package/dist/src/planner/debug.js +9 -3
  154. package/dist/src/planner/debug.js.map +1 -1
  155. package/dist/src/planner/framework/characteristics.d.ts +46 -19
  156. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  157. package/dist/src/planner/framework/characteristics.js +50 -134
  158. package/dist/src/planner/framework/characteristics.js.map +1 -1
  159. package/dist/src/planner/framework/context.d.ts +8 -44
  160. package/dist/src/planner/framework/context.d.ts.map +1 -1
  161. package/dist/src/planner/framework/context.js +0 -91
  162. package/dist/src/planner/framework/context.js.map +1 -1
  163. package/dist/src/planner/framework/pass.d.ts +7 -0
  164. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  165. package/dist/src/planner/framework/pass.js +84 -0
  166. package/dist/src/planner/framework/pass.js.map +1 -1
  167. package/dist/src/planner/framework/registry.d.ts +13 -42
  168. package/dist/src/planner/framework/registry.d.ts.map +1 -1
  169. package/dist/src/planner/framework/registry.js +14 -182
  170. package/dist/src/planner/framework/registry.js.map +1 -1
  171. package/dist/src/planner/mutation/backward-body.d.ts +2 -2
  172. package/dist/src/planner/mutation/cte-flatten.js +1 -1
  173. package/dist/src/planner/mutation/decomposition.d.ts +2 -2
  174. package/dist/src/planner/mutation/decomposition.js +1 -1
  175. package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -1
  176. package/dist/src/planner/mutation/lens-enforcement.js +2 -1
  177. package/dist/src/planner/mutation/lens-enforcement.js.map +1 -1
  178. package/dist/src/planner/mutation/multi-source.d.ts +8 -8
  179. package/dist/src/planner/mutation/multi-source.js +11 -11
  180. package/dist/src/planner/mutation/multi-source.js.map +1 -1
  181. package/dist/src/planner/mutation/propagate.d.ts +1 -1
  182. package/dist/src/planner/mutation/propagate.js +1 -1
  183. package/dist/src/planner/mutation/scope-transform.d.ts +2 -2
  184. package/dist/src/planner/mutation/scope-transform.js +3 -3
  185. package/dist/src/planner/mutation/scope-transform.js.map +1 -1
  186. package/dist/src/planner/mutation/set-op.d.ts +1 -1
  187. package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
  188. package/dist/src/planner/mutation/set-op.js +3 -2
  189. package/dist/src/planner/mutation/set-op.js.map +1 -1
  190. package/dist/src/planner/mutation/single-source.d.ts +3 -3
  191. package/dist/src/planner/mutation/single-source.js +9 -9
  192. package/dist/src/planner/mutation/single-source.js.map +1 -1
  193. package/dist/src/planner/nodes/aggregate-function.d.ts +3 -1
  194. package/dist/src/planner/nodes/aggregate-function.d.ts.map +1 -1
  195. package/dist/src/planner/nodes/aggregate-function.js +1 -0
  196. package/dist/src/planner/nodes/aggregate-function.js.map +1 -1
  197. package/dist/src/planner/nodes/aggregate-node.d.ts +1 -0
  198. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  199. package/dist/src/planner/nodes/aggregate-node.js +8 -1
  200. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  201. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  202. package/dist/src/planner/nodes/alias-node.js +3 -1
  203. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  204. package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -1
  205. package/dist/src/planner/nodes/asof-scan-node.js +3 -2
  206. package/dist/src/planner/nodes/asof-scan-node.js.map +1 -1
  207. package/dist/src/planner/nodes/asserted-keys-node.d.ts +1 -1
  208. package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -1
  209. package/dist/src/planner/nodes/asserted-keys-node.js +5 -2
  210. package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -1
  211. package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
  212. package/dist/src/planner/nodes/async-gather-node.js +3 -1
  213. package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
  214. package/dist/src/planner/nodes/block.js +3 -3
  215. package/dist/src/planner/nodes/block.js.map +1 -1
  216. package/dist/src/planner/nodes/bloom-join-node.d.ts +2 -0
  217. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  218. package/dist/src/planner/nodes/bloom-join-node.js +5 -1
  219. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  220. package/dist/src/planner/nodes/cache-node.d.ts +19 -2
  221. package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
  222. package/dist/src/planner/nodes/cache-node.js +43 -3
  223. package/dist/src/planner/nodes/cache-node.js.map +1 -1
  224. package/dist/src/planner/nodes/cte-node.d.ts +16 -1
  225. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  226. package/dist/src/planner/nodes/cte-node.js +16 -3
  227. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  228. package/dist/src/planner/nodes/distinct-node.js +3 -3
  229. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  230. package/dist/src/planner/nodes/dml-executor-node.d.ts +21 -0
  231. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  232. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  233. package/dist/src/planner/nodes/envelope-scan-node.d.ts +1 -1
  234. package/dist/src/planner/nodes/envelope-scan-node.js +1 -1
  235. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
  236. package/dist/src/planner/nodes/fanout-lookup-join-node.js +4 -2
  237. package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
  238. package/dist/src/planner/nodes/filter.d.ts +10 -2
  239. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  240. package/dist/src/planner/nodes/filter.js +81 -14
  241. package/dist/src/planner/nodes/filter.js.map +1 -1
  242. package/dist/src/planner/nodes/hash-aggregate.d.ts +12 -1
  243. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  244. package/dist/src/planner/nodes/hash-aggregate.js +28 -1
  245. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  246. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts +3 -1
  247. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts.map +1 -1
  248. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js +1 -0
  249. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +1 -1
  250. package/dist/src/planner/nodes/join-node.d.ts +3 -1
  251. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  252. package/dist/src/planner/nodes/join-node.js +5 -5
  253. package/dist/src/planner/nodes/join-node.js.map +1 -1
  254. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
  255. package/dist/src/planner/nodes/lens-auxiliary-access-node.js +4 -1
  256. package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
  257. package/dist/src/planner/nodes/limit-offset.d.ts +1 -0
  258. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  259. package/dist/src/planner/nodes/limit-offset.js +4 -3
  260. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  261. package/dist/src/planner/nodes/merge-join-node.d.ts +2 -0
  262. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  263. package/dist/src/planner/nodes/merge-join-node.js +6 -1
  264. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  265. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
  266. package/dist/src/planner/nodes/ordinal-slice-node.js +3 -1
  267. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
  268. package/dist/src/planner/nodes/plan-node.d.ts +68 -5
  269. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  270. package/dist/src/planner/nodes/plan-node.js +137 -24
  271. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  272. package/dist/src/planner/nodes/project-node.d.ts +3 -2
  273. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  274. package/dist/src/planner/nodes/project-node.js +1 -0
  275. package/dist/src/planner/nodes/project-node.js.map +1 -1
  276. package/dist/src/planner/nodes/recursive-cte-node.d.ts +30 -1
  277. package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
  278. package/dist/src/planner/nodes/recursive-cte-node.js +38 -5
  279. package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
  280. package/dist/src/planner/nodes/reference.d.ts +5 -1
  281. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  282. package/dist/src/planner/nodes/reference.js +3 -0
  283. package/dist/src/planner/nodes/reference.js.map +1 -1
  284. package/dist/src/planner/nodes/remote-query-node.d.ts.map +1 -1
  285. package/dist/src/planner/nodes/remote-query-node.js +3 -1
  286. package/dist/src/planner/nodes/remote-query-node.js.map +1 -1
  287. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  288. package/dist/src/planner/nodes/retrieve-node.js +3 -1
  289. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  290. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  291. package/dist/src/planner/nodes/set-operation-node.js +3 -1
  292. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  293. package/dist/src/planner/nodes/sink-node.d.ts.map +1 -1
  294. package/dist/src/planner/nodes/sink-node.js +3 -1
  295. package/dist/src/planner/nodes/sink-node.js.map +1 -1
  296. package/dist/src/planner/nodes/sort.d.ts +2 -1
  297. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  298. package/dist/src/planner/nodes/sort.js +9 -5
  299. package/dist/src/planner/nodes/sort.js.map +1 -1
  300. package/dist/src/planner/nodes/stream-aggregate.d.ts +12 -1
  301. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  302. package/dist/src/planner/nodes/stream-aggregate.js +32 -3
  303. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  304. package/dist/src/planner/nodes/table-access-nodes.d.ts +2 -1
  305. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  306. package/dist/src/planner/nodes/table-access-nodes.js +2 -0
  307. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  308. package/dist/src/planner/nodes/view-mutation-node.d.ts +2 -2
  309. package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -1
  310. package/dist/src/planner/nodes/view-mutation-node.js +5 -1
  311. package/dist/src/planner/nodes/view-mutation-node.js.map +1 -1
  312. package/dist/src/planner/nodes/window-function.d.ts +3 -1
  313. package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
  314. package/dist/src/planner/nodes/window-function.js +1 -0
  315. package/dist/src/planner/nodes/window-function.js.map +1 -1
  316. package/dist/src/planner/optimizer.d.ts +52 -8
  317. package/dist/src/planner/optimizer.d.ts.map +1 -1
  318. package/dist/src/planner/optimizer.js +1014 -895
  319. package/dist/src/planner/optimizer.js.map +1 -1
  320. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  321. package/dist/src/planner/rules/access/rule-select-access-path.js +235 -202
  322. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  323. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
  324. package/dist/src/planner/rules/cache/rule-cte-optimization.js +8 -1
  325. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
  326. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts +7 -0
  327. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts.map +1 -1
  328. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js +14 -1
  329. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js.map +1 -1
  330. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +2 -2
  331. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -1
  332. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +55 -56
  333. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  334. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts.map +1 -1
  335. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js +6 -0
  336. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +1 -1
  337. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts +25 -0
  338. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -0
  339. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +176 -0
  340. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -0
  341. package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts +1 -1
  342. package/dist/src/planner/rules/cache/rule-scalar-cse.js +1 -1
  343. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts +29 -0
  344. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts.map +1 -0
  345. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js +66 -0
  346. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js.map +1 -0
  347. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +1 -1
  348. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +1 -1
  349. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
  350. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +1 -54
  351. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
  352. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +1 -1
  353. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +1 -1
  354. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +1 -1
  355. package/dist/src/planner/rules/join/rule-join-elimination.js +1 -1
  356. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +5 -6
  357. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
  358. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +1 -1
  359. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +1 -1
  360. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts +2 -2
  361. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
  362. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +4 -3
  363. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
  364. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +19 -0
  365. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -0
  366. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +48 -0
  367. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -0
  368. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +12 -1
  369. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -1
  370. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
  371. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +22 -20
  372. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  373. package/dist/src/planner/rules/shared/index-style-context.d.ts +39 -0
  374. package/dist/src/planner/rules/shared/index-style-context.d.ts.map +1 -0
  375. package/dist/src/planner/rules/shared/index-style-context.js +26 -0
  376. package/dist/src/planner/rules/shared/index-style-context.js.map +1 -0
  377. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +1 -1
  378. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +1 -1
  379. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts +1 -1
  380. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
  381. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts +191 -0
  382. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts.map +1 -0
  383. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js +623 -0
  384. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js.map +1 -0
  385. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts +10 -1
  386. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  387. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +242 -51
  388. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  389. package/dist/src/planner/stats/analyze.d.ts.map +1 -1
  390. package/dist/src/planner/stats/analyze.js +2 -20
  391. package/dist/src/planner/stats/analyze.js.map +1 -1
  392. package/dist/src/planner/stats/histogram.d.ts.map +1 -1
  393. package/dist/src/planner/stats/histogram.js +4 -0
  394. package/dist/src/planner/stats/histogram.js.map +1 -1
  395. package/dist/src/planner/util/fd-utils.d.ts +2 -3
  396. package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
  397. package/dist/src/planner/util/fd-utils.js +2 -3
  398. package/dist/src/planner/util/fd-utils.js.map +1 -1
  399. package/dist/src/planner/validation/plan-validator.d.ts +16 -0
  400. package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
  401. package/dist/src/planner/validation/plan-validator.js +36 -0
  402. package/dist/src/planner/validation/plan-validator.js.map +1 -1
  403. package/dist/src/runtime/async-util.d.ts +26 -0
  404. package/dist/src/runtime/async-util.d.ts.map +1 -1
  405. package/dist/src/runtime/async-util.js +139 -55
  406. package/dist/src/runtime/async-util.js.map +1 -1
  407. package/dist/src/runtime/cache/shared-cache.d.ts +7 -0
  408. package/dist/src/runtime/cache/shared-cache.d.ts.map +1 -1
  409. package/dist/src/runtime/cache/shared-cache.js +34 -1
  410. package/dist/src/runtime/cache/shared-cache.js.map +1 -1
  411. package/dist/src/runtime/context-helpers.d.ts +32 -4
  412. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  413. package/dist/src/runtime/context-helpers.js +26 -9
  414. package/dist/src/runtime/context-helpers.js.map +1 -1
  415. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  416. package/dist/src/runtime/deferred-constraint-queue.js +2 -1
  417. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  418. package/dist/src/runtime/emission-context.d.ts +27 -3
  419. package/dist/src/runtime/emission-context.d.ts.map +1 -1
  420. package/dist/src/runtime/emission-context.js +38 -7
  421. package/dist/src/runtime/emission-context.js.map +1 -1
  422. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  423. package/dist/src/runtime/emit/add-constraint.js +7 -1
  424. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  425. package/dist/src/runtime/emit/aggregate.d.ts +2 -3
  426. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  427. package/dist/src/runtime/emit/aggregate.js +23 -28
  428. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  429. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  430. package/dist/src/runtime/emit/alter-table.js +98 -9
  431. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  432. package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
  433. package/dist/src/runtime/emit/analyze.js +2 -1
  434. package/dist/src/runtime/emit/analyze.js.map +1 -1
  435. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  436. package/dist/src/runtime/emit/asof-scan.js +13 -10
  437. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  438. package/dist/src/runtime/emit/async-gather.d.ts.map +1 -1
  439. package/dist/src/runtime/emit/async-gather.js +4 -3
  440. package/dist/src/runtime/emit/async-gather.js.map +1 -1
  441. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  442. package/dist/src/runtime/emit/between.js +2 -1
  443. package/dist/src/runtime/emit/between.js.map +1 -1
  444. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  445. package/dist/src/runtime/emit/binary.js +122 -14
  446. package/dist/src/runtime/emit/binary.js.map +1 -1
  447. package/dist/src/runtime/emit/block.d.ts.map +1 -1
  448. package/dist/src/runtime/emit/block.js +2 -1
  449. package/dist/src/runtime/emit/block.js.map +1 -1
  450. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  451. package/dist/src/runtime/emit/bloom-join.js +20 -8
  452. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  453. package/dist/src/runtime/emit/cache.d.ts +7 -3
  454. package/dist/src/runtime/emit/cache.d.ts.map +1 -1
  455. package/dist/src/runtime/emit/cache.js +25 -7
  456. package/dist/src/runtime/emit/cache.js.map +1 -1
  457. package/dist/src/runtime/emit/case.d.ts.map +1 -1
  458. package/dist/src/runtime/emit/case.js +66 -45
  459. package/dist/src/runtime/emit/case.js.map +1 -1
  460. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  461. package/dist/src/runtime/emit/cast.js +2 -1
  462. package/dist/src/runtime/emit/cast.js.map +1 -1
  463. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  464. package/dist/src/runtime/emit/constraint-check.js +13 -7
  465. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  466. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  467. package/dist/src/runtime/emit/create-assertion.js +2 -1
  468. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  469. package/dist/src/runtime/emit/create-index.d.ts.map +1 -1
  470. package/dist/src/runtime/emit/create-index.js +12 -1
  471. package/dist/src/runtime/emit/create-index.js.map +1 -1
  472. package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
  473. package/dist/src/runtime/emit/create-table.js +12 -1
  474. package/dist/src/runtime/emit/create-table.js.map +1 -1
  475. package/dist/src/runtime/emit/cte-reference.d.ts.map +1 -1
  476. package/dist/src/runtime/emit/cte-reference.js +2 -1
  477. package/dist/src/runtime/emit/cte-reference.js.map +1 -1
  478. package/dist/src/runtime/emit/cte.d.ts.map +1 -1
  479. package/dist/src/runtime/emit/cte.js +45 -21
  480. package/dist/src/runtime/emit/cte.js.map +1 -1
  481. package/dist/src/runtime/emit/ddl-transaction-policy.d.ts +50 -0
  482. package/dist/src/runtime/emit/ddl-transaction-policy.d.ts.map +1 -0
  483. package/dist/src/runtime/emit/ddl-transaction-policy.js +69 -0
  484. package/dist/src/runtime/emit/ddl-transaction-policy.js.map +1 -0
  485. package/dist/src/runtime/emit/delete.d.ts.map +1 -1
  486. package/dist/src/runtime/emit/delete.js +2 -1
  487. package/dist/src/runtime/emit/delete.js.map +1 -1
  488. package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
  489. package/dist/src/runtime/emit/distinct.js +2 -1
  490. package/dist/src/runtime/emit/distinct.js.map +1 -1
  491. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  492. package/dist/src/runtime/emit/dml-executor.js +138 -74
  493. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  494. package/dist/src/runtime/emit/drop-assertion.d.ts.map +1 -1
  495. package/dist/src/runtime/emit/drop-assertion.js +2 -1
  496. package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
  497. package/dist/src/runtime/emit/drop-index.d.ts.map +1 -1
  498. package/dist/src/runtime/emit/drop-index.js +17 -1
  499. package/dist/src/runtime/emit/drop-index.js.map +1 -1
  500. package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
  501. package/dist/src/runtime/emit/drop-table.js +11 -1
  502. package/dist/src/runtime/emit/drop-table.js.map +1 -1
  503. package/dist/src/runtime/emit/eager-prefetch.d.ts.map +1 -1
  504. package/dist/src/runtime/emit/eager-prefetch.js +2 -1
  505. package/dist/src/runtime/emit/eager-prefetch.js.map +1 -1
  506. package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -1
  507. package/dist/src/runtime/emit/envelope-scan.js +2 -1
  508. package/dist/src/runtime/emit/envelope-scan.js.map +1 -1
  509. package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -1
  510. package/dist/src/runtime/emit/fanout-lookup-join.js +3 -2
  511. package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -1
  512. package/dist/src/runtime/emit/filter.d.ts.map +1 -1
  513. package/dist/src/runtime/emit/filter.js +8 -3
  514. package/dist/src/runtime/emit/filter.js.map +1 -1
  515. package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
  516. package/dist/src/runtime/emit/hash-aggregate.js +16 -11
  517. package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
  518. package/dist/src/runtime/emit/insert.d.ts.map +1 -1
  519. package/dist/src/runtime/emit/insert.js +2 -1
  520. package/dist/src/runtime/emit/insert.js.map +1 -1
  521. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  522. package/dist/src/runtime/emit/join.js +20 -6
  523. package/dist/src/runtime/emit/join.js.map +1 -1
  524. package/dist/src/runtime/emit/limit-offset.d.ts.map +1 -1
  525. package/dist/src/runtime/emit/limit-offset.js +2 -1
  526. package/dist/src/runtime/emit/limit-offset.js.map +1 -1
  527. package/dist/src/runtime/emit/literal.d.ts.map +1 -1
  528. package/dist/src/runtime/emit/literal.js +2 -1
  529. package/dist/src/runtime/emit/literal.js.map +1 -1
  530. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +22 -0
  531. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  532. package/dist/src/runtime/emit/materialized-view-helpers.js +128 -16
  533. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  534. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  535. package/dist/src/runtime/emit/materialized-view.js +6 -0
  536. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  537. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  538. package/dist/src/runtime/emit/merge-join.js +14 -4
  539. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  540. package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -1
  541. package/dist/src/runtime/emit/ordinal-slice.js +2 -1
  542. package/dist/src/runtime/emit/ordinal-slice.js.map +1 -1
  543. package/dist/src/runtime/emit/pragma.d.ts.map +1 -1
  544. package/dist/src/runtime/emit/pragma.js +2 -1
  545. package/dist/src/runtime/emit/pragma.js.map +1 -1
  546. package/dist/src/runtime/emit/project.d.ts.map +1 -1
  547. package/dist/src/runtime/emit/project.js +7 -2
  548. package/dist/src/runtime/emit/project.js.map +1 -1
  549. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  550. package/dist/src/runtime/emit/recursive-cte.js +61 -2
  551. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  552. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  553. package/dist/src/runtime/emit/returning.js +7 -2
  554. package/dist/src/runtime/emit/returning.js.map +1 -1
  555. package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
  556. package/dist/src/runtime/emit/scalar-function.js +2 -1
  557. package/dist/src/runtime/emit/scalar-function.js.map +1 -1
  558. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  559. package/dist/src/runtime/emit/scan.js +55 -17
  560. package/dist/src/runtime/emit/scan.js.map +1 -1
  561. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  562. package/dist/src/runtime/emit/schema-declarative.js +6 -5
  563. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  564. package/dist/src/runtime/emit/sequencing.d.ts.map +1 -1
  565. package/dist/src/runtime/emit/sequencing.js +2 -1
  566. package/dist/src/runtime/emit/sequencing.js.map +1 -1
  567. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  568. package/dist/src/runtime/emit/set-operation.js +6 -5
  569. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  570. package/dist/src/runtime/emit/sink.d.ts.map +1 -1
  571. package/dist/src/runtime/emit/sink.js +2 -1
  572. package/dist/src/runtime/emit/sink.js.map +1 -1
  573. package/dist/src/runtime/emit/sort.d.ts.map +1 -1
  574. package/dist/src/runtime/emit/sort.js +2 -1
  575. package/dist/src/runtime/emit/sort.js.map +1 -1
  576. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  577. package/dist/src/runtime/emit/subquery.js +42 -23
  578. package/dist/src/runtime/emit/subquery.js.map +1 -1
  579. package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
  580. package/dist/src/runtime/emit/table-valued-function.js +2 -1
  581. package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
  582. package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -1
  583. package/dist/src/runtime/emit/temporal-arithmetic.js +2 -1
  584. package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -1
  585. package/dist/src/runtime/emit/transaction.d.ts.map +1 -1
  586. package/dist/src/runtime/emit/transaction.js +2 -1
  587. package/dist/src/runtime/emit/transaction.js.map +1 -1
  588. package/dist/src/runtime/emit/unary.d.ts.map +1 -1
  589. package/dist/src/runtime/emit/unary.js +2 -1
  590. package/dist/src/runtime/emit/unary.js.map +1 -1
  591. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  592. package/dist/src/runtime/emit/update.js +2 -1
  593. package/dist/src/runtime/emit/update.js.map +1 -1
  594. package/dist/src/runtime/emit/values.d.ts.map +1 -1
  595. package/dist/src/runtime/emit/values.js +2 -1
  596. package/dist/src/runtime/emit/values.js.map +1 -1
  597. package/dist/src/runtime/emit/view-mutation.d.ts +1 -1
  598. package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -1
  599. package/dist/src/runtime/emit/view-mutation.js +6 -3
  600. package/dist/src/runtime/emit/view-mutation.js.map +1 -1
  601. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  602. package/dist/src/runtime/emit/window.js +26 -9
  603. package/dist/src/runtime/emit/window.js.map +1 -1
  604. package/dist/src/runtime/emitters.d.ts +11 -3
  605. package/dist/src/runtime/emitters.d.ts.map +1 -1
  606. package/dist/src/runtime/emitters.js +13 -22
  607. package/dist/src/runtime/emitters.js.map +1 -1
  608. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  609. package/dist/src/runtime/foreign-key-actions.js +39 -13
  610. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  611. package/dist/src/runtime/parallel-driver.d.ts +32 -4
  612. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  613. package/dist/src/runtime/parallel-driver.js +88 -18
  614. package/dist/src/runtime/parallel-driver.js.map +1 -1
  615. package/dist/src/runtime/scheduler.d.ts +56 -7
  616. package/dist/src/runtime/scheduler.d.ts.map +1 -1
  617. package/dist/src/runtime/scheduler.js +223 -200
  618. package/dist/src/runtime/scheduler.js.map +1 -1
  619. package/dist/src/runtime/strict-flags.d.ts +22 -0
  620. package/dist/src/runtime/strict-flags.d.ts.map +1 -0
  621. package/dist/src/runtime/strict-flags.js +26 -0
  622. package/dist/src/runtime/strict-flags.js.map +1 -0
  623. package/dist/src/runtime/strict-fork.d.ts +4 -4
  624. package/dist/src/runtime/strict-fork.d.ts.map +1 -1
  625. package/dist/src/runtime/strict-fork.js +175 -31
  626. package/dist/src/runtime/strict-fork.js.map +1 -1
  627. package/dist/src/runtime/types.d.ts +102 -4
  628. package/dist/src/runtime/types.d.ts.map +1 -1
  629. package/dist/src/runtime/types.js +37 -0
  630. package/dist/src/runtime/types.js.map +1 -1
  631. package/dist/src/runtime/utils.d.ts.map +1 -1
  632. package/dist/src/runtime/utils.js +8 -17
  633. package/dist/src/runtime/utils.js.map +1 -1
  634. package/dist/src/schema/column.d.ts +8 -0
  635. package/dist/src/schema/column.d.ts.map +1 -1
  636. package/dist/src/schema/column.js.map +1 -1
  637. package/dist/src/schema/ddl-generator.js +5 -0
  638. package/dist/src/schema/ddl-generator.js.map +1 -1
  639. package/dist/src/schema/function.d.ts +79 -0
  640. package/dist/src/schema/function.d.ts.map +1 -1
  641. package/dist/src/schema/function.js.map +1 -1
  642. package/dist/src/schema/lens-compiler.js +2 -2
  643. package/dist/src/schema/lens-compiler.js.map +1 -1
  644. package/dist/src/schema/lens-prover.d.ts.map +1 -1
  645. package/dist/src/schema/lens-prover.js +2 -3
  646. package/dist/src/schema/lens-prover.js.map +1 -1
  647. package/dist/src/schema/lens.d.ts +1 -1
  648. package/dist/src/schema/manager.d.ts.map +1 -1
  649. package/dist/src/schema/manager.js +7 -2
  650. package/dist/src/schema/manager.js.map +1 -1
  651. package/dist/src/schema/rename-rewriter.d.ts +61 -0
  652. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  653. package/dist/src/schema/rename-rewriter.js +77 -0
  654. package/dist/src/schema/rename-rewriter.js.map +1 -1
  655. package/dist/src/schema/table.d.ts +36 -8
  656. package/dist/src/schema/table.d.ts.map +1 -1
  657. package/dist/src/schema/table.js +61 -11
  658. package/dist/src/schema/table.js.map +1 -1
  659. package/dist/src/schema/unique-enforcement.d.ts +28 -5
  660. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  661. package/dist/src/schema/unique-enforcement.js +37 -5
  662. package/dist/src/schema/unique-enforcement.js.map +1 -1
  663. package/dist/src/schema/view.d.ts +1 -1
  664. package/dist/src/schema/view.js +1 -1
  665. package/dist/src/types/json-type.d.ts.map +1 -1
  666. package/dist/src/types/json-type.js +18 -8
  667. package/dist/src/types/json-type.js.map +1 -1
  668. package/dist/src/types/logical-type.d.ts +26 -0
  669. package/dist/src/types/logical-type.d.ts.map +1 -1
  670. package/dist/src/types/logical-type.js.map +1 -1
  671. package/dist/src/util/comparison.d.ts +83 -59
  672. package/dist/src/util/comparison.d.ts.map +1 -1
  673. package/dist/src/util/comparison.js +191 -131
  674. package/dist/src/util/comparison.js.map +1 -1
  675. package/dist/src/util/json-canonical.d.ts +34 -0
  676. package/dist/src/util/json-canonical.d.ts.map +1 -0
  677. package/dist/src/util/json-canonical.js +32 -0
  678. package/dist/src/util/json-canonical.js.map +1 -0
  679. package/dist/src/util/key-serializer.d.ts +10 -3
  680. package/dist/src/util/key-serializer.d.ts.map +1 -1
  681. package/dist/src/util/key-serializer.js +43 -17
  682. package/dist/src/util/key-serializer.js.map +1 -1
  683. package/dist/src/util/key-tuple-codec.d.ts +37 -0
  684. package/dist/src/util/key-tuple-codec.d.ts.map +1 -0
  685. package/dist/src/util/key-tuple-codec.js +65 -0
  686. package/dist/src/util/key-tuple-codec.js.map +1 -0
  687. package/dist/src/util/latches.d.ts +29 -3
  688. package/dist/src/util/latches.d.ts.map +1 -1
  689. package/dist/src/util/latches.js +60 -6
  690. package/dist/src/util/latches.js.map +1 -1
  691. package/dist/src/util/patterns.d.ts +22 -8
  692. package/dist/src/util/patterns.d.ts.map +1 -1
  693. package/dist/src/util/patterns.js +87 -16
  694. package/dist/src/util/patterns.js.map +1 -1
  695. package/dist/src/util/qualified-name.d.ts +10 -0
  696. package/dist/src/util/qualified-name.d.ts.map +1 -0
  697. package/dist/src/util/qualified-name.js +15 -0
  698. package/dist/src/util/qualified-name.js.map +1 -0
  699. package/dist/src/vtab/backing-host.d.ts +8 -1
  700. package/dist/src/vtab/backing-host.d.ts.map +1 -1
  701. package/dist/src/vtab/backing-host.js +7 -0
  702. package/dist/src/vtab/backing-host.js.map +1 -1
  703. package/dist/src/vtab/best-access-plan.d.ts +18 -0
  704. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  705. package/dist/src/vtab/best-access-plan.js +15 -0
  706. package/dist/src/vtab/best-access-plan.js.map +1 -1
  707. package/dist/src/vtab/capabilities.d.ts +44 -0
  708. package/dist/src/vtab/capabilities.d.ts.map +1 -1
  709. package/dist/src/vtab/filter-info.d.ts +42 -0
  710. package/dist/src/vtab/filter-info.d.ts.map +1 -1
  711. package/dist/src/vtab/filter-info.js +137 -1
  712. package/dist/src/vtab/filter-info.js.map +1 -1
  713. package/dist/src/vtab/idx-str.d.ts +62 -0
  714. package/dist/src/vtab/idx-str.d.ts.map +1 -0
  715. package/dist/src/vtab/idx-str.js +130 -0
  716. package/dist/src/vtab/idx-str.js.map +1 -0
  717. package/dist/src/vtab/index-descriptor.d.ts +122 -0
  718. package/dist/src/vtab/index-descriptor.d.ts.map +1 -0
  719. package/dist/src/vtab/index-descriptor.js +104 -0
  720. package/dist/src/vtab/index-descriptor.js.map +1 -0
  721. package/dist/src/vtab/mapping-advertisement.d.ts +1 -1
  722. package/dist/src/vtab/memory/index.d.ts +12 -4
  723. package/dist/src/vtab/memory/index.d.ts.map +1 -1
  724. package/dist/src/vtab/memory/index.js +17 -9
  725. package/dist/src/vtab/memory/index.js.map +1 -1
  726. package/dist/src/vtab/memory/layer/base.d.ts +85 -31
  727. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  728. package/dist/src/vtab/memory/layer/base.js +127 -86
  729. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  730. package/dist/src/vtab/memory/layer/connection.d.ts +27 -0
  731. package/dist/src/vtab/memory/layer/connection.d.ts.map +1 -1
  732. package/dist/src/vtab/memory/layer/connection.js +36 -1
  733. package/dist/src/vtab/memory/layer/connection.js.map +1 -1
  734. package/dist/src/vtab/memory/layer/interface.d.ts +24 -4
  735. package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
  736. package/dist/src/vtab/memory/layer/manager.d.ts +212 -16
  737. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  738. package/dist/src/vtab/memory/layer/manager.js +754 -170
  739. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  740. package/dist/src/vtab/memory/layer/plan-filter.d.ts +26 -1
  741. package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
  742. package/dist/src/vtab/memory/layer/plan-filter.js +29 -11
  743. package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
  744. package/dist/src/vtab/memory/layer/safe-iterate.d.ts +2 -2
  745. package/dist/src/vtab/memory/layer/safe-iterate.d.ts.map +1 -1
  746. package/dist/src/vtab/memory/layer/safe-iterate.js +2 -2
  747. package/dist/src/vtab/memory/layer/safe-iterate.js.map +1 -1
  748. package/dist/src/vtab/memory/layer/scan-layer.d.ts +5 -1
  749. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  750. package/dist/src/vtab/memory/layer/scan-layer.js +59 -24
  751. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  752. package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
  753. package/dist/src/vtab/memory/layer/scan-plan.js +13 -21
  754. package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
  755. package/dist/src/vtab/memory/layer/transaction.d.ts +169 -7
  756. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  757. package/dist/src/vtab/memory/layer/transaction.js +334 -9
  758. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  759. package/dist/src/vtab/memory/module.d.ts +11 -4
  760. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  761. package/dist/src/vtab/memory/module.js +35 -16
  762. package/dist/src/vtab/memory/module.js.map +1 -1
  763. package/dist/src/vtab/memory/table.d.ts +30 -4
  764. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  765. package/dist/src/vtab/memory/table.js +63 -15
  766. package/dist/src/vtab/memory/table.js.map +1 -1
  767. package/dist/src/vtab/memory/utils/predicate.d.ts +9 -1
  768. package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
  769. package/dist/src/vtab/memory/utils/predicate.js +35 -14
  770. package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
  771. package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -1
  772. package/dist/src/vtab/memory/utils/primary-key-encode.js +12 -6
  773. package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -1
  774. package/dist/src/vtab/memory/utils/primary-key.d.ts +6 -1
  775. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  776. package/dist/src/vtab/memory/utils/primary-key.js +12 -8
  777. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  778. package/dist/src/vtab/module.d.ts +38 -14
  779. package/dist/src/vtab/module.d.ts.map +1 -1
  780. package/dist/src/vtab/table.d.ts +41 -2
  781. package/dist/src/vtab/table.d.ts.map +1 -1
  782. package/dist/src/vtab/table.js +19 -0
  783. package/dist/src/vtab/table.js.map +1 -1
  784. package/package.json +5 -4
  785. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts +0 -18
  786. package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts.map +0 -1
  787. package/dist/src/planner/rules/cache/rule-materialization-advisory.js +0 -65
  788. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
@@ -31,6 +31,7 @@ import { registerType as registerTypeInRegistry } from '../types/registry.js';
31
31
  import { getParameterTypes } from './param.js';
32
32
  import { rowToObject } from './utils.js';
33
33
  import { wrapAsyncIterator } from '../util/async-iterator.js';
34
+ import { Latches } from '../util/latches.js';
34
35
  import { DatabaseEventEmitter, } from './database-events.js';
35
36
  import { TransactionManager } from './database-transaction.js';
36
37
  import { ingestExternalRowChangeBatch } from './database-external-changes.js';
@@ -88,13 +89,28 @@ export class Database {
88
89
  /** Materialized-view schema-change staleness tracking */
89
90
  materializedViewManager;
90
91
  /** Per-database collation registry — comparator + optional key normalizer +
91
- * optional REPLICABLE assertion. The normalizer is required for index
92
- * participation; comparator-only collations may still be used in ORDER BY but
93
- * cannot back a compound index. `replicable` (stamped `true` on the built-ins,
92
+ * optional REPLICABLE and ORDER-PRESERVING assertions. The normalizer is required
93
+ * for index participation; comparator-only collations may still be used in ORDER BY
94
+ * but cannot back a compound index. `replicable` (stamped `true` on the built-ins,
94
95
  * opt-in for a custom collation) is consulted only by the materialized-view
95
96
  * replicable-collation gate when the backing host demands it
96
- * (see {@link _isCollationReplicable}). */
97
+ * (see {@link _isCollationReplicable}). `orderPreserving` (same shape) is consulted
98
+ * by persistent stores before seeking a byte range or advertising byte order as
99
+ * collation order (see {@link _isCollationOrderPreserving}). */
97
100
  collations = new Map();
101
+ /** Lazily-bound {@link getCollationResolver} closure — created once so callers can
102
+ * compare resolver identity, while still reading the live `collations` map. */
103
+ collationResolver;
104
+ /** Lazily-bound {@link getKeyNormalizerResolver} closure — same identity/liveness
105
+ * contract as {@link collationResolver}. */
106
+ keyNormalizerResolver;
107
+ /**
108
+ * Per-database latch registry — serializes commit / collapse / consolidate /
109
+ * destroy / schema-change work by string key *within this database*. Scoped to
110
+ * the `Database` instance (not process-global) so two databases never contend
111
+ * on the same key. Memory-table managers reach it via `this.db.latches`.
112
+ */
113
+ latches = new Latches();
98
114
  constructor() {
99
115
  this.schemaManager = new SchemaManager(this);
100
116
  this.declaredSchemaManager = new DeclaredSchemaManager();
@@ -211,6 +227,18 @@ export class Database {
211
227
  log('Default column nullability changed to: %s', value);
212
228
  }
213
229
  });
230
+ this.options.registerOption('ddl_transaction_policy', {
231
+ type: 'string',
232
+ defaultValue: 'permissive',
233
+ description: 'Whether module-dispatching DDL (CREATE/DROP TABLE/INDEX, ALTER TABLE) is allowed inside an explicit transaction: "permissive" (default; schema changes may escape the transaction, as today) or "strict" (refuse such DDL inside a transaction unless the module declares ddlTransactionality=transactional).',
234
+ onChange: (event) => {
235
+ const value = event.newValue;
236
+ if (value !== 'permissive' && value !== 'strict') {
237
+ throw new QuereusError(`Invalid ddl_transaction_policy value: ${value}. Must be "permissive" or "strict"`, StatusCode.ERROR);
238
+ }
239
+ log('DDL transaction policy changed to: %s', value);
240
+ }
241
+ });
214
242
  this.options.registerOption('default_collation', {
215
243
  type: 'string',
216
244
  defaultValue: 'BINARY',
@@ -301,14 +329,21 @@ export class Database {
301
329
  registerDefaultCollations() {
302
330
  // Register the built-in collations into per-instance registry, paired
303
331
  // with their key normalizers so they can back compound indexes. Stamped
304
- // `replicable: true` — the built-ins are pure JS string operations (`<`/`>`,
305
- // locale-independent `toLowerCase()`, ASCII-space trim), so they are
332
+ // `replicable: true` — the built-ins are pure JS string operations (a code-point
333
+ // scan, locale-independent `toLowerCase()`, ASCII-space trim), so they are
306
334
  // bit-identical across peers' JS engines, exactly parallel to why built-in
307
335
  // functions auto-qualify (see registerBuiltinFunctions). This is the single
308
336
  // seam that *knows* a collation is a builtin.
309
- this.collations.set('BINARY', { comparator: BINARY_COLLATION, normalizer: BUILTIN_NORMALIZERS.BINARY, replicable: true });
310
- this.collations.set('NOCASE', { comparator: NOCASE_COLLATION, normalizer: BUILTIN_NORMALIZERS.NOCASE, replicable: true });
311
- this.collations.set('RTRIM', { comparator: RTRIM_COLLATION, normalizer: BUILTIN_NORMALIZERS.RTRIM, replicable: true });
337
+ //
338
+ // Also stamped `orderPreserving: true`: each built-in comparator orders its
339
+ // operands' NORMALIZED forms by Unicode CODE POINT (BINARY's normalizer is the
340
+ // identity, NOCASE's is `toLowerCase()`, RTRIM's an ASCII-space right-trim), and
341
+ // code-point order IS the order a memcmp of those forms' UTF-8 bytes produces —
342
+ // see {@link import('../util/comparison.js').compareCodePoints} and
343
+ // {@link _isCollationOrderPreserving}.
344
+ this.collations.set('BINARY', { comparator: BINARY_COLLATION, normalizer: BUILTIN_NORMALIZERS.BINARY, replicable: true, orderPreserving: true });
345
+ this.collations.set('NOCASE', { comparator: NOCASE_COLLATION, normalizer: BUILTIN_NORMALIZERS.NOCASE, replicable: true, orderPreserving: true });
346
+ this.collations.set('RTRIM', { comparator: RTRIM_COLLATION, normalizer: BUILTIN_NORMALIZERS.RTRIM, replicable: true, orderPreserving: true });
312
347
  log("Default collations registered (BINARY, NOCASE, RTRIM)");
313
348
  }
314
349
  /**
@@ -361,7 +396,9 @@ export class Database {
361
396
  throwIfAborted(options?.signal);
362
397
  const stmt = this.prepare(sql, params);
363
398
  try {
364
- return await stmt.get(params, options);
399
+ // Params were already bound (and their types inferred) by prepare();
400
+ // don't re-pass them or stmt.get() would rebind + re-validate every value.
401
+ return await stmt.get(undefined, options);
365
402
  }
366
403
  finally {
367
404
  await stmt.finalize();
@@ -1076,11 +1113,12 @@ export class Database {
1076
1113
  this.optimizer.updateTuning(tuning);
1077
1114
  }
1078
1115
  /**
1079
- * Registers a user-defined collation sequence.
1116
+ * Registers a user-defined collation sequence. `NOCASE` and `RTRIM` may be replaced;
1117
+ * `BINARY` may not (see {@link getCollationResolver}) and throws `MisuseError`.
1080
1118
  * @param name The name of the collation sequence (case-insensitive).
1081
1119
  * @param func The comparison function (a, b) => number (-1, 0, 1).
1082
1120
  * @param optionsOrNormalizer Either a bare key normalizer (the legacy positional
1083
- * form) or an options object `{ normalizer?, replicable? }`:
1121
+ * form) or an options object `{ normalizer?, replicable?, orderPreserving? }`:
1084
1122
  * - `normalizer` — a function whose output equality partitions strings into the
1085
1123
  * same equivalence classes as `func` (modulo total ordering). Required to make
1086
1124
  * this collation usable as the key for a compound index; ORDER BY / standalone
@@ -1090,6 +1128,16 @@ export class Database {
1090
1128
  * the materialized-view replicable-collation gate when a backing host declares
1091
1129
  * `requiresReplicableDerivations`. Defaults to `false` — the conservative
1092
1130
  * default for a custom collation (built-ins auto-qualify).
1131
+ * - `orderPreserving` — assert the normalizer preserves ORDER, not merely
1132
+ * equality: for all strings `x`, `y`,
1133
+ * `sign(func(x, y)) === sign(memcmp(utf8(normalizer(x)), utf8(normalizer(y))))`.
1134
+ * This is strictly stronger than the equality promise `normalizer` alone makes.
1135
+ * Persistent stores physically order rows by the normalized key bytes, so they
1136
+ * may only seek a byte range — or advertise byte order as collation order — for
1137
+ * a collation carrying this assertion; without it they fall back to a full scan
1138
+ * plus a comparator-accurate residual filter (correct, just slower). Defaults to
1139
+ * `false` — correctness over speed for a custom collation (built-ins auto-qualify).
1140
+ * See {@link _isCollationOrderPreserving}.
1093
1141
  * @example
1094
1142
  * // Example: Create a custom collation for phone numbers
1095
1143
  * db.registerCollation('PHONENUMBER', (a, b) => {
@@ -1102,10 +1150,31 @@ export class Database {
1102
1150
  * // A locale-independent custom collation a replicating backing can host:
1103
1151
  * db.registerCollation('CODEPOINT', cmp, { replicable: true });
1104
1152
  *
1153
+ * // A normalizer whose byte order matches its comparator, so store range seeks stay:
1154
+ * db.registerCollation('NOSPACE', cmp, { normalizer: s => s.replace(/ /g, ''), orderPreserving: true });
1155
+ *
1105
1156
  * // Then use it in SQL:
1106
1157
  * // SELECT * FROM contacts ORDER BY phone COLLATE PHONENUMBER;
1107
1158
  * // CREATE INDEX phone_idx ON contacts(phone COLLATE PHONENUMBER);
1108
1159
  */
1160
+ // NOTE: registration is not retroactive. Comparators and key normalizers are
1161
+ // resolved once, at comparator-construction time (index build, plan emission), so a
1162
+ // collation registered — or re-registered with a different comparator/normalizer —
1163
+ // after a structure was built does not rebuild it. A statement emitted *after* the
1164
+ // re-registration does see the new one. Register collations before creating tables
1165
+ // and indexes that name them. If retroactive re-registration ever needs to be
1166
+ // supported, invalidate dependent indexes and cached plans here: the collation
1167
+ // dependency `EmissionContext` records only drives an existence check before
1168
+ // execution (`validateCapturedSchemaObjects`), which warns — it does not invalidate.
1169
+ //
1170
+ // NOTE: `orderPreserving` is stated against UTF-8 memcmp of the normalized forms, and the
1171
+ // built-ins hold it for every WELL-FORMED string. It is unachievable for unpaired
1172
+ // surrogates, which have no UTF-8 encoding at all (`TextEncoder` folds each to U+FFFD);
1173
+ // the persistent store therefore REFUSES to key them (`quereus-store`'s `encodeText`
1174
+ // raises), so no value a store-backed table can hold falls outside the assertion. Memory
1175
+ // tables still accept them, which is why comparators must stay total there. A custom
1176
+ // collation that compares with JS `<`/`>` orders by UTF-16 code unit and must NOT claim
1177
+ // the assertion; use {@link import('../util/comparison.js').compareCodePoints}.
1109
1178
  registerCollation(name, func, optionsOrNormalizer) {
1110
1179
  this.checkOpen();
1111
1180
  if (typeof name !== 'string' || !name) {
@@ -1115,16 +1184,18 @@ export class Database {
1115
1184
  throw new MisuseError('registerCollation: func must be a function');
1116
1185
  }
1117
1186
  // A function-typed third arg is the legacy normalizer-only path (existing call
1118
- // sites unchanged, `replicable` defaults to false); an object reads its fields;
1119
- // any other non-undefined third arg is a misused legacy normalizer.
1187
+ // sites unchanged, `replicable` and `orderPreserving` default to false); an object
1188
+ // reads its fields; any other non-undefined third arg is a misused legacy normalizer.
1120
1189
  let normalizer;
1121
1190
  let replicable = false;
1191
+ let orderPreserving = false;
1122
1192
  if (typeof optionsOrNormalizer === 'function') {
1123
1193
  normalizer = optionsOrNormalizer;
1124
1194
  }
1125
1195
  else if (typeof optionsOrNormalizer === 'object' && optionsOrNormalizer !== null) {
1126
1196
  normalizer = optionsOrNormalizer.normalizer;
1127
1197
  replicable = optionsOrNormalizer.replicable === true;
1198
+ orderPreserving = optionsOrNormalizer.orderPreserving === true;
1128
1199
  }
1129
1200
  else if (optionsOrNormalizer !== undefined) {
1130
1201
  throw new MisuseError('registerCollation: normalizer must be a function when supplied');
@@ -1132,7 +1203,12 @@ export class Database {
1132
1203
  if (normalizer !== undefined && typeof normalizer !== 'function') {
1133
1204
  throw new MisuseError('registerCollation: normalizer must be a function when supplied');
1134
1205
  }
1135
- const upperName = name.toUpperCase();
1206
+ const upperName = normalizeCollationName(name);
1207
+ if (upperName === 'BINARY') {
1208
+ // Resolvers fast-path BINARY to the built-in comparator, so an override could
1209
+ // never take effect uniformly — reject rather than silently half-apply it.
1210
+ throw new MisuseError('registerCollation: BINARY cannot be overridden');
1211
+ }
1136
1212
  if (this.collations.has(upperName)) {
1137
1213
  log('Overwriting existing collation: %s', upperName);
1138
1214
  }
@@ -1141,8 +1217,22 @@ export class Database {
1141
1217
  entry.normalizer = normalizer;
1142
1218
  if (replicable)
1143
1219
  entry.replicable = true;
1220
+ if (orderPreserving)
1221
+ entry.orderPreserving = true;
1144
1222
  this.collations.set(upperName, entry);
1145
- log('Registered collation: %s%s%s', upperName, normalizer !== undefined ? ' (with normalizer)' : '', replicable ? ' (replicable)' : '');
1223
+ log('Registered collation: %s%s%s%s', upperName, normalizer !== undefined ? ' (with normalizer)' : '', replicable ? ' (replicable)' : '', orderPreserving ? ' (order-preserving)' : '');
1224
+ }
1225
+ /**
1226
+ * True iff `name` names a collation this connection can resolve — a built-in
1227
+ * (BINARY/NOCASE/RTRIM) or one registered via {@link registerCollation}. The
1228
+ * DDL-time counterpart of {@link getCollationResolver} that returns a boolean
1229
+ * instead of throwing; used to gate an explicit column COLLATE against the
1230
+ * connection's registry (see `validateCollationForType`). Names are normalized
1231
+ * (trim + uppercase) here and in {@link _getCollation}, so whitespace / case
1232
+ * variants resolve identically.
1233
+ */
1234
+ isCollationRegistered(name) {
1235
+ return normalizeCollationName(name) === 'BINARY' || this._getCollation(name) !== undefined;
1146
1236
  }
1147
1237
  /**
1148
1238
  * Registers a custom logical type.
@@ -1205,23 +1295,92 @@ export class Database {
1205
1295
  getInstructionTracer() {
1206
1296
  return this.instructionTracer;
1207
1297
  }
1298
+ /**
1299
+ * The canonical way to turn a collation name into a comparison function for this
1300
+ * database. Every comparator-construction site should route through this rather
1301
+ * than the deprecated process-global registry in `util/comparison.ts`, so a
1302
+ * collation registered with {@link registerCollation} is actually honored.
1303
+ *
1304
+ * The returned resolver:
1305
+ * - has stable identity across calls (bound once) and reads the live per-database
1306
+ * registry, so a collation registered *after* the resolver was handed out is
1307
+ * visible to later calls;
1308
+ * - resolves names case-insensitively (and tolerates surrounding whitespace);
1309
+ * - **throws** `QuereusError` (`no such collation sequence: X`) on an unknown name.
1310
+ * An unresolvable collation is never downgraded to BINARY: byte-order results
1311
+ * would be silently wrong for ORDER BY, UNIQUE, and index seeks alike;
1312
+ * - fast-paths the exact name `BINARY`. `BINARY` cannot be overridden — this is
1313
+ * the fast path's correctness precondition, enforced by {@link registerCollation}
1314
+ * rejecting it. Any other built-in — including `NOCASE` and `RTRIM` — can be
1315
+ * overridden per database.
1316
+ *
1317
+ * It performs no `checkOpen()` check: it runs on hot comparator-construction paths,
1318
+ * and reading the registry of a closed database is harmless.
1319
+ */
1320
+ getCollationResolver() {
1321
+ if (this.collationResolver === undefined) {
1322
+ this.collationResolver = (collationName) => {
1323
+ if (collationName === 'BINARY')
1324
+ return BINARY_COLLATION;
1325
+ const func = this._getCollation(collationName);
1326
+ if (!func) {
1327
+ throw new QuereusError(`no such collation sequence: ${collationName}`, StatusCode.ERROR);
1328
+ }
1329
+ return func;
1330
+ };
1331
+ }
1332
+ return this.collationResolver;
1333
+ }
1334
+ /**
1335
+ * The canonical way to turn a collation name into a **key normalizer** for this
1336
+ * database — the hash-keyed counterpart of {@link getCollationResolver}. Every
1337
+ * operator that buckets rows by a text key (GROUP BY, window PARTITION BY, bloom /
1338
+ * hash join keys, AS OF partitioning) must resolve through this, so that grouping
1339
+ * and comparison agree on which rows are equal.
1340
+ *
1341
+ * Same contract as {@link getCollationResolver}: stable identity, reads the live
1342
+ * registry, no `checkOpen()`, and **no silent fallback**.
1343
+ *
1344
+ * - `undefined` or the exact name `BINARY` → the identity normalizer. `BINARY`
1345
+ * cannot be overridden ({@link registerCollation} rejects it), which is this fast
1346
+ * path's correctness precondition.
1347
+ * - A registered collation carrying a normalizer → that normalizer.
1348
+ * - A registered collation with **no** normalizer → throws. A comparator-only
1349
+ * collation can order rows but cannot bucket them; guessing a normalizer would
1350
+ * split or merge groups the comparator disagrees with.
1351
+ * - An unregistered name → throws `no such collation sequence: X`.
1352
+ */
1353
+ getKeyNormalizerResolver() {
1354
+ if (this.keyNormalizerResolver === undefined) {
1355
+ this.keyNormalizerResolver = (collationName) => {
1356
+ if (!collationName || collationName === 'BINARY')
1357
+ return BUILTIN_NORMALIZERS.BINARY;
1358
+ const normalizer = this._getCollationNormalizer(collationName);
1359
+ if (normalizer)
1360
+ return normalizer;
1361
+ if (!this._getCollation(collationName)) {
1362
+ throw new QuereusError(`no such collation sequence: ${collationName}`, StatusCode.ERROR);
1363
+ }
1364
+ throw new QuereusError(`collation ${collationName} has no key normalizer; grouping and hash-join keys require one — pass { normalizer } to registerCollation`, StatusCode.ERROR);
1365
+ };
1366
+ }
1367
+ return this.keyNormalizerResolver;
1368
+ }
1208
1369
  /** @internal Gets a registered collation function */
1209
1370
  _getCollation(name) {
1210
- return this.collations.get(name.toUpperCase())?.comparator;
1371
+ return this.collations.get(normalizeCollationName(name))?.comparator;
1211
1372
  }
1212
- /** @internal Gets the registered key normalizer for a collation, falling back
1213
- * to the built-in normalizer for `BINARY` / `NOCASE` / `RTRIM` if the
1214
- * collation has no explicit normalizer registered. Returns `undefined` for
1215
- * comparator-only user-defined collations. */
1373
+ /** @internal Gets the registered key normalizer for a collation. Returns `undefined`
1374
+ * both for an unregistered name and for a comparator-only collation the two are
1375
+ * distinguished, and turned into errors, by {@link getKeyNormalizerResolver}.
1376
+ *
1377
+ * There is deliberately no built-in fallback: an embedder that re-registers `NOCASE`
1378
+ * with a custom comparator and no normalizer must get a loud error, not the built-in
1379
+ * lowercase normalizer, which would partition strings differently from their
1380
+ * comparator. The built-ins are seeded *with* their normalizers in
1381
+ * `registerDefaultCollations()`, so a fresh database loses nothing. */
1216
1382
  _getCollationNormalizer(name) {
1217
- const upper = name.toUpperCase();
1218
- const entry = this.collations.get(upper);
1219
- if (entry?.normalizer !== undefined)
1220
- return entry.normalizer;
1221
- // Built-in fallback: even an entry that lost its normalizer (shouldn't
1222
- // happen for built-ins, but defends against external mutation) still
1223
- // resolves to the canonical built-in normalizer.
1224
- return BUILTIN_NORMALIZERS[upper];
1383
+ return this.collations.get(normalizeCollationName(name))?.normalizer;
1225
1384
  }
1226
1385
  /** @internal True iff the named collation is asserted REPLICABLE — bit-identical
1227
1386
  * across peers/platforms/app-versions. Built-ins are stamped `replicable` at
@@ -1231,7 +1390,28 @@ export class Database {
1231
1390
  * replicable-collation gate when the backing host declares
1232
1391
  * `requiresReplicableDerivations`. */
1233
1392
  _isCollationReplicable(name) {
1234
- return this.collations.get(name.toUpperCase())?.replicable === true;
1393
+ return this.collations.get(normalizeCollationName(name))?.replicable === true;
1394
+ }
1395
+ /** @internal True iff the named collation is asserted ORDER-PRESERVING: for all strings
1396
+ * `x`, `y`, `sign(comparator(x, y))` equals
1397
+ * `sign(memcmp(utf8(normalizer(x)), utf8(normalizer(y))))`. Strictly stronger than the
1398
+ * equality-partition promise a bare normalizer makes — a normalizer may agree with the
1399
+ * comparator on equality while disagreeing on order.
1400
+ *
1401
+ * Built-ins are stamped `orderPreserving` at registration; a custom collation opts in
1402
+ * with `orderPreserving: true`. An unregistered name, or a comparator-only collation
1403
+ * (no normalizer, hence no key bytes at all), returns `false` defensively.
1404
+ *
1405
+ * Consumed by persistent stores, which physically order rows by normalized key bytes:
1406
+ * a byte-range seek, or an advertisement that byte order *is* collation order, is sound
1407
+ * only under this assertion. Without it the store full-scans and lets its
1408
+ * comparator-accurate residual filter decide — slower, never wrong. */
1409
+ _isCollationOrderPreserving(name) {
1410
+ const entry = this.collations.get(normalizeCollationName(name));
1411
+ // The assertion is *about* the normalizer, so it is vacuous without one; a
1412
+ // comparator-only collation cannot key a persisted structure anyway (the store
1413
+ // rejects it at DDL time), and answering `true` here would be a trap.
1414
+ return entry?.orderPreserving === true && entry.normalizer !== undefined;
1235
1415
  }
1236
1416
  _queueDeferredConstraintRow(baseTable, constraintName, row, descriptor, evaluator, connectionId, contextRow, contextDescriptor) {
1237
1417
  this.deferredConstraints.enqueue(baseTable, constraintName, row, descriptor, evaluator, connectionId, contextRow, contextDescriptor);
@@ -1661,6 +1841,18 @@ export class Database {
1661
1841
  }
1662
1842
  }
1663
1843
  }
1844
+ /**
1845
+ * @internal Force-removes one connection by id.
1846
+ * Unlike unregisterConnection, this bypasses the implicit transaction deferral —
1847
+ * the caller has established that this specific connection is definitively stale.
1848
+ */
1849
+ removeConnection(connectionId) {
1850
+ const connection = this.activeConnections.get(connectionId);
1851
+ if (connection) {
1852
+ this.activeConnections.delete(connectionId);
1853
+ log(`Removed stale connection ${connectionId} for table ${connection.tableName}`);
1854
+ }
1855
+ }
1664
1856
  /**
1665
1857
  * @internal Gets all active connections for a specific table.
1666
1858
  * @param tableName The name of the table
@@ -1735,6 +1927,31 @@ export class Database {
1735
1927
  _isFkRestrictSuppressed() {
1736
1928
  return this._fkRestrictSuppressed;
1737
1929
  }
1930
+ /** @internal FK cascade re-entry flag — see {@link _setFkCascadeReentry}. */
1931
+ _fkCascadeReentry = false;
1932
+ /** @internal Marks that the DML currently re-entering the executor is one of
1933
+ * Quereus's own FK cascade child writes (cascade DELETE / UPDATE, SET NULL,
1934
+ * SET DEFAULT — physical or lens), not a direct user DML on the child table.
1935
+ * Set only for the duration of each cascade child write by
1936
+ * `withFkCascadeReentry` in `runtime/foreign-key-actions.ts`, so a host vtab
1937
+ * module can distinguish a cascade re-entry from a user write on the same
1938
+ * child and suppress redundant child-side FK re-validation only for the
1939
+ * former. Independent of {@link _setFkRestrictSuppressed} (a cascade path may
1940
+ * legitimately have both semantics in play). Returns the prior value so the
1941
+ * caller restores it in a `finally` — nesting-safe: an inner cascade restores
1942
+ * to the outer's `true`, the outermost to `false`, and a thrown cascade cannot
1943
+ * latch the flag on. Nothing inside Quereus reads it; it exposes the signal the
1944
+ * host consumes. */
1945
+ _setFkCascadeReentry(value) {
1946
+ const prior = this._fkCascadeReentry;
1947
+ this._fkCascadeReentry = value;
1948
+ return prior;
1949
+ }
1950
+ /** @internal Whether the current DML re-entry is a Quereus FK cascade child
1951
+ * write — see {@link _setFkCascadeReentry}. */
1952
+ _isFkCascadeReentry() {
1953
+ return this._fkCascadeReentry;
1954
+ }
1738
1955
  /**
1739
1956
  * Subscribe to changes described by a {@link ChangeScope}.
1740
1957
  *
@@ -1823,7 +2040,7 @@ export class Database {
1823
2040
  * are NOT unwound by Quereus). Serialized via the exec mutex — do NOT call
1824
2041
  * from within statement execution or vtab callbacks (deadlock); the
1825
2042
  * two-arg `_maintainRowTimeCoveringStructures` is the seam for that
1826
- * context. See `docs/materialized-views.md` § External row-change
2043
+ * context. See `docs/mv-ingestion.md` § External row-change
1827
2044
  * ingestion for the full contract.
1828
2045
  *
1829
2046
  * Returns the collected commit-time global-assertion violations. With the
@@ -1877,7 +2094,7 @@ export class Database {
1877
2094
  * statement execution or a vtab callback (deadlock; same constraint as
1878
2095
  * `refresh materialized view` itself). Returns the refreshed MV identifiers
1879
2096
  * (for coarse watch notification); `[]` (no mutex, no transaction) when there
1880
- * are no maintained tables. See `docs/materialized-views.md` § Converging all
2097
+ * are no maintained tables. See `docs/mv-ingestion.md` § Converging all
1881
2098
  * materialized views.
1882
2099
  */
1883
2100
  async refreshAllMaterializedViews() {
@@ -1934,30 +2151,33 @@ export class Database {
1934
2151
  * OUTSIDE a statement uses the batch-amortized {@link ingestExternalRowChanges}
1935
2152
  * seam instead).
1936
2153
  *
1937
- * `deferred` is the optional per-statement deferred-rebuild set: a `'full-rebuild'`
1938
- * plan is marked dirty in it (no per-row apply) and drained once at the
1939
- * end-of-statement {@link _flushDeferredRebuilds}. The DML generator owns it; cold
1940
- * callers omit it (and never name a full-rebuild MV, which is never a covering
1941
- * structure so an inline rebuild is at worst a safe, unreached fallback). */
1942
- async _maintainRowTimeCoveringStructures(sourceBase, change, cache, deferred) {
1943
- await this.materializedViewManager.maintainRowTime(sourceBase, change, cache, deferred);
1944
- }
1945
- /** @internal Drain the per-statement deferred full-rebuild set at the
1946
- * end-of-statement boundary: rebuild every dirtied full-rebuild covering MV exactly
1947
- * once and cascade each rebuild's delta onward (MV-over-MV). The DML generator calls
1948
- * this after the row loop and before releasing the statement-atomicity savepoint, so
1949
- * a failed rebuild rolls the whole statement back. `cache` is the same per-statement
1950
- * {@link BackingConnectionCache} the row loop used. See
1951
- * `database-materialized-views.ts` § flushDeferredRebuilds. */
1952
- async _flushDeferredRebuilds(deferred, cache) {
1953
- await this.materializedViewManager.flushDeferredRebuilds(deferred, cache);
2154
+ * `deferred` is the optional per-statement deferred-rebuild set (a `'full-rebuild'`
2155
+ * plan is marked dirty in it, no per-row apply) and `residualBatch` the optional
2156
+ * per-statement residual key batch (the residual arms accumulate their deduped
2157
+ * affected binding keys into it, no per-row recompute); both drain once at the
2158
+ * end-of-statement {@link _flushDeferredMaintenance}. The DML generator owns them;
2159
+ * cold callers omit them (and only ever name inverse-projection MVs — the one
2160
+ * per-row-immediate arm — so the inline per-change fallback is at worst a safe,
2161
+ * unamortized apply). */
2162
+ async _maintainRowTimeCoveringStructures(sourceBase, change, cache, deferred, residualBatch) {
2163
+ await this.materializedViewManager.maintainRowTime(sourceBase, change, cache, deferred, residualBatch);
2164
+ }
2165
+ /** @internal Drain the per-statement deferred maintenance at the end-of-statement
2166
+ * boundary: recompute every accumulated residual key once per distinct key, rebuild
2167
+ * every dirtied full-rebuild covering MV exactly once, and cascade each delta onward
2168
+ * (MV-over-MV). The DML generator calls this after the row loop and before releasing
2169
+ * the statement-atomicity savepoint, so a failed recompute/rebuild rolls the whole
2170
+ * statement back. `cache` is the same per-statement {@link BackingConnectionCache}
2171
+ * the row loop used. See `database-materialized-views.ts` § flushDeferredMaintenance. */
2172
+ async _flushDeferredMaintenance(deferred, residualBatch, cache) {
2173
+ await this.materializedViewManager.flushDeferredMaintenance(deferred, residualBatch, cache);
1954
2174
  }
1955
2175
  /** @internal Resolve the linked, `row-time`, enforcement-ready covering MV for a
1956
2176
  * UNIQUE constraint on `schema.table`, or `undefined`. Synchronous (a map lookup
1957
2177
  * plus name/staleness checks) with an O(1) negative fast path, so the UNIQUE-check
1958
2178
  * path can consult it without async overhead. When it returns an MV, conflict
1959
2179
  * resolution routes through the covering MV's backing table (in preference to the
1960
- * auto-index) — see `docs/materialized-views.md` § Covering structures. */
2180
+ * auto-index) — see `docs/mv-constraints.md` § Covering structures. */
1961
2181
  _findRowTimeCoveringStructure(schemaName, tableName, uc) {
1962
2182
  return this.materializedViewManager.findRowTimeCoveringStructure(schemaName, tableName, uc);
1963
2183
  }