@quereus/quereus 4.5.0 → 4.6.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 (468) hide show
  1. package/README.md +4 -3
  2. package/dist/src/core/database-events.d.ts +99 -1
  3. package/dist/src/core/database-events.d.ts.map +1 -1
  4. package/dist/src/core/database-events.js +219 -3
  5. package/dist/src/core/database-events.js.map +1 -1
  6. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
  7. package/dist/src/core/database-materialized-views-plan-builders.js +29 -2
  8. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
  9. package/dist/src/core/database-transaction.d.ts +9 -0
  10. package/dist/src/core/database-transaction.d.ts.map +1 -1
  11. package/dist/src/core/database-transaction.js +9 -0
  12. package/dist/src/core/database-transaction.js.map +1 -1
  13. package/dist/src/core/database.d.ts +7 -1
  14. package/dist/src/core/database.d.ts.map +1 -1
  15. package/dist/src/core/database.js +20 -5
  16. package/dist/src/core/database.js.map +1 -1
  17. package/dist/src/func/builtins/aggregate.js +11 -11
  18. package/dist/src/func/builtins/aggregate.js.map +1 -1
  19. package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
  20. package/dist/src/func/builtins/builtin-window-functions.js +15 -85
  21. package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
  22. package/dist/src/func/builtins/conversion.d.ts.map +1 -1
  23. package/dist/src/func/builtins/conversion.js +10 -9
  24. package/dist/src/func/builtins/conversion.js.map +1 -1
  25. package/dist/src/func/builtins/datetime.d.ts.map +1 -1
  26. package/dist/src/func/builtins/datetime.js +28 -10
  27. package/dist/src/func/builtins/datetime.js.map +1 -1
  28. package/dist/src/func/builtins/json.d.ts.map +1 -1
  29. package/dist/src/func/builtins/json.js +23 -17
  30. package/dist/src/func/builtins/json.js.map +1 -1
  31. package/dist/src/func/builtins/mutation.js +2 -2
  32. package/dist/src/func/builtins/mutation.js.map +1 -1
  33. package/dist/src/func/builtins/return-types.d.ts +327 -0
  34. package/dist/src/func/builtins/return-types.d.ts.map +1 -0
  35. package/dist/src/func/builtins/return-types.js +43 -0
  36. package/dist/src/func/builtins/return-types.js.map +1 -0
  37. package/dist/src/func/builtins/scalar.d.ts.map +1 -1
  38. package/dist/src/func/builtins/scalar.js +138 -71
  39. package/dist/src/func/builtins/scalar.js.map +1 -1
  40. package/dist/src/func/builtins/schema.d.ts.map +1 -1
  41. package/dist/src/func/builtins/schema.js +11 -3
  42. package/dist/src/func/builtins/schema.js.map +1 -1
  43. package/dist/src/func/builtins/string.d.ts.map +1 -1
  44. package/dist/src/func/builtins/string.js +4 -2
  45. package/dist/src/func/builtins/string.js.map +1 -1
  46. package/dist/src/func/builtins/timespan.d.ts +3 -0
  47. package/dist/src/func/builtins/timespan.d.ts.map +1 -1
  48. package/dist/src/func/builtins/timespan.js +15 -11
  49. package/dist/src/func/builtins/timespan.js.map +1 -1
  50. package/dist/src/func/registration.d.ts +35 -1
  51. package/dist/src/func/registration.d.ts.map +1 -1
  52. package/dist/src/func/registration.js +235 -41
  53. package/dist/src/func/registration.js.map +1 -1
  54. package/dist/src/index.d.ts +11 -4
  55. package/dist/src/index.d.ts.map +1 -1
  56. package/dist/src/index.js +12 -3
  57. package/dist/src/index.js.map +1 -1
  58. package/dist/src/parser/parser.d.ts +46 -0
  59. package/dist/src/parser/parser.d.ts.map +1 -1
  60. package/dist/src/parser/parser.js +160 -44
  61. package/dist/src/parser/parser.js.map +1 -1
  62. package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
  63. package/dist/src/planner/analysis/check-extraction.js +37 -4
  64. package/dist/src/planner/analysis/check-extraction.js.map +1 -1
  65. package/dist/src/planner/analysis/comparison-collation.d.ts +20 -22
  66. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
  67. package/dist/src/planner/analysis/comparison-collation.js +29 -26
  68. package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
  69. package/dist/src/planner/analysis/constraint-extractor.d.ts +0 -7
  70. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  71. package/dist/src/planner/analysis/constraint-extractor.js +59 -59
  72. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  73. package/dist/src/planner/building/alter-table.d.ts.map +1 -1
  74. package/dist/src/planner/building/alter-table.js +65 -27
  75. package/dist/src/planner/building/alter-table.js.map +1 -1
  76. package/dist/src/planner/building/coercion.d.ts +21 -45
  77. package/dist/src/planner/building/coercion.d.ts.map +1 -1
  78. package/dist/src/planner/building/coercion.js +42 -91
  79. package/dist/src/planner/building/coercion.js.map +1 -1
  80. package/dist/src/planner/building/expression.d.ts +17 -0
  81. package/dist/src/planner/building/expression.d.ts.map +1 -1
  82. package/dist/src/planner/building/expression.js +28 -17
  83. package/dist/src/planner/building/expression.js.map +1 -1
  84. package/dist/src/planner/building/function-call.d.ts.map +1 -1
  85. package/dist/src/planner/building/function-call.js +7 -2
  86. package/dist/src/planner/building/function-call.js.map +1 -1
  87. package/dist/src/planner/building/select-aggregates.d.ts +1 -1
  88. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  89. package/dist/src/planner/building/select-aggregates.js +53 -2
  90. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  91. package/dist/src/planner/building/select-context.d.ts +7 -0
  92. package/dist/src/planner/building/select-context.d.ts.map +1 -1
  93. package/dist/src/planner/building/select-context.js +10 -40
  94. package/dist/src/planner/building/select-context.js.map +1 -1
  95. package/dist/src/planner/building/select.d.ts +37 -1
  96. package/dist/src/planner/building/select.d.ts.map +1 -1
  97. package/dist/src/planner/building/select.js +112 -51
  98. package/dist/src/planner/building/select.js.map +1 -1
  99. package/dist/src/planner/cost/conjunct-cost.d.ts +40 -0
  100. package/dist/src/planner/cost/conjunct-cost.d.ts.map +1 -1
  101. package/dist/src/planner/cost/conjunct-cost.js +45 -0
  102. package/dist/src/planner/cost/conjunct-cost.js.map +1 -1
  103. package/dist/src/planner/cost/index.d.ts +10 -0
  104. package/dist/src/planner/cost/index.d.ts.map +1 -1
  105. package/dist/src/planner/cost/index.js +15 -0
  106. package/dist/src/planner/cost/index.js.map +1 -1
  107. package/dist/src/planner/nodes/aggregate-node.d.ts +6 -0
  108. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  109. package/dist/src/planner/nodes/aggregate-node.js +10 -2
  110. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  111. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  112. package/dist/src/planner/nodes/alias-node.js +2 -1
  113. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  114. package/dist/src/planner/nodes/alter-table-node.d.ts +24 -8
  115. package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
  116. package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
  117. package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -1
  118. package/dist/src/planner/nodes/asof-scan-node.js +4 -1
  119. package/dist/src/planner/nodes/asof-scan-node.js.map +1 -1
  120. package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -1
  121. package/dist/src/planner/nodes/asserted-keys-node.js +2 -1
  122. package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -1
  123. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  124. package/dist/src/planner/nodes/bloom-join-node.js +8 -3
  125. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  126. package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
  127. package/dist/src/planner/nodes/cache-node.js +2 -1
  128. package/dist/src/planner/nodes/cache-node.js.map +1 -1
  129. package/dist/src/planner/nodes/distinct-node.d.ts +6 -0
  130. package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
  131. package/dist/src/planner/nodes/distinct-node.js +10 -2
  132. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  133. package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -1
  134. package/dist/src/planner/nodes/eager-prefetch-node.js +2 -1
  135. package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -1
  136. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts +5 -0
  137. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
  138. package/dist/src/planner/nodes/fanout-lookup-join-node.js +13 -6
  139. package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
  140. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  141. package/dist/src/planner/nodes/filter.js +12 -5
  142. package/dist/src/planner/nodes/filter.js.map +1 -1
  143. package/dist/src/planner/nodes/hash-aggregate.d.ts +6 -0
  144. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  145. package/dist/src/planner/nodes/hash-aggregate.js +10 -2
  146. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  147. package/dist/src/planner/nodes/join-node.d.ts +20 -1
  148. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  149. package/dist/src/planner/nodes/join-node.js +30 -9
  150. package/dist/src/planner/nodes/join-node.js.map +1 -1
  151. package/dist/src/planner/nodes/join-utils.d.ts +21 -0
  152. package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
  153. package/dist/src/planner/nodes/join-utils.js +26 -0
  154. package/dist/src/planner/nodes/join-utils.js.map +1 -1
  155. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts.map +1 -1
  156. package/dist/src/planner/nodes/key-set-semi-join-node.js +5 -1
  157. package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -1
  158. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
  159. package/dist/src/planner/nodes/lens-auxiliary-access-node.js +2 -1
  160. package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
  161. package/dist/src/planner/nodes/limit-offset.d.ts +6 -0
  162. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  163. package/dist/src/planner/nodes/limit-offset.js +10 -2
  164. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  165. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  166. package/dist/src/planner/nodes/merge-join-node.js +8 -3
  167. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  168. package/dist/src/planner/nodes/ordinal-slice-node.d.ts +5 -0
  169. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
  170. package/dist/src/planner/nodes/ordinal-slice-node.js +9 -2
  171. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
  172. package/dist/src/planner/nodes/plan-node.d.ts +24 -0
  173. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  174. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  175. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  176. package/dist/src/planner/nodes/project-node.js +2 -1
  177. package/dist/src/planner/nodes/project-node.js.map +1 -1
  178. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  179. package/dist/src/planner/nodes/reference.js +3 -2
  180. package/dist/src/planner/nodes/reference.js.map +1 -1
  181. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  182. package/dist/src/planner/nodes/retrieve-node.js +2 -1
  183. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  184. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  185. package/dist/src/planner/nodes/scalar.js +5 -18
  186. package/dist/src/planner/nodes/scalar.js.map +1 -1
  187. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  188. package/dist/src/planner/nodes/sort.js +3 -1
  189. package/dist/src/planner/nodes/sort.js.map +1 -1
  190. package/dist/src/planner/nodes/stream-aggregate.d.ts +6 -0
  191. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  192. package/dist/src/planner/nodes/stream-aggregate.js +10 -2
  193. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  194. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  195. package/dist/src/planner/nodes/table-access-nodes.js +5 -0
  196. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  197. package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
  198. package/dist/src/planner/nodes/window-function.js +8 -0
  199. package/dist/src/planner/nodes/window-function.js.map +1 -1
  200. package/dist/src/planner/nodes/window-node.d.ts +1 -1
  201. package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
  202. package/dist/src/planner/nodes/window-node.js +3 -1
  203. package/dist/src/planner/nodes/window-node.js.map +1 -1
  204. package/dist/src/planner/optimizer.d.ts +9 -1
  205. package/dist/src/planner/optimizer.d.ts.map +1 -1
  206. package/dist/src/planner/optimizer.js +77 -6
  207. package/dist/src/planner/optimizer.js.map +1 -1
  208. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -1
  209. package/dist/src/planner/rules/access/rule-key-set-seek.js +3 -68
  210. package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -1
  211. package/dist/src/planner/rules/access/rule-select-access-path.d.ts +19 -0
  212. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  213. package/dist/src/planner/rules/access/rule-select-access-path.js +24 -3
  214. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  215. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
  216. package/dist/src/planner/rules/cache/rule-cte-optimization.js +9 -0
  217. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
  218. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -1
  219. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +6 -4
  220. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -1
  221. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +5 -31
  222. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
  223. package/dist/src/planner/rules/join/equi-pair-extractor.js +4 -44
  224. package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
  225. package/dist/src/planner/rules/join/index-nested-loop.d.ts +49 -0
  226. package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -0
  227. package/dist/src/planner/rules/join/index-nested-loop.js +285 -0
  228. package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -0
  229. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +8 -8
  230. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +10 -4
  231. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  232. package/dist/src/planner/rules/join/rule-join-physical-selection.js +83 -27
  233. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  234. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +4 -4
  235. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
  236. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.d.ts +21 -8
  237. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.d.ts.map +1 -1
  238. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.js +70 -14
  239. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.js.map +1 -1
  240. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +42 -17
  241. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
  242. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +84 -154
  243. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -1
  244. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts +73 -0
  245. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts.map +1 -0
  246. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js +205 -0
  247. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js.map +1 -0
  248. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts +14 -11
  249. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -1
  250. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +21 -85
  251. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
  252. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts +7 -1
  253. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
  254. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +7 -1
  255. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
  256. package/dist/src/planner/rules/shared/access-leaf.d.ts +39 -0
  257. package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -0
  258. package/dist/src/planner/rules/shared/access-leaf.js +79 -0
  259. package/dist/src/planner/rules/shared/access-leaf.js.map +1 -0
  260. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -1
  261. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +18 -8
  262. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
  263. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts +3 -1
  264. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -1
  265. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +27 -10
  266. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
  267. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  268. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +69 -11
  269. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  270. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +17 -7
  271. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -1
  272. package/dist/src/planner/rules/window/rule-monotonic-window.js +124 -87
  273. package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -1
  274. package/dist/src/planner/scopes/aliased.d.ts.map +1 -1
  275. package/dist/src/planner/scopes/aliased.js +6 -0
  276. package/dist/src/planner/scopes/aliased.js.map +1 -1
  277. package/dist/src/planner/stats/catalog-stats.d.ts +44 -13
  278. package/dist/src/planner/stats/catalog-stats.d.ts.map +1 -1
  279. package/dist/src/planner/stats/catalog-stats.js +137 -61
  280. package/dist/src/planner/stats/catalog-stats.js.map +1 -1
  281. package/dist/src/planner/stats/conjunct-selectivity.d.ts +48 -0
  282. package/dist/src/planner/stats/conjunct-selectivity.d.ts.map +1 -0
  283. package/dist/src/planner/stats/conjunct-selectivity.js +168 -0
  284. package/dist/src/planner/stats/conjunct-selectivity.js.map +1 -0
  285. package/dist/src/planner/stats/index.d.ts +22 -3
  286. package/dist/src/planner/stats/index.d.ts.map +1 -1
  287. package/dist/src/planner/stats/index.js.map +1 -1
  288. package/dist/src/planner/stats/table-cardinality.d.ts +28 -0
  289. package/dist/src/planner/stats/table-cardinality.d.ts.map +1 -0
  290. package/dist/src/planner/stats/table-cardinality.js +29 -0
  291. package/dist/src/planner/stats/table-cardinality.js.map +1 -0
  292. package/dist/src/planner/util/column-origins.d.ts +29 -8
  293. package/dist/src/planner/util/column-origins.d.ts.map +1 -1
  294. package/dist/src/planner/util/column-origins.js +74 -14
  295. package/dist/src/planner/util/column-origins.js.map +1 -1
  296. package/dist/src/planner/util/fd-utils.d.ts +32 -8
  297. package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
  298. package/dist/src/planner/util/fd-utils.js +46 -9
  299. package/dist/src/planner/util/fd-utils.js.map +1 -1
  300. package/dist/src/planner/util/ind-utils.d.ts +56 -17
  301. package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
  302. package/dist/src/planner/util/ind-utils.js +82 -21
  303. package/dist/src/planner/util/ind-utils.js.map +1 -1
  304. package/dist/src/planner/util/key-utils.d.ts +20 -2
  305. package/dist/src/planner/util/key-utils.d.ts.map +1 -1
  306. package/dist/src/planner/util/key-utils.js +37 -3
  307. package/dist/src/planner/util/key-utils.js.map +1 -1
  308. package/dist/src/planner/util/row-estimates.d.ts +28 -0
  309. package/dist/src/planner/util/row-estimates.d.ts.map +1 -0
  310. package/dist/src/planner/util/row-estimates.js +40 -0
  311. package/dist/src/planner/util/row-estimates.js.map +1 -0
  312. package/dist/src/planner/util/row-population.d.ts +42 -0
  313. package/dist/src/planner/util/row-population.d.ts.map +1 -0
  314. package/dist/src/planner/util/row-population.js +71 -0
  315. package/dist/src/planner/util/row-population.js.map +1 -0
  316. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  317. package/dist/src/runtime/emit/add-constraint.js +39 -1
  318. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  319. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  320. package/dist/src/runtime/emit/aggregate.js +4 -4
  321. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  322. package/dist/src/runtime/emit/alter-schema-event.d.ts +42 -0
  323. package/dist/src/runtime/emit/alter-schema-event.d.ts.map +1 -0
  324. package/dist/src/runtime/emit/alter-schema-event.js +28 -0
  325. package/dist/src/runtime/emit/alter-schema-event.js.map +1 -0
  326. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  327. package/dist/src/runtime/emit/alter-table.js +380 -154
  328. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  329. package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
  330. package/dist/src/runtime/emit/analyze.js +35 -3
  331. package/dist/src/runtime/emit/analyze.js.map +1 -1
  332. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  333. package/dist/src/runtime/emit/cast.js +4 -19
  334. package/dist/src/runtime/emit/cast.js.map +1 -1
  335. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  336. package/dist/src/runtime/emit/dml-executor.js +64 -27
  337. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  338. package/dist/src/runtime/emit/drop-index.d.ts.map +1 -1
  339. package/dist/src/runtime/emit/drop-index.js +4 -3
  340. package/dist/src/runtime/emit/drop-index.js.map +1 -1
  341. package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
  342. package/dist/src/runtime/emit/hash-aggregate.js +2 -2
  343. package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
  344. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  345. package/dist/src/runtime/emit/join.js +8 -67
  346. package/dist/src/runtime/emit/join.js.map +1 -1
  347. package/dist/src/runtime/emit/key-set-semi-join.d.ts.map +1 -1
  348. package/dist/src/runtime/emit/key-set-semi-join.js +6 -0
  349. package/dist/src/runtime/emit/key-set-semi-join.js.map +1 -1
  350. package/dist/src/runtime/emit/operand-comparator.d.ts +30 -0
  351. package/dist/src/runtime/emit/operand-comparator.d.ts.map +1 -1
  352. package/dist/src/runtime/emit/operand-comparator.js +34 -0
  353. package/dist/src/runtime/emit/operand-comparator.js.map +1 -1
  354. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  355. package/dist/src/runtime/emit/schema-declarative.js +30 -0
  356. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  357. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  358. package/dist/src/runtime/emit/subquery.js +153 -52
  359. package/dist/src/runtime/emit/subquery.js.map +1 -1
  360. package/dist/src/runtime/emit/window.js +36 -23
  361. package/dist/src/runtime/emit/window.js.map +1 -1
  362. package/dist/src/schema/catalog-persistability.d.ts +19 -16
  363. package/dist/src/schema/catalog-persistability.d.ts.map +1 -1
  364. package/dist/src/schema/catalog-persistability.js +76 -20
  365. package/dist/src/schema/catalog-persistability.js.map +1 -1
  366. package/dist/src/schema/catalog.d.ts +67 -2
  367. package/dist/src/schema/catalog.d.ts.map +1 -1
  368. package/dist/src/schema/catalog.js +194 -3
  369. package/dist/src/schema/catalog.js.map +1 -1
  370. package/dist/src/schema/column.d.ts +26 -3
  371. package/dist/src/schema/column.d.ts.map +1 -1
  372. package/dist/src/schema/column.js.map +1 -1
  373. package/dist/src/schema/ddl-generator.d.ts.map +1 -1
  374. package/dist/src/schema/ddl-generator.js +19 -6
  375. package/dist/src/schema/ddl-generator.js.map +1 -1
  376. package/dist/src/schema/function.d.ts +32 -1
  377. package/dist/src/schema/function.d.ts.map +1 -1
  378. package/dist/src/schema/function.js +10 -2
  379. package/dist/src/schema/function.js.map +1 -1
  380. package/dist/src/schema/manager.d.ts +84 -7
  381. package/dist/src/schema/manager.d.ts.map +1 -1
  382. package/dist/src/schema/manager.js +153 -53
  383. package/dist/src/schema/manager.js.map +1 -1
  384. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  385. package/dist/src/schema/schema-differ.js +104 -28
  386. package/dist/src/schema/schema-differ.js.map +1 -1
  387. package/dist/src/schema/table.d.ts +149 -1
  388. package/dist/src/schema/table.d.ts.map +1 -1
  389. package/dist/src/schema/table.js +248 -1
  390. package/dist/src/schema/table.js.map +1 -1
  391. package/dist/src/schema/unique-enforcement.d.ts +5 -3
  392. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  393. package/dist/src/schema/unique-enforcement.js +5 -3
  394. package/dist/src/schema/unique-enforcement.js.map +1 -1
  395. package/dist/src/types/builtin-types.d.ts +16 -0
  396. package/dist/src/types/builtin-types.d.ts.map +1 -1
  397. package/dist/src/types/builtin-types.js +46 -8
  398. package/dist/src/types/builtin-types.js.map +1 -1
  399. package/dist/src/types/cast-semantics.d.ts +42 -0
  400. package/dist/src/types/cast-semantics.d.ts.map +1 -1
  401. package/dist/src/types/cast-semantics.js +64 -0
  402. package/dist/src/types/cast-semantics.js.map +1 -1
  403. package/dist/src/types/comparison-coercion.d.ts +101 -0
  404. package/dist/src/types/comparison-coercion.d.ts.map +1 -0
  405. package/dist/src/types/comparison-coercion.js +162 -0
  406. package/dist/src/types/comparison-coercion.js.map +1 -0
  407. package/dist/src/types/index.d.ts +2 -2
  408. package/dist/src/types/index.d.ts.map +1 -1
  409. package/dist/src/types/index.js +2 -2
  410. package/dist/src/types/index.js.map +1 -1
  411. package/dist/src/types/logical-type.d.ts +7 -0
  412. package/dist/src/types/logical-type.d.ts.map +1 -1
  413. package/dist/src/types/logical-type.js.map +1 -1
  414. package/dist/src/types/validation.d.ts +56 -0
  415. package/dist/src/types/validation.d.ts.map +1 -1
  416. package/dist/src/types/validation.js +68 -0
  417. package/dist/src/types/validation.js.map +1 -1
  418. package/dist/src/util/coercion.d.ts +8 -0
  419. package/dist/src/util/coercion.d.ts.map +1 -1
  420. package/dist/src/util/coercion.js +8 -0
  421. package/dist/src/util/coercion.js.map +1 -1
  422. package/dist/src/util/comparison.d.ts +16 -3
  423. package/dist/src/util/comparison.d.ts.map +1 -1
  424. package/dist/src/util/comparison.js +21 -5
  425. package/dist/src/util/comparison.js.map +1 -1
  426. package/dist/src/util/key-serializer.d.ts +46 -0
  427. package/dist/src/util/key-serializer.d.ts.map +1 -1
  428. package/dist/src/util/key-serializer.js +47 -0
  429. package/dist/src/util/key-serializer.js.map +1 -1
  430. package/dist/src/util/value-set.d.ts +21 -0
  431. package/dist/src/util/value-set.d.ts.map +1 -0
  432. package/dist/src/util/value-set.js +22 -0
  433. package/dist/src/util/value-set.js.map +1 -0
  434. package/dist/src/vtab/capabilities.d.ts +1 -1
  435. package/dist/src/vtab/events.d.ts +5 -1
  436. package/dist/src/vtab/events.d.ts.map +1 -1
  437. package/dist/src/vtab/events.js.map +1 -1
  438. package/dist/src/vtab/memory/layer/alter-column.d.ts +147 -0
  439. package/dist/src/vtab/memory/layer/alter-column.d.ts.map +1 -0
  440. package/dist/src/vtab/memory/layer/alter-column.js +214 -0
  441. package/dist/src/vtab/memory/layer/alter-column.js.map +1 -0
  442. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  443. package/dist/src/vtab/memory/layer/base.js +4 -3
  444. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  445. package/dist/src/vtab/memory/layer/interface.d.ts +2 -2
  446. package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
  447. package/dist/src/vtab/memory/layer/manager.d.ts +176 -25
  448. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  449. package/dist/src/vtab/memory/layer/manager.js +572 -495
  450. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  451. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  452. package/dist/src/vtab/memory/layer/scan-layer.js +32 -5
  453. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  454. package/dist/src/vtab/memory/layer/transaction.d.ts +101 -15
  455. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  456. package/dist/src/vtab/memory/layer/transaction.js +133 -45
  457. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  458. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  459. package/dist/src/vtab/memory/module.js +2 -1
  460. package/dist/src/vtab/memory/module.js.map +1 -1
  461. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  462. package/dist/src/vtab/memory/table.js +11 -6
  463. package/dist/src/vtab/memory/table.js.map +1 -1
  464. package/dist/src/vtab/module.d.ts +51 -21
  465. package/dist/src/vtab/module.d.ts.map +1 -1
  466. package/dist/src/vtab/table.d.ts +1 -1
  467. package/dist/src/vtab/table.js +1 -1
  468. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  import { Schema, type SchemaKind } from './schema.js';
