@quereus/quereus 4.6.0 → 4.8.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 (584) hide show
  1. package/README.md +2 -2
  2. package/dist/src/common/errors.d.ts +17 -0
  3. package/dist/src/common/errors.d.ts.map +1 -1
  4. package/dist/src/common/errors.js +21 -0
  5. package/dist/src/common/errors.js.map +1 -1
  6. package/dist/src/common/types.d.ts +19 -0
  7. package/dist/src/common/types.d.ts.map +1 -1
  8. package/dist/src/common/types.js.map +1 -1
  9. package/dist/src/core/database-assertions.d.ts +4 -3
  10. package/dist/src/core/database-assertions.d.ts.map +1 -1
  11. package/dist/src/core/database-assertions.js +44 -14
  12. package/dist/src/core/database-assertions.js.map +1 -1
  13. package/dist/src/core/database-events.d.ts +62 -0
  14. package/dist/src/core/database-events.d.ts.map +1 -1
  15. package/dist/src/core/database-events.js +88 -2
  16. package/dist/src/core/database-events.js.map +1 -1
  17. package/dist/src/core/database-internal.d.ts +5 -2
  18. package/dist/src/core/database-internal.d.ts.map +1 -1
  19. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
  20. package/dist/src/core/database-materialized-views-plan-builders.js +4 -2
  21. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
  22. package/dist/src/core/database-materialized-views-plans.d.ts +12 -2
  23. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
  24. package/dist/src/core/database-materialized-views.d.ts +46 -0
  25. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  26. package/dist/src/core/database-materialized-views.js +75 -4
  27. package/dist/src/core/database-materialized-views.js.map +1 -1
  28. package/dist/src/core/database.d.ts +48 -2
  29. package/dist/src/core/database.d.ts.map +1 -1
  30. package/dist/src/core/database.js +222 -11
  31. package/dist/src/core/database.js.map +1 -1
  32. package/dist/src/core/derived-row-validator.d.ts.map +1 -1
  33. package/dist/src/core/derived-row-validator.js +7 -1
  34. package/dist/src/core/derived-row-validator.js.map +1 -1
  35. package/dist/src/core/statement.d.ts.map +1 -1
  36. package/dist/src/core/statement.js +101 -5
  37. package/dist/src/core/statement.js.map +1 -1
  38. package/dist/src/emit/ast-stringify.d.ts +18 -2
  39. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  40. package/dist/src/emit/ast-stringify.js +22 -4
  41. package/dist/src/emit/ast-stringify.js.map +1 -1
  42. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  43. package/dist/src/func/builtins/explain.js +19 -5
  44. package/dist/src/func/builtins/explain.js.map +1 -1
  45. package/dist/src/func/builtins/scalar.d.ts.map +1 -1
  46. package/dist/src/func/builtins/scalar.js +24 -20
  47. package/dist/src/func/builtins/scalar.js.map +1 -1
  48. package/dist/src/func/builtins/schema.d.ts.map +1 -1
  49. package/dist/src/func/builtins/schema.js +32 -5
  50. package/dist/src/func/builtins/schema.js.map +1 -1
  51. package/dist/src/index.d.ts +9 -5
  52. package/dist/src/index.d.ts.map +1 -1
  53. package/dist/src/index.js +7 -5
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/parser/ast.d.ts +58 -1
  56. package/dist/src/parser/ast.d.ts.map +1 -1
  57. package/dist/src/parser/parser.js +1 -1
  58. package/dist/src/parser/parser.js.map +1 -1
  59. package/dist/src/parser/utils.d.ts +13 -1
  60. package/dist/src/parser/utils.d.ts.map +1 -1
  61. package/dist/src/parser/utils.js +14 -0
  62. package/dist/src/parser/utils.js.map +1 -1
  63. package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
  64. package/dist/src/planner/analysis/assertion-classifier.js +7 -2
  65. package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
  66. package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
  67. package/dist/src/planner/analysis/assertion-hoist-cache.js +5 -0
  68. package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
  69. package/dist/src/planner/analysis/change-scope.d.ts +11 -3
  70. package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
  71. package/dist/src/planner/analysis/change-scope.js +5 -4
  72. package/dist/src/planner/analysis/change-scope.js.map +1 -1
  73. package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -1
  74. package/dist/src/planner/analysis/coverage-prover.js +13 -5
  75. package/dist/src/planner/analysis/coverage-prover.js.map +1 -1
  76. package/dist/src/planner/analysis/equi-correlation.d.ts +6 -1
  77. package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -1
  78. package/dist/src/planner/analysis/equi-correlation.js +8 -1
  79. package/dist/src/planner/analysis/equi-correlation.js.map +1 -1
  80. package/dist/src/planner/analysis/predicate-dependencies.d.ts +34 -0
  81. package/dist/src/planner/analysis/predicate-dependencies.d.ts.map +1 -0
  82. package/dist/src/planner/analysis/predicate-dependencies.js +60 -0
  83. package/dist/src/planner/analysis/predicate-dependencies.js.map +1 -0
  84. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +1 -1
  85. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  86. package/dist/src/planner/analysis/query-rewrite-matcher.js +0 -26
  87. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  88. package/dist/src/planner/building/alter-table.d.ts.map +1 -1
  89. package/dist/src/planner/building/alter-table.js +53 -17
  90. package/dist/src/planner/building/alter-table.js.map +1 -1
  91. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  92. package/dist/src/planner/building/constraint-builder.js +9 -5
  93. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  94. package/dist/src/planner/building/create-assertion.d.ts.map +1 -1
  95. package/dist/src/planner/building/create-assertion.js +72 -1
  96. package/dist/src/planner/building/create-assertion.js.map +1 -1
  97. package/dist/src/planner/building/create-view.d.ts +6 -1
  98. package/dist/src/planner/building/create-view.d.ts.map +1 -1
  99. package/dist/src/planner/building/create-view.js +12 -3
  100. package/dist/src/planner/building/create-view.js.map +1 -1
  101. package/dist/src/planner/building/ddl.d.ts.map +1 -1
  102. package/dist/src/planner/building/ddl.js +6 -2
  103. package/dist/src/planner/building/ddl.js.map +1 -1
  104. package/dist/src/planner/building/delete.d.ts.map +1 -1
  105. package/dist/src/planner/building/delete.js +23 -10
  106. package/dist/src/planner/building/delete.js.map +1 -1
  107. package/dist/src/planner/building/dml-target.d.ts.map +1 -1
  108. package/dist/src/planner/building/dml-target.js +4 -0
  109. package/dist/src/planner/building/dml-target.js.map +1 -1
  110. package/dist/src/planner/building/drop-assertion.d.ts.map +1 -1
  111. package/dist/src/planner/building/drop-assertion.js +3 -1
  112. package/dist/src/planner/building/drop-assertion.js.map +1 -1
  113. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  114. package/dist/src/planner/building/foreign-key-builder.js +7 -5
  115. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  116. package/dist/src/planner/building/function-call.d.ts +35 -0
  117. package/dist/src/planner/building/function-call.d.ts.map +1 -1
  118. package/dist/src/planner/building/function-call.js +53 -40
  119. package/dist/src/planner/building/function-call.js.map +1 -1
  120. package/dist/src/planner/building/insert.d.ts.map +1 -1
  121. package/dist/src/planner/building/insert.js +185 -48
  122. package/dist/src/planner/building/insert.js.map +1 -1
  123. package/dist/src/planner/building/materialized-view.d.ts.map +1 -1
  124. package/dist/src/planner/building/materialized-view.js +3 -1
  125. package/dist/src/planner/building/materialized-view.js.map +1 -1
  126. package/dist/src/planner/building/schema-authored-context.d.ts +69 -0
  127. package/dist/src/planner/building/schema-authored-context.d.ts.map +1 -0
  128. package/dist/src/planner/building/schema-authored-context.js +75 -0
  129. package/dist/src/planner/building/schema-authored-context.js.map +1 -0
  130. package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
  131. package/dist/src/planner/building/schema-resolution.js +7 -4
  132. package/dist/src/planner/building/schema-resolution.js.map +1 -1
  133. package/dist/src/planner/building/select-aggregates.d.ts +187 -2
  134. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  135. package/dist/src/planner/building/select-aggregates.js +414 -81
  136. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  137. package/dist/src/planner/building/select-compound.js +2 -2
  138. package/dist/src/planner/building/select-compound.js.map +1 -1
  139. package/dist/src/planner/building/select-context.d.ts +91 -0
  140. package/dist/src/planner/building/select-context.d.ts.map +1 -1
  141. package/dist/src/planner/building/select-context.js +113 -0
  142. package/dist/src/planner/building/select-context.js.map +1 -1
  143. package/dist/src/planner/building/select-modifiers.d.ts +10 -3
  144. package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
  145. package/dist/src/planner/building/select-modifiers.js +29 -8
  146. package/dist/src/planner/building/select-modifiers.js.map +1 -1
  147. package/dist/src/planner/building/select-ordinal.d.ts +64 -19
  148. package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
  149. package/dist/src/planner/building/select-ordinal.js +79 -30
  150. package/dist/src/planner/building/select-ordinal.js.map +1 -1
  151. package/dist/src/planner/building/select-projections.d.ts +1 -1
  152. package/dist/src/planner/building/select-projections.d.ts.map +1 -1
  153. package/dist/src/planner/building/select-projections.js +18 -11
  154. package/dist/src/planner/building/select-projections.js.map +1 -1
  155. package/dist/src/planner/building/select-window.d.ts +13 -3
  156. package/dist/src/planner/building/select-window.d.ts.map +1 -1
  157. package/dist/src/planner/building/select-window.js +142 -37
  158. package/dist/src/planner/building/select-window.js.map +1 -1
  159. package/dist/src/planner/building/select.d.ts.map +1 -1
  160. package/dist/src/planner/building/select.js +129 -59
  161. package/dist/src/planner/building/select.js.map +1 -1
  162. package/dist/src/planner/building/update.d.ts.map +1 -1
  163. package/dist/src/planner/building/update.js +27 -13
  164. package/dist/src/planner/building/update.js.map +1 -1
  165. package/dist/src/planner/building/view-mutation-builder.d.ts +1 -1
  166. package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -1
  167. package/dist/src/planner/building/view-mutation-builder.js +102 -8
  168. package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
  169. package/dist/src/planner/building/with.d.ts.map +1 -1
  170. package/dist/src/planner/building/with.js +34 -4
  171. package/dist/src/planner/building/with.js.map +1 -1
  172. package/dist/src/planner/cache/correlation-detector.d.ts +15 -0
  173. package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -1
  174. package/dist/src/planner/cache/correlation-detector.js +26 -0
  175. package/dist/src/planner/cache/correlation-detector.js.map +1 -1
  176. package/dist/src/planner/cache/materialization-advisory.d.ts +7 -0
  177. package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
  178. package/dist/src/planner/cache/materialization-advisory.js +12 -3
  179. package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
  180. package/dist/src/planner/framework/characteristics.d.ts +9 -0
  181. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  182. package/dist/src/planner/framework/characteristics.js.map +1 -1
  183. package/dist/src/planner/framework/pass.d.ts +2 -0
  184. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  185. package/dist/src/planner/framework/pass.js +15 -0
  186. package/dist/src/planner/framework/pass.js.map +1 -1
  187. package/dist/src/planner/mutation/backward-body.d.ts.map +1 -1
  188. package/dist/src/planner/mutation/backward-body.js +4 -1
  189. package/dist/src/planner/mutation/backward-body.js.map +1 -1
  190. package/dist/src/planner/mutation/body-context.d.ts +23 -0
  191. package/dist/src/planner/mutation/body-context.d.ts.map +1 -0
  192. package/dist/src/planner/mutation/body-context.js +26 -0
  193. package/dist/src/planner/mutation/body-context.js.map +1 -0
  194. package/dist/src/planner/mutation/cte-flatten.js +15 -2
  195. package/dist/src/planner/mutation/cte-flatten.js.map +1 -1
  196. package/dist/src/planner/mutation/decomposition.d.ts +8 -0
  197. package/dist/src/planner/mutation/decomposition.d.ts.map +1 -1
  198. package/dist/src/planner/mutation/decomposition.js +8 -3
  199. package/dist/src/planner/mutation/decomposition.js.map +1 -1
  200. package/dist/src/planner/mutation/lens-enforcement.js +1 -1
  201. package/dist/src/planner/mutation/multi-source.d.ts +7 -0
  202. package/dist/src/planner/mutation/multi-source.d.ts.map +1 -1
  203. package/dist/src/planner/mutation/multi-source.js +5 -0
  204. package/dist/src/planner/mutation/multi-source.js.map +1 -1
  205. package/dist/src/planner/mutation/mutation-diagnostic.d.ts +1 -1
  206. package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -1
  207. package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -1
  208. package/dist/src/planner/mutation/scope-transform.d.ts +32 -0
  209. package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -1
  210. package/dist/src/planner/mutation/scope-transform.js +181 -33
  211. package/dist/src/planner/mutation/scope-transform.js.map +1 -1
  212. package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
  213. package/dist/src/planner/mutation/set-op.js +66 -16
  214. package/dist/src/planner/mutation/set-op.js.map +1 -1
  215. package/dist/src/planner/mutation/single-source.d.ts.map +1 -1
  216. package/dist/src/planner/mutation/single-source.js +100 -24
  217. package/dist/src/planner/mutation/single-source.js.map +1 -1
  218. package/dist/src/planner/nodes/add-constraint-node.d.ts +15 -1
  219. package/dist/src/planner/nodes/add-constraint-node.d.ts.map +1 -1
  220. package/dist/src/planner/nodes/add-constraint-node.js +10 -1
  221. package/dist/src/planner/nodes/add-constraint-node.js.map +1 -1
  222. package/dist/src/planner/nodes/aggregate-node.d.ts +14 -5
  223. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  224. package/dist/src/planner/nodes/aggregate-node.js +28 -21
  225. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  226. package/dist/src/planner/nodes/alter-table-node.d.ts +27 -2
  227. package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
  228. package/dist/src/planner/nodes/alter-table-node.js +49 -2
  229. package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
  230. package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
  231. package/dist/src/planner/nodes/constraint-check-node.js +17 -19
  232. package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
  233. package/dist/src/planner/nodes/create-assertion-node.d.ts +2 -1
  234. package/dist/src/planner/nodes/create-assertion-node.d.ts.map +1 -1
  235. package/dist/src/planner/nodes/create-assertion-node.js +5 -2
  236. package/dist/src/planner/nodes/create-assertion-node.js.map +1 -1
  237. package/dist/src/planner/nodes/cte-node.d.ts +19 -9
  238. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  239. package/dist/src/planner/nodes/cte-node.js +25 -9
  240. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  241. package/dist/src/planner/nodes/delete-node.d.ts +20 -2
  242. package/dist/src/planner/nodes/delete-node.d.ts.map +1 -1
  243. package/dist/src/planner/nodes/delete-node.js +11 -2
  244. package/dist/src/planner/nodes/delete-node.js.map +1 -1
  245. package/dist/src/planner/nodes/dml-executor-node.d.ts +58 -1
  246. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  247. package/dist/src/planner/nodes/dml-executor-node.js +107 -15
  248. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  249. package/dist/src/planner/nodes/drop-assertion-node.d.ts +2 -1
  250. package/dist/src/planner/nodes/drop-assertion-node.d.ts.map +1 -1
  251. package/dist/src/planner/nodes/drop-assertion-node.js +5 -2
  252. package/dist/src/planner/nodes/drop-assertion-node.js.map +1 -1
  253. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  254. package/dist/src/planner/nodes/filter.js +12 -6
  255. package/dist/src/planner/nodes/filter.js.map +1 -1
  256. package/dist/src/planner/nodes/hash-aggregate.d.ts +0 -5
  257. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  258. package/dist/src/planner/nodes/hash-aggregate.js +17 -20
  259. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  260. package/dist/src/planner/nodes/insert-node.d.ts +19 -2
  261. package/dist/src/planner/nodes/insert-node.d.ts.map +1 -1
  262. package/dist/src/planner/nodes/insert-node.js +10 -2
  263. package/dist/src/planner/nodes/insert-node.js.map +1 -1
  264. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts +42 -10
  265. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts.map +1 -1
  266. package/dist/src/planner/nodes/key-set-semi-join-node.js +85 -16
  267. package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -1
  268. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +5 -0
  269. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
  270. package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
  271. package/dist/src/planner/nodes/plan-node.d.ts +5 -0
  272. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  273. package/dist/src/planner/nodes/plan-node.js +12 -0
  274. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  275. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  276. package/dist/src/planner/nodes/project-node.js +16 -35
  277. package/dist/src/planner/nodes/project-node.js.map +1 -1
  278. package/dist/src/planner/nodes/retrieve-node.d.ts +16 -2
  279. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  280. package/dist/src/planner/nodes/retrieve-node.js +8 -1
  281. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  282. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  283. package/dist/src/planner/nodes/returning-node.js +13 -32
  284. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  285. package/dist/src/planner/nodes/stream-aggregate.d.ts +0 -5
  286. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  287. package/dist/src/planner/nodes/stream-aggregate.js +18 -24
  288. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  289. package/dist/src/planner/nodes/table-access-nodes.d.ts +89 -1
  290. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  291. package/dist/src/planner/nodes/table-access-nodes.js +64 -2
  292. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  293. package/dist/src/planner/nodes/update-node.d.ts +19 -2
  294. package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
  295. package/dist/src/planner/nodes/update-node.js +10 -2
  296. package/dist/src/planner/nodes/update-node.js.map +1 -1
  297. package/dist/src/planner/optimizer.d.ts +18 -0
  298. package/dist/src/planner/optimizer.d.ts.map +1 -1
  299. package/dist/src/planner/optimizer.js +59 -10
  300. package/dist/src/planner/optimizer.js.map +1 -1
  301. package/dist/src/planner/planning-context.d.ts +24 -0
  302. package/dist/src/planner/planning-context.d.ts.map +1 -1
  303. package/dist/src/planner/planning-context.js.map +1 -1
  304. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts +78 -20
  305. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -1
  306. package/dist/src/planner/rules/access/rule-key-set-seek.js +297 -71
  307. package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -1
  308. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
  309. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +2 -2
  310. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
  311. package/dist/src/planner/rules/access/rule-select-access-path.d.ts +11 -1
  312. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  313. package/dist/src/planner/rules/access/rule-select-access-path.js +46 -2
  314. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  315. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +7 -4
  316. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
  317. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +39 -5
  318. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
  319. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
  320. package/dist/src/planner/rules/cache/rule-cte-optimization.js +6 -2
  321. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
  322. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +10 -3
  323. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  324. package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -1
  325. package/dist/src/planner/rules/join/index-nested-loop.js +13 -7
  326. package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -1
  327. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts +4 -0
  328. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
  329. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +50 -15
  330. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
  331. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +6 -0
  332. package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
  333. package/dist/src/planner/rules/join/rule-join-elimination.js +25 -9
  334. package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
  335. package/dist/src/planner/rules/join/rule-join-key-inference.d.ts +7 -0
  336. package/dist/src/planner/rules/join/rule-join-key-inference.d.ts.map +1 -1
  337. package/dist/src/planner/rules/join/rule-join-key-inference.js +23 -11
  338. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +1 -1
  339. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +2 -2
  340. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  341. package/dist/src/planner/rules/join/rule-join-physical-selection.js +46 -16
  342. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  343. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +2 -0
  344. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
  345. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +14 -0
  346. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
  347. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts +2 -2
  348. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
  349. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +19 -22
  350. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
  351. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +33 -19
  352. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
  353. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +37 -18
  354. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -1
  355. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts +6 -3
  356. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts.map +1 -1
  357. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js +6 -3
  358. package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js.map +1 -1
  359. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
  360. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +11 -21
  361. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
  362. package/dist/src/planner/rules/shared/access-leaf.d.ts +16 -3
  363. package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -1
  364. package/dist/src/planner/rules/shared/access-leaf.js +21 -5
  365. package/dist/src/planner/rules/shared/access-leaf.js.map +1 -1
  366. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
  367. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
  368. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +1 -1
  369. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
  370. package/dist/src/planner/stored-body-context.d.ts +57 -0
  371. package/dist/src/planner/stored-body-context.d.ts.map +1 -0
  372. package/dist/src/planner/stored-body-context.js +64 -0
  373. package/dist/src/planner/stored-body-context.js.map +1 -0
  374. package/dist/src/planner/util/ind-utils.d.ts +28 -20
  375. package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
  376. package/dist/src/planner/util/ind-utils.js +36 -27
  377. package/dist/src/planner/util/ind-utils.js.map +1 -1
  378. package/dist/src/planner/util/key-utils.d.ts +19 -4
  379. package/dist/src/planner/util/key-utils.d.ts.map +1 -1
  380. package/dist/src/planner/util/key-utils.js +23 -7
  381. package/dist/src/planner/util/key-utils.js.map +1 -1
  382. package/dist/src/planner/util/output-names.d.ts +12 -0
  383. package/dist/src/planner/util/output-names.d.ts.map +1 -0
  384. package/dist/src/planner/util/output-names.js +20 -0
  385. package/dist/src/planner/util/output-names.js.map +1 -0
  386. package/dist/src/planner/util/row-estimates.d.ts +11 -0
  387. package/dist/src/planner/util/row-estimates.d.ts.map +1 -1
  388. package/dist/src/planner/util/row-estimates.js +28 -0
  389. package/dist/src/planner/util/row-estimates.js.map +1 -1
  390. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  391. package/dist/src/runtime/deferred-constraint-queue.js +3 -2
  392. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  393. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  394. package/dist/src/runtime/emit/add-constraint.js +22 -6
  395. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  396. package/dist/src/runtime/emit/alter-schema-event.d.ts +59 -4
  397. package/dist/src/runtime/emit/alter-schema-event.d.ts.map +1 -1
  398. package/dist/src/runtime/emit/alter-schema-event.js +63 -4
  399. package/dist/src/runtime/emit/alter-schema-event.js.map +1 -1
  400. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  401. package/dist/src/runtime/emit/alter-table.js +212 -92
  402. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  403. package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
  404. package/dist/src/runtime/emit/analyze.js +15 -4
  405. package/dist/src/runtime/emit/analyze.js.map +1 -1
  406. package/dist/src/runtime/emit/assertion-drop-guard.d.ts +37 -0
  407. package/dist/src/runtime/emit/assertion-drop-guard.d.ts.map +1 -0
  408. package/dist/src/runtime/emit/assertion-drop-guard.js +59 -0
  409. package/dist/src/runtime/emit/assertion-drop-guard.js.map +1 -0
  410. package/dist/src/runtime/emit/assertion-rename-helpers.d.ts +33 -0
  411. package/dist/src/runtime/emit/assertion-rename-helpers.d.ts.map +1 -0
  412. package/dist/src/runtime/emit/assertion-rename-helpers.js +124 -0
  413. package/dist/src/runtime/emit/assertion-rename-helpers.js.map +1 -0
  414. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  415. package/dist/src/runtime/emit/constraint-check.js +10 -227
  416. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  417. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  418. package/dist/src/runtime/emit/create-assertion.js +31 -14
  419. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  420. package/dist/src/runtime/emit/cte.d.ts.map +1 -1
  421. package/dist/src/runtime/emit/cte.js +11 -6
  422. package/dist/src/runtime/emit/cte.js.map +1 -1
  423. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  424. package/dist/src/runtime/emit/dml-executor.js +169 -1
  425. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  426. package/dist/src/runtime/emit/drop-assertion.js +8 -8
  427. package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
  428. package/dist/src/runtime/emit/drop-column-guards.d.ts +151 -0
  429. package/dist/src/runtime/emit/drop-column-guards.d.ts.map +1 -0
  430. package/dist/src/runtime/emit/drop-column-guards.js +230 -0
  431. package/dist/src/runtime/emit/drop-column-guards.js.map +1 -0
  432. package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
  433. package/dist/src/runtime/emit/drop-table.js +6 -0
  434. package/dist/src/runtime/emit/drop-table.js.map +1 -1
  435. package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
  436. package/dist/src/runtime/emit/drop-view.js +4 -0
  437. package/dist/src/runtime/emit/drop-view.js.map +1 -1
  438. package/dist/src/runtime/emit/key-set-semi-join.d.ts.map +1 -1
  439. package/dist/src/runtime/emit/key-set-semi-join.js +5 -3
  440. package/dist/src/runtime/emit/key-set-semi-join.js.map +1 -1
  441. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +4 -4
  442. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  443. package/dist/src/runtime/emit/materialized-view-helpers.js +34 -22
  444. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  445. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  446. package/dist/src/runtime/emit/materialized-view.js +7 -2
  447. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  448. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  449. package/dist/src/runtime/emit/recursive-cte.js +4 -5
  450. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  451. package/dist/src/runtime/emit/remote-query.d.ts.map +1 -1
  452. package/dist/src/runtime/emit/remote-query.js +8 -3
  453. package/dist/src/runtime/emit/remote-query.js.map +1 -1
  454. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  455. package/dist/src/runtime/emit/scan.js +4 -1
  456. package/dist/src/runtime/emit/scan.js.map +1 -1
  457. package/dist/src/runtime/emit/schema-declarative.js +2 -2
  458. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  459. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  460. package/dist/src/runtime/emit/update.js +18 -6
  461. package/dist/src/runtime/emit/update.js.map +1 -1
  462. package/dist/src/runtime/parallel-driver.d.ts +4 -3
  463. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  464. package/dist/src/runtime/parallel-driver.js +8 -3
  465. package/dist/src/runtime/parallel-driver.js.map +1 -1
  466. package/dist/src/runtime/row-constraints.d.ts +85 -0
  467. package/dist/src/runtime/row-constraints.d.ts.map +1 -0
  468. package/dist/src/runtime/row-constraints.js +239 -0
  469. package/dist/src/runtime/row-constraints.js.map +1 -0
  470. package/dist/src/runtime/types.d.ts +18 -11
  471. package/dist/src/runtime/types.d.ts.map +1 -1
  472. package/dist/src/runtime/types.js.map +1 -1
  473. package/dist/src/runtime/utils.d.ts.map +1 -1
  474. package/dist/src/runtime/utils.js +11 -0
  475. package/dist/src/runtime/utils.js.map +1 -1
  476. package/dist/src/schema/assertion.d.ts +14 -1
  477. package/dist/src/schema/assertion.d.ts.map +1 -1
  478. package/dist/src/schema/assertion.js +14 -1
  479. package/dist/src/schema/assertion.js.map +1 -1
  480. package/dist/src/schema/catalog-persistability.js +19 -3
  481. package/dist/src/schema/catalog-persistability.js.map +1 -1
  482. package/dist/src/schema/catalog.d.ts +6 -0
  483. package/dist/src/schema/catalog.d.ts.map +1 -1
  484. package/dist/src/schema/catalog.js +26 -36
  485. package/dist/src/schema/catalog.js.map +1 -1
  486. package/dist/src/schema/column-source-resolver.d.ts +18 -0
  487. package/dist/src/schema/column-source-resolver.d.ts.map +1 -0
  488. package/dist/src/schema/column-source-resolver.js +22 -0
  489. package/dist/src/schema/column-source-resolver.js.map +1 -0
  490. package/dist/src/schema/constraint-builder.d.ts.map +1 -1
  491. package/dist/src/schema/constraint-builder.js +7 -1
  492. package/dist/src/schema/constraint-builder.js.map +1 -1
  493. package/dist/src/schema/ddl-generator.js +8 -0
  494. package/dist/src/schema/ddl-generator.js.map +1 -1
  495. package/dist/src/schema/lens-compiler.d.ts.map +1 -1
  496. package/dist/src/schema/lens-compiler.js +203 -51
  497. package/dist/src/schema/lens-compiler.js.map +1 -1
  498. package/dist/src/schema/lens-prover.d.ts +2 -3
  499. package/dist/src/schema/lens-prover.d.ts.map +1 -1
  500. package/dist/src/schema/lens-prover.js +19 -11
  501. package/dist/src/schema/lens-prover.js.map +1 -1
  502. package/dist/src/schema/manager.d.ts +30 -12
  503. package/dist/src/schema/manager.d.ts.map +1 -1
  504. package/dist/src/schema/manager.js +49 -17
  505. package/dist/src/schema/manager.js.map +1 -1
  506. package/dist/src/schema/rename-rewriter.d.ts +142 -0
  507. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  508. package/dist/src/schema/rename-rewriter.js +254 -9
  509. package/dist/src/schema/rename-rewriter.js.map +1 -1
  510. package/dist/src/schema/reserved-tags.d.ts +1 -1
  511. package/dist/src/schema/reserved-tags.d.ts.map +1 -1
  512. package/dist/src/schema/reserved-tags.js +4 -3
  513. package/dist/src/schema/reserved-tags.js.map +1 -1
  514. package/dist/src/schema/schema-differ.d.ts +16 -0
  515. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  516. package/dist/src/schema/schema-differ.js +122 -11
  517. package/dist/src/schema/schema-differ.js.map +1 -1
  518. package/dist/src/schema/view.d.ts +11 -0
  519. package/dist/src/schema/view.d.ts.map +1 -1
  520. package/dist/src/schema/view.js +12 -0
  521. package/dist/src/schema/view.js.map +1 -1
  522. package/dist/src/types/builtin-types.d.ts +38 -0
  523. package/dist/src/types/builtin-types.d.ts.map +1 -1
  524. package/dist/src/types/builtin-types.js +77 -26
  525. package/dist/src/types/builtin-types.js.map +1 -1
  526. package/dist/src/types/index.d.ts +1 -1
  527. package/dist/src/types/index.d.ts.map +1 -1
  528. package/dist/src/types/index.js +1 -1
  529. package/dist/src/types/index.js.map +1 -1
  530. package/dist/src/util/abort-signal.d.ts +25 -0
  531. package/dist/src/util/abort-signal.d.ts.map +1 -0
  532. package/dist/src/util/abort-signal.js +40 -0
  533. package/dist/src/util/abort-signal.js.map +1 -0
  534. package/dist/src/util/{working-table-iterable.d.ts → array-row-iterable.d.ts} +6 -6
  535. package/dist/src/util/array-row-iterable.d.ts.map +1 -0
  536. package/dist/src/util/{working-table-iterable.js → array-row-iterable.js} +6 -6
  537. package/dist/src/util/array-row-iterable.js.map +1 -0
  538. package/dist/src/vtab/concurrency.d.ts +15 -0
  539. package/dist/src/vtab/concurrency.d.ts.map +1 -1
  540. package/dist/src/vtab/concurrency.js +17 -0
  541. package/dist/src/vtab/concurrency.js.map +1 -1
  542. package/dist/src/vtab/events.d.ts +3 -0
  543. package/dist/src/vtab/events.d.ts.map +1 -1
  544. package/dist/src/vtab/events.js.map +1 -1
  545. package/dist/src/vtab/manifest.d.ts +15 -0
  546. package/dist/src/vtab/manifest.d.ts.map +1 -1
  547. package/dist/src/vtab/memory/layer/base.d.ts +10 -0
  548. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  549. package/dist/src/vtab/memory/layer/base.js +10 -0
  550. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  551. package/dist/src/vtab/memory/layer/interface.d.ts +24 -0
  552. package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
  553. package/dist/src/vtab/memory/layer/manager.d.ts +21 -3
  554. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  555. package/dist/src/vtab/memory/layer/manager.js +107 -157
  556. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  557. package/dist/src/vtab/memory/layer/transaction.d.ts +11 -0
  558. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  559. package/dist/src/vtab/memory/layer/transaction.js +19 -0
  560. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  561. package/dist/src/vtab/memory/module.d.ts +57 -1
  562. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  563. package/dist/src/vtab/memory/module.js +103 -2
  564. package/dist/src/vtab/memory/module.js.map +1 -1
  565. package/dist/src/vtab/memory/table.d.ts +12 -1
  566. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  567. package/dist/src/vtab/memory/table.js +12 -1
  568. package/dist/src/vtab/memory/table.js.map +1 -1
  569. package/dist/src/vtab/module.d.ts +59 -2
  570. package/dist/src/vtab/module.d.ts.map +1 -1
  571. package/dist/src/vtab/table.d.ts +8 -1
  572. package/dist/src/vtab/table.d.ts.map +1 -1
  573. package/dist/src/vtab/table.js.map +1 -1
  574. package/dist/src/vtab/test-support/commit-stall.d.ts +53 -0
  575. package/dist/src/vtab/test-support/commit-stall.d.ts.map +1 -0
  576. package/dist/src/vtab/test-support/commit-stall.js +73 -0
  577. package/dist/src/vtab/test-support/commit-stall.js.map +1 -0
  578. package/dist/src/vtab/test-support/committed-read-conformance.d.ts +96 -0
  579. package/dist/src/vtab/test-support/committed-read-conformance.d.ts.map +1 -0
  580. package/dist/src/vtab/test-support/committed-read-conformance.js +364 -0
  581. package/dist/src/vtab/test-support/committed-read-conformance.js.map +1 -0
  582. package/package.json +3 -3
  583. package/dist/src/util/working-table-iterable.d.ts.map +0 -1
  584. package/dist/src/util/working-table-iterable.js.map +0 -1
@@ -0,0 +1,124 @@
1
+ import { buildAssertionViolationSql } from '../../schema/assertion.js';
2
+ import { renameTableInAst, renameColumnInAst } from '../../schema/rename-rewriter.js';
3
+ import { createLogger } from '../../common/logger.js';
4
+ const log = createLogger('runtime:emit:assertion-rename');
5
+ // NOTE: both passes walk only the renamed object's OWN schema — the same scope the
6
+ // plain-view and materialized-view loops in `alter-table.ts` use. An assertion's
7
+ // stored body resolves unqualified table names against the assertion's own schema
8
+ // first (`Database._homeSchemaPath`), so an unqualified `t` inside an assertion
9
+ // living in some other schema does not necessarily mean the renamed table, and
10
+ // rewriting it would be a false positive. The converse gap — an assertion that names
11
+ // the renamed table with an explicit `<other schema>.<table>` qualifier is NOT
12
+ // rewritten — is real, and shared verbatim with views and materialized views; it is
13
+ // tracked by `bug-rename-not-propagated-across-schemas`, which fixes all three object
14
+ // kinds with one "explicitly-qualified references only" rewriter mode.
15
+ /**
16
+ * Rewrites every assertion in `schema` after a source TABLE RENAME — the assertion
17
+ * mirror of the plain-view loop in `propagateTableRenameInSchema` (same same-schema
18
+ * gate at the caller, same in-place `renameTableInAst` walk over a body that owns its
19
+ * own FROM scopes).
20
+ *
21
+ * On a changed body the derived `violationSql` is regenerated from the rewritten
22
+ * expression (the commit-time evaluator re-parses that text, so it is the field that
23
+ * actually carries the rename into enforcement), `dependentTables` is string-mapped
24
+ * old base → new base, and the record is re-registered through
25
+ * {@link Database.schemaManager} so `assertion_modified` fires — which is what
26
+ * invalidates the optimizer's assertion-hoist cache.
27
+ */
28
+ export function propagateTableRenameToAssertions(db, schema, renamedSchemaName, oldName, newName) {
29
+ const schemaLower = renamedSchemaName.toLowerCase();
30
+ const oldBase = `${schemaLower}.${oldName.toLowerCase()}`;
31
+ const newBase = `${schemaLower}.${newName.toLowerCase()}`;
32
+ for (const assertion of Array.from(schema.getAllAssertions())) {
33
+ const check = assertion.checkExpression;
34
+ if (!check)
35
+ continue;
36
+ if (!renameTableInAst(check, oldName, newName, renamedSchemaName))
37
+ continue;
38
+ reregisterRewrittenAssertion(db, schema, assertion, check, remapDependentTables(assertion.dependentTables, oldBase, newBase));
39
+ }
40
+ }
41
+ /**
42
+ * Rewrites every assertion in `schema` after a source COLUMN RENAME — the assertion
43
+ * mirror of the plain-view loop in `propagateColumnRenameInSchema`.
44
+ *
45
+ * `renameColumnInAst` (unseeded) is the correct entry point, not
46
+ * `renameColumnInCheckExpression`: an assertion body is a full expression that owns
47
+ * its own FROM scopes (`not exists (select … from t …)`), so there is no implicit
48
+ * binding to an owning table to seed. `resolveColumnInSource` keeps that scope walk
49
+ * catalog-aware for the same reason the view-body loop threads it — an unqualified
50
+ * ref binding to a like-named column on an inner subquery's own FROM must not be
51
+ * false-captured.
52
+ *
53
+ * `dependentTables` is keyed by base table, so a column rename leaves it untouched.
54
+ */
55
+ export function propagateColumnRenameToAssertions(db, schema, renamedSchemaName, tableName, oldCol, newCol, resolveColumnInSource) {
56
+ for (const assertion of Array.from(schema.getAllAssertions())) {
57
+ const check = assertion.checkExpression;
58
+ if (!check)
59
+ continue;
60
+ if (!renameColumnInAst(check, tableName, oldCol, newCol, renamedSchemaName, resolveColumnInSource))
61
+ continue;
62
+ reregisterRewrittenAssertion(db, schema, assertion, check, assertion.dependentTables);
63
+ }
64
+ }
65
+ /**
66
+ * Swaps the rewritten assertion into the catalog. The CHECK expression AST was
67
+ * already mutated in place by the caller's walker, mirroring how the view loop
68
+ * treats `selectAst` — `oldObject` on the emitted event therefore shares the
69
+ * rewritten AST (only the derived fields differ), which no consumer reads.
70
+ *
71
+ * Registration goes through `SchemaManager.addAssertion` rather than
72
+ * `Schema.addAssertion` because only the former fires `assertion_modified`.
73
+ *
74
+ * NOTE: an assertion with no `checkExpression` (the schema field is optional, for
75
+ * assertions reconstructed from persisted `violationSql` alone) is skipped by both
76
+ * callers — there is no AST to walk. Unreachable today: nothing persists assertions
77
+ * (`CatalogObjectKind` is `'view' | 'materializedView' | 'table'` and no store module
78
+ * has an assertion catalog path), so every live assertion came from
79
+ * `CREATE ASSERTION` and carries its expression. If an assertion-reconstruction path
80
+ * is ever added, this pass needs a re-parse arm or those assertions break on rename.
81
+ *
82
+ * NOTE: no per-assertion try/catch, deliberately — the only plausible throw is
83
+ * `buildAssertionViolationSql` on an AST that already stringified at create time, and
84
+ * catching would leave `checkExpression` rewritten while `violationSql` still named
85
+ * the old table, which is silently the very breakage this pass exists to prevent. The
86
+ * cost is that a throw here leaves earlier assertions in the loop already rewritten
87
+ * against a rename the statement then reports as failed (the view loop above has the
88
+ * same exposure). If that ever becomes reachable, the fix is a dry-run probe before
89
+ * any mutation, like `assertRenameDependentsPersistable`'s — not a catch.
90
+ */
91
+ function reregisterRewrittenAssertion(db, schema, assertion, check, dependentTables) {
92
+ const updated = {
93
+ ...assertion,
94
+ violationSql: buildAssertionViolationSql(check),
95
+ dependentTables,
96
+ };
97
+ db.schemaManager.addAssertion(schema.name, updated);
98
+ log('Rewrote assertion %s.%s for rename: %s', schema.name, assertion.name, updated.violationSql);
99
+ }
100
+ /**
101
+ * Re-keys the informational `dependentTables` entries naming the renamed base.
102
+ * Purely cosmetic (it feeds `assertion_info().dependent_tables`) — the commit-time
103
+ * evaluator recomputes its own base set when it compiles the body. Deliberately a
104
+ * string map rather than a re-plan of the rewritten body: this runs mid-DDL, where a
105
+ * planning failure would be a new failure mode for no enforcement benefit.
106
+ */
107
+ function remapDependentTables(deps, oldBase, newBase) {
108
+ if (!deps)
109
+ return deps;
110
+ let changed = false;
111
+ const mapped = deps.map(dep => {
112
+ if (dep.base !== oldBase)
113
+ return dep;
114
+ changed = true;
115
+ // relationKey is `<base>#<nodeId>`; a base never contains '#'.
116
+ const hash = dep.relationKey.indexOf('#');
117
+ return {
118
+ relationKey: hash >= 0 ? `${newBase}${dep.relationKey.slice(hash)}` : newBase,
119
+ base: newBase,
120
+ };
121
+ });
122
+ return changed ? mapped : deps;
123
+ }
124
+ //# sourceMappingURL=assertion-rename-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertion-rename-helpers.js","sourceRoot":"","sources":["../../../../src/runtime/emit/assertion-rename-helpers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constraint-check.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/constraint-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAuC,MAAM,8CAA8C,CAAC;AAC7H,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAG/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAsF9D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAiKhG"}
1
+ {"version":3,"file":"constraint-check.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/constraint-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAsB,MAAM,8CAA8C,CAAC;AAC5G,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAG/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAW9D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CA0JhG"}
@@ -1,50 +1,8 @@
1
1
  import { asRun } from '../types.js';
2
2
  import { emitPlanNode, emitCallFromPlan } from '../emitters.js';
3
- import { ConstraintError, FailConflictError, RollbackConflictError } from '../../common/errors.js';
4
- import { RowOpFlag } from '../../schema/table.js';
5
- import { ConflictResolution } from '../../common/constants.js';
6
3
  import { withAsyncRowContext, createRowSlot } from '../context-helpers.js';
7
- import { expressionToString } from '../../emit/ast-stringify.js';
8
4
  import { composeCombinedDescriptor } from '../descriptor-helpers.js';
9
- import { sqlValueIdentical, isTruthy } from '../../util/comparison.js';
10
- import { validateAndParse } from '../../types/validation.js';
11
- /**
12
- * The violation message for a failing constraint — single source of truth for the
13
- * immediate (row-time) and deferred (commit-time) paths, which must report a row
14
- * identically no matter when the check happened to run.
15
- *
16
- * Engine-level CHECK and synthesized FK existence checks share the
17
- * "CHECK constraint failed" prefix for backward compatibility with existing
18
- * assertions; downstream consumers identify FK by name. The expression text is
19
- * appended as a hint only when short enough to stay readable.
20
- */
21
- function constraintViolationMessage(metadata) {
22
- const exprHint = metadata.constraintExpr.length <= 60 ? ` (${metadata.constraintExpr})` : '';
23
- return `CHECK constraint failed: ${metadata.constraintName}${exprHint}`;
24
- }
25
- /**
26
- * Resolve the effective conflict action for a single failure.
27
- *
28
- * Precedence: statement-level OR clause > per-constraint default > ABORT.
29
- */
30
- function pickAction(stmtOR, constraintDefault) {
31
- return stmtOR ?? constraintDefault ?? ConflictResolution.ABORT;
32
- }
33
- /**
34
- * Throws an appropriate ConstraintError subclass based on the effective
35
- * conflict action. ABORT/REPLACE/IGNORE callers must not reach this — IGNORE
36
- * is handled by skipping the row, REPLACE by substitution / passthrough, and
37
- * ABORT throws a plain ConstraintError.
38
- */
39
- function throwForAction(action, message) {
40
- if (action === ConflictResolution.FAIL) {
41
- throw new FailConflictError(message);
42
- }
43
- if (action === ConflictResolution.ROLLBACK) {
44
- throw new RollbackConflictError(message);
45
- }
46
- throw new ConstraintError(message);
47
- }
5
+ import { buildConstraintMetadata, evaluateRowConstraints, } from '../row-constraints.js';
48
6
  export function emitConstraintCheck(plan, ctx) {
49
7
  // Get the table schema to access constraints
50
8
  const tableSchema = plan.table.tableSchema;
@@ -60,6 +18,11 @@ export function emitConstraintCheck(plan, ctx) {
60
18
  if (mutationContextValues && contextAttributes) {
61
19
  for (const attr of contextAttributes) {
62
20
  const valueExpr = mutationContextValues.get(attr.name);
21
+ // NOTE: a declared context var with no supplied value is silently skipped here,
22
+ // which would shift every later value out of alignment with contextDescriptor.
23
+ // Unreachable today — emitDmlExecutor throws "Missing mutation context value for
24
+ // '<name>'" at prepare time first — but that's an external invariant, not one
25
+ // this loop enforces itself.
63
26
  if (valueExpr) {
64
27
  contextEvaluatorInstructions.push(emitCallFromPlan(valueExpr, ctx));
65
28
  }
@@ -75,24 +38,8 @@ export function emitConstraintCheck(plan, ctx) {
75
38
  const notNullDefaultCoercions = notNullDefaultPlans.map(d => d.defaultNode.getType().logicalType !== tableSchema.columns[d.columnIndex].logicalType
76
39
  ? tableSchema.columns[d.columnIndex]
77
40
  : undefined);
78
- const constraintMetadata = plan.constraintChecks.map((check, idx) => {
79
- const evaluatorInstruction = checkEvaluators[idx];
80
- const constraintName = check.constraint.name ?? generateDefaultConstraintName(tableSchema, check.constraint);
81
- const constraintExpr = expressionToString(check.constraint.expr);
82
- return {
83
- schema: check.constraint,
84
- flatRowDescriptor: plan.flatRowDescriptor,
85
- evaluator: evaluatorInstruction.run,
86
- constraintName,
87
- constraintExpr,
88
- shouldDefer: Boolean(check.deferrable || check.initiallyDeferred || check.needsDeferred),
89
- baseTable: `${tableSchema.schemaName}.${tableSchema.name}`,
90
- contextRow: undefined,
91
- contextDescriptor,
92
- kind: check.kind ?? 'check',
93
- referencedColumnIndices: check.referencedColumnIndices,
94
- };
95
- });
41
+ const constraintMetadata = buildConstraintMetadata(plan.constraintChecks, tableSchema, flatRowDescriptor, contextDescriptor, checkEvaluators.map(instruction => instruction.run));
42
+ const scope = { operation: plan.operation, hasNewSection: Boolean(plan.newRowDescriptor) };
96
43
  async function* run(rctx, inputRows, ...evaluatorFunctions) {
97
44
  if (!inputRows) {
98
45
  return;
@@ -113,9 +60,6 @@ export function emitConstraintCheck(plan, ctx) {
113
60
  const value = (raw instanceof Promise ? await raw : raw);
114
61
  contextRow.push(value);
115
62
  }
116
- constraintMetadata.forEach(meta => {
117
- meta.contextRow = contextRow;
118
- });
119
63
  contextSlot = createRowSlot(rctx, contextDescriptor);
120
64
  contextSlot.set(contextRow);
121
65
  }
@@ -134,14 +78,14 @@ export function emitConstraintCheck(plan, ctx) {
134
78
  for await (const inputRow of inputRows) {
135
79
  let flatRow = inputRow;
136
80
  // The row expressions see through `combinedDescriptor`. The getter is
137
- // called lazily per lookup, so checkConstraints can swap it mid-row:
81
+ // called lazily per lookup, so evaluateRowConstraints can swap it mid-row:
138
82
  // after a REPLACE NOT NULL DEFAULT substitution, CHECK / FK must read
139
83
  // the row AS SUBSTITUTED. The row arrives already converted to declared
140
84
  // column types (the DML emitters convert the NEW section up front), so
141
85
  // no separate coerced view exists — the substituted row IS what flows
142
86
  // downstream.
143
87
  let visibleRow = flatRow;
144
- const evaluation = await withAsyncRowContext(rctx, combinedDescriptor, () => contextRow ? [...contextRow, ...visibleRow] : visibleRow, () => checkConstraints(rctx, plan, tableSchema, flatRow, constraintMetadata, constraintEvalFunctions, stmtOR, defaultsRuntime, row => { visibleRow = row; }));
88
+ const evaluation = await withAsyncRowContext(rctx, combinedDescriptor, () => contextRow ? [...contextRow, ...visibleRow] : visibleRow, () => evaluateRowConstraints(rctx, scope, tableSchema, flatRow, constraintMetadata, constraintEvalFunctions, stmtOR, defaultsRuntime, contextRow, row => { visibleRow = row; }));
145
89
  if (evaluation.skip)
146
90
  continue;
147
91
  if (evaluation.replacedRow) {
@@ -164,165 +108,4 @@ export function emitConstraintCheck(plan, ctx) {
164
108
  note: `constraintCheck(${plan.operation}, ${contextEvaluatorInstructions.length} ctx, ${plan.constraintChecks.length} checks, ${notNullDefaultInstructions.length} defaults)`
165
109
  };
166
110
  }
167
- async function checkConstraints(rctx, plan, tableSchema, row, constraintMetadata, evaluatorFunctions, stmtOR, notNullDefaults, showRow) {
168
- // The row arrives with its NEW section already converted to declared column
169
- // types (the DML emitters convert up front, driven by static types), so both
170
- // passes read declared-form values. NOT NULL runs first: under OR REPLACE it
171
- // may substitute a column's DEFAULT (converting that one injected value —
172
- // see NotNullDefaultRuntime.coerceColumn), and CHECK / FK then read the row
173
- // AS FINALLY SUBSTITUTED, which is also what flows on downstream.
174
- const nnResult = await checkNotNullConstraints(rctx, plan, tableSchema, row, stmtOR, notNullDefaults);
175
- if (nnResult.skip)
176
- return { skip: true };
177
- if (nnResult.replacedRow)
178
- row = nnResult.replacedRow;
179
- showRow(row);
180
- // CHECK constraints (and synthetic FK existence checks built as RowConstraintSchema).
181
- const ckResult = await checkCheckConstraints(rctx, plan, tableSchema, constraintMetadata, evaluatorFunctions, stmtOR, row);
182
- if (ckResult.skip)
183
- return { skip: true };
184
- return { skip: false, replacedRow: nnResult.replacedRow };
185
- }
186
- async function checkNotNullConstraints(rctx, plan, tableSchema, flatRow, stmtOR, notNullDefaults) {
187
- if (plan.operation === RowOpFlag.DELETE) {
188
- return { skip: false };
189
- }
190
- if (!plan.newRowDescriptor) {
191
- return { skip: false };
192
- }
193
- const numCols = tableSchema.columns.length;
194
- let mutableRow;
195
- // NOT NULL attribution: report the FIRST NOT-NULL column (in declaration
196
- // order) whose effective NEW value is NULL, naming that column itself —
197
- // independent of which column any DEFAULT references. A NULL sibling named by
198
- // another column's `new.<col>` DEFAULT violates its OWN NOT NULL and is
199
- // reported on its own merits, never threaded into the defaulted column's
200
- // message. (See test/logic/03.4-defaults.sqllogic, the NOT NULL default section.)
201
- for (let i = 0; i < numCols; i++) {
202
- const column = tableSchema.columns[i];
203
- if (!column.notNull)
204
- continue;
205
- const newValueIndex = numCols + i; // NEW section: n..2n-1
206
- const value = (mutableRow ?? flatRow)[newValueIndex];
207
- if (value !== null && value !== undefined)
208
- continue;
209
- const action = pickAction(stmtOR, column.defaultConflict);
210
- const message = `NOT NULL constraint failed: ${tableSchema.name}.${column.name}`;
211
- if (action === ConflictResolution.IGNORE) {
212
- return { skip: true };
213
- }
214
- if (action === ConflictResolution.REPLACE) {
215
- // Try to substitute the column's DEFAULT.
216
- const defaultEntry = notNullDefaults.find(d => d.columnIndex === i);
217
- if (!defaultEntry) {
218
- // No DEFAULT available — REPLACE cannot recover.
219
- throw new ConstraintError(message);
220
- }
221
- let defaultValue = await defaultEntry.evaluator(rctx);
222
- if (defaultValue === null || defaultValue === undefined) {
223
- // DEFAULT itself is NULL — substitution does not satisfy NOT NULL.
224
- throw new ConstraintError(message);
225
- }
226
- if (defaultEntry.coerceColumn) {
227
- // The substituted value is injected AFTER the emitters' conversion
228
- // pass, so convert it here by the same static-type rule. Conversion
229
- // itself can produce NULL (JSON's text 'null'), which still violates
230
- // NOT NULL.
231
- defaultValue = validateAndParse(defaultValue, defaultEntry.coerceColumn.logicalType, defaultEntry.coerceColumn.name);
232
- if (defaultValue === null) {
233
- throw new ConstraintError(message);
234
- }
235
- }
236
- if (!mutableRow)
237
- mutableRow = [...flatRow];
238
- mutableRow[newValueIndex] = defaultValue;
239
- continue;
240
- }
241
- // ABORT / FAIL / ROLLBACK
242
- throwForAction(action, message);
243
- }
244
- return { skip: false, replacedRow: mutableRow };
245
- }
246
- async function checkCheckConstraints(rctx, plan, tableSchema, constraintMetadata, evaluatorFunctions, stmtOR, flatRow) {
247
- for (let i = 0; i < constraintMetadata.length; i++) {
248
- const metadata = constraintMetadata[i];
249
- const evaluator = evaluatorFunctions[i] ?? metadata.evaluator;
250
- // Trust-the-origin apply path: the synthesized parent-side FK RESTRICT (NOT EXISTS)
251
- // check is the plan-time dual of the runtime RESTRICT pre-checks. While applying
252
- // external row changes the receiver skips it (the origin already enforced RESTRICT at
253
- // its own commit) - otherwise a cascade DML re-entering this executor under the apply
254
- // flag would throw here, wedging the sync stream. Only 'fk-parent' checks are gated;
255
- // user CHECKs and child-side FK existence checks are untouched.
256
- // (See database-external-changes.ts and runtime/foreign-key-actions.ts for the runtime dual.)
257
- if (metadata.kind === 'fk-parent' && rctx.db._isFkRestrictSuppressed())
258
- continue;
259
- // Parent-side FK UPDATE: skip the NOT EXISTS subquery when none of the
260
- // referenced parent columns actually changed.
261
- if (plan.operation === RowOpFlag.UPDATE &&
262
- metadata.kind === 'fk-parent' &&
263
- metadata.referencedColumnIndices) {
264
- // Both halves are in stored (declared) form: OLD comes from the scan, NEW
265
- // was converted by the DML emitter — so plain identity is the right test.
266
- const numCols = tableSchema.columns.length;
267
- let anyChanged = false;
268
- for (const colIdx of metadata.referencedColumnIndices) {
269
- const oldVal = flatRow[colIdx]; // OLD section: 0..n-1
270
- const newVal = flatRow[numCols + colIdx]; // NEW section: n..2n-1
271
- if (!sqlValueIdentical(oldVal, newVal)) {
272
- anyChanged = true;
273
- break;
274
- }
275
- }
276
- if (!anyChanged)
277
- continue;
278
- }
279
- // Resolve effective action up front; non-default actions (IGNORE/REPLACE/FAIL/ROLLBACK)
280
- // must be applied at row time, so we cannot let those defer to commit.
281
- const effectiveAction = pickAction(stmtOR, metadata.schema.defaultConflict);
282
- const mustEvaluateNow = effectiveAction !== ConflictResolution.ABORT;
283
- if (metadata.shouldDefer && !mustEvaluateNow) {
284
- const activeConnectionId = rctx.activeConnection?.connectionId;
285
- // Wrap so the deferred queue's evaluation at COMMIT throws the same
286
- // attributed message as the immediate path below, instead of the queue's
287
- // generic name-only fallback — matches the pattern derived-row-validator.ts
288
- // already uses for maintained tables. The wrapper always throws before
289
- // returning falsy, so the queue's own generic message never fires here.
290
- // Only ABORT reaches this branch (see mustEvaluateNow), so throwing is the
291
- // whole of the deferred failure contract — no IGNORE/REPLACE leg needed.
292
- const message = constraintViolationMessage(metadata);
293
- const deferredEvaluator = async (dctx) => {
294
- const rawResult = evaluator(dctx);
295
- const result = (rawResult instanceof Promise ? await rawResult : rawResult);
296
- if (result !== null && !isTruthy(result)) {
297
- throw new ConstraintError(message);
298
- }
299
- return result;
300
- };
301
- rctx.db._queueDeferredConstraintRow(metadata.baseTable, metadata.constraintName, flatRow, metadata.flatRowDescriptor, deferredEvaluator, activeConnectionId, metadata.contextRow, metadata.contextDescriptor);
302
- continue;
303
- }
304
- // Resolve without a per-row microtask hop (see runtime/async-util.ts).
305
- const rawResult = evaluator(rctx);
306
- const result = (rawResult instanceof Promise ? await rawResult : rawResult);
307
- // CHECK passes if truthy or NULL; fails otherwise (shared isTruthy semantics).
308
- if (result !== null && !isTruthy(result)) {
309
- const baseMessage = constraintViolationMessage(metadata);
310
- if (effectiveAction === ConflictResolution.IGNORE) {
311
- return { skip: true };
312
- }
313
- // REPLACE does NOT mask CHECK / FK violations — fall through to abort.
314
- // (SQLite's OR REPLACE only relaxes UNIQUE/PK and NOT-NULL; CHECK still aborts.)
315
- if (effectiveAction === ConflictResolution.REPLACE) {
316
- throw new ConstraintError(baseMessage);
317
- }
318
- throwForAction(effectiveAction, baseMessage);
319
- }
320
- }
321
- return { skip: false };
322
- }
323
- function generateDefaultConstraintName(tableSchema, constraint) {
324
- // Find the index of this constraint in the original array to get the correct constraint number
325
- const originalIndex = tableSchema.checkConstraints.findIndex((c) => c === constraint);
326
- return `_check_${originalIndex >= 0 ? originalIndex : 'unknown'}`;
327
- }
328
111
  //# sourceMappingURL=constraint-check.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constraint-check.js","sourceRoot":"","sources":["../../../../src/runtime/emit/constraint-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constraint-check.js","sourceRoot":"","sources":["../../../../src/runtime/emit/constraint-check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-assertion.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/create-assertion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAS9D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,GAAG,WAAW,CAgFjG"}
1
+ {"version":3,"file":"create-assertion.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/create-assertion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAU9D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,GAAG,WAAW,CAoGjG"}
@@ -2,19 +2,19 @@ import { asRun } from '../types.js';
2
2
  import { QuereusError } from '../../common/errors.js';
3
3
  import { StatusCode } from '../../common/types.js';
4
4
  import { createLogger } from '../../common/logger.js';
5
- import { expressionToString } from '../../emit/ast-stringify.js';
5
+ import { buildAssertionViolationSql } from '../../schema/assertion.js';
6
6
  const log = createLogger('runtime:emit:create-assertion');
7
+ const warnLog = log.extend('warn');
7
8
  export function emitCreateAssertion(plan, _ctx) {
8
9
  async function run(rctx) {
9
10
  // Ensure we're in a transaction before DDL (lazy/JIT transaction start)
10
11
  await rctx.db._ensureTransaction();
11
- // Convert the CHECK expression to SQL text for storage
12
- // The CHECK expression should be negated to become a violation query:
13
- // check (condition) becomes "select 1 where not (condition)"
12
+ // Convert the CHECK expression to SQL text for storage. Shared with the
13
+ // `ALTER TABLE … RENAME` propagation, which regenerates this same text from
14
+ // the rewritten expression (see `buildAssertionViolationSql`).
14
15
  let violationSql;
15
16
  try {
16
- const exprSql = expressionToString(plan.checkExpression);
17
- violationSql = `select 1 where not (${exprSql})`;
17
+ violationSql = buildAssertionViolationSql(plan.checkExpression);
18
18
  }
19
19
  catch (e) {
20
20
  throw new QuereusError(`Cannot create assertion '${plan.name}': failed to convert check expression to SQL`, StatusCode.ERROR, e instanceof Error ? e : undefined);
@@ -22,15 +22,25 @@ export function emitCreateAssertion(plan, _ctx) {
22
22
  // Create the assertion schema object
23
23
  const assertionSchema = {
24
24
  name: plan.name,
25
+ schemaName: plan.schemaName,
25
26
  violationSql,
26
27
  deferrable: true, // Auto-deferred for multi-table constraints
27
28
  initiallyDeferred: true,
28
29
  dependentTables: [],
29
30
  checkExpression: plan.checkExpression,
30
31
  };
31
- // Discover dependent base tables (best-effort; conservative if any failure)
32
+ // Discover dependent base tables (best-effort; conservative if any failure).
33
+ // Plan under the assertion's home-schema path so unqualified table names in
34
+ // the body resolve against the assertion's own schema first, and under
35
+ // hoist suppression so another assertion's hoisted premises can't fold a
36
+ // base reference out of the plan — the commit-time evaluator derives its
37
+ // own base set the same way (see AssertionEvaluator.getOrCompilePlan).
38
+ // The builder (`planAssertionBody`) already proved this same violation SQL
39
+ // builds against the live catalog, so a failure below is a discovery-only
40
+ // failure (optimizer-stage, or the plan-shape walk) — never "the body names
41
+ // something that doesn't exist".
32
42
  try {
33
- const planNode = rctx.db.getPlan(violationSql);
43
+ const planNode = rctx.db.schemaManager.withSuppressedAssertionHoist(() => rctx.db.getPlan(violationSql, rctx.db._homeSchemaPath(plan.schemaName)));
34
44
  const deps = new Map();
35
45
  (function collect(node) {
36
46
  const candidate = node;
@@ -49,24 +59,31 @@ export function emitCreateAssertion(plan, _ctx) {
49
59
  log('Assertion %s dependencies discovered: %o', plan.name, assertionSchema.dependentTables);
50
60
  }
51
61
  catch (depErr) {
52
- log('Dependency discovery failed for assertion %s: %O', plan.name, depErr);
62
+ // Enforcement does NOT read `dependentTables` — the evaluator recomputes
63
+ // its base set when it compiles the body. A failure here only blanks the
64
+ // `dependent_tables` column of `assertion_info()`, and usually means the
65
+ // body will fail to plan at commit time too. Warn rather than swallow.
66
+ warnLog('Dependency discovery failed for assertion %s.%s; assertion_info().dependent_tables will be empty: %O', plan.schemaName, plan.name, depErr);
53
67
  }
54
- // Add to schema
68
+ // Add to the assertion's home schema
55
69
  const schemaManager = rctx.db.schemaManager;
56
- const schema = schemaManager.getMainSchema(); // Store in main schema for now
57
- // Check for existing assertion
70
+ const schema = schemaManager.getSchema(plan.schemaName);
71
+ if (!schema) {
72
+ throw new QuereusError(`Schema not found: ${plan.schemaName}`, StatusCode.ERROR);
73
+ }
74
+ // Check for existing assertion (names are unique per schema)
58
75
  const existing = schema.getAssertion(plan.name);
59
76
  if (existing) {
60
77
  throw new QuereusError(`Assertion ${plan.name} already exists`, StatusCode.CONSTRAINT);
61
78
  }
62
79
  schemaManager.addAssertion(schema.name, assertionSchema);
63
- log('Created assertion %s with violationSql: %s', plan.name, violationSql);
80
+ log('Created assertion %s.%s with violationSql: %s', plan.schemaName, plan.name, violationSql);
64
81
  return null;
65
82
  }
66
83
  return {
67
84
  params: [],
68
85
  run: asRun(run),
69
- note: `createAssertion(${plan.name})`
86
+ note: `createAssertion(${plan.schemaName}.${plan.name})`
70
87
  };
71
88
  }
72
89
  //# sourceMappingURL=create-assertion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-assertion.js","sourceRoot":"","sources":["../../../../src/runtime/emit/create-assertion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-assertion.js","sourceRoot":"","sources":["../../../../src/runtime/emit/create-assertion.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cte.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/cte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CA0DxE"}
1
+ {"version":3,"file":"cte.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/cte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CA+DxE"}
@@ -12,12 +12,17 @@ export function emitCTE(plan, ctx) {
12
12
  return;
13
13
  }
14
14
  // Shared materialization: every reference to this CTE shares one
15
- // per-execution buffer keyed by the CTENode's plan id (all references
16
- // point at the same CTENode instance, so each reference's separately
17
- // emitted closure agrees on the key). Each reference emits its own copy
18
- // of the source subtree; only the buffer owner ever iterates one.
15
+ // per-execution buffer keyed by the CTE's stable `tableDescriptor`.
16
+ // NOT the plan id: references usually point at one CTENode instance, but
17
+ // the optimizer may split it into several (the constant-folding pass
18
+ // rebuilds a two-parent node once per parent path), and each copy would
19
+ // then own a private buffer — re-driving the source, which for a
20
+ // data-modifying body means writing twice. The descriptor is threaded
21
+ // through every rebuild, so all copies agree on the key. Mirrors
22
+ // emitRecursiveCTE. Each reference emits its own copy of the source
23
+ // subtree; only the buffer owner ever iterates one.
19
24
  const buffers = (rctx.cteMaterializations ??= new Map());
20
- let bufferPromise = buffers.get(plan.id);
25
+ let bufferPromise = buffers.get(plan.tableDescriptor);
21
26
  if (!bufferPromise) {
22
27
  // First reference to run owns the single source drive. Create and
23
28
  // store the promise SYNCHRONOUSLY (before any await) so a second
@@ -40,7 +45,7 @@ export function emitCTE(plan, ctx) {
40
45
  // would otherwise surface an unhandled rejection. References that are
41
46
  // still awaiting observe the rejection through their own await.
42
47
  bufferPromise.catch(() => { });
43
- buffers.set(plan.id, bufferPromise);
48
+ buffers.set(plan.tableDescriptor, bufferPromise);
44
49
  }
45
50
  const rows = await bufferPromise;
46
51
  for (const row of rows) {
@@ -1 +1 @@
1
- {"version":3,"file":"cte.js","sourceRoot":"","sources":["../../../../src/runtime/emit/cte.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,UAAU,OAAO,CAAC,IAAa,EAAE,GAAoB;IAC1D,4BAA4B;IAC5B,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAExD,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,IAAoB,EAAE,WAA+B;QACxE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,oEAAoE;YACpE,kEAAkE;YAClE,cAAc;YACd,KAAK,CAAC,CAAC,WAAW,CAAC;YACnB,OAAO;QACR,CAAC;QAED,iEAAiE;QACjE,sEAAsE;QACtE,qEAAqE;QACrE,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,mBAAmB,KAAK,IAAI,GAAG,EAA0B,CAAC,CAAC;QACjF,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,kEAAkE;YAClE,iEAAiE;YACjE,+DAA+D;YAC/D,oDAAoD;YACpD,uEAAuE;YACvE,qEAAqE;YACrE,oEAAoE;YACpE,mEAAmE;YACnE,8DAA8D;YAC9D,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC3B,MAAM,IAAI,GAAU,EAAE,CAAC;gBACvB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAQ,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,EAAE,CAAC;YACL,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,gEAAgE;YAChE,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,GAAyC,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,mEAAmE;YACnE,kDAAkD;YAClD,MAAM,CAAC,GAAG,GAAG,CAAQ,CAAC;QACvB,CAAC;IACF,CAAC;IAED,OAAO;QACN,MAAM,EAAE,CAAC,gBAAgB,CAAC;QAC1B,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;QACf,IAAI,EAAE,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG;KACvE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cte.js","sourceRoot":"","sources":["../../../../src/runtime/emit/cte.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,UAAU,OAAO,CAAC,IAAa,EAAE,GAAoB;IAC1D,4BAA4B;IAC5B,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAExD,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,IAAoB,EAAE,WAA+B;QACxE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,oEAAoE;YACpE,kEAAkE;YAClE,cAAc;YACd,KAAK,CAAC,CAAC,WAAW,CAAC;YACnB,OAAO;QACR,CAAC;QAED,iEAAiE;QACjE,oEAAoE;QACpE,yEAAyE;QACzE,qEAAqE;QACrE,wEAAwE;QACxE,iEAAiE;QACjE,sEAAsE;QACtE,iEAAiE;QACjE,oEAAoE;QACpE,oDAAoD;QACpD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,mBAAmB,KAAK,IAAI,GAAG,EAA+C,CAAC,CAAC;QACtG,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,kEAAkE;YAClE,iEAAiE;YACjE,+DAA+D;YAC/D,oDAAoD;YACpD,uEAAuE;YACvE,qEAAqE;YACrE,oEAAoE;YACpE,mEAAmE;YACnE,8DAA8D;YAC9D,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC3B,MAAM,IAAI,GAAU,EAAE,CAAC;gBACvB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAQ,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,EAAE,CAAC;YACL,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,gEAAgE;YAChE,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,GAAyC,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,mEAAmE;YACnE,kDAAkD;YAClD,MAAM,CAAC,GAAG,GAAG,CAAQ,CAAC;QACvB,CAAC;IACF,CAAC;IAED,OAAO;QACN,MAAM,EAAE,CAAC,gBAAgB,CAAC;QAC1B,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;QACf,IAAI,EAAE,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG;KACvE,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dml-executor.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/dml-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAA+C,MAAM,aAAa,CAAC;AAO5F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAoRzD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAQ7E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAkhCxF"}
1
+ {"version":3,"file":"dml-executor.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/dml-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAA+C,MAAM,aAAa,CAAC;AAO5F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AA+SzD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAQ7E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAqvCxF"}