@quereus/quereus 3.2.1 → 4.0.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 (935) hide show
  1. package/README.md +7 -0
  2. package/dist/src/common/datatype.d.ts +12 -0
  3. package/dist/src/common/datatype.d.ts.map +1 -1
  4. package/dist/src/common/datatype.js.map +1 -1
  5. package/dist/src/common/types.d.ts +24 -0
  6. package/dist/src/common/types.d.ts.map +1 -1
  7. package/dist/src/common/types.js.map +1 -1
  8. package/dist/src/core/database-assertions.d.ts +37 -9
  9. package/dist/src/core/database-assertions.d.ts.map +1 -1
  10. package/dist/src/core/database-assertions.js +62 -106
  11. package/dist/src/core/database-assertions.js.map +1 -1
  12. package/dist/src/core/database-events.d.ts +163 -0
  13. package/dist/src/core/database-events.d.ts.map +1 -1
  14. package/dist/src/core/database-events.js +235 -21
  15. package/dist/src/core/database-events.js.map +1 -1
  16. package/dist/src/core/database-external-changes.d.ts +28 -0
  17. package/dist/src/core/database-external-changes.d.ts.map +1 -0
  18. package/dist/src/core/database-external-changes.js +242 -0
  19. package/dist/src/core/database-external-changes.js.map +1 -0
  20. package/dist/src/core/database-internal.d.ts +50 -1
  21. package/dist/src/core/database-internal.d.ts.map +1 -1
  22. package/dist/src/core/database-materialized-views.d.ts +1253 -0
  23. package/dist/src/core/database-materialized-views.d.ts.map +1 -0
  24. package/dist/src/core/database-materialized-views.js +3064 -0
  25. package/dist/src/core/database-materialized-views.js.map +1 -0
  26. package/dist/src/core/database-options.d.ts +4 -0
  27. package/dist/src/core/database-options.d.ts.map +1 -1
  28. package/dist/src/core/database-options.js +10 -0
  29. package/dist/src/core/database-options.js.map +1 -1
  30. package/dist/src/core/database-transaction.d.ts +19 -3
  31. package/dist/src/core/database-transaction.d.ts.map +1 -1
  32. package/dist/src/core/database-transaction.js +30 -3
  33. package/dist/src/core/database-transaction.js.map +1 -1
  34. package/dist/src/core/database-watchers.d.ts +19 -0
  35. package/dist/src/core/database-watchers.d.ts.map +1 -1
  36. package/dist/src/core/database-watchers.js +63 -3
  37. package/dist/src/core/database-watchers.js.map +1 -1
  38. package/dist/src/core/database.d.ts +203 -11
  39. package/dist/src/core/database.d.ts.map +1 -1
  40. package/dist/src/core/database.js +493 -29
  41. package/dist/src/core/database.js.map +1 -1
  42. package/dist/src/core/derived-row-validator.d.ts +137 -0
  43. package/dist/src/core/derived-row-validator.d.ts.map +1 -0
  44. package/dist/src/core/derived-row-validator.js +314 -0
  45. package/dist/src/core/derived-row-validator.js.map +1 -0
  46. package/dist/src/core/statement.d.ts.map +1 -1
  47. package/dist/src/core/statement.js +30 -9
  48. package/dist/src/core/statement.js.map +1 -1
  49. package/dist/src/emit/ast-stringify.d.ts +135 -1
  50. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  51. package/dist/src/emit/ast-stringify.js +795 -120
  52. package/dist/src/emit/ast-stringify.js.map +1 -1
  53. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  54. package/dist/src/func/builtins/aggregate.js +11 -10
  55. package/dist/src/func/builtins/aggregate.js.map +1 -1
  56. package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
  57. package/dist/src/func/builtins/builtin-window-functions.js +32 -0
  58. package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
  59. package/dist/src/func/builtins/explain.d.ts +3 -0
  60. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  61. package/dist/src/func/builtins/explain.js +229 -0
  62. package/dist/src/func/builtins/explain.js.map +1 -1
  63. package/dist/src/func/builtins/index.d.ts.map +1 -1
  64. package/dist/src/func/builtins/index.js +10 -2
  65. package/dist/src/func/builtins/index.js.map +1 -1
  66. package/dist/src/func/builtins/json.d.ts.map +1 -1
  67. package/dist/src/func/builtins/json.js +3 -2
  68. package/dist/src/func/builtins/json.js.map +1 -1
  69. package/dist/src/func/builtins/mutation.d.ts +2 -0
  70. package/dist/src/func/builtins/mutation.d.ts.map +1 -0
  71. package/dist/src/func/builtins/mutation.js +53 -0
  72. package/dist/src/func/builtins/mutation.js.map +1 -0
  73. package/dist/src/func/builtins/schema.d.ts +2 -0
  74. package/dist/src/func/builtins/schema.d.ts.map +1 -1
  75. package/dist/src/func/builtins/schema.js +713 -26
  76. package/dist/src/func/builtins/schema.js.map +1 -1
  77. package/dist/src/func/builtins/string.js +1 -1
  78. package/dist/src/func/builtins/string.js.map +1 -1
  79. package/dist/src/func/registration.d.ts +9 -0
  80. package/dist/src/func/registration.d.ts.map +1 -1
  81. package/dist/src/func/registration.js +4 -0
  82. package/dist/src/func/registration.js.map +1 -1
  83. package/dist/src/index.d.ts +25 -6
  84. package/dist/src/index.d.ts.map +1 -1
  85. package/dist/src/index.js +27 -3
  86. package/dist/src/index.js.map +1 -1
  87. package/dist/src/parser/ast.d.ts +353 -21
  88. package/dist/src/parser/ast.d.ts.map +1 -1
  89. package/dist/src/parser/index.d.ts +14 -1
  90. package/dist/src/parser/index.d.ts.map +1 -1
  91. package/dist/src/parser/index.js +19 -0
  92. package/dist/src/parser/index.js.map +1 -1
  93. package/dist/src/parser/lexer.d.ts +9 -0
  94. package/dist/src/parser/lexer.d.ts.map +1 -1
  95. package/dist/src/parser/lexer.js +9 -0
  96. package/dist/src/parser/lexer.js.map +1 -1
  97. package/dist/src/parser/parser.d.ts +277 -8
  98. package/dist/src/parser/parser.d.ts.map +1 -1
  99. package/dist/src/parser/parser.js +1393 -471
  100. package/dist/src/parser/parser.js.map +1 -1
  101. package/dist/src/parser/visitor.d.ts.map +1 -1
  102. package/dist/src/parser/visitor.js +12 -8
  103. package/dist/src/parser/visitor.js.map +1 -1
  104. package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
  105. package/dist/src/planner/analysis/assertion-classifier.js +4 -0
  106. package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
  107. package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
  108. package/dist/src/planner/analysis/assertion-hoist-cache.js +8 -4
  109. package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
  110. package/dist/src/planner/analysis/authored-inverse.d.ts +22 -0
  111. package/dist/src/planner/analysis/authored-inverse.d.ts.map +1 -0
  112. package/dist/src/planner/analysis/authored-inverse.js +267 -0
  113. package/dist/src/planner/analysis/authored-inverse.js.map +1 -0
  114. package/dist/src/planner/analysis/binding-extractor.d.ts.map +1 -1
  115. package/dist/src/planner/analysis/binding-extractor.js +9 -6
  116. package/dist/src/planner/analysis/binding-extractor.js.map +1 -1
  117. package/dist/src/planner/analysis/change-scope.d.ts +34 -4
  118. package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
  119. package/dist/src/planner/analysis/change-scope.js +115 -7
  120. package/dist/src/planner/analysis/change-scope.js.map +1 -1
  121. package/dist/src/planner/analysis/check-extraction.d.ts +36 -2
  122. package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
  123. package/dist/src/planner/analysis/check-extraction.js +174 -46
  124. package/dist/src/planner/analysis/check-extraction.js.map +1 -1
  125. package/dist/src/planner/analysis/coarsened-key.d.ts +109 -0
  126. package/dist/src/planner/analysis/coarsened-key.d.ts.map +1 -0
  127. package/dist/src/planner/analysis/coarsened-key.js +228 -0
  128. package/dist/src/planner/analysis/coarsened-key.js.map +1 -0
  129. package/dist/src/planner/analysis/comparison-collation.d.ts +216 -0
  130. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -0
  131. package/dist/src/planner/analysis/comparison-collation.js +341 -0
  132. package/dist/src/planner/analysis/comparison-collation.js.map +1 -0
  133. package/dist/src/planner/analysis/constraint-extractor.d.ts +13 -1
  134. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  135. package/dist/src/planner/analysis/constraint-extractor.js +220 -21
  136. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  137. package/dist/src/planner/analysis/coverage-prover.d.ts +321 -0
  138. package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -0
  139. package/dist/src/planner/analysis/coverage-prover.js +1038 -0
  140. package/dist/src/planner/analysis/coverage-prover.js.map +1 -0
  141. package/dist/src/planner/analysis/key-filter.d.ts +22 -0
  142. package/dist/src/planner/analysis/key-filter.d.ts.map +1 -0
  143. package/dist/src/planner/analysis/key-filter.js +105 -0
  144. package/dist/src/planner/analysis/key-filter.js.map +1 -0
  145. package/dist/src/planner/analysis/partial-unique-extraction.d.ts +36 -1
  146. package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -1
  147. package/dist/src/planner/analysis/partial-unique-extraction.js +148 -22
  148. package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -1
  149. package/dist/src/planner/analysis/predicate-normalizer.d.ts.map +1 -1
  150. package/dist/src/planner/analysis/predicate-normalizer.js +30 -1
  151. package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -1
  152. package/dist/src/planner/analysis/predicate-shape.d.ts +36 -1
  153. package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -1
  154. package/dist/src/planner/analysis/predicate-shape.js +51 -13
  155. package/dist/src/planner/analysis/predicate-shape.js.map +1 -1
  156. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +314 -0
  157. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -0
  158. package/dist/src/planner/analysis/query-rewrite-matcher.js +1081 -0
  159. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -0
  160. package/dist/src/planner/analysis/scalar-invertibility.d.ts +92 -0
  161. package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -0
  162. package/dist/src/planner/analysis/scalar-invertibility.js +129 -0
  163. package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -0
  164. package/dist/src/planner/analysis/update-lineage.d.ts +196 -0
  165. package/dist/src/planner/analysis/update-lineage.d.ts.map +1 -0
  166. package/dist/src/planner/analysis/update-lineage.js +322 -0
  167. package/dist/src/planner/analysis/update-lineage.js.map +1 -0
  168. package/dist/src/planner/analysis/view-complement.d.ts +42 -0
  169. package/dist/src/planner/analysis/view-complement.d.ts.map +1 -0
  170. package/dist/src/planner/analysis/view-complement.js +54 -0
  171. package/dist/src/planner/analysis/view-complement.js.map +1 -0
  172. package/dist/src/planner/building/alter-table.d.ts +1 -1
  173. package/dist/src/planner/building/alter-table.d.ts.map +1 -1
  174. package/dist/src/planner/building/alter-table.js +211 -2
  175. package/dist/src/planner/building/alter-table.js.map +1 -1
  176. package/dist/src/planner/building/block.d.ts.map +1 -1
  177. package/dist/src/planner/building/block.js +18 -1
  178. package/dist/src/planner/building/block.js.map +1 -1
  179. package/dist/src/planner/building/constraint-builder.d.ts +33 -5
  180. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  181. package/dist/src/planner/building/constraint-builder.js +63 -28
  182. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  183. package/dist/src/planner/building/create-view.d.ts +9 -0
  184. package/dist/src/planner/building/create-view.d.ts.map +1 -1
  185. package/dist/src/planner/building/create-view.js +41 -12
  186. package/dist/src/planner/building/create-view.js.map +1 -1
  187. package/dist/src/planner/building/ddl.d.ts.map +1 -1
  188. package/dist/src/planner/building/ddl.js +94 -0
  189. package/dist/src/planner/building/ddl.js.map +1 -1
  190. package/dist/src/planner/building/declare-schema.d.ts +1 -0
  191. package/dist/src/planner/building/declare-schema.d.ts.map +1 -1
  192. package/dist/src/planner/building/declare-schema.js +4 -1
  193. package/dist/src/planner/building/declare-schema.js.map +1 -1
  194. package/dist/src/planner/building/default-scope.d.ts +26 -0
  195. package/dist/src/planner/building/default-scope.d.ts.map +1 -0
  196. package/dist/src/planner/building/default-scope.js +41 -0
  197. package/dist/src/planner/building/default-scope.js.map +1 -0
  198. package/dist/src/planner/building/delete.d.ts +19 -1
  199. package/dist/src/planner/building/delete.d.ts.map +1 -1
  200. package/dist/src/planner/building/delete.js +116 -34
  201. package/dist/src/planner/building/delete.js.map +1 -1
  202. package/dist/src/planner/building/dml-target.d.ts +118 -0
  203. package/dist/src/planner/building/dml-target.d.ts.map +1 -0
  204. package/dist/src/planner/building/dml-target.js +282 -0
  205. package/dist/src/planner/building/dml-target.js.map +1 -0
  206. package/dist/src/planner/building/drop-index.d.ts.map +1 -1
  207. package/dist/src/planner/building/drop-index.js +4 -1
  208. package/dist/src/planner/building/drop-index.js.map +1 -1
  209. package/dist/src/planner/building/drop-view.d.ts.map +1 -1
  210. package/dist/src/planner/building/drop-view.js +4 -2
  211. package/dist/src/planner/building/drop-view.js.map +1 -1
  212. package/dist/src/planner/building/expression.d.ts.map +1 -1
  213. package/dist/src/planner/building/expression.js +60 -21
  214. package/dist/src/planner/building/expression.js.map +1 -1
  215. package/dist/src/planner/building/foreign-key-builder.d.ts +30 -0
  216. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  217. package/dist/src/planner/building/foreign-key-builder.js +160 -129
  218. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  219. package/dist/src/planner/building/insert.d.ts +45 -2
  220. package/dist/src/planner/building/insert.d.ts.map +1 -1
  221. package/dist/src/planner/building/insert.js +257 -88
  222. package/dist/src/planner/building/insert.js.map +1 -1
  223. package/dist/src/planner/building/lens-auxiliary-access.d.ts +22 -0
  224. package/dist/src/planner/building/lens-auxiliary-access.d.ts.map +1 -0
  225. package/dist/src/planner/building/lens-auxiliary-access.js +132 -0
  226. package/dist/src/planner/building/lens-auxiliary-access.js.map +1 -0
  227. package/dist/src/planner/building/materialized-view.d.ts +16 -0
  228. package/dist/src/planner/building/materialized-view.d.ts.map +1 -0
  229. package/dist/src/planner/building/materialized-view.js +57 -0
  230. package/dist/src/planner/building/materialized-view.js.map +1 -0
  231. package/dist/src/planner/building/returning-star.d.ts +32 -0
  232. package/dist/src/planner/building/returning-star.d.ts.map +1 -0
  233. package/dist/src/planner/building/returning-star.js +45 -0
  234. package/dist/src/planner/building/returning-star.js.map +1 -0
  235. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  236. package/dist/src/planner/building/select-aggregates.js +51 -13
  237. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  238. package/dist/src/planner/building/select-compound.d.ts.map +1 -1
  239. package/dist/src/planner/building/select-compound.js +84 -11
  240. package/dist/src/planner/building/select-compound.js.map +1 -1
  241. package/dist/src/planner/building/select-context.d.ts +10 -2
  242. package/dist/src/planner/building/select-context.d.ts.map +1 -1
  243. package/dist/src/planner/building/select-context.js +7 -1
  244. package/dist/src/planner/building/select-context.js.map +1 -1
  245. package/dist/src/planner/building/select-modifiers.js +6 -0
  246. package/dist/src/planner/building/select-modifiers.js.map +1 -1
  247. package/dist/src/planner/building/select-ordinal.d.ts +18 -0
  248. package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
  249. package/dist/src/planner/building/select-ordinal.js +30 -0
  250. package/dist/src/planner/building/select-ordinal.js.map +1 -1
  251. package/dist/src/planner/building/select-projections.d.ts +8 -2
  252. package/dist/src/planner/building/select-projections.d.ts.map +1 -1
  253. package/dist/src/planner/building/select-projections.js +26 -4
  254. package/dist/src/planner/building/select-projections.js.map +1 -1
  255. package/dist/src/planner/building/select-window.d.ts.map +1 -1
  256. package/dist/src/planner/building/select-window.js +8 -5
  257. package/dist/src/planner/building/select-window.js.map +1 -1
  258. package/dist/src/planner/building/select.d.ts.map +1 -1
  259. package/dist/src/planner/building/select.js +164 -59
  260. package/dist/src/planner/building/select.js.map +1 -1
  261. package/dist/src/planner/building/set-object-tags.d.ts +7 -0
  262. package/dist/src/planner/building/set-object-tags.d.ts.map +1 -0
  263. package/dist/src/planner/building/set-object-tags.js +38 -0
  264. package/dist/src/planner/building/set-object-tags.js.map +1 -0
  265. package/dist/src/planner/building/tag-diagnostics.d.ts +27 -0
  266. package/dist/src/planner/building/tag-diagnostics.d.ts.map +1 -0
  267. package/dist/src/planner/building/tag-diagnostics.js +37 -0
  268. package/dist/src/planner/building/tag-diagnostics.js.map +1 -0
  269. package/dist/src/planner/building/update.d.ts +18 -1
  270. package/dist/src/planner/building/update.d.ts.map +1 -1
  271. package/dist/src/planner/building/update.js +134 -58
  272. package/dist/src/planner/building/update.js.map +1 -1
  273. package/dist/src/planner/building/view-mutation-builder.d.ts +15 -0
  274. package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -0
  275. package/dist/src/planner/building/view-mutation-builder.js +1158 -0
  276. package/dist/src/planner/building/view-mutation-builder.js.map +1 -0
  277. package/dist/src/planner/building/with.d.ts +11 -0
  278. package/dist/src/planner/building/with.d.ts.map +1 -1
  279. package/dist/src/planner/building/with.js +48 -10
  280. package/dist/src/planner/building/with.js.map +1 -1
  281. package/dist/src/planner/cost/index.d.ts +83 -0
  282. package/dist/src/planner/cost/index.d.ts.map +1 -1
  283. package/dist/src/planner/cost/index.js +114 -0
  284. package/dist/src/planner/cost/index.js.map +1 -1
  285. package/dist/src/planner/framework/characteristics.d.ts +38 -4
  286. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  287. package/dist/src/planner/framework/characteristics.js +50 -6
  288. package/dist/src/planner/framework/characteristics.js.map +1 -1
  289. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  290. package/dist/src/planner/framework/pass.js +2 -1
  291. package/dist/src/planner/framework/pass.js.map +1 -1
  292. package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
  293. package/dist/src/planner/framework/physical-utils.js +7 -1
  294. package/dist/src/planner/framework/physical-utils.js.map +1 -1
  295. package/dist/src/planner/framework/registry.d.ts +39 -1
  296. package/dist/src/planner/framework/registry.d.ts.map +1 -1
  297. package/dist/src/planner/framework/registry.js +18 -2
  298. package/dist/src/planner/framework/registry.js.map +1 -1
  299. package/dist/src/planner/mutation/backward-body.d.ts +131 -0
  300. package/dist/src/planner/mutation/backward-body.d.ts.map +1 -0
  301. package/dist/src/planner/mutation/backward-body.js +135 -0
  302. package/dist/src/planner/mutation/backward-body.js.map +1 -0
  303. package/dist/src/planner/mutation/cte-flatten.d.ts +17 -0
  304. package/dist/src/planner/mutation/cte-flatten.d.ts.map +1 -0
  305. package/dist/src/planner/mutation/cte-flatten.js +364 -0
  306. package/dist/src/planner/mutation/cte-flatten.js.map +1 -0
  307. package/dist/src/planner/mutation/decomposition.d.ts +273 -0
  308. package/dist/src/planner/mutation/decomposition.d.ts.map +1 -0
  309. package/dist/src/planner/mutation/decomposition.js +1719 -0
  310. package/dist/src/planner/mutation/decomposition.js.map +1 -0
  311. package/dist/src/planner/mutation/lens-enforcement.d.ts +165 -0
  312. package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -0
  313. package/dist/src/planner/mutation/lens-enforcement.js +745 -0
  314. package/dist/src/planner/mutation/lens-enforcement.js.map +1 -0
  315. package/dist/src/planner/mutation/multi-source.d.ts +568 -0
  316. package/dist/src/planner/mutation/multi-source.d.ts.map +1 -0
  317. package/dist/src/planner/mutation/multi-source.js +2915 -0
  318. package/dist/src/planner/mutation/multi-source.js.map +1 -0
  319. package/dist/src/planner/mutation/mutation-diagnostic.d.ts +37 -0
  320. package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -0
  321. package/dist/src/planner/mutation/mutation-diagnostic.js +24 -0
  322. package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -0
  323. package/dist/src/planner/mutation/mutation-tags.d.ts +33 -0
  324. package/dist/src/planner/mutation/mutation-tags.d.ts.map +1 -0
  325. package/dist/src/planner/mutation/mutation-tags.js +31 -0
  326. package/dist/src/planner/mutation/mutation-tags.js.map +1 -0
  327. package/dist/src/planner/mutation/propagate.d.ts +97 -0
  328. package/dist/src/planner/mutation/propagate.d.ts.map +1 -0
  329. package/dist/src/planner/mutation/propagate.js +220 -0
  330. package/dist/src/planner/mutation/propagate.js.map +1 -0
  331. package/dist/src/planner/mutation/scope-transform.d.ts +181 -0
  332. package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -0
  333. package/dist/src/planner/mutation/scope-transform.js +574 -0
  334. package/dist/src/planner/mutation/scope-transform.js.map +1 -0
  335. package/dist/src/planner/mutation/set-op.d.ts +242 -0
  336. package/dist/src/planner/mutation/set-op.d.ts.map +1 -0
  337. package/dist/src/planner/mutation/set-op.js +1687 -0
  338. package/dist/src/planner/mutation/set-op.js.map +1 -0
  339. package/dist/src/planner/mutation/single-source.d.ts +261 -0
  340. package/dist/src/planner/mutation/single-source.d.ts.map +1 -0
  341. package/dist/src/planner/mutation/single-source.js +1096 -0
  342. package/dist/src/planner/mutation/single-source.js.map +1 -0
  343. package/dist/src/planner/nodes/aggregate-node.d.ts +6 -4
  344. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  345. package/dist/src/planner/nodes/aggregate-node.js +11 -9
  346. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  347. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  348. package/dist/src/planner/nodes/alias-node.js +5 -1
  349. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  350. package/dist/src/planner/nodes/alter-table-node.d.ts +124 -1
  351. package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
  352. package/dist/src/planner/nodes/alter-table-node.js +27 -0
  353. package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
  354. package/dist/src/planner/nodes/analyze-node.d.ts +2 -1
  355. package/dist/src/planner/nodes/analyze-node.d.ts.map +1 -1
  356. package/dist/src/planner/nodes/analyze-node.js +21 -1
  357. package/dist/src/planner/nodes/analyze-node.js.map +1 -1
  358. package/dist/src/planner/nodes/asserted-keys-node.d.ts +43 -0
  359. package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -0
  360. package/dist/src/planner/nodes/asserted-keys-node.js +99 -0
  361. package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -0
  362. package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
  363. package/dist/src/planner/nodes/async-gather-node.js +33 -8
  364. package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
  365. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  366. package/dist/src/planner/nodes/bloom-join-node.js +2 -1
  367. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  368. package/dist/src/planner/nodes/create-view-node.d.ts +7 -2
  369. package/dist/src/planner/nodes/create-view-node.d.ts.map +1 -1
  370. package/dist/src/planner/nodes/create-view-node.js +4 -1
  371. package/dist/src/planner/nodes/create-view-node.js.map +1 -1
  372. package/dist/src/planner/nodes/declarative-schema.d.ts +13 -1
  373. package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -1
  374. package/dist/src/planner/nodes/declarative-schema.js +32 -0
  375. package/dist/src/planner/nodes/declarative-schema.js.map +1 -1
  376. package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
  377. package/dist/src/planner/nodes/distinct-node.js +2 -0
  378. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  379. package/dist/src/planner/nodes/dml-executor-node.d.ts +29 -1
  380. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  381. package/dist/src/planner/nodes/dml-executor-node.js +27 -3
  382. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  383. package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -1
  384. package/dist/src/planner/nodes/eager-prefetch-node.js +2 -0
  385. package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -1
  386. package/dist/src/planner/nodes/envelope-scan-node.d.ts +42 -0
  387. package/dist/src/planner/nodes/envelope-scan-node.d.ts.map +1 -0
  388. package/dist/src/planner/nodes/envelope-scan-node.js +62 -0
  389. package/dist/src/planner/nodes/envelope-scan-node.js.map +1 -0
  390. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
  391. package/dist/src/planner/nodes/fanout-lookup-join-node.js +11 -1
  392. package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
  393. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  394. package/dist/src/planner/nodes/filter.js +63 -13
  395. package/dist/src/planner/nodes/filter.js.map +1 -1
  396. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  397. package/dist/src/planner/nodes/hash-aggregate.js +6 -16
  398. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  399. package/dist/src/planner/nodes/join-node.d.ts +41 -1
  400. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  401. package/dist/src/planner/nodes/join-node.js +78 -8
  402. package/dist/src/planner/nodes/join-node.js.map +1 -1
  403. package/dist/src/planner/nodes/join-utils.d.ts +33 -6
  404. package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
  405. package/dist/src/planner/nodes/join-utils.js +131 -10
  406. package/dist/src/planner/nodes/join-utils.js.map +1 -1
  407. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +104 -0
  408. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -0
  409. package/dist/src/planner/nodes/lens-auxiliary-access-node.js +91 -0
  410. package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -0
  411. package/dist/src/planner/nodes/limit-offset.d.ts +12 -0
  412. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  413. package/dist/src/planner/nodes/limit-offset.js +52 -3
  414. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  415. package/dist/src/planner/nodes/materialized-view-nodes.d.ts +69 -0
  416. package/dist/src/planner/nodes/materialized-view-nodes.d.ts.map +1 -0
  417. package/dist/src/planner/nodes/materialized-view-nodes.js +111 -0
  418. package/dist/src/planner/nodes/materialized-view-nodes.js.map +1 -0
  419. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  420. package/dist/src/planner/nodes/merge-join-node.js +2 -1
  421. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  422. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
  423. package/dist/src/planner/nodes/ordinal-slice-node.js +2 -0
  424. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
  425. package/dist/src/planner/nodes/plan-node-type.d.ts +9 -0
  426. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  427. package/dist/src/planner/nodes/plan-node-type.js +9 -0
  428. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  429. package/dist/src/planner/nodes/plan-node.d.ts +265 -5
  430. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  431. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  432. package/dist/src/planner/nodes/pragma.d.ts +2 -1
  433. package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
  434. package/dist/src/planner/nodes/pragma.js +12 -0
  435. package/dist/src/planner/nodes/pragma.js.map +1 -1
  436. package/dist/src/planner/nodes/project-node.d.ts +14 -1
  437. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  438. package/dist/src/planner/nodes/project-node.js +103 -16
  439. package/dist/src/planner/nodes/project-node.js.map +1 -1
  440. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  441. package/dist/src/planner/nodes/reference.js +63 -30
  442. package/dist/src/planner/nodes/reference.js.map +1 -1
  443. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  444. package/dist/src/planner/nodes/retrieve-node.js +7 -0
  445. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  446. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  447. package/dist/src/planner/nodes/returning-node.js +10 -3
  448. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  449. package/dist/src/planner/nodes/scalar.d.ts +20 -0
  450. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  451. package/dist/src/planner/nodes/scalar.js +71 -14
  452. package/dist/src/planner/nodes/scalar.js.map +1 -1
  453. package/dist/src/planner/nodes/set-object-tags-node.d.ts +39 -0
  454. package/dist/src/planner/nodes/set-object-tags-node.d.ts.map +1 -0
  455. package/dist/src/planner/nodes/set-object-tags-node.js +41 -0
  456. package/dist/src/planner/nodes/set-object-tags-node.js.map +1 -0
  457. package/dist/src/planner/nodes/set-operation-node.d.ts +123 -1
  458. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  459. package/dist/src/planner/nodes/set-operation-node.js +302 -18
  460. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  461. package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
  462. package/dist/src/planner/nodes/single-row.js +3 -0
  463. package/dist/src/planner/nodes/single-row.js.map +1 -1
  464. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  465. package/dist/src/planner/nodes/sort.js +8 -7
  466. package/dist/src/planner/nodes/sort.js.map +1 -1
  467. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  468. package/dist/src/planner/nodes/stream-aggregate.js +8 -23
  469. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  470. package/dist/src/planner/nodes/subquery.d.ts +2 -0
  471. package/dist/src/planner/nodes/subquery.d.ts.map +1 -1
  472. package/dist/src/planner/nodes/subquery.js +18 -2
  473. package/dist/src/planner/nodes/subquery.js.map +1 -1
  474. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  475. package/dist/src/planner/nodes/table-access-nodes.js +23 -3
  476. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  477. package/dist/src/planner/nodes/table-function-call.js +6 -0
  478. package/dist/src/planner/nodes/table-function-call.js.map +1 -1
  479. package/dist/src/planner/nodes/values-node.d.ts +3 -1
  480. package/dist/src/planner/nodes/values-node.d.ts.map +1 -1
  481. package/dist/src/planner/nodes/values-node.js +26 -0
  482. package/dist/src/planner/nodes/values-node.js.map +1 -1
  483. package/dist/src/planner/nodes/view-mutation-node.d.ts +259 -0
  484. package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -0
  485. package/dist/src/planner/nodes/view-mutation-node.js +273 -0
  486. package/dist/src/planner/nodes/view-mutation-node.js.map +1 -0
  487. package/dist/src/planner/nodes/window-function.d.ts +17 -1
  488. package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
  489. package/dist/src/planner/nodes/window-function.js +15 -1
  490. package/dist/src/planner/nodes/window-function.js.map +1 -1
  491. package/dist/src/planner/nodes/window-node.js +3 -3
  492. package/dist/src/planner/nodes/window-node.js.map +1 -1
  493. package/dist/src/planner/optimizer.d.ts.map +1 -1
  494. package/dist/src/planner/optimizer.js +372 -39
  495. package/dist/src/planner/optimizer.js.map +1 -1
  496. package/dist/src/planner/planning-context.d.ts +1 -1
  497. package/dist/src/planner/planning-context.d.ts.map +1 -1
  498. package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts +70 -0
  499. package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts.map +1 -0
  500. package/dist/src/planner/rules/access/lens-access-form-matcher.js +156 -0
  501. package/dist/src/planner/rules/access/lens-access-form-matcher.js.map +1 -0
  502. package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts +31 -0
  503. package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts.map +1 -0
  504. package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js +176 -0
  505. package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js.map +1 -0
  506. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  507. package/dist/src/planner/rules/access/rule-select-access-path.js +435 -37
  508. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  509. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.d.ts.map +1 -1
  510. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js +8 -27
  511. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +1 -1
  512. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +9 -3
  513. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
  514. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +56 -5
  515. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
  516. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +39 -0
  517. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -0
  518. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +616 -0
  519. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -0
  520. package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts.map +1 -1
  521. package/dist/src/planner/rules/cache/rule-scalar-cse.js +8 -1
  522. package/dist/src/planner/rules/cache/rule-scalar-cse.js.map +1 -1
  523. package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts +8 -7
  524. package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts.map +1 -1
  525. package/dist/src/planner/rules/distinct/rule-distinct-elimination.js +14 -21
  526. package/dist/src/planner/rules/distinct/rule-distinct-elimination.js.map +1 -1
  527. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +36 -0
  528. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
  529. package/dist/src/planner/rules/join/equi-pair-extractor.js +42 -5
  530. package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
  531. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
  532. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +10 -0
  533. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
  534. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +25 -9
  535. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
  536. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +130 -0
  537. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts.map +1 -0
  538. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +206 -0
  539. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js.map +1 -0
  540. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +67 -14
  541. package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
  542. package/dist/src/planner/rules/join/rule-join-elimination.js +81 -25
  543. package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
  544. package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts +84 -0
  545. package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts.map +1 -0
  546. package/dist/src/planner/rules/join/rule-join-existence-pruning.js +138 -0
  547. package/dist/src/planner/rules/join/rule-join-existence-pruning.js.map +1 -0
  548. package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
  549. package/dist/src/planner/rules/join/rule-join-greedy-commute.js +19 -1
  550. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
  551. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  552. package/dist/src/planner/rules/join/rule-join-physical-selection.js +14 -2
  553. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  554. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -1
  555. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +5 -2
  556. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -1
  557. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
  558. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +4 -0
  559. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
  560. package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
  561. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +10 -0
  562. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
  563. package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts +286 -0
  564. package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts.map +1 -0
  565. package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js +548 -0
  566. package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js.map +1 -0
  567. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -1
  568. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +9 -1
  569. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -1
  570. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -1
  571. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +7 -0
  572. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
  573. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -1
  574. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +10 -1
  575. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -1
  576. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
  577. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +10 -1
  578. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
  579. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -1
  580. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +18 -0
  581. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -1
  582. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
  583. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +7 -0
  584. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
  585. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -1
  586. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +9 -0
  587. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
  588. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +13 -3
  589. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
  590. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +2 -2
  591. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  592. package/dist/src/planner/rules/retrieve/rule-projection-pruning.d.ts.map +1 -1
  593. package/dist/src/planner/rules/retrieve/rule-projection-pruning.js +14 -0
  594. package/dist/src/planner/rules/retrieve/rule-projection-pruning.js.map +1 -1
  595. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +16 -0
  596. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts.map +1 -1
  597. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +47 -4
  598. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -1
  599. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -1
  600. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +8 -0
  601. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
  602. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -1
  603. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +7 -0
  604. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
  605. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  606. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +12 -0
  607. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  608. package/dist/src/planner/rules/window/rule-monotonic-window.js +1 -1
  609. package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -1
  610. package/dist/src/planner/type-utils.d.ts +14 -0
  611. package/dist/src/planner/type-utils.d.ts.map +1 -1
  612. package/dist/src/planner/type-utils.js +66 -21
  613. package/dist/src/planner/type-utils.js.map +1 -1
  614. package/dist/src/planner/util/fd-utils.d.ts +228 -36
  615. package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
  616. package/dist/src/planner/util/fd-utils.js +501 -84
  617. package/dist/src/planner/util/fd-utils.js.map +1 -1
  618. package/dist/src/planner/util/ind-utils.d.ts +27 -1
  619. package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
  620. package/dist/src/planner/util/ind-utils.js +80 -6
  621. package/dist/src/planner/util/ind-utils.js.map +1 -1
  622. package/dist/src/planner/util/key-utils.d.ts +26 -3
  623. package/dist/src/planner/util/key-utils.d.ts.map +1 -1
  624. package/dist/src/planner/util/key-utils.js +182 -33
  625. package/dist/src/planner/util/key-utils.js.map +1 -1
  626. package/dist/src/planner/util/set-op-wrapper.d.ts +37 -0
  627. package/dist/src/planner/util/set-op-wrapper.d.ts.map +1 -0
  628. package/dist/src/planner/util/set-op-wrapper.js +82 -0
  629. package/dist/src/planner/util/set-op-wrapper.js.map +1 -0
  630. package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
  631. package/dist/src/planner/validation/plan-validator.js +1 -0
  632. package/dist/src/planner/validation/plan-validator.js.map +1 -1
  633. package/dist/src/runtime/context-helpers.d.ts +13 -1
  634. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  635. package/dist/src/runtime/context-helpers.js +7 -1
  636. package/dist/src/runtime/context-helpers.js.map +1 -1
  637. package/dist/src/runtime/delta-executor.d.ts +30 -1
  638. package/dist/src/runtime/delta-executor.d.ts.map +1 -1
  639. package/dist/src/runtime/delta-executor.js +38 -4
  640. package/dist/src/runtime/delta-executor.js.map +1 -1
  641. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  642. package/dist/src/runtime/emit/add-constraint.js +38 -5
  643. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  644. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  645. package/dist/src/runtime/emit/aggregate.js +10 -8
  646. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  647. package/dist/src/runtime/emit/alter-table.d.ts +1 -1
  648. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  649. package/dist/src/runtime/emit/alter-table.js +664 -108
  650. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  651. package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
  652. package/dist/src/runtime/emit/analyze.js +2 -1
  653. package/dist/src/runtime/emit/analyze.js.map +1 -1
  654. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  655. package/dist/src/runtime/emit/asof-scan.js +24 -9
  656. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  657. package/dist/src/runtime/emit/asserted-keys.d.ts +13 -0
  658. package/dist/src/runtime/emit/asserted-keys.d.ts.map +1 -0
  659. package/dist/src/runtime/emit/asserted-keys.js +13 -0
  660. package/dist/src/runtime/emit/asserted-keys.js.map +1 -0
  661. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  662. package/dist/src/runtime/emit/between.js +24 -19
  663. package/dist/src/runtime/emit/between.js.map +1 -1
  664. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  665. package/dist/src/runtime/emit/binary.js +24 -36
  666. package/dist/src/runtime/emit/binary.js.map +1 -1
  667. package/dist/src/runtime/emit/block.d.ts.map +1 -1
  668. package/dist/src/runtime/emit/block.js +11 -2
  669. package/dist/src/runtime/emit/block.js.map +1 -1
  670. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  671. package/dist/src/runtime/emit/bloom-join.js +12 -4
  672. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  673. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  674. package/dist/src/runtime/emit/constraint-check.js +50 -1
  675. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  676. package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
  677. package/dist/src/runtime/emit/create-table.js +8 -0
  678. package/dist/src/runtime/emit/create-table.js.map +1 -1
  679. package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
  680. package/dist/src/runtime/emit/create-view.js +16 -1
  681. package/dist/src/runtime/emit/create-view.js.map +1 -1
  682. package/dist/src/runtime/emit/delete.d.ts.map +1 -1
  683. package/dist/src/runtime/emit/delete.js +15 -5
  684. package/dist/src/runtime/emit/delete.js.map +1 -1
  685. package/dist/src/runtime/emit/dml-executor.d.ts +27 -0
  686. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  687. package/dist/src/runtime/emit/dml-executor.js +413 -193
  688. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  689. package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
  690. package/dist/src/runtime/emit/drop-table.js +10 -0
  691. package/dist/src/runtime/emit/drop-table.js.map +1 -1
  692. package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
  693. package/dist/src/runtime/emit/drop-view.js +17 -0
  694. package/dist/src/runtime/emit/drop-view.js.map +1 -1
  695. package/dist/src/runtime/emit/envelope-scan.d.ts +13 -0
  696. package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -0
  697. package/dist/src/runtime/emit/envelope-scan.js +22 -0
  698. package/dist/src/runtime/emit/envelope-scan.js.map +1 -0
  699. package/dist/src/runtime/emit/join.d.ts +10 -2
  700. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  701. package/dist/src/runtime/emit/join.js +128 -38
  702. package/dist/src/runtime/emit/join.js.map +1 -1
  703. package/dist/src/runtime/emit/lens-auxiliary-access.d.ts +16 -0
  704. package/dist/src/runtime/emit/lens-auxiliary-access.d.ts.map +1 -0
  705. package/dist/src/runtime/emit/lens-auxiliary-access.js +16 -0
  706. package/dist/src/runtime/emit/lens-auxiliary-access.js.map +1 -0
  707. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +640 -0
  708. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -0
  709. package/dist/src/runtime/emit/materialized-view-helpers.js +2576 -0
  710. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -0
  711. package/dist/src/runtime/emit/materialized-view.d.ts +31 -0
  712. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -0
  713. package/dist/src/runtime/emit/materialized-view.js +187 -0
  714. package/dist/src/runtime/emit/materialized-view.js.map +1 -0
  715. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  716. package/dist/src/runtime/emit/merge-join.js +19 -5
  717. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  718. package/dist/src/runtime/emit/project.d.ts.map +1 -1
  719. package/dist/src/runtime/emit/project.js +10 -5
  720. package/dist/src/runtime/emit/project.js.map +1 -1
  721. package/dist/src/runtime/emit/schema-declarative.d.ts +1 -0
  722. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  723. package/dist/src/runtime/emit/schema-declarative.js +101 -5
  724. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  725. package/dist/src/runtime/emit/set-object-tags.d.ts +16 -0
  726. package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -0
  727. package/dist/src/runtime/emit/set-object-tags.js +57 -0
  728. package/dist/src/runtime/emit/set-object-tags.js.map +1 -0
  729. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  730. package/dist/src/runtime/emit/set-operation.js +140 -24
  731. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  732. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  733. package/dist/src/runtime/emit/subquery.js +110 -5
  734. package/dist/src/runtime/emit/subquery.js.map +1 -1
  735. package/dist/src/runtime/emit/unary.d.ts.map +1 -1
  736. package/dist/src/runtime/emit/unary.js +34 -6
  737. package/dist/src/runtime/emit/unary.js.map +1 -1
  738. package/dist/src/runtime/emit/view-mutation.d.ts +70 -0
  739. package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -0
  740. package/dist/src/runtime/emit/view-mutation.js +299 -0
  741. package/dist/src/runtime/emit/view-mutation.js.map +1 -0
  742. package/dist/src/runtime/emit/window.js +29 -5
  743. package/dist/src/runtime/emit/window.js.map +1 -1
  744. package/dist/src/runtime/foreign-key-actions.d.ts +66 -3
  745. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  746. package/dist/src/runtime/foreign-key-actions.js +580 -172
  747. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  748. package/dist/src/runtime/parallel-driver.d.ts +4 -1
  749. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  750. package/dist/src/runtime/parallel-driver.js +5 -1
  751. package/dist/src/runtime/parallel-driver.js.map +1 -1
  752. package/dist/src/runtime/register.d.ts.map +1 -1
  753. package/dist/src/runtime/register.js +17 -1
  754. package/dist/src/runtime/register.js.map +1 -1
  755. package/dist/src/runtime/types.d.ts +10 -0
  756. package/dist/src/runtime/types.d.ts.map +1 -1
  757. package/dist/src/runtime/types.js.map +1 -1
  758. package/dist/src/schema/basis-backfill.d.ts +63 -0
  759. package/dist/src/schema/basis-backfill.d.ts.map +1 -0
  760. package/dist/src/schema/basis-backfill.js +161 -0
  761. package/dist/src/schema/basis-backfill.js.map +1 -0
  762. package/dist/src/schema/catalog.d.ts +115 -1
  763. package/dist/src/schema/catalog.d.ts.map +1 -1
  764. package/dist/src/schema/catalog.js +249 -22
  765. package/dist/src/schema/catalog.js.map +1 -1
  766. package/dist/src/schema/change-events.d.ts +42 -1
  767. package/dist/src/schema/change-events.d.ts.map +1 -1
  768. package/dist/src/schema/change-events.js.map +1 -1
  769. package/dist/src/schema/column.d.ts +16 -0
  770. package/dist/src/schema/column.d.ts.map +1 -1
  771. package/dist/src/schema/column.js.map +1 -1
  772. package/dist/src/schema/constraint-builder.d.ts +182 -0
  773. package/dist/src/schema/constraint-builder.d.ts.map +1 -0
  774. package/dist/src/schema/constraint-builder.js +424 -0
  775. package/dist/src/schema/constraint-builder.js.map +1 -0
  776. package/dist/src/schema/ddl-generator.d.ts +86 -1
  777. package/dist/src/schema/ddl-generator.d.ts.map +1 -1
  778. package/dist/src/schema/ddl-generator.js +316 -20
  779. package/dist/src/schema/ddl-generator.js.map +1 -1
  780. package/dist/src/schema/declared-schema-manager.d.ts +51 -0
  781. package/dist/src/schema/declared-schema-manager.d.ts.map +1 -1
  782. package/dist/src/schema/declared-schema-manager.js +61 -0
  783. package/dist/src/schema/declared-schema-manager.js.map +1 -1
  784. package/dist/src/schema/derivation.d.ts +106 -0
  785. package/dist/src/schema/derivation.d.ts.map +1 -0
  786. package/dist/src/schema/derivation.js +25 -0
  787. package/dist/src/schema/derivation.js.map +1 -0
  788. package/dist/src/schema/function.d.ts +13 -0
  789. package/dist/src/schema/function.d.ts.map +1 -1
  790. package/dist/src/schema/function.js.map +1 -1
  791. package/dist/src/schema/lens-ack.d.ts +90 -0
  792. package/dist/src/schema/lens-ack.d.ts.map +1 -0
  793. package/dist/src/schema/lens-ack.js +361 -0
  794. package/dist/src/schema/lens-ack.js.map +1 -0
  795. package/dist/src/schema/lens-compiler.d.ts +62 -0
  796. package/dist/src/schema/lens-compiler.d.ts.map +1 -0
  797. package/dist/src/schema/lens-compiler.js +1594 -0
  798. package/dist/src/schema/lens-compiler.js.map +1 -0
  799. package/dist/src/schema/lens-fk-discovery.d.ts +175 -0
  800. package/dist/src/schema/lens-fk-discovery.d.ts.map +1 -0
  801. package/dist/src/schema/lens-fk-discovery.js +336 -0
  802. package/dist/src/schema/lens-fk-discovery.js.map +1 -0
  803. package/dist/src/schema/lens-prover.d.ts +336 -0
  804. package/dist/src/schema/lens-prover.d.ts.map +1 -0
  805. package/dist/src/schema/lens-prover.js +1988 -0
  806. package/dist/src/schema/lens-prover.js.map +1 -0
  807. package/dist/src/schema/lens.d.ts +254 -0
  808. package/dist/src/schema/lens.d.ts.map +1 -0
  809. package/dist/src/schema/lens.js +21 -0
  810. package/dist/src/schema/lens.js.map +1 -0
  811. package/dist/src/schema/manager.d.ts +676 -18
  812. package/dist/src/schema/manager.d.ts.map +1 -1
  813. package/dist/src/schema/manager.js +1573 -238
  814. package/dist/src/schema/manager.js.map +1 -1
  815. package/dist/src/schema/mapping-advertisement-tags.d.ts +39 -0
  816. package/dist/src/schema/mapping-advertisement-tags.d.ts.map +1 -0
  817. package/dist/src/schema/mapping-advertisement-tags.js +216 -0
  818. package/dist/src/schema/mapping-advertisement-tags.js.map +1 -0
  819. package/dist/src/schema/rename-rewriter.d.ts +45 -4
  820. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  821. package/dist/src/schema/rename-rewriter.js +412 -19
  822. package/dist/src/schema/rename-rewriter.js.map +1 -1
  823. package/dist/src/schema/reserved-tags-policy.d.ts +32 -0
  824. package/dist/src/schema/reserved-tags-policy.d.ts.map +1 -0
  825. package/dist/src/schema/reserved-tags-policy.js +34 -0
  826. package/dist/src/schema/reserved-tags-policy.js.map +1 -0
  827. package/dist/src/schema/reserved-tags.d.ts +170 -0
  828. package/dist/src/schema/reserved-tags.d.ts.map +1 -0
  829. package/dist/src/schema/reserved-tags.js +507 -0
  830. package/dist/src/schema/reserved-tags.js.map +1 -0
  831. package/dist/src/schema/schema-differ.d.ts +158 -2
  832. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  833. package/dist/src/schema/schema-differ.js +1460 -78
  834. package/dist/src/schema/schema-differ.js.map +1 -1
  835. package/dist/src/schema/schema-hasher.d.ts +8 -3
  836. package/dist/src/schema/schema-hasher.d.ts.map +1 -1
  837. package/dist/src/schema/schema-hasher.js +22 -2
  838. package/dist/src/schema/schema-hasher.js.map +1 -1
  839. package/dist/src/schema/schema.d.ts +25 -1
  840. package/dist/src/schema/schema.d.ts.map +1 -1
  841. package/dist/src/schema/schema.js +36 -2
  842. package/dist/src/schema/schema.js.map +1 -1
  843. package/dist/src/schema/table.d.ts +259 -10
  844. package/dist/src/schema/table.d.ts.map +1 -1
  845. package/dist/src/schema/table.js +309 -26
  846. package/dist/src/schema/table.js.map +1 -1
  847. package/dist/src/schema/unique-enforcement.d.ts +78 -0
  848. package/dist/src/schema/unique-enforcement.d.ts.map +1 -0
  849. package/dist/src/schema/unique-enforcement.js +93 -0
  850. package/dist/src/schema/unique-enforcement.js.map +1 -0
  851. package/dist/src/schema/view.d.ts +83 -2
  852. package/dist/src/schema/view.d.ts.map +1 -1
  853. package/dist/src/schema/view.js +67 -1
  854. package/dist/src/schema/view.js.map +1 -1
  855. package/dist/src/schema/window-function.d.ts +9 -1
  856. package/dist/src/schema/window-function.d.ts.map +1 -1
  857. package/dist/src/schema/window-function.js.map +1 -1
  858. package/dist/src/types/temporal-types.d.ts.map +1 -1
  859. package/dist/src/types/temporal-types.js +71 -36
  860. package/dist/src/types/temporal-types.js.map +1 -1
  861. package/dist/src/util/comparison.d.ts +24 -0
  862. package/dist/src/util/comparison.d.ts.map +1 -1
  863. package/dist/src/util/comparison.js +34 -0
  864. package/dist/src/util/comparison.js.map +1 -1
  865. package/dist/src/util/mutation-statement.d.ts.map +1 -1
  866. package/dist/src/util/mutation-statement.js +4 -1
  867. package/dist/src/util/mutation-statement.js.map +1 -1
  868. package/dist/src/util/serialization.d.ts +9 -0
  869. package/dist/src/util/serialization.d.ts.map +1 -1
  870. package/dist/src/util/serialization.js +26 -0
  871. package/dist/src/util/serialization.js.map +1 -1
  872. package/dist/src/vtab/backing-host.d.ts +286 -0
  873. package/dist/src/vtab/backing-host.d.ts.map +1 -0
  874. package/dist/src/vtab/backing-host.js +118 -0
  875. package/dist/src/vtab/backing-host.js.map +1 -0
  876. package/dist/src/vtab/best-access-plan.d.ts +21 -0
  877. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  878. package/dist/src/vtab/best-access-plan.js.map +1 -1
  879. package/dist/src/vtab/capabilities.d.ts +5 -5
  880. package/dist/src/vtab/capabilities.d.ts.map +1 -1
  881. package/dist/src/vtab/mapping-advertisement.d.ts +163 -0
  882. package/dist/src/vtab/mapping-advertisement.d.ts.map +1 -0
  883. package/dist/src/vtab/mapping-advertisement.js +2 -0
  884. package/dist/src/vtab/mapping-advertisement.js.map +1 -0
  885. package/dist/src/vtab/memory/index.d.ts +64 -4
  886. package/dist/src/vtab/memory/index.d.ts.map +1 -1
  887. package/dist/src/vtab/memory/index.js +119 -12
  888. package/dist/src/vtab/memory/index.js.map +1 -1
  889. package/dist/src/vtab/memory/layer/base.d.ts +38 -1
  890. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  891. package/dist/src/vtab/memory/layer/base.js +112 -24
  892. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  893. package/dist/src/vtab/memory/layer/manager.d.ts +291 -4
  894. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  895. package/dist/src/vtab/memory/layer/manager.js +1050 -91
  896. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  897. package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
  898. package/dist/src/vtab/memory/layer/plan-filter.js +35 -6
  899. package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
  900. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  901. package/dist/src/vtab/memory/layer/scan-layer.js +66 -14
  902. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  903. package/dist/src/vtab/memory/layer/scan-plan.d.ts +14 -0
  904. package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
  905. package/dist/src/vtab/memory/layer/scan-plan.js +27 -4
  906. package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
  907. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  908. package/dist/src/vtab/memory/layer/transaction.js +5 -1
  909. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  910. package/dist/src/vtab/memory/module.d.ts +17 -0
  911. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  912. package/dist/src/vtab/memory/module.js +82 -3
  913. package/dist/src/vtab/memory/module.js.map +1 -1
  914. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  915. package/dist/src/vtab/memory/table.js +15 -5
  916. package/dist/src/vtab/memory/table.js.map +1 -1
  917. package/dist/src/vtab/memory/types.d.ts +20 -2
  918. package/dist/src/vtab/memory/types.d.ts.map +1 -1
  919. package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
  920. package/dist/src/vtab/memory/utils/predicate.js +46 -24
  921. package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
  922. package/dist/src/vtab/memory/utils/primary-key-encode.d.ts +31 -0
  923. package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -0
  924. package/dist/src/vtab/memory/utils/primary-key-encode.js +101 -0
  925. package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -0
  926. package/dist/src/vtab/memory/utils/primary-key.d.ts +8 -0
  927. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  928. package/dist/src/vtab/memory/utils/primary-key.js +12 -5
  929. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  930. package/dist/src/vtab/module.d.ts +203 -4
  931. package/dist/src/vtab/module.d.ts.map +1 -1
  932. package/dist/src/vtab/table.d.ts +9 -0
  933. package/dist/src/vtab/table.d.ts.map +1 -1
  934. package/dist/src/vtab/table.js.map +1 -1
  935. package/package.json +6 -5