2
2
  import type { IntegrityAssertionSchema } from './assertion.js';
3
3
  import type { Database } from '../core/database.js';
4
- import type { TableSchema, ForeignKeyConstraintSchema } from './table.js';
4
+ import type { TableSchema, IndexSchema, ForeignKeyConstraintSchema } from './table.js';
5
5
  import type { FunctionSchema } from './function.js';
6
6
  import { type SqlValue } from '../common/types.js';
7
7
  import type { AnyVirtualTableModule, BaseModuleConfig } from '../vtab/module.js';
@@ -9,6 +9,7 @@ import type { ViewSchema } from './view.js';
9
9
  import { type MaintainedTableSchema, type TableDerivation } from './derivation.js';
10
10
  import type * as AST from '../parser/ast.js';
11
11
  import { SchemaChangeNotifier } from './change-events.js';
12
+ import type { VTableSchemaChangeEvent } from '../vtab/events.js';
12
13
  /**
13
14
  * One FK that references some parent table, paired with its declaring child
14
15
  * table. Entries in the reverse FK index ({@link SchemaManager.getReferencingForeignKeys});
@@ -19,6 +20,29 @@ export interface ReferencingForeignKey {
19
20
  readonly childTable: TableSchema;
20
21
  readonly fk: ForeignKeyConstraintSchema;
21
22
  }
23
+ /**
24
+ * How much of a schema's index namespace a by-name owner lookup
25
+ * ({@link SchemaManager.findIndexOwner}) should consider.
26
+ */
27
+ export type IndexLookupScope =
28
+ /**
29
+ * Only indexes a user may create, drop or rename. An implicit covering
30
+ * structure — the auto-built secondary BTree backing a declared `UNIQUE`
31
+ * constraint — is excluded whether hidden or exposed: its lifecycle belongs to
32
+ * the constraint, so removing it means `ALTER TABLE … DROP CONSTRAINT`. Default.
33
+ */
34
+ 'user-indexes'
35
+ /**
36
+ * Additionally admits an *exposed* implicit covering structure (constraint
37
+ * tagged `quereus.expose_implicit_index`), which IS addressable by
38
+ * `ALTER INDEX … TAGS`. Hidden ones stay excluded.
39
+ */
40
+ | 'tag-addressable';
41
+ /** The table owning a by-name index match, paired with the matched index. */
42
+ export interface IndexOwnerMatch {
43
+ readonly table: TableSchema;
44
+ readonly index: IndexSchema;
45
+ }
22
46
  /**
23
47
  * Generic options passed to VTab modules during CREATE TABLE.
24
48
  * Modules are responsible for interpreting these.
@@ -857,17 +881,53 @@ export declare class SchemaManager {
857
881
  * Builds an IndexSchema from AST column definitions, validating against the table schema.
858
882
  */
859
883
  private buildIndexSchema;
884
+ /**
885
+ * The table in `schemaName` owning the index named `indexName`, paired with the
886
+ * matched {@link IndexSchema} — or `undefined` when nothing in scope carries the
887
+ * name. The one by-name index-owner resolver: `DROP INDEX` ({@link dropIndex} and
888
+ * the strict-DDL-policy gate in `runtime/emit/drop-index.ts`),
889
+ * `ALTER INDEX … TAGS` ({@link resolveIndexTagSwap}), `CREATE INDEX`'s
890
+ * schema-wide name-uniqueness check ({@link findIndexNameOwnerElsewhere}) and
891
+ * `@quereus/sync`'s replicated index DDL all funnel here.
892
+ *
893
+ * Index names are unique per schema, not per table (docs/sql-ddl.md §6.3), and
894
+ * {@link createIndex} rejects a name already taken elsewhere in the schema, so
895
+ * first-match is unambiguous by construction. That invariant is what makes
896
+ * replication safe: a replicated `drop index "main"."idx"` carries no table name
897
+ * (the DROP INDEX grammar has no slot for one), so without it each receiver would
898
+ * resolve the owner by its own table-registration order and two devices could drop
899
+ * different indexes while both believing they converged.
900
+ *
901
+ * An out-of-scope match is **skipped and the scan continues** — never stopped at.
902
+ * That is what lets one table's constraint-backed `uq_email` coexist with another
903
+ * table's real index of the same name (constraint names are unique per *table*, so
904
+ * two tables may each declare `constraint uq_email unique (email)`). Both scope
905
+ * predicates read only `uniqueConstraints`, which every backend carries, so the
906
+ * filter behaves the same on the store as in memory.
907
+ *
908
+ * Case-insensitive on both `indexName` and `options.excludeTable`, like every
909
+ * other index-name comparison in the engine. An unknown `schemaName` yields
910
+ * `undefined` rather than throwing — callers that must distinguish a missing
911
+ * schema from a missing index check for it themselves first.
912
+ *
913
+ * @param options.scope Which part of the namespace to consider; defaults to
914
+ * `'user-indexes'` (see {@link IndexLookupScope}).
915
+ * @param options.excludeTable Skip this table entirely — used by the
916
+ * name-uniqueness check, which asks about *other* tables only.
917
+ */
918
+ findIndexOwner(schemaName: string, indexName: string, options?: {
919
+ scope?: IndexLookupScope;
920
+ excludeTable?: string;
921
+ }): IndexOwnerMatch | undefined;
860
922
  /**
861
923
  * The table in `targetSchemaName` — other than `ownerTableName` — that already
862
924
  * carries a **user** index named `indexName`, or `undefined` when the name is
863
925
  * free. Backs the schema-wide index-name uniqueness rule enforced by
864
926
  * {@link createIndex} and warned about by {@link importIndex}.
865
927
  *
866
- * Implicit covering structures are skipped. The auto-built secondary BTree
867
- * backing a `UNIQUE` constraint is named after that constraint (or `_uc_<cols>`),
868
- * and constraint names are unique per *table*, so two tables may legitimately
869
- * each declare `constraint uq_email unique (email)` and each materialize an
870
- * index named `uq_email`. Counting those would reject a valid schema.
928
+ * Implicit covering structures are skipped (the default
929
+ * {@link findIndexOwner} scope): counting them would reject a valid schema in
930
+ * which two tables each declare `constraint uq_email unique (email)`.
871
931
  *
872
932
  * NOTE: an *exposed* implicit covering index (constraint tagged
873
933
  * `quereus.expose_implicit_index`) IS user-addressable by `ALTER INDEX`, so two
@@ -881,6 +941,17 @@ export declare class SchemaManager {
881
941
  * Drops a secondary index from the table that owns it.
882
942
  * Searches all tables in the target schema to find the owning table.
883
943
  *
944
+ * An implicit covering structure — the auto-built secondary BTree backing a
945
+ * declared `UNIQUE` constraint, named after that constraint (or `_uc_<cols>`) —
946
+ * is NOT droppable this way, exposed or not: its lifecycle belongs to the
947
+ * constraint, so removing it means `ALTER TABLE … DROP CONSTRAINT`. The owner
948
+ * scan therefore *skips and keeps scanning* past such a match rather than
949
+ * stopping at it, so a real user index of the same name on another table is
950
+ * still found (constraint names are unique per table, not per schema — see
951
+ * {@link findIndexNameOwnerElsewhere}). With no owner found this falls through
952
+ * to the `IF EXISTS` / `no such index` handling below, matching what
953
+ * `ALTER INDEX … SET TAGS` already does with the same name.
954
+ *
884
955
  * @param schemaName The schema to search in (e.g., "main")
885
956
  * @param indexName The name of the index to drop
886
957
  * @param ifExists If true, silently return if the index is not found
@@ -898,8 +969,14 @@ export declare class SchemaManager {
898
969
  * fires for it. If a module without native events ever needs to replicate,
899
970
  * thread the object schema in and call the `schema/ddl-generator.ts` generators
900
971
  * here the way the store and memory modules do at their own emit sites.
972
+ *
973
+ * Public because the `ALTER TABLE` arms live outside this class
974
+ * (`runtime/emit/alter-table.ts`, `runtime/emit/add-constraint.ts`) and must reach the
975
+ * SAME gate. Re-deciding "no listener / module has its own emitter" at a second site is
976
+ * exactly what produced the data-channel double-emit the store package's
977
+ * `database-events.spec.ts` guards against — keep one gate.
901
978
  */
902
- private emitAutoSchemaEventIfNeeded;
979
+ emitAutoSchemaEventIfNeeded(moduleName: string | undefined, event: VTableSchemaChangeEvent): void;
903
980
  /**
904
981
  * Defines a new table in the schema based on an AST.CreateTableStmt.
905
982
  * Interacts with VTab modules (create) and registers the new table schema.
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/schema/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/schema/manager.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { buildColumnIndexMap, columnDefToSchema, findPKDefinition, opsToMask, mu
6
6
  import { buildUniqueConstraintSchema, buildForeignKeyConstraintSchema, validateForeignKeyCollations } from './constraint-builder.js';
7
7
  import { normalizeBackingModule } from './view.js';
8
8
  import { isMaintainedTable } from './derivation.js';
9
- import { isHiddenImplicitIndex, isImplicitCoveringIndex, findExposedImplicitConstraintIndex } from './catalog.js';
9
+ import { isHiddenImplicitIndex, isImplicitCoveringIndex, findExposedImplicitConstraintIndex, assertNoDuplicateUniqueConstraints } from './catalog.js';
10
10
  import { assertCatalogObjectPersistable } from './catalog-persistability.js';
11
11
  import { buildLensBasisFkGate } from './lens-fk-discovery.js';
12
12
  import { createLogger } from '../common/logger.js';
@@ -1049,13 +1049,13 @@ export class SchemaManager {
1049
1049
  // Primary path: a materialized IndexSchema — every real index, plus the
1050
1050
  // memory backend's materialized implicit covering index. Tags live on the
1051
1051
  // matched IndexSchema. A *hidden* implicit index is not user-addressable and
1052
- // is skipped here; it then fails the exposed-constraint fallback below
1053
- // (its name is materialized, so it is not "exposed and unmaterialized") and
1054
- // surfaces as NOTFOUND — preserving Phase 22/37 behavior.
1055
- for (const table of schema.getAllTables()) {
1056
- const matched = table.indexes?.find(idx => idx.name.toLowerCase() === lower);
1057
- if (!matched || isHiddenImplicitIndex(table, matched.name))
1058
- continue;
1052
+ // is skipped by the `tag-addressable` scope; it then fails the
1053
+ // exposed-constraint fallback below (its name is materialized, so it is not
1054
+ // "exposed and unmaterialized") and surfaces as NOTFOUND — preserving
1055
+ // Phase 22/37 behavior.
1056
+ const match = this.findIndexOwner(targetSchemaName, indexName, { scope: 'tag-addressable' });
1057
+ if (match) {
1058
+ const { table, index: matched } = match;
1059
1059
  // Compute before rebuilding the index array so a drop-of-absent NOTFOUND
1060
1060
  // aborts before any swap.
1061
1061
  const nextTags = compute(matched.tags);
@@ -1305,16 +1305,12 @@ export class SchemaManager {
1305
1305
  objectName: tableSchema.name,
1306
1306
  oldObject: tableSchema
1307
1307
  });
1308
- // Emit auto schema event for modules without native event support
1309
- const moduleReg = tableSchema.vtabModuleName ? this.getModule(tableSchema.vtabModuleName) : undefined;
1310
- if (this.db._needsSchemaEvents() && !hasNativeEventSupport(moduleReg?.module)) {
1311
- this.db._getEventEmitter().emitAutoSchemaEvent(tableSchema.vtabModuleName ?? 'memory', {
1312
- type: 'drop',
1313
- objectType: 'table',
1314
- schemaName: tableSchema.schemaName,
1315
- objectName: tableSchema.name,
1316
- });
1317
- }
1308
+ this.emitAutoSchemaEventIfNeeded(tableSchema.vtabModuleName, {
1309
+ type: 'drop',
1310
+ objectType: 'table',
1311
+ schemaName: tableSchema.schemaName,
1312
+ objectName: tableSchema.name,
1313
+ });
1318
1314
  }
1319
1315
  return removed; // True if removed from schema, false if not found and ifExists was true.
1320
1316
  }
@@ -1955,7 +1951,16 @@ export class SchemaManager {
1955
1951
  throw new QuereusError(`Virtual table module '${tableSchema.vtabModuleName}' for table '${tableName}' does not support CREATE INDEX.`, StatusCode.ERROR, undefined, stmt.table.loc?.start.line, stmt.table.loc?.start.column);
1956
1952
  }
1957
1953
  const existingIndex = tableSchema.indexes?.find(idx => idx.name.toLowerCase() === indexName.toLowerCase());
1958
- if (existingIndex) {
1954
+ // The implicit-covering term is what makes this refusal backend-independent.
1955
+ // Memory materializes a constraint's backing structure as a real `IndexSchema`
1956
+ // entry (so `existingIndex` alone catches it); the store keeps it out of the
1957
+ // engine-facing `indexes` list entirely, and without this term `create index
1958
+ // uq_email` would land on the *same* physical key-value store as the
1959
+ // constraint's backing structure (`buildIndexStoreName` is a pure function of
1960
+ // schema + table + index name). `isImplicitCoveringIndex` reads only
1961
+ // `uniqueConstraints`, which both backends carry, so one term covers both.
1962
+ const shadowsConstraintStructure = isImplicitCoveringIndex(tableSchema, indexName);
1963
+ if (existingIndex || shadowsConstraintStructure) {
1959
1964
  if (stmt.ifNotExists) {
1960
1965
  log(`Skipping CREATE INDEX: Index %s.%s already exists (IF NOT EXISTS).`, targetSchemaName, indexName);
1961
1966
  return;
@@ -2042,17 +2047,66 @@ export class SchemaManager {
2042
2047
  tags: stmt.tags && Object.keys(stmt.tags).length > 0 ? Object.freeze({ ...stmt.tags }) : undefined,
2043
2048
  };
2044
2049
  }
2050
+ /**
2051
+ * The table in `schemaName` owning the index named `indexName`, paired with the
2052
+ * matched {@link IndexSchema} — or `undefined` when nothing in scope carries the
2053
+ * name. The one by-name index-owner resolver: `DROP INDEX` ({@link dropIndex} and
2054
+ * the strict-DDL-policy gate in `runtime/emit/drop-index.ts`),
2055
+ * `ALTER INDEX … TAGS` ({@link resolveIndexTagSwap}), `CREATE INDEX`'s
2056
+ * schema-wide name-uniqueness check ({@link findIndexNameOwnerElsewhere}) and
2057
+ * `@quereus/sync`'s replicated index DDL all funnel here.
2058
+ *
2059
+ * Index names are unique per schema, not per table (docs/sql-ddl.md §6.3), and
2060
+ * {@link createIndex} rejects a name already taken elsewhere in the schema, so
2061
+ * first-match is unambiguous by construction. That invariant is what makes
2062
+ * replication safe: a replicated `drop index "main"."idx"` carries no table name
2063
+ * (the DROP INDEX grammar has no slot for one), so without it each receiver would
2064
+ * resolve the owner by its own table-registration order and two devices could drop
2065
+ * different indexes while both believing they converged.
2066
+ *
2067
+ * An out-of-scope match is **skipped and the scan continues** — never stopped at.
2068
+ * That is what lets one table's constraint-backed `uq_email` coexist with another
2069
+ * table's real index of the same name (constraint names are unique per *table*, so
2070
+ * two tables may each declare `constraint uq_email unique (email)`). Both scope
2071
+ * predicates read only `uniqueConstraints`, which every backend carries, so the
2072
+ * filter behaves the same on the store as in memory.
2073
+ *
2074
+ * Case-insensitive on both `indexName` and `options.excludeTable`, like every
2075
+ * other index-name comparison in the engine. An unknown `schemaName` yields
2076
+ * `undefined` rather than throwing — callers that must distinguish a missing
2077
+ * schema from a missing index check for it themselves first.
2078
+ *
2079
+ * @param options.scope Which part of the namespace to consider; defaults to
2080
+ * `'user-indexes'` (see {@link IndexLookupScope}).
2081
+ * @param options.excludeTable Skip this table entirely — used by the
2082
+ * name-uniqueness check, which asks about *other* tables only.
2083
+ */
2084
+ findIndexOwner(schemaName, indexName, options) {
2085
+ const schema = this.getSchema(schemaName);
2086
+ if (!schema)
2087
+ return undefined;
2088
+ const outOfScope = options?.scope === 'tag-addressable' ? isHiddenImplicitIndex : isImplicitCoveringIndex;
2089
+ const lowerIndexName = indexName.toLowerCase();
2090
+ const lowerExcluded = options?.excludeTable?.toLowerCase();
2091
+ for (const table of schema.getAllTables()) {
2092
+ if (lowerExcluded !== undefined && table.name.toLowerCase() === lowerExcluded)
2093
+ continue;
2094
+ const index = table.indexes?.find(idx => idx.name.toLowerCase() === lowerIndexName);
2095
+ if (!index || outOfScope(table, index.name))
2096
+ continue;
2097
+ return { table, index };
2098
+ }
2099
+ return undefined;
2100
+ }
2045
2101
  /**
2046
2102
  * The table in `targetSchemaName` — other than `ownerTableName` — that already
2047
2103
  * carries a **user** index named `indexName`, or `undefined` when the name is
2048
2104
  * free. Backs the schema-wide index-name uniqueness rule enforced by
2049
2105
  * {@link createIndex} and warned about by {@link importIndex}.
2050
2106
  *
2051
- * Implicit covering structures are skipped. The auto-built secondary BTree
2052
- * backing a `UNIQUE` constraint is named after that constraint (or `_uc_<cols>`),
2053
- * and constraint names are unique per *table*, so two tables may legitimately
2054
- * each declare `constraint uq_email unique (email)` and each materialize an
2055
- * index named `uq_email`. Counting those would reject a valid schema.
2107
+ * Implicit covering structures are skipped (the default
2108
+ * {@link findIndexOwner} scope): counting them would reject a valid schema in
2109
+ * which two tables each declare `constraint uq_email unique (email)`.
2056
2110
  *
2057
2111
  * NOTE: an *exposed* implicit covering index (constraint tagged
2058
2112
  * `quereus.expose_implicit_index`) IS user-addressable by `ALTER INDEX`, so two
@@ -2062,25 +2116,23 @@ export class SchemaManager {
2062
2116
  * per schema.
2063
2117
  */
2064
2118
  findIndexNameOwnerElsewhere(targetSchemaName, ownerTableName, indexName) {
2065
- const schema = this.getSchema(targetSchemaName);
2066
- if (!schema)
2067
- return undefined;
2068
- const lowerIndexName = indexName.toLowerCase();
2069
- const lowerOwnerName = ownerTableName.toLowerCase();
2070
- for (const table of schema.getAllTables()) {
2071
- if (table.name.toLowerCase() === lowerOwnerName)
2072
- continue;
2073
- const matched = table.indexes?.find(idx => idx.name.toLowerCase() === lowerIndexName);
2074
- if (!matched || isImplicitCoveringIndex(table, matched.name))
2075
- continue;
2076
- return table;
2077
- }
2078
- return undefined;
2119
+ return this.findIndexOwner(targetSchemaName, indexName, { excludeTable: ownerTableName })?.table;
2079
2120
  }
2080
2121
  /**
2081
2122
  * Drops a secondary index from the table that owns it.
2082
2123
  * Searches all tables in the target schema to find the owning table.
2083
2124
  *
2125
+ * An implicit covering structure — the auto-built secondary BTree backing a
2126
+ * declared `UNIQUE` constraint, named after that constraint (or `_uc_<cols>`) —
2127
+ * is NOT droppable this way, exposed or not: its lifecycle belongs to the
2128
+ * constraint, so removing it means `ALTER TABLE … DROP CONSTRAINT`. The owner
2129
+ * scan therefore *skips and keeps scanning* past such a match rather than
2130
+ * stopping at it, so a real user index of the same name on another table is
2131
+ * still found (constraint names are unique per table, not per schema — see
2132
+ * {@link findIndexNameOwnerElsewhere}). With no owner found this falls through
2133
+ * to the `IF EXISTS` / `no such index` handling below, matching what
2134
+ * `ALTER INDEX … SET TAGS` already does with the same name.
2135
+ *
2084
2136
  * @param schemaName The schema to search in (e.g., "main")
2085
2137
  * @param indexName The name of the index to drop
2086
2138
  * @param ifExists If true, silently return if the index is not found
@@ -2092,29 +2144,33 @@ export class SchemaManager {
2092
2144
  return;
2093
2145
  throw new QuereusError(`Schema not found: ${schemaName}`, StatusCode.ERROR);
2094
2146
  }
2095
- // Find which table owns this index
2147
+ // Find which table owns this index.
2148
+ // NOTE: a table may hold a UNIQUE constraint whose name equals an unrelated
2149
+ // user index's name on that same table (`create index foo on t (b); alter
2150
+ // table t add constraint foo unique (a);` — both succeed today). There the
2151
+ // out-of-scope predicate is true and this refuses the drop even though a real
2152
+ // index also carries the name. That state is already broken in worse ways
2153
+ // (memory materializes two entries literally named `foo`) and is tracked as
2154
+ // bug-unique-constraint-name-collides-with-index-name; refusing is the
2155
+ // conservative outcome — do not shape-match around it here.
2096
2156
  const lowerIndexName = indexName.toLowerCase();
2097
- let ownerTable;
2098
- for (const table of schema.getAllTables()) {
2099
- if (table.indexes?.some(idx => idx.name.toLowerCase() === lowerIndexName)) {
2100
- ownerTable = table;
2101
- break;
2102
- }
2103
- }
2104
- if (!ownerTable) {
2157
+ const ownerMatch = this.findIndexOwner(schemaName, indexName);
2158
+ if (!ownerMatch) {
2105
2159
  if (ifExists) {
2106
2160
  log(`Index %s.%s not found, but IF EXISTS specified`, schemaName, indexName);
2107
2161
  return;
2108
2162
  }
2109
2163
  throw new QuereusError(`no such index: ${indexName}`, StatusCode.ERROR);
2110
2164
  }
2165
+ const ownerTable = ownerMatch.table;
2111
2166
  // Stored display casing of the dropped index — the raw `indexName` arg may
2112
- // differ in case. Computed *before* the module call so module.dropIndex
2113
- // receives the stored name (the module-facing stored-name contract; see
2114
- // canonicalSchemaName), keeping a case-divergent `DROP INDEX iDx` from
2115
- // missing a module handle/registry keyed by the stored `idx` (e.g. the
2116
- // store's StoreTable.indexStores cache). Also reused by the events below.
2117
- const storedIndexName = ownerTable.indexes.find(idx => idx.name.toLowerCase() === lowerIndexName).name;
2167
+ // differ in case. Taken from the matched IndexSchema, i.e. *before* the module
2168
+ // call, so module.dropIndex receives the stored name (the module-facing
2169
+ // stored-name contract; see canonicalSchemaName), keeping a case-divergent
2170
+ // `DROP INDEX iDx` from missing a module handle/registry keyed by the stored
2171
+ // `idx` (e.g. the store's StoreTable.indexStores cache). Also reused by the
2172
+ // events below.
2173
+ const storedIndexName = ownerMatch.index.name;
2118
2174
  // Call module.dropIndex if the module supports it
2119
2175
  const moduleReg = ownerTable.vtabModuleName ? this.getModule(ownerTable.vtabModuleName) : undefined;
2120
2176
  if (moduleReg?.module?.dropIndex) {
@@ -2168,6 +2224,12 @@ export class SchemaManager {
2168
2224
  * fires for it. If a module without native events ever needs to replicate,
2169
2225
  * thread the object schema in and call the `schema/ddl-generator.ts` generators
2170
2226
  * here the way the store and memory modules do at their own emit sites.
2227
+ *
2228
+ * Public because the `ALTER TABLE` arms live outside this class
2229
+ * (`runtime/emit/alter-table.ts`, `runtime/emit/add-constraint.ts`) and must reach the
2230
+ * SAME gate. Re-deciding "no listener / module has its own emitter" at a second site is
2231
+ * exactly what produced the data-channel double-emit the store package's
2232
+ * `database-events.spec.ts` guards against — keep one gate.
2171
2233
  */
2172
2234
  emitAutoSchemaEventIfNeeded(moduleName, event) {
2173
2235
  const moduleReg = moduleName ? this.getModule(moduleName) : undefined;
@@ -2253,6 +2315,14 @@ export class SchemaManager {
2253
2315
  const allowNonDet = this.db.options.getBooleanOption('nondeterministic_schema');
2254
2316
  this.validateDefaultDeterminism(baseTableSchema.columns, tableName, hasMutationContext, allowNonDet);
2255
2317
  this.validateCheckConstraintDeterminism(baseTableSchema.checkConstraints, tableName, allowNonDet);
2318
+ // Refuse a CREATE TABLE that declares the same plain UNIQUE twice — the same rule
2319
+ // `ALTER TABLE ADD CONSTRAINT` / `ADD COLUMN … unique` apply, so a duplicate is
2320
+ // refused identically wherever it is written. Before `module.create`, so the
2321
+ // statement leaves no storage behind. Deliberately here rather than in
2322
+ // `buildTableSchemaFromAST`: the import/rehydrate path shares that builder and must
2323
+ // still open a catalog written before this guard existed (same placement rationale
2324
+ // as the FK-collation check below).
2325
+ assertNoDuplicateUniqueConstraints(baseTableSchema.uniqueConstraints ?? [], baseTableSchema.columns, `create table '${tableName}'`);
2256
2326
  let tableInstance;
2257
2327
  try {
2258
2328
  // `preferBacking` (set only by the maintained-table create path) routes
@@ -2786,11 +2856,41 @@ export class SchemaManager {
2786
2856
  // once per imported index, so a cold open costs O(indexes × tables). Fine at
2787
2857
  // present schema sizes; if opening a large catalog ever shows up as slow, build
2788
2858
  // one name→owner map for the whole import instead of re-scanning per index.
2859
+ //
2860
+ // NOTE: this path deliberately does NOT consult `isImplicitCoveringIndex`, so a
2861
+ // catalog written before the write paths refused a name held by that table's own
2862
+ // UNIQUE constraint still imports its shadowing index — after which the name
2863
+ // resolves to a real index that `dropIndex` then refuses to drop. Only reachable
2864
+ // by opening such a pre-existing database; it warns (below) and proceeds rather
2865
+ // than bricking the open. If that ever needs stronger handling, reject or rename
2866
+ // the shadowing index here rather than loosening the write-path guards.
2789
2867
  const collidingOwner = this.findIndexNameOwnerElsewhere(targetSchemaName, tableSchema.name, indexName);
2790
2868
  if (collidingOwner) {
2791
2869
  warnLog(`Imported index '%s' on table '%s' collides with an existing index of the same name on table '%s' in schema '%s'; `
2792
2870
  + `index names are expected to be unique per schema — DROP/ALTER INDEX by this name resolves to whichever table registered first`, indexName, tableSchema.name, collidingOwner.name, targetSchemaName);
2793
2871
  }
2872
+ // Same warn-and-proceed treatment for the same-table variant: the name is already
2873
+ // the implicit backing structure of one of this table's own UNIQUE constraints.
2874
+ // Both write paths now refuse this (`createIndex` from the index side,
2875
+ // `assertUniqueConstraintIndexNameFree` from the constraint side), so a catalog
2876
+ // carrying it was written before those guards existed. `importDDL` imports the
2877
+ // CREATE TABLE (constraints included) ahead of every CREATE INDEX, so the
2878
+ // constraint is always the one already present when the collision is seen.
2879
+ //
2880
+ // NOTE: the resulting state is worse than "shadowed and undroppable". Measured on
2881
+ // the memory backend (test/index-ddl-roundtrip.spec.ts), the table ends up with two
2882
+ // index entries under the one name, `index_info()` reports NEITHER, `DROP INDEX`
2883
+ // answers `no such index`, and a predicate over the imported index's column stops
2884
+ // filtering — `where b = 'q'` returns every row. No write path can produce such a
2885
+ // catalog any more, so this is only reachable by opening a database written before
2886
+ // the guards (backwards compatibility is waived project-wide) or by handing
2887
+ // `importCatalog` a collided bundle directly. If either becomes real, reject or
2888
+ // rename the shadowing index HERE rather than loosening the write-path guards.
2889
+ if (isImplicitCoveringIndex(tableSchema, indexName)) {
2890
+ warnLog(`Imported index '%s' on table '%s' collides with the implicit backing index of a UNIQUE constraint of the same name `
2891
+ + `on that table; the index shadows the constraint's structure, DROP INDEX will refuse to drop it, and predicates `
2892
+ + `over its columns stop filtering — rename either the index or the constraint`, indexName, tableSchema.name);
2893
+ }
2794
2894
  // Append the index (and synthesize the derived UNIQUE constraint when
2795
2895
  // unique) without calling module.createIndex() — the storage already exists.
2796
2896
  const updatedTableSchema = appendIndexToTableSchema(tableSchema, indexSchema);