@@ -20,6 +20,22 @@ export interface ColumnSchema {
20
20
  defaultValue: Expression | null;
21
21
  /** Declared collation sequence name (e.g., "BINARY", "NOCASE", "RTRIM") */
22
22
  collation: string;
23
+ /**
24
+ * Whether `collation` is user-declared (true) rather than an implicit default
25
+ * (undefined). Set by a CREATE-time explicit `COLLATE` clause AND by
26
+ * `ALTER COLUMN ... SET COLLATE` (which carries the same standing as a declared
27
+ * clause, incl. `SET COLLATE binary`) — so the flag reflects the current catalog
28
+ * column, not its creation history. Lets a module distinguish a user-declared
29
+ * collation from the default — e.g. the store module keys an *explicit* per-column
30
+ * PK collation natively but applies its own table-level default collation to an
31
+ * *implicit*-default text PK column; the comparison lattice ranks an explicit
32
+ * collation (rank 2 'declared') above a defaulted one (rank 1 'default'). Purely
33
+ * informational; absent ⇒ implicit. NOT persisted as a distinct bit: persisted DDL
34
+ * is fully explicit (an explicit `COLLATE` for any non-BINARY collation, BINARY
35
+ * elided), so a defaulted non-BINARY collation reloads as `collationExplicit: true`
36
+ * and a defaulted/explicit BINARY both reload as implicit — see docs/types.md.
37
+ */
38
+ collationExplicit?: boolean;
23
39
  /** Whether the column is generated (GENERATED ALWAYS AS) */
24
40
  generated: boolean;
25
41
  /** AST expression for generated columns */
@@ -1 +1 @@
1
- {"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../src/schema/column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,uFAAuF;IACvF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sDAAsD;IACtD,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B;;;;OAIG;IACH,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,wFAAwF;IACxF,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,GAAE,OAAc,GAAG,YAAY,CAWpG"}
1
+ {"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../src/schema/column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;OAcG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,uFAAuF;IACvF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sDAAsD;IACtD,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B;;;;OAIG;IACH,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,wFAAwF;IACxF,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,GAAE,OAAc,GAAG,YAAY,CAWpG"}
@@ -1 +1 @@
1
- {"version":3,"file":"column.js","sourceRoot":"","sources":["../../../src/schema/column.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAsCtD;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,iBAA0B,IAAI;IACrF,OAAO;QACN,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,cAAc,EAAE,uCAAuC;QAChE,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,QAAQ,EAAE,mBAAmB;QACxC,SAAS,EAAE,KAAK;KAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"column.js","sourceRoot":"","sources":["../../../src/schema/column.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAsDtD;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,iBAA0B,IAAI;IACrF,OAAO;QACN,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,cAAc,EAAE,uCAAuC;QAChE,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,QAAQ,EAAE,mBAAmB;QACxC,SAAS,EAAE,KAAK;KAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Shared AST → constraint-schema builders plus the engine-level FK existing-row
3
+ * validator. These are the single source of truth for turning a table-level
4
+ * `ALTER TABLE … ADD <constraint>` (an `AST.TableConstraint`) into the
5
+ * corresponding {@link UniqueConstraintSchema} / {@link ForeignKeyConstraintSchema},
6
+ * reproducing the canonical mapping that {@link SchemaManager}'s
7
+ * `extractUniqueConstraints` / `extractForeignKeys` table-level arms encode for
8
+ * CREATE TABLE. Both the built-in modules (memory + store, via the
9
+ * `@quereus/quereus` barrel) and the SchemaManager delegate here so the two
10
+ * paths can never drift.
11
+ *
12
+ * Column resolution is always against the CHILD table's `columnIndexMap`
13
+ * (`ALTER TABLE ADD CONSTRAINT` is always the table-level form). Parent-column
14
+ * resolution for a FK stays deferred (the parent may not exist yet) exactly as
15
+ * in the CREATE TABLE path.
16
+ */
17
+ import type { Database } from '../core/database.js';
18
+ import type { TableSchema, UniqueConstraintSchema, ForeignKeyConstraintSchema, RowConstraintSchema } from './table.js';
19
+ import { QuereusError } from '../common/errors.js';
20
+ import { type SqlValue } from '../common/types.js';
21
+ import type * as AST from '../parser/ast.js';
22
+ /**
23
+ * Builds a {@link UniqueConstraintSchema} from a table-level UNIQUE
24
+ * `AST.TableConstraint`, resolving each declared column name to its index in the
25
+ * child table. Mirrors `SchemaManager.extractUniqueConstraints` (table-level arm).
26
+ */
27
+ export declare function buildUniqueConstraintSchema(con: AST.TableConstraint, columnIndexMap: ReadonlyMap<string, number>): UniqueConstraintSchema;
28
+ /**
29
+ * Builds a {@link ForeignKeyConstraintSchema} from a table-level FOREIGN KEY
30
+ * `AST.TableConstraint`, resolving child column names to indices and deferring
31
+ * parent-column resolution (the parent table may not exist yet). Mirrors
32
+ * `SchemaManager.extractForeignKeys` (table-level arm), including the
33
+ * child/parent column-count mismatch error.
34
+ */
35
+ export declare function buildForeignKeyConstraintSchema(con: AST.TableConstraint, columnIndexMap: ReadonlyMap<string, number>, childTableName: string, childSchemaName: string): ForeignKeyConstraintSchema;
36
+ /**
37
+ * Builds a {@link RowConstraintSchema} from a table-level CHECK
38
+ * `AST.TableConstraint` (the `ALTER TABLE … ADD CONSTRAINT … CHECK` form). The
39
+ * single source of truth for that mapping, called by the built-in modules
40
+ * (memory + store) so a CHECK added via ALTER lands in the *module-cached*
41
+ * schema, in lock-step with the catalog — the same place inline-CREATE CHECKs
42
+ * live and where `DROP/RENAME CONSTRAINT` later resolve the constraint class. An
43
+ * unnamed CHECK is auto-named `check_<existingCount>`, preserving the engine's
44
+ * prior in-emitter naming (`existingCount` = the number of CHECKs already on the
45
+ * table). Determinism is intentionally NOT validated here — a CHECK may reference
46
+ * `new.*`/`old.*`, which is checked at INSERT/UPDATE plan time.
47
+ */
48
+ export declare function buildCheckConstraintSchema(con: AST.TableConstraint, existingCount: number): RowConstraintSchema;
49
+ /**
50
+ * Extracts the column-level CHECK constraints declared on a single `ALTER TABLE
51
+ * ADD COLUMN` ColumnDef into {@link RowConstraintSchema}s. Used by both the
52
+ * engine's emit layer (to merge into the live in-memory schema) and the store
53
+ * module (to persist into the catalog DDL), so the live and persisted constraint
54
+ * sets cannot drift. Auto-names an unnamed CHECK `_check_<column>`, matching the
55
+ * engine's enforcement naming.
56
+ */
57
+ export declare function extractColumnLevelCheckConstraints(columnDef: AST.ColumnDef): RowConstraintSchema[];
58
+ /**
59
+ * Extracts the column-level FOREIGN KEY constraints declared on a single `ALTER
60
+ * TABLE ADD COLUMN` ColumnDef into {@link ForeignKeyConstraintSchema}s. The
61
+ * child column index is NOT resolved here (`columns: Object.freeze([])`) — the
62
+ * caller resolves it once the new column's index is known (the engine via
63
+ * `columnIndexMap`, the store to `[newColIdx]`). Used by both the engine's emit
64
+ * layer and the store module so the live and persisted FK sets cannot drift.
65
+ * Auto-names an unnamed FK `_fk_<column>` and enforces the single-child-column
66
+ * count match against the parent column list.
67
+ */
68
+ export declare function extractColumnLevelForeignKeys(columnDef: AST.ColumnDef, defaultSchemaName: string): ForeignKeyConstraintSchema[];
69
+ /**
70
+ * Extracts the column-level UNIQUE constraints declared on a single `ALTER TABLE
71
+ * ADD COLUMN` ColumnDef into the equivalent **table-level** {@link AST.TableConstraint}s
72
+ * over the new column. Unlike the CHECK / FK extractors above (which return schema
73
+ * objects merged into the live schema), this returns AST table-constraints so the
74
+ * caller can feed each straight to `module.alterTable({ type: 'addConstraint',
75
+ * constraint })` — the same materialize + validate + persist path that
76
+ * `ALTER TABLE … ADD CONSTRAINT … UNIQUE` uses. Without this, an inline UNIQUE on
77
+ * an ADD COLUMN reaches neither CREATE TABLE's `extractUniqueConstraints` nor the
78
+ * ADD CONSTRAINT path, so it would be silently dropped.
79
+ *
80
+ * The synthetic constraint preserves a named inline UNIQUE's name (so it
81
+ * round-trips), `ON CONFLICT`, and tags. `buildUniqueConstraintSchema` reads only
82
+ * those fields plus `columns[].name`, so no `operations` / `direction` is emitted.
83
+ * Each inline `unique` ColumnConstraint becomes its own single-column table
84
+ * constraint over `columnDef.name` (multiple are rare but handled like CHECK / FK).
85
+ */
86
+ export declare function extractColumnLevelUniqueConstraints(columnDef: AST.ColumnDef): AST.TableConstraint[];
87
+ /** Attributed CHECK diagnostic for a row the derivation wrote into a maintained table. */
88
+ export declare function maintainedTableCheckViolationError(schemaName: string, tableName: string, constraintName: string, exprHint?: string): QuereusError;
89
+ /** Attributed child-side FK diagnostic for a row the derivation wrote into a maintained table. */
90
+ export declare function maintainedTableFkViolationError(schemaName: string, tableName: string, constraintName: string, parentSchemaName: string, parentTableName: string): QuereusError;
91
+ /** Renders one constrained-column value for a key-collision diagnostic. */
92
+ export declare function formatKeyValue(v: SqlValue): string;
93
+ /**
94
+ * Attributed secondary-UNIQUE diagnostic for rows the derivation wrote into a
95
+ * maintained table. Unlike CHECK / FK (per-row properties), a UNIQUE collision
96
+ * is a property of a PAIR of rows at distinct primary keys, so the diagnostic
97
+ * names the colliding key values. Thrown by the backing hosts' post-batch
98
+ * maintenance enforcement (memory `enforceSecondaryUniqueOnMaintenance`, store
99
+ * `enforceSecondaryUniqueForMaintenance`) — see `vtab/backing-host.ts`
100
+ * § Constraint validation.
101
+ */
102
+ export declare function maintainedTableUniqueViolationError(schemaName: string, tableName: string, constraintName: string, columnNames: readonly string[], keyValues: readonly SqlValue[]): QuereusError;
103
+ /**
104
+ * Validates a table's EXISTING (effective, pending-over-committed) rows against
105
+ * each CHECK in `checks`, throwing on the first violating row. The table-wide
106
+ * sibling of the ADD-COLUMN backfill scan (`validateBackfillAgainstChecks` in
107
+ * `runtime/emit/alter-table.ts`): one `select 1 from <t> where not (<expr>)
108
+ * limit 1` scan per CHECK, so the NULL-pass rule falls out of SQL semantics
109
+ * (`not NULL` is NULL — the row is not a violation). A subquery-bearing CHECK
110
+ * is just SQL here; the scan reads final pending state.
111
+ *
112
+ * CAUTION — declared-constraint folding: the optimizer trusts a DECLARED CHECK
113
+ * as a proven domain invariant, so if the LIVE catalog entry for `tableSchema`
114
+ * still declares the CHECK being validated, `ruleFilterContradiction` folds the
115
+ * `where not (<expr>)` scan to EmptyRelation and the validation vacuously
116
+ * passes. Callers must scan against a live record that does NOT declare the
117
+ * constraints under validation (see the stripped-schema swap in
118
+ * `runtime/emit/materialized-view-helpers.ts`, mirroring the ADD COLUMN
119
+ * intermediate-schema discipline).
120
+ */
121
+ export declare function validateChecksOverExistingRows(db: Database, tableSchema: TableSchema, checks: ReadonlyArray<RowConstraintSchema>, onViolation?: (check: RowConstraintSchema, exprSql: string) => QuereusError): Promise<void>;
122
+ /**
123
+ * Validates every existing CHILD row against a newly-added FOREIGN KEY,
124
+ * throwing `StatusCode.CONSTRAINT` if any row references a non-existent parent.
125
+ *
126
+ * Engine-level and backend-agnostic: it reads committed/base data through
127
+ * `db.prepare` + scan (which does not take any module schema-change latch, so it
128
+ * is safe to call while a module holds its own schema-change lock). No-op when
129
+ * `pragma foreign_keys` is off.
130
+ *
131
+ * MATCH SIMPLE semantics: a child row with ANY NULL FK column is allowed
132
+ * regardless of the parent, so only fully-non-NULL orphans abort. When the
133
+ * parent table is absent, no fully-non-NULL child row can be satisfied, so any
134
+ * such row is an orphan (mirrors the child-side builder's null-guards-only
135
+ * fallback in `planner/building/foreign-key-builder.ts`).
136
+ *
137
+ * `onViolation` overrides the default diagnostic — the maintained-table
138
+ * derivation validator threads its table-attributed message through here.
139
+ * Note the declared-constraint folding caveat on
140
+ * {@link validateChecksOverExistingRows}: if the live child record already
141
+ * declares this FK (it does NOT on the ADD COLUMN / ADD CONSTRAINT paths, but
142
+ * DOES on the maintained-table path), the caller must scan against a
143
+ * constraint-stripped record or `ruleAntiJoinFkEmpty` folds the anti-join away.
144
+ */
145
+ export declare function validateForeignKeyOverExistingRows(db: Database, childSchema: TableSchema, fk: ForeignKeyConstraintSchema, onViolation?: () => QuereusError): Promise<void>;
146
+ /**
147
+ * Rejects a FOREIGN KEY whose child column and parent key column declare
148
+ * conflicting explicit/declared collations — the same conflict the synthesized
149
+ * `parent.ref = child.fk` enforcement comparison raises at plan time, surfaced
150
+ * here at declaration time (CREATE TABLE / ALTER ADD CONSTRAINT / ADD COLUMN /
151
+ * declarative apply). Pure schema check (no row scan).
152
+ *
153
+ * Stays in lockstep with enforcement by construction: it maps each column to a
154
+ * `ScalarType` through {@link columnSchemaToScalarType} (the same map the FK
155
+ * builder's comparison uses — `collationExplicit` → provenance `'declared'`,
156
+ * else `'default'`) and resolves the pair through the same
157
+ * {@link resolveComparisonCollation} lattice. So it fires on exactly the
158
+ * conflicts the first DML against the child would, only sooner — never a
159
+ * re-derived textuality- or name-based rule.
160
+ *
161
+ * Resolution rules (consequences of staying in lockstep, intended):
162
+ * - matching declared collations (nocase/nocase) resolve, no conflict;
163
+ * - one-sided declaration (declared nocase vs defaulted BINARY) resolves to
164
+ * NOCASE — a defaulted BINARY is the engine floor, it contributes nothing;
165
+ * - a *declared* `COLLATE BINARY` (rank 2) vs a declared NOCASE conflicts;
166
+ * - a divergent explicit COLLATE on non-text columns still conflicts — we
167
+ * mirror enforcement exactly rather than gating on textuality.
168
+ *
169
+ * The parent is resolved against the live catalog; a not-yet-created
170
+ * (forward-declared) parent is skipped — its column types are unknown, so the
171
+ * conflict cannot be seen yet and remains caught at first DML (the one
172
+ * unavoidable residual). A self-referencing FK resolves against `childSchema`
173
+ * directly so it validates at CREATE, before the table is registered.
174
+ *
175
+ * Unconditional — NOT gated on `pragma foreign_keys`. A conflicting-collation
176
+ * declaration is a malformed declaration (same class as the child/parent
177
+ * column-count mismatch the builders reject unconditionally), not an
178
+ * enforcement concern, so a contradictory schema is rejected whether or not
179
+ * enforcement is currently enabled.
180
+ */
181
+ export declare function validateForeignKeyCollations(db: Database, childSchema: TableSchema, fk: ForeignKeyConstraintSchema): void;
182
+ //# sourceMappingURL=constraint-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint-builder.d.ts","sourceRoot":"","sources":["../../../src/schema/constraint-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEvH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAQ7C;;;;GAIG;AACH,wBAAgB,2BAA2B,CAC1C,GAAG,EAAE,GAAG,CAAC,eAAe,EACxB,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,sBAAsB,CAiBxB;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC9C,GAAG,EAAE,GAAG,CAAC,eAAe,EACxB,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3C,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACrB,0BAA0B,CAkC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACzC,GAAG,EAAE,GAAG,CAAC,eAAe,EACxB,aAAa,EAAE,MAAM,GACnB,mBAAmB,CAUrB;AAED;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,GAAG,mBAAmB,EAAE,CAYlG;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC5C,SAAS,EAAE,GAAG,CAAC,SAAS,EACxB,iBAAiB,EAAE,MAAM,GACvB,0BAA0B,EAAE,CA2B9B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mCAAmC,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,eAAe,EAAE,CAanG;AAmBD,0FAA0F;AAC1F,wBAAgB,kCAAkC,CACjD,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,MAAM,GACf,YAAY,CAOd;AAED,kGAAkG;AAClG,wBAAgB,+BAA+B,CAC9C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,GACrB,YAAY,CAMd;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAKlD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CAClD,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC5B,YAAY,CAMd;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,8BAA8B,CACnD,EAAE,EAAE,QAAQ,EACZ,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAC1C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,KAAK,YAAY,GACzE,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,kCAAkC,CACvD,EAAE,EAAE,QAAQ,EACZ,WAAW,EAAE,WAAW,EACxB,EAAE,EAAE,0BAA0B,EAC9B,WAAW,CAAC,EAAE,MAAM,YAAY,GAC9B,OAAO,CAAC,IAAI,CAAC,CAyDf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,4BAA4B,CAC3C,EAAE,EAAE,QAAQ,EACZ,WAAW,EAAE,WAAW,EACxB,EAAE,EAAE,0BAA0B,GAC5B,IAAI,CAuCN"}
@@ -0,0 +1,424 @@
1
+ /**
2
+ * Shared AST → constraint-schema builders plus the engine-level FK existing-row
3
+ * validator. These are the single source of truth for turning a table-level
4
+ * `ALTER TABLE … ADD <constraint>` (an `AST.TableConstraint`) into the
5
+ * corresponding {@link UniqueConstraintSchema} / {@link ForeignKeyConstraintSchema},
6
+ * reproducing the canonical mapping that {@link SchemaManager}'s
7
+ * `extractUniqueConstraints` / `extractForeignKeys` table-level arms encode for
8
+ * CREATE TABLE. Both the built-in modules (memory + store, via the
9
+ * `@quereus/quereus` barrel) and the SchemaManager delegate here so the two
10
+ * paths can never drift.
11
+ *
12
+ * Column resolution is always against the CHILD table's `columnIndexMap`
13
+ * (`ALTER TABLE ADD CONSTRAINT` is always the table-level form). Parent-column
14
+ * resolution for a FK stays deferred (the parent may not exist yet) exactly as
15
+ * in the CREATE TABLE path.
16
+ */
17
+ import { resolveReferencedColumns, opsToMask } from './table.js';
18
+ import { QuereusError } from '../common/errors.js';
19
+ import { StatusCode } from '../common/types.js';
20
+ import { quoteIdentifier, expressionToString } from '../emit/ast-stringify.js';
21
+ import { createLogger } from '../common/logger.js';
22
+ import { columnSchemaToScalarType } from '../planner/type-utils.js';
23
+ import { resolveComparisonCollation } from '../planner/analysis/comparison-collation.js';
24
+ const log = createLogger('schema:constraint-builder');
25
+ /**
26
+ * Builds a {@link UniqueConstraintSchema} from a table-level UNIQUE
27
+ * `AST.TableConstraint`, resolving each declared column name to its index in the
28
+ * child table. Mirrors `SchemaManager.extractUniqueConstraints` (table-level arm).
29
+ */
30
+ export function buildUniqueConstraintSchema(con, columnIndexMap) {
31
+ if (con.type !== 'unique' || !con.columns || con.columns.length === 0) {
32
+ throw new QuereusError('UNIQUE constraint requires at least one column', StatusCode.ERROR);
33
+ }
34
+ const colIndices = con.columns.map(col => {
35
+ const idx = columnIndexMap.get(col.name.toLowerCase());
36
+ if (idx === undefined) {
37
+ throw new QuereusError(`UNIQUE constraint column '${col.name}' not found`, StatusCode.ERROR);
38
+ }
39
+ return idx;
40
+ });
41
+ return {
42
+ name: con.name,
43
+ columns: Object.freeze(colIndices),
44
+ defaultConflict: con.onConflict,
45
+ tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
46
+ };
47
+ }
48
+ /**
49
+ * Builds a {@link ForeignKeyConstraintSchema} from a table-level FOREIGN KEY
50
+ * `AST.TableConstraint`, resolving child column names to indices and deferring
51
+ * parent-column resolution (the parent table may not exist yet). Mirrors
52
+ * `SchemaManager.extractForeignKeys` (table-level arm), including the
53
+ * child/parent column-count mismatch error.
54
+ */
55
+ export function buildForeignKeyConstraintSchema(con, columnIndexMap, childTableName, childSchemaName) {
56
+ if (con.type !== 'foreignKey' || !con.foreignKey || !con.columns) {
57
+ throw new QuereusError('FOREIGN KEY constraint requires child columns and a REFERENCES clause', StatusCode.ERROR);
58
+ }
59
+ const fk = con.foreignKey;
60
+ const childColIndices = con.columns.map(col => {
61
+ const idx = columnIndexMap.get(col.name.toLowerCase());
62
+ if (idx === undefined) {
63
+ throw new QuereusError(`FK column '${col.name}' not found in table '${childTableName}'`, StatusCode.ERROR);
64
+ }
65
+ return idx;
66
+ });
67
+ const fkName = con.name ?? `_fk_${childTableName}_${con.columns.map(c => c.name).join('_')}`;
68
+ if (fk.columns && fk.columns.length !== childColIndices.length) {
69
+ throw new QuereusError(`FK constraint '${fkName}' on table '${childTableName}': child column count (${childColIndices.length}) does not match parent column count (${fk.columns.length})`, StatusCode.ERROR);
70
+ }
71
+ return {
72
+ name: fkName,
73
+ columns: Object.freeze(childColIndices),
74
+ referencedTable: fk.table,
75
+ referencedSchema: fk.schema ?? childSchemaName,
76
+ referencedColumns: Object.freeze([]), // resolved at enforcement time
77
+ referencedColumnNames: fk.columns, // deferred resolution via resolveReferencedColumns
78
+ onDelete: fk.onDelete ?? 'restrict',
79
+ onUpdate: fk.onUpdate ?? 'restrict',
80
+ deferred: fk.initiallyDeferred ?? false,
81
+ tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
82
+ };
83
+ }
84
+ /**
85
+ * Builds a {@link RowConstraintSchema} from a table-level CHECK
86
+ * `AST.TableConstraint` (the `ALTER TABLE … ADD CONSTRAINT … CHECK` form). The
87
+ * single source of truth for that mapping, called by the built-in modules
88
+ * (memory + store) so a CHECK added via ALTER lands in the *module-cached*
89
+ * schema, in lock-step with the catalog — the same place inline-CREATE CHECKs
90
+ * live and where `DROP/RENAME CONSTRAINT` later resolve the constraint class. An
91
+ * unnamed CHECK is auto-named `check_<existingCount>`, preserving the engine's
92
+ * prior in-emitter naming (`existingCount` = the number of CHECKs already on the
93
+ * table). Determinism is intentionally NOT validated here — a CHECK may reference
94
+ * `new.*`/`old.*`, which is checked at INSERT/UPDATE plan time.
95
+ */
96
+ export function buildCheckConstraintSchema(con, existingCount) {
97
+ if (con.type !== 'check' || !con.expr) {
98
+ throw new QuereusError('CHECK constraint requires an expression', StatusCode.ERROR);
99
+ }
100
+ return {
101
+ name: con.name || `check_${existingCount}`,
102
+ expr: con.expr,
103
+ operations: opsToMask(con.operations),
104
+ tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
105
+ };
106
+ }
107
+ /**
108
+ * Extracts the column-level CHECK constraints declared on a single `ALTER TABLE
109
+ * ADD COLUMN` ColumnDef into {@link RowConstraintSchema}s. Used by both the
110
+ * engine's emit layer (to merge into the live in-memory schema) and the store
111
+ * module (to persist into the catalog DDL), so the live and persisted constraint
112
+ * sets cannot drift. Auto-names an unnamed CHECK `_check_<column>`, matching the
113
+ * engine's enforcement naming.
114
+ */
115
+ export function extractColumnLevelCheckConstraints(columnDef) {
116
+ const result = [];
117
+ for (const con of columnDef.constraints ?? []) {
118
+ if (con.type !== 'check' || !con.expr)
119
+ continue;
120
+ result.push({
121
+ name: con.name ?? `_check_${columnDef.name}`,
122
+ expr: con.expr,
123
+ operations: opsToMask(con.operations),
124
+ tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
125
+ });
126
+ }
127
+ return result;
128
+ }
129
+ /**
130
+ * Extracts the column-level FOREIGN KEY constraints declared on a single `ALTER
131
+ * TABLE ADD COLUMN` ColumnDef into {@link ForeignKeyConstraintSchema}s. The
132
+ * child column index is NOT resolved here (`columns: Object.freeze([])`) — the
133
+ * caller resolves it once the new column's index is known (the engine via
134
+ * `columnIndexMap`, the store to `[newColIdx]`). Used by both the engine's emit
135
+ * layer and the store module so the live and persisted FK sets cannot drift.
136
+ * Auto-names an unnamed FK `_fk_<column>` and enforces the single-child-column
137
+ * count match against the parent column list.
138
+ */
139
+ export function extractColumnLevelForeignKeys(columnDef, defaultSchemaName) {
140
+ const result = [];
141
+ for (const con of columnDef.constraints ?? []) {
142
+ if (con.type !== 'foreignKey' || !con.foreignKey)
143
+ continue;
144
+ const fk = con.foreignKey;
145
+ // child column index gets resolved by caller after module.alterTable returns
146
+ // the updated schema with the new column appended.
147
+ if (fk.columns && fk.columns.length !== 1) {
148
+ throw new QuereusError(`FK constraint '${con.name ?? `_fk_${columnDef.name}`}' on ADD COLUMN '${columnDef.name}': child column count (1) does not match parent column count (${fk.columns.length})`, StatusCode.ERROR);
149
+ }
150
+ result.push({
151
+ name: con.name ?? `_fk_${columnDef.name}`,
152
+ columns: Object.freeze([]),
153
+ referencedTable: fk.table,
154
+ referencedSchema: fk.schema ?? defaultSchemaName,
155
+ referencedColumns: Object.freeze([]),
156
+ referencedColumnNames: fk.columns,
157
+ onDelete: fk.onDelete ?? 'restrict',
158
+ onUpdate: fk.onUpdate ?? 'restrict',
159
+ deferred: fk.initiallyDeferred ?? false,
160
+ tags: con.tags && Object.keys(con.tags).length > 0 ? Object.freeze({ ...con.tags }) : undefined,
161
+ });
162
+ }
163
+ return result;
164
+ }
165
+ /**
166
+ * Extracts the column-level UNIQUE constraints declared on a single `ALTER TABLE
167
+ * ADD COLUMN` ColumnDef into the equivalent **table-level** {@link AST.TableConstraint}s
168
+ * over the new column. Unlike the CHECK / FK extractors above (which return schema
169
+ * objects merged into the live schema), this returns AST table-constraints so the
170
+ * caller can feed each straight to `module.alterTable({ type: 'addConstraint',
171
+ * constraint })` — the same materialize + validate + persist path that
172
+ * `ALTER TABLE … ADD CONSTRAINT … UNIQUE` uses. Without this, an inline UNIQUE on
173
+ * an ADD COLUMN reaches neither CREATE TABLE's `extractUniqueConstraints` nor the
174
+ * ADD CONSTRAINT path, so it would be silently dropped.
175
+ *
176
+ * The synthetic constraint preserves a named inline UNIQUE's name (so it
177
+ * round-trips), `ON CONFLICT`, and tags. `buildUniqueConstraintSchema` reads only
178
+ * those fields plus `columns[].name`, so no `operations` / `direction` is emitted.
179
+ * Each inline `unique` ColumnConstraint becomes its own single-column table
180
+ * constraint over `columnDef.name` (multiple are rare but handled like CHECK / FK).
181
+ */
182
+ export function extractColumnLevelUniqueConstraints(columnDef) {
183
+ const result = [];
184
+ for (const con of columnDef.constraints ?? []) {
185
+ if (con.type !== 'unique')
186
+ continue;
187
+ result.push({
188
+ type: 'unique',
189
+ name: con.name,
190
+ columns: [{ name: columnDef.name }],
191
+ onConflict: con.onConflict,
192
+ tags: con.tags,
193
+ });
194
+ }
195
+ return result;
196
+ }
197
+ /** Qualify a relation reference, eliding the `main.` prefix (the default schema). */
198
+ function qualifyRelation(schemaName, tableName) {
199
+ const prefix = schemaName.toLowerCase() !== 'main' ? `${quoteIdentifier(schemaName)}.` : '';
200
+ return `${prefix}${quoteIdentifier(tableName)}`;
201
+ }
202
+ /* ──────────────── maintained-table derived-row attribution ────────────────
203
+ * A maintained table's rows are written by its derivation, so a declared
204
+ * CHECK / FK violation surfaces on a statement that targeted a DIFFERENT table
205
+ * (a source write, or the create/attach statement). These two helpers produce
206
+ * the table-attributed diagnostic both validation mechanisms share — the bulk
207
+ * SQL-scan validators (create-fill / attach reconcile) and the per-row
208
+ * maintenance evaluator (`core/derived-row-validator.ts`). The leading
209
+ * `CHECK constraint failed:` / `FOREIGN KEY constraint failed:` prefixes are
210
+ * load-bearing: existing assertions and downstream consumers key off them
211
+ * (see `runtime/emit/constraint-check.ts`). */
212
+ /** Attributed CHECK diagnostic for a row the derivation wrote into a maintained table. */
213
+ export function maintainedTableCheckViolationError(schemaName, tableName, constraintName, exprHint) {
214
+ const hint = exprHint && exprHint.length <= 60 ? ` (${exprHint})` : '';
215
+ return new QuereusError(`CHECK constraint failed: ${constraintName}${hint} — row derived into maintained table `
216
+ + `'${schemaName}.${tableName}' violates its declared constraint`, StatusCode.CONSTRAINT);
217
+ }
218
+ /** Attributed child-side FK diagnostic for a row the derivation wrote into a maintained table. */
219
+ export function maintainedTableFkViolationError(schemaName, tableName, constraintName, parentSchemaName, parentTableName) {
220
+ return new QuereusError(`FOREIGN KEY constraint failed: ${constraintName} — row derived into maintained table `
221
+ + `'${schemaName}.${tableName}' references a missing '${parentSchemaName}.${parentTableName}'`, StatusCode.CONSTRAINT);
222
+ }
223
+ /** Renders one constrained-column value for a key-collision diagnostic. */
224
+ export function formatKeyValue(v) {
225
+ if (v === null || v === undefined)
226
+ return 'null';
227
+ if (typeof v === 'string')
228
+ return `'${v}'`;
229
+ if (v instanceof Uint8Array)
230
+ return `x'…'`;
231
+ return String(v);
232
+ }
233
+ /**
234
+ * Attributed secondary-UNIQUE diagnostic for rows the derivation wrote into a
235
+ * maintained table. Unlike CHECK / FK (per-row properties), a UNIQUE collision
236
+ * is a property of a PAIR of rows at distinct primary keys, so the diagnostic
237
+ * names the colliding key values. Thrown by the backing hosts' post-batch
238
+ * maintenance enforcement (memory `enforceSecondaryUniqueOnMaintenance`, store
239
+ * `enforceSecondaryUniqueForMaintenance`) — see `vtab/backing-host.ts`
240
+ * § Constraint validation.
241
+ */
242
+ export function maintainedTableUniqueViolationError(schemaName, tableName, constraintName, columnNames, keyValues) {
243
+ return new QuereusError(`UNIQUE constraint failed: ${constraintName} (${columnNames.join(', ')}) — row derived into maintained table `
244
+ + `'${schemaName}.${tableName}' collides on its declared UNIQUE constraint (key: ${keyValues.map(formatKeyValue).join(', ')})`, StatusCode.CONSTRAINT);
245
+ }
246
+ /**
247
+ * Validates a table's EXISTING (effective, pending-over-committed) rows against
248
+ * each CHECK in `checks`, throwing on the first violating row. The table-wide
249
+ * sibling of the ADD-COLUMN backfill scan (`validateBackfillAgainstChecks` in
250
+ * `runtime/emit/alter-table.ts`): one `select 1 from <t> where not (<expr>)
251
+ * limit 1` scan per CHECK, so the NULL-pass rule falls out of SQL semantics
252
+ * (`not NULL` is NULL — the row is not a violation). A subquery-bearing CHECK
253
+ * is just SQL here; the scan reads final pending state.
254
+ *
255
+ * CAUTION — declared-constraint folding: the optimizer trusts a DECLARED CHECK
256
+ * as a proven domain invariant, so if the LIVE catalog entry for `tableSchema`
257
+ * still declares the CHECK being validated, `ruleFilterContradiction` folds the
258
+ * `where not (<expr>)` scan to EmptyRelation and the validation vacuously
259
+ * passes. Callers must scan against a live record that does NOT declare the
260
+ * constraints under validation (see the stripped-schema swap in
261
+ * `runtime/emit/materialized-view-helpers.ts`, mirroring the ADD COLUMN
262
+ * intermediate-schema discipline).
263
+ */
264
+ export async function validateChecksOverExistingRows(db, tableSchema, checks, onViolation) {
265
+ const tableRef = qualifyRelation(tableSchema.schemaName, tableSchema.name);
266
+ for (const check of checks) {
267
+ const exprSql = expressionToString(check.expr);
268
+ const sql = `select 1 from ${tableRef} where not (${exprSql}) limit 1`;
269
+ log('CHECK existing-row validation for %s.%s: %s', tableSchema.schemaName, tableSchema.name, sql);
270
+ const stmt = db.prepare(sql);
271
+ try {
272
+ for await (const _row of stmt._iterateRowsRaw()) {
273
+ throw onViolation?.(check, exprSql) ?? new QuereusError(`CHECK constraint failed: ${check.name ?? exprSql} — existing rows in '${tableSchema.name}' violate the constraint`, StatusCode.CONSTRAINT);
274
+ }
275
+ }
276
+ finally {
277
+ await stmt.finalize();
278
+ }
279
+ }
280
+ }
281
+ /**
282
+ * Validates every existing CHILD row against a newly-added FOREIGN KEY,
283
+ * throwing `StatusCode.CONSTRAINT` if any row references a non-existent parent.
284
+ *
285
+ * Engine-level and backend-agnostic: it reads committed/base data through
286
+ * `db.prepare` + scan (which does not take any module schema-change latch, so it
287
+ * is safe to call while a module holds its own schema-change lock). No-op when
288
+ * `pragma foreign_keys` is off.
289
+ *
290
+ * MATCH SIMPLE semantics: a child row with ANY NULL FK column is allowed
291
+ * regardless of the parent, so only fully-non-NULL orphans abort. When the
292
+ * parent table is absent, no fully-non-NULL child row can be satisfied, so any
293
+ * such row is an orphan (mirrors the child-side builder's null-guards-only
294
+ * fallback in `planner/building/foreign-key-builder.ts`).
295
+ *
296
+ * `onViolation` overrides the default diagnostic — the maintained-table
297
+ * derivation validator threads its table-attributed message through here.
298
+ * Note the declared-constraint folding caveat on
299
+ * {@link validateChecksOverExistingRows}: if the live child record already
300
+ * declares this FK (it does NOT on the ADD COLUMN / ADD CONSTRAINT paths, but
301
+ * DOES on the maintained-table path), the caller must scan against a
302
+ * constraint-stripped record or `ruleAntiJoinFkEmpty` folds the anti-join away.
303
+ */
304
+ export async function validateForeignKeyOverExistingRows(db, childSchema, fk, onViolation) {
305
+ if (!db.options.getBooleanOption('foreign_keys'))
306
+ return;
307
+ const childRef = qualifyRelation(childSchema.schemaName, childSchema.name);
308
+ const childAlias = '_c';
309
+ // MATCH SIMPLE: only rows where every FK column is non-NULL can violate.
310
+ const notNullChain = fk.columns
311
+ .map(idx => `${childAlias}.${quoteIdentifier(childSchema.columns[idx].name)} is not null`)
312
+ .join(' and ');
313
+ const parentSchemaName = fk.referencedSchema ?? childSchema.schemaName;
314
+ const parentTable = db.schemaManager.findTable(fk.referencedTable, parentSchemaName);
315
+ let sql;
316
+ if (!parentTable) {
317
+ // Parent absent: any fully-non-NULL child row references a non-existent parent.
318
+ sql = `select 1 from ${childRef} as ${childAlias} where ${notNullChain} limit 1`;
319
+ }
320
+ else {
321
+ const parentColIndices = resolveReferencedColumns(fk, parentTable);
322
+ if (parentColIndices.length !== fk.columns.length) {
323
+ throw new QuereusError(`FK constraint '${fk.name ?? `_fk_${childSchema.name}`}' on table '${childSchema.name}': child column count (${fk.columns.length}) does not match parent column count (${parentColIndices.length})`, StatusCode.ERROR);
324
+ }
325
+ const parentRef = qualifyRelation(parentTable.schemaName, parentTable.name);
326
+ const parentAlias = '_p';
327
+ // Aliases keep the correlation unambiguous even for a self-referencing FK
328
+ // (child table === parent table).
329
+ const matchChain = fk.columns
330
+ .map((childIdx, i) => `${parentAlias}.${quoteIdentifier(parentTable.columns[parentColIndices[i]].name)} = ${childAlias}.${quoteIdentifier(childSchema.columns[childIdx].name)}`)
331
+ .join(' and ');
332
+ // `not exists` correlated subquery: a fully-non-NULL child row with no matching
333
+ // parent is an orphan. (The decorrelator may turn this into an anti-join; that is
334
+ // fine — the ADD COLUMN path deliberately validates against a live schema that does
335
+ // NOT yet declare the new FK, so `ruleAntiJoinFkEmpty` has no FK to fold against.)
336
+ sql = `select 1 from ${childRef} as ${childAlias} `
337
+ + `where ${notNullChain} `
338
+ + `and not exists (select 1 from ${parentRef} as ${parentAlias} where ${matchChain}) limit 1`;
339
+ }
340
+ log('FK existing-row validation for %s.%s: %s', childSchema.schemaName, childSchema.name, sql);
341
+ const stmt = db.prepare(sql);
342
+ try {
343
+ for await (const _row of stmt._iterateRowsRaw()) {
344
+ if (onViolation)
345
+ throw onViolation();
346
+ const colNames = fk.columns.map(idx => childSchema.columns[idx].name).join(', ');
347
+ throw new QuereusError(`FOREIGN KEY constraint failed: ${childSchema.name} (${colNames}) has rows referencing a missing '${fk.referencedTable}'`, StatusCode.CONSTRAINT);
348
+ }
349
+ }
350
+ finally {
351
+ await stmt.finalize();
352
+ }
353
+ }
354
+ /**
355
+ * Rejects a FOREIGN KEY whose child column and parent key column declare
356
+ * conflicting explicit/declared collations — the same conflict the synthesized
357
+ * `parent.ref = child.fk` enforcement comparison raises at plan time, surfaced
358
+ * here at declaration time (CREATE TABLE / ALTER ADD CONSTRAINT / ADD COLUMN /
359
+ * declarative apply). Pure schema check (no row scan).
360
+ *
361
+ * Stays in lockstep with enforcement by construction: it maps each column to a
362
+ * `ScalarType` through {@link columnSchemaToScalarType} (the same map the FK
363
+ * builder's comparison uses — `collationExplicit` → provenance `'declared'`,
364
+ * else `'default'`) and resolves the pair through the same
365
+ * {@link resolveComparisonCollation} lattice. So it fires on exactly the
366
+ * conflicts the first DML against the child would, only sooner — never a
367
+ * re-derived textuality- or name-based rule.
368
+ *
369
+ * Resolution rules (consequences of staying in lockstep, intended):
370
+ * - matching declared collations (nocase/nocase) resolve, no conflict;
371
+ * - one-sided declaration (declared nocase vs defaulted BINARY) resolves to
372
+ * NOCASE — a defaulted BINARY is the engine floor, it contributes nothing;
373
+ * - a *declared* `COLLATE BINARY` (rank 2) vs a declared NOCASE conflicts;
374
+ * - a divergent explicit COLLATE on non-text columns still conflicts — we
375
+ * mirror enforcement exactly rather than gating on textuality.
376
+ *
377
+ * The parent is resolved against the live catalog; a not-yet-created
378
+ * (forward-declared) parent is skipped — its column types are unknown, so the
379
+ * conflict cannot be seen yet and remains caught at first DML (the one
380
+ * unavoidable residual). A self-referencing FK resolves against `childSchema`
381
+ * directly so it validates at CREATE, before the table is registered.
382
+ *
383
+ * Unconditional — NOT gated on `pragma foreign_keys`. A conflicting-collation
384
+ * declaration is a malformed declaration (same class as the child/parent
385
+ * column-count mismatch the builders reject unconditionally), not an
386
+ * enforcement concern, so a contradictory schema is rejected whether or not
387
+ * enforcement is currently enabled.
388
+ */
389
+ export function validateForeignKeyCollations(db, childSchema, fk) {
390
+ // Resolve the parent. A self-referencing FK names `childSchema` itself; resolve
391
+ // it directly so the check fires at CREATE (the table is not yet registered).
392
+ const parentSchemaName = fk.referencedSchema ?? childSchema.schemaName;
393
+ const selfRef = fk.referencedTable.toLowerCase() === childSchema.name.toLowerCase()
394
+ && parentSchemaName.toLowerCase() === childSchema.schemaName.toLowerCase();
395
+ const parent = selfRef
396
+ ? childSchema
397
+ : db.schemaManager.findTable(fk.referencedTable, parentSchemaName);
398
+ // Forward-declared parent: column types unknown — conflict stays caught at first DML.
399
+ if (!parent)
400
+ return;
401
+ let parentColIndices;
402
+ try {
403
+ parentColIndices = resolveReferencedColumns(fk, parent);
404
+ }
405
+ catch {
406
+ // A missing referenced column is reported by the enforcement path; don't double-report.
407
+ return;
408
+ }
409
+ // A child/parent column-count mismatch is already raised by the builders.
410
+ if (parentColIndices.length !== fk.columns.length)
411
+ return;
412
+ for (let i = 0; i < fk.columns.length; i++) {
413
+ const childCol = childSchema.columns[fk.columns[i]];
414
+ const parentCol = parent.columns[parentColIndices[i]];
415
+ const res = resolveComparisonCollation(columnSchemaToScalarType(childCol), columnSchemaToScalarType(parentCol));
416
+ if (res.kind === 'conflict') {
417
+ throw new QuereusError(`FOREIGN KEY '${fk.name ?? `_fk_${childSchema.name}`}' on '${childSchema.name}': `
418
+ + `child column '${childSchema.name}.${childCol.name}' (collation ${childCol.collation}) `
419
+ + `and parent column '${parent.name}.${parentCol.name}' (collation ${parentCol.collation}) `
420
+ + `declare conflicting collations; declare a matching COLLATE on both sides.`, StatusCode.ERROR);
421
+ }
422
+ }
423
+ }
424
+ //# sourceMappingURL=constraint-builder.js.map