@quereus/quereus 4.20.1 → 4.20.3

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 (380) hide show
  1. package/README.md +2 -0
  2. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  3. package/dist/src/schema/schema-differ.js +17 -69
  4. package/dist/src/schema/schema-differ.js.map +1 -1
  5. package/package.json +7 -4
  6. package/test/README.md +173 -0
  7. package/test/logic/01-basic.sqllogic +39 -0
  8. package/test/logic/01.1-select-projection-extras.sqllogic +130 -0
  9. package/test/logic/01.2-strings.sqllogic +43 -0
  10. package/test/logic/01.5-insert-select.sqllogic +237 -0
  11. package/test/logic/01.6-update-extras.sqllogic +118 -0
  12. package/test/logic/01.7-update-from.sqllogic +67 -0
  13. package/test/logic/01.8-delete-extras.sqllogic +122 -0
  14. package/test/logic/01.8.1-delete-range-cow.sqllogic +115 -0
  15. package/test/logic/01.9-query-expr-dml-gates.sqllogic +32 -0
  16. package/test/logic/01.9-query-expr-dml.sqllogic +171 -0
  17. package/test/logic/01.9-query-expr-values.sqllogic +111 -0
  18. package/test/logic/01.9.1-limit-over-dml-subquery.sqllogic +119 -0
  19. package/test/logic/02-filters.sqllogic +54 -0
  20. package/test/logic/02-smoke.sqllogic +62 -0
  21. package/test/logic/02.1-bind-parameters.sqllogic +223 -0
  22. package/test/logic/03-expressions.sqllogic +190 -0
  23. package/test/logic/03.1-quoted-identifiers.sqllogic +55 -0
  24. package/test/logic/03.4-defaults.sqllogic +554 -0
  25. package/test/logic/03.4.1-default-edge-cases.sqllogic +99 -0
  26. package/test/logic/03.5-tvf.sqllogic +61 -0
  27. package/test/logic/03.6-type-system.sqllogic +544 -0
  28. package/test/logic/03.6.1-numeric-text-comparison-coercion.sqllogic +244 -0
  29. package/test/logic/03.6.2-value-to-text.sqllogic +224 -0
  30. package/test/logic/03.7-bigint-mixed-arithmetic.sqllogic +65 -0
  31. package/test/logic/03.8-not-precedence.sqllogic +255 -0
  32. package/test/logic/03.9-is-bool-predicate.sqllogic +150 -0
  33. package/test/logic/03.9.1-is-bool-predicate-partial-index.sqllogic +34 -0
  34. package/test/logic/04-order-by.sqllogic +38 -0
  35. package/test/logic/04-transactions.sqllogic +239 -0
  36. package/test/logic/04a-savepoint-lazy-attach.sqllogic +122 -0
  37. package/test/logic/05-vtab_memory.sqllogic +50 -0
  38. package/test/logic/05.0.1-vtab-memory-unique-index-collation.sqllogic +34 -0
  39. package/test/logic/05.1-composite-pk-range-scan.sqllogic +147 -0
  40. package/test/logic/05.1.1-secondary-index-range-scan.sqllogic +56 -0
  41. package/test/logic/05.2-cast-seek-correctness.sqllogic +124 -0
  42. package/test/logic/06-builtin_functions.sqllogic +149 -0
  43. package/test/logic/06.1-string-functions.sqllogic +92 -0
  44. package/test/logic/06.1.3-like-glob-edges.sqllogic +53 -0
  45. package/test/logic/06.2-math-functions.sqllogic +82 -0
  46. package/test/logic/06.3-schema.sqllogic +48 -0
  47. package/test/logic/06.3.1-schema-all-schemas.sqllogic +39 -0
  48. package/test/logic/06.3.2-schema-foreign-keys.sqllogic +208 -0
  49. package/test/logic/06.3.3-introspection-tags.sqllogic +202 -0
  50. package/test/logic/06.3.3.1-introspection-tags-index.sqllogic +74 -0
  51. package/test/logic/06.3.4-view-info.sqllogic +378 -0
  52. package/test/logic/06.3.5-column-info.sqllogic +347 -0
  53. package/test/logic/06.3.6-schema-views.sqllogic +29 -0
  54. package/test/logic/06.4-schema-search-path.sqllogic +354 -0
  55. package/test/logic/06.4.1-schema-case-insensitive.sqllogic +83 -0
  56. package/test/logic/06.4.2-collation-extras.sqllogic +472 -0
  57. package/test/logic/06.4.2.1-collation-index-access-paths.sqllogic +140 -0
  58. package/test/logic/06.4.3-write-path-collation.sqllogic +99 -0
  59. package/test/logic/06.4.4-comparison-collation-precedence.sqllogic +342 -0
  60. package/test/logic/06.4.5-any-collate-declared-keys.sqllogic +92 -0
  61. package/test/logic/06.5-polymorphic-types.sqllogic +169 -0
  62. package/test/logic/06.5.1-conversion-functions.sqllogic +173 -0
  63. package/test/logic/06.5.2-scalar-minmax.sqllogic +16 -0
  64. package/test/logic/06.5.3-undeclared-return-type-comparison.sqllogic +244 -0
  65. package/test/logic/06.5.4-declared-return-type-builtins.sqllogic +288 -0
  66. package/test/logic/06.6-aggregate-extended.sqllogic +78 -0
  67. package/test/logic/06.7-json-extended.sqllogic +53 -0
  68. package/test/logic/06.8-json-path-operators.sqllogic +99 -0
  69. package/test/logic/06.9-json-canonical-key.sqllogic +65 -0
  70. package/test/logic/06.9.1-json-coerce-once.sqllogic +417 -0
  71. package/test/logic/06.9.1.1-json-coerce-once-index.sqllogic +39 -0
  72. package/test/logic/06.9.2-json-structural-equality.sqllogic +382 -0
  73. package/test/logic/06.9.2.1-json-structural-equality-index.sqllogic +76 -0
  74. package/test/logic/06.9.3-json-index-range-seek.sqllogic +205 -0
  75. package/test/logic/07-aggregates.sqllogic +193 -0
  76. package/test/logic/07.1-aggregate-filter-clause.sqllogic +12 -0
  77. package/test/logic/07.2-aggregate-order-by.sqllogic +11 -0
  78. package/test/logic/07.3-group-by-extras.sqllogic +602 -0
  79. package/test/logic/07.3.1-group-by-order-by-key.sqllogic +164 -0
  80. package/test/logic/07.3.2-grouped-select-list-shape.sqllogic +231 -0
  81. package/test/logic/07.4-group-by-filter-composite-pk.sqllogic +120 -0
  82. package/test/logic/07.5-sum-mixed-exact-and-float.sqllogic +151 -0
  83. package/test/logic/07.5-window.sqllogic +1941 -0
  84. package/test/logic/07.5.1-window-named.sqllogic +13 -0
  85. package/test/logic/07.5.2-window-nth-value.sqllogic +13 -0
  86. package/test/logic/07.6-subqueries.sqllogic +78 -0
  87. package/test/logic/07.6.1-subquery-extras.sqllogic +93 -0
  88. package/test/logic/07.7-and-or-short-circuit.sqllogic +58 -0
  89. package/test/logic/07.7-in-subquery-caching.sqllogic +174 -0
  90. package/test/logic/07.7-scalar-agg-decorrelation.sqllogic +197 -0
  91. package/test/logic/07.7.1-in-extras.sqllogic +158 -0
  92. package/test/logic/07.7.1-scalar-agg-decorrelation-filter.sqllogic +105 -0
  93. package/test/logic/07.7.2-scalar-agg-decorrelation-nested.sqllogic +115 -0
  94. package/test/logic/07.7.3-exists-in-select-decorrelation.sqllogic +107 -0
  95. package/test/logic/07.7.4-where-conjunct-ordering.sqllogic +121 -0
  96. package/test/logic/07.7.5-filter-lost-under-index-order.sqllogic +134 -0
  97. package/test/logic/07.7.6-correlated-predicate-scope.sqllogic +178 -0
  98. package/test/logic/07.7.7-join-source-scope-shadowing.sqllogic +137 -0
  99. package/test/logic/07.7.8-correlated-ref-to-computed-column.sqllogic +165 -0
  100. package/test/logic/07.7.9-conjunct-monotonicity.sqllogic +200 -0
  101. package/test/logic/07.8-correlated-subquery-edges.sqllogic +71 -0
  102. package/test/logic/07.8.1-correlated-in-decorrelation-gates.sqllogic +156 -0
  103. package/test/logic/07.9-in-value-list.sqllogic +154 -0
  104. package/test/logic/07.9.1-in-value-list-composite-index.sqllogic +38 -0
  105. package/test/logic/08-views.sqllogic +64 -0
  106. package/test/logic/08.1-semi-anti-join.sqllogic +191 -0
  107. package/test/logic/08.1-view-edge-cases.sqllogic +118 -0
  108. package/test/logic/08.1.1-uncorrelated-in-semijoin.sqllogic +251 -0
  109. package/test/logic/08.2-existence-flag-semijoin-recovery.sqllogic +197 -0
  110. package/test/logic/08.3-existence-flag-inner-recovery.sqllogic +102 -0
  111. package/test/logic/08.4-key-set-semi-join.sqllogic +447 -0
  112. package/test/logic/09-set_operations.sqllogic +244 -0
  113. package/test/logic/09.1-set-op-cross-collation.sqllogic +230 -0
  114. package/test/logic/10-distinct_datatypes.sqllogic +127 -0
  115. package/test/logic/10.1-ddl-lifecycle.sqllogic +203 -0
  116. package/test/logic/10.1.1-create-table-syntax-edges.sqllogic +47 -0
  117. package/test/logic/10.1.2-ddl-in-transaction.sqllogic +143 -0
  118. package/test/logic/10.1.2.1-add-constraint-in-transaction.sqllogic +59 -0
  119. package/test/logic/10.1.3-ddl-drop-in-transaction.sqllogic +187 -0
  120. package/test/logic/10.1.3.1-drop-constraint-in-transaction.sqllogic +45 -0
  121. package/test/logic/10.1.4-create-table-duplicate-constraint-names.sqllogic +149 -0
  122. package/test/logic/10.1.4-ddl-transaction-policy.sqllogic +314 -0
  123. package/test/logic/10.1.5-alter-add-constraint-minted-name-disambiguation.sqllogic +219 -0
  124. package/test/logic/10.1.5-create-index-lifecycle.sqllogic +72 -0
  125. package/test/logic/10.1.6-ddl-transaction-policy-index.sqllogic +143 -0
  126. package/test/logic/10.1.7-create-table-default-type-check.sqllogic +119 -0
  127. package/test/logic/10.1.8-alter-add-check-existing-rows.sqllogic +117 -0
  128. package/test/logic/10.2-column-features.sqllogic +365 -0
  129. package/test/logic/10.2.1-table-options-rejection.sqllogic +63 -0
  130. package/test/logic/10.2.2-default-collation-memory.sqllogic +30 -0
  131. package/test/logic/10.3-function-features.sqllogic +247 -0
  132. package/test/logic/10.4-schema-scale.sqllogic +168 -0
  133. package/test/logic/10.4.1-schema-scale-indexes.sqllogic +121 -0
  134. package/test/logic/10.5-indexes.sqllogic +164 -0
  135. package/test/logic/10.5.1-partial-indexes.sqllogic +526 -0
  136. package/test/logic/10.5.2-expression-indexes.sqllogic +34 -0
  137. package/test/logic/10.5.3-desc-index-ordering.sqllogic +130 -0
  138. package/test/logic/10.5.4-composite-pk-index-update-phantom.sqllogic +55 -0
  139. package/test/logic/10.5.5-index-name-uniqueness.sqllogic +76 -0
  140. package/test/logic/10.5.6-minmax-index-boundary.sqllogic +204 -0
  141. package/test/logic/10.5.7-implicit-unique-index-lifecycle.sqllogic +1216 -0
  142. package/test/logic/10.6-distinct-edge-cases.sqllogic +119 -0
  143. package/test/logic/100-predicate-normalization-edge-cases.sqllogic +238 -0
  144. package/test/logic/100.1-where-extras.sqllogic +163 -0
  145. package/test/logic/100.1.1-where-join-on-order-indexed.sqllogic +35 -0
  146. package/test/logic/101-builtin-mutation-kills.sqllogic +974 -0
  147. package/test/logic/101-transaction-edge-cases.sqllogic +395 -0
  148. package/test/logic/102-schema-catalog-edge-cases.sqllogic +252 -0
  149. package/test/logic/102-unique-constraints.sqllogic +145 -0
  150. package/test/logic/102.0.1-schema-catalog-indexed-table.sqllogic +32 -0
  151. package/test/logic/102.1-unique-edge-cases.sqllogic +111 -0
  152. package/test/logic/102.1.1-unique-index-creation-edge-cases.sqllogic +75 -0
  153. package/test/logic/102.2-unique-collation.sqllogic +181 -0
  154. package/test/logic/102.2.1-unique-collation-index-derived.sqllogic +305 -0
  155. package/test/logic/103-database-options-edge-cases.sqllogic +108 -0
  156. package/test/logic/103.1-pragma-boolean-values.sqllogic +126 -0
  157. package/test/logic/104-emit-mutation-kills.sqllogic +236 -0
  158. package/test/logic/105-vtab-memory-mutation-kills.sqllogic +754 -0
  159. package/test/logic/105.1-vtab-memory-index-mutation-kills.sqllogic +540 -0
  160. package/test/logic/106-constraint-extractor-mutation-kills.sqllogic +350 -0
  161. package/test/logic/107-temporal-arithmetic-mutation-kills.sqllogic +833 -0
  162. package/test/logic/108-cardinality-estimation.sqllogic +146 -0
  163. package/test/logic/108.1-analyze-name-resolution.sqllogic +102 -0
  164. package/test/logic/109-aggregate-physical-selection.sqllogic +103 -0
  165. package/test/logic/11-joins.sqllogic +86 -0
  166. package/test/logic/11.1-join-using.sqllogic +267 -0
  167. package/test/logic/11.2-comma-join.sqllogic +35 -0
  168. package/test/logic/11.3-index-nested-loop-join.sqllogic +305 -0
  169. package/test/logic/11.3-mismatched-collation-join.sqllogic +74 -0
  170. package/test/logic/11.4-hash-join-side-swap.sqllogic +118 -0
  171. package/test/logic/110-scan-emitter-mutation-kills.sqllogic +121 -0
  172. package/test/logic/110.1-scan-emitter-index-scan-kills.sqllogic +47 -0
  173. package/test/logic/12-empty-primary-key.sqllogic +124 -0
  174. package/test/logic/12-join_padding_order.sqllogic +58 -0
  175. package/test/logic/12.1-orderby-index-consumption.sqllogic +40 -0
  176. package/test/logic/13-cte.sqllogic +137 -0
  177. package/test/logic/13.1-cte-multiple-recursive.sqllogic +104 -0
  178. package/test/logic/13.10-cte-qualified-name.sqllogic +136 -0
  179. package/test/logic/13.11-unreferenced-dml-cte.sqllogic +414 -0
  180. package/test/logic/13.12-nested-dml-cte-rejected.sqllogic +280 -0
  181. package/test/logic/13.2-cte-bind-params.sqllogic +98 -0
  182. package/test/logic/13.3-cte-edge-cases.sqllogic +120 -0
  183. package/test/logic/13.4-cte-extras.sqllogic +98 -0
  184. package/test/logic/13.5-cte-join-order.sqllogic +166 -0
  185. package/test/logic/13.6-cte-dml-runs-once.sqllogic +318 -0
  186. package/test/logic/13.7-cte-sibling-visibility.sqllogic +227 -0
  187. package/test/logic/13.8-insert-with-clause-visibility.sqllogic +254 -0
  188. package/test/logic/13.9-schema-authored-cte-isolation.sqllogic +328 -0
  189. package/test/logic/13.9.1-schema-authored-schema-path-isolation.sqllogic +408 -0
  190. package/test/logic/14-utilities.sqllogic +168 -0
  191. package/test/logic/15-timespan.sqllogic +279 -0
  192. package/test/logic/15.1-semantic-ordering.sqllogic +960 -0
  193. package/test/logic/15.1.1-json-check-coercion.sqllogic +178 -0
  194. package/test/logic/15.1.2-semantic-ordering-index.sqllogic +41 -0
  195. package/test/logic/15.1.3-declared-form-write-contract.sqllogic +519 -0
  196. package/test/logic/16-epoch.sqllogic +187 -0
  197. package/test/logic/17-weekday-modifier.sqllogic +78 -0
  198. package/test/logic/18-json-string-escapes.sqllogic +86 -0
  199. package/test/logic/18-strftime-extended-formats.sqllogic +68 -0
  200. package/test/logic/20-empty-single-row.sqllogic +261 -0
  201. package/test/logic/21-null-edge-cases.sqllogic +227 -0
  202. package/test/logic/21.1-where-null-comparisons.sqllogic +151 -0
  203. package/test/logic/21.1.1-where-null-comparisons-secondary-index.sqllogic +35 -0
  204. package/test/logic/21.2-between-edges.sqllogic +157 -0
  205. package/test/logic/22-boundary-values.sqllogic +175 -0
  206. package/test/logic/23-self-joins-duplicates.sqllogic +74 -0
  207. package/test/logic/24-builtin-branches.sqllogic +611 -0
  208. package/test/logic/24.1-substr-extras.sqllogic +75 -0
  209. package/test/logic/24.2-random-extras.sqllogic +39 -0
  210. package/test/logic/25-aggregate-edge-cases.sqllogic +289 -0
  211. package/test/logic/25.1-nested-aggregates.sqllogic +74 -0
  212. package/test/logic/25.2-having-edge-cases.sqllogic +318 -0
  213. package/test/logic/25.3-aggregate-isnull-empty.sqllogic +16 -0
  214. package/test/logic/25.4-groupby-fd-constant-empty.sqllogic +55 -0
  215. package/test/logic/25.5-ungrouped-aggregate-column-free-select-item.sqllogic +196 -0
  216. package/test/logic/26-join-edge-cases.sqllogic +333 -0
  217. package/test/logic/26.1-left-join-isnull-on-notnull.sqllogic +26 -0
  218. package/test/logic/26.2-left-join-on-vs-where.sqllogic +67 -0
  219. package/test/logic/26.3-join-on-constants.sqllogic +61 -0
  220. package/test/logic/26.4-join-on-is-null-nullable.sqllogic +44 -0
  221. package/test/logic/27-window-edge-cases.sqllogic +206 -0
  222. package/test/logic/27.1-window-groups-frame.sqllogic +13 -0
  223. package/test/logic/27.2-window-exclude.sqllogic +13 -0
  224. package/test/logic/27.3-window-json-aggregation.sqllogic +66 -0
  225. package/test/logic/28-set-ops-sort-edge-cases.sqllogic +444 -0
  226. package/test/logic/28.1-compound-limit-offset.sqllogic +143 -0
  227. package/test/logic/28.2-orderby-expression-extras.sqllogic +698 -0
  228. package/test/logic/28.2-set-op-branch-types.sqllogic +217 -0
  229. package/test/logic/29-constraint-edge-cases.sqllogic +442 -0
  230. package/test/logic/29.1-column-level-conflict-clause.sqllogic +171 -0
  231. package/test/logic/29.2-table-level-pk-conflict-clause.sqllogic +113 -0
  232. package/test/logic/40-constraints.sqllogic +418 -0
  233. package/test/logic/40.1-pk-desc-direction.sqllogic +76 -0
  234. package/test/logic/40.2-check-extras.sqllogic +683 -0
  235. package/test/logic/41-alter-table.sqllogic +191 -0
  236. package/test/logic/41-fk-cascade-conflict-and-self-ref.sqllogic +263 -0
  237. package/test/logic/41-fk-cross-schema.sqllogic +155 -0
  238. package/test/logic/41-fk-extended-targets.sqllogic +173 -0
  239. package/test/logic/41-foreign-keys.sqllogic +1001 -0
  240. package/test/logic/41-generated-column-errors.sqllogic +225 -0
  241. package/test/logic/41-generated-column-extras.sqllogic +598 -0
  242. package/test/logic/41-generated-column-scope.sqllogic +329 -0
  243. package/test/logic/41-generated-columns.sqllogic +361 -0
  244. package/test/logic/41.1-alter-pk.sqllogic +230 -0
  245. package/test/logic/41.1-fk-collation-conflict.sqllogic +277 -0
  246. package/test/logic/41.10-alter-drop-column-foreign-key.sqllogic +274 -0
  247. package/test/logic/41.10.1-alter-drop-column-unique-index.sqllogic +169 -0
  248. package/test/logic/41.10.2-alter-drop-column-check-and-assertion.sqllogic +1616 -0
  249. package/test/logic/41.10.3-alter-drop-column-referencing-fk.sqllogic +292 -0
  250. package/test/logic/41.10.4-drop-object-expression-dependents.sqllogic +602 -0
  251. package/test/logic/41.11-deferred-fk-with-rename.sqllogic +232 -0
  252. package/test/logic/41.12-alter-default-coercion.sqllogic +200 -0
  253. package/test/logic/41.13-alter-add-column-generated-backfill.sqllogic +566 -0
  254. package/test/logic/41.14-alter-add-column-subquery-backfill.sqllogic +129 -0
  255. package/test/logic/41.15-alter-column-default-type-check.sqllogic +178 -0
  256. package/test/logic/41.16-fk-unenforceable.sqllogic +364 -0
  257. package/test/logic/41.2-alter-column.sqllogic +382 -0
  258. package/test/logic/41.2.1-alter-column-retype-deleted-row-memory.sqllogic +32 -0
  259. package/test/logic/41.2.2-alter-column-retype-index-rebuild.sqllogic +77 -0
  260. package/test/logic/41.2.3-alter-column-set-not-null-pk-backfill.sqllogic +310 -0
  261. package/test/logic/41.2.3.1-alter-column-set-not-null-pk-backfill-secondary-index.sqllogic +37 -0
  262. package/test/logic/41.3-alter-add-column-unique.sqllogic +184 -0
  263. package/test/logic/41.3-alter-rename-propagation.sqllogic +2352 -0
  264. package/test/logic/41.3.1-alter-rename-index-propagation.sqllogic +94 -0
  265. package/test/logic/41.4-alter-add-column-constraints.sqllogic +855 -0
  266. package/test/logic/41.5-alter-misc.sqllogic +48 -0
  267. package/test/logic/41.5-cross-schema-foreign-keys.sqllogic +253 -0
  268. package/test/logic/41.6-alter-drop-rename-constraint.sqllogic +354 -0
  269. package/test/logic/41.6.1-alter-drop-constraint-index-derived.sqllogic +22 -0
  270. package/test/logic/41.7-alter-column-collate.sqllogic +105 -0
  271. package/test/logic/41.7.1-alter-column-collate-unique.sqllogic +45 -0
  272. package/test/logic/41.7.2-alter-column-collate-unique-store.sqllogic +208 -0
  273. package/test/logic/41.7.2.1-alter-column-collate-unique-index-store.sqllogic +114 -0
  274. package/test/logic/41.7.3-alter-column-retype-unique.sqllogic +293 -0
  275. package/test/logic/41.7.3.1-alter-column-retype-staged-rows-memory.sqllogic +41 -0
  276. package/test/logic/41.7.3.2-alter-column-retype-unique-index.sqllogic +72 -0
  277. package/test/logic/41.7.4-alter-column-retype-semantic-memory.sqllogic +445 -0
  278. package/test/logic/41.7.4.1-alter-column-retype-semantic-index-memory.sqllogic +91 -0
  279. package/test/logic/41.7.5-alter-column-collate-pk-staged-delete-memory.sqllogic +106 -0
  280. package/test/logic/41.8-alter-add-constraint-unique-fk.sqllogic +275 -0
  281. package/test/logic/41.8-alter-savepoint-staged-rows.sqllogic +443 -0
  282. package/test/logic/41.8.1-alter-rename-savepoint-staged-rows.sqllogic +408 -0
  283. package/test/logic/41.9-alter-constraint-body-change.sqllogic +180 -0
  284. package/test/logic/41.9-fk-restrict-batched.sqllogic +290 -0
  285. package/test/logic/42-committed-snapshot.sqllogic +254 -0
  286. package/test/logic/42-returning.sqllogic +159 -0
  287. package/test/logic/42.1-returning-extras.sqllogic +232 -0
  288. package/test/logic/42.2-returning-stored-row.sqllogic +165 -0
  289. package/test/logic/43-default-nullability.sqllogic +131 -0
  290. package/test/logic/43-transition-constraints.sqllogic +341 -0
  291. package/test/logic/43.1-default-collation.sqllogic +140 -0
  292. package/test/logic/43.1-notnull-or-conflict.sqllogic +79 -0
  293. package/test/logic/43.2-deferred-check-new-on-delete.sqllogic +95 -0
  294. package/test/logic/43.3-nullable-primary-key.sqllogic +587 -0
  295. package/test/logic/44-determinism-validation.sqllogic +164 -0
  296. package/test/logic/44-orthogonality.sqllogic +146 -0
  297. package/test/logic/44.1-nondeterministic-schema.sqllogic +316 -0
  298. package/test/logic/45-udf-determinism.sqllogic +39 -0
  299. package/test/logic/46-mutation-context.sqllogic +595 -0
  300. package/test/logic/47-upsert.sqllogic +255 -0
  301. package/test/logic/47.1-upsert-conflict-targets.sqllogic +169 -0
  302. package/test/logic/47.2-replace-and-or-clauses.sqllogic +164 -0
  303. package/test/logic/47.2.1-pk-replace-secondary-unique.sqllogic +374 -0
  304. package/test/logic/47.3-engine-or-fail.sqllogic +122 -0
  305. package/test/logic/47.3-upsert-conflict-target-collation.sqllogic +139 -0
  306. package/test/logic/47.3.1-upsert-conflict-index-derived-collation.sqllogic +25 -0
  307. package/test/logic/47.4-upsert-conflict-target-affinity.sqllogic +59 -0
  308. package/test/logic/47.5-upsert-do-update-constraints.sqllogic +440 -0
  309. package/test/logic/47.6-upsert-do-update-decomposed.sqllogic +100 -0
  310. package/test/logic/49-reference-graph.sqllogic +84 -0
  311. package/test/logic/50-declarative-schema.sqllogic +2550 -0
  312. package/test/logic/50-metadata-tags.sqllogic +1033 -0
  313. package/test/logic/50.0.1-metadata-tags-index.sqllogic +141 -0
  314. package/test/logic/50.1-declare-schema-pk.sqllogic +150 -0
  315. package/test/logic/50.2-declare-schema-renames.sqllogic +949 -0
  316. package/test/logic/50.2.1-declare-schema-index-renames.sqllogic +210 -0
  317. package/test/logic/50.3-declare-schema-duplicate-names.sqllogic +280 -0
  318. package/test/logic/50.4-declare-schema-apply-restore.sqllogic +192 -0
  319. package/test/logic/51-lens-foundation.sqllogic +147 -0
  320. package/test/logic/51-materialized-views.sqllogic +376 -0
  321. package/test/logic/51.5-materialized-views-coarsened-key.sqllogic +198 -0
  322. package/test/logic/51.7-maintained-table-attach-detach.sqllogic +468 -0
  323. package/test/logic/51.8-maintained-table-declared-constraints.sqllogic +440 -0
  324. package/test/logic/51.85-maintained-table-parent-fk.sqllogic +103 -0
  325. package/test/logic/51.9-maintained-table-secondary-unique.sqllogic +237 -0
  326. package/test/logic/51.9.1-maintained-table-partial-unique.sqllogic +36 -0
  327. package/test/logic/52-lens-overrides.sqllogic +566 -0
  328. package/test/logic/53-materialized-views-rowtime.sqllogic +1601 -0
  329. package/test/logic/53-reserved-tags.sqllogic +252 -0
  330. package/test/logic/53.1-materialized-view-write-through.sqllogic +329 -0
  331. package/test/logic/53.2-materialized-view-rename-propagation.sqllogic +483 -0
  332. package/test/logic/53.3-materialized-view-constraint-only-ddl.sqllogic +409 -0
  333. package/test/logic/53.3.1-materialized-view-index-ddl-irrelevance.sqllogic +29 -0
  334. package/test/logic/53.4-materialized-view-structural-alter-restore.sqllogic +436 -0
  335. package/test/logic/54-covering-mv-enforcement.sqllogic +314 -0
  336. package/test/logic/54.1-covering-mv-partial-enforcement.sqllogic +34 -0
  337. package/test/logic/55-internal-eviction-reporting.sqllogic +89 -0
  338. package/test/logic/55-lens-prover.sqllogic +202 -0
  339. package/test/logic/55.1-eviction-restrict-fk.sqllogic +148 -0
  340. package/test/logic/55.5-lens-authored-inverse.sqllogic +1468 -0
  341. package/test/logic/80-grow-retrieve-pass.sqllogic +79 -0
  342. package/test/logic/81-quickpick.sqllogic +24 -0
  343. package/test/logic/82-bloom-join.sqllogic +185 -0
  344. package/test/logic/83-merge-join.sqllogic +280 -0
  345. package/test/logic/84-asof-scan.sqllogic +238 -0
  346. package/test/logic/84-key-cardinality.sqllogic +50 -0
  347. package/test/logic/85-relational-const-folding.sqllogic +51 -0
  348. package/test/logic/86-scalar-cse.sqllogic +42 -0
  349. package/test/logic/90-error_paths.sqllogic +114 -0
  350. package/test/logic/90.1-parse-errors.sqllogic +77 -0
  351. package/test/logic/90.2-alter-table-errors.sqllogic +53 -0
  352. package/test/logic/90.2.1-alter-extra-errors.sqllogic +51 -0
  353. package/test/logic/90.3-expression-errors.sqllogic +43 -0
  354. package/test/logic/90.4-dml-errors.sqllogic +47 -0
  355. package/test/logic/90.5-unsupported-join-types.sqllogic +37 -0
  356. package/test/logic/90.5.1-right-full-join-read.sqllogic +157 -0
  357. package/test/logic/90.6-select-error-paths.sqllogic +57 -0
  358. package/test/logic/91-merge-join-edge-cases.sqllogic +159 -0
  359. package/test/logic/92-hash-aggregate-edge-cases.sqllogic +139 -0
  360. package/test/logic/93-ddl-view-edge-cases.sqllogic +104 -0
  361. package/test/logic/93.1-view-error-paths.sqllogic +74 -0
  362. package/test/logic/93.2-view-mutation-pending.sqllogic +108 -0
  363. package/test/logic/93.3-view-mutation-or-clause.sqllogic +60 -0
  364. package/test/logic/93.4-view-mutation.sqllogic +4881 -0
  365. package/test/logic/93.4.1-view-mutation-partial-unique-cardinality.sqllogic +31 -0
  366. package/test/logic/93.5-authored-inverse.sqllogic +415 -0
  367. package/test/logic/93.6-set-op-flagless-write.sqllogic +862 -0
  368. package/test/logic/94-tvf-edge-cases.sqllogic +58 -0
  369. package/test/logic/94.1-limit-offset-edge-cases.sqllogic +109 -0
  370. package/test/logic/94.2-limit-offset-extras.sqllogic +98 -0
  371. package/test/logic/95-assertions.sqllogic +1417 -0
  372. package/test/logic/96-subquery-edge-cases.sqllogic +276 -0
  373. package/test/logic/97-json-function-edge-cases.sqllogic +633 -0
  374. package/test/logic/97.1-json-blob-and-special-values.sqllogic +92 -0
  375. package/test/logic/98-temporal-edge-cases.sqllogic +515 -0
  376. package/test/logic/99-conversion-edge-cases.sqllogic +325 -0
  377. package/test/logic/99.0.1-schema-index-listing.sqllogic +21 -0
  378. package/test/logic/99.1-cast-syntax-extras.sqllogic +167 -0
  379. package/test/logic/drop-unique-index.sqllogic +88 -0
  380. package/test/logic/pushdown-test.sqllogic +36 -0
@@ -0,0 +1,408 @@
1
+ -- `ALTER TABLE ... RENAME TO` inside a transaction that also holds a savepoint must not
2
+ -- disturb the rows the transaction has already staged. Companion to
3
+ -- 41.8-alter-savepoint-staged-rows, which covers the column-shape arms (ADD / DROP / RENAME
4
+ -- COLUMN); this file covers the whole-table rename, which used to lose staged rows outright.
5
+ --
6
+ -- Two mechanisms were at fault, and the cases below exercise both:
7
+ --
8
+ -- 1. `renameTable` minted a new frozen TableSchema but never handed it to the open
9
+ -- transaction's layers, so an eager savepoint snapshot kept its pre-rename schema
10
+ -- object, failed `commitTransaction`'s snapshot-wrap identity check, and COMMIT
11
+ -- reported success having published nothing (cases B, C, F, G, H, K).
12
+ -- 2. the Database connection registry stayed keyed on the OLD qualified name, so every
13
+ -- by-name lookup the renamed table's manager makes found nothing — and a second ALTER
14
+ -- in the same transaction was refused with "another connection has uncommitted
15
+ -- changes" (cases L, M, N).
16
+ --
17
+ -- A savepoint gets involved far more often than the SQL suggests: the DML executor takes
18
+ -- internal savepoints for statement- and row-level rollback, so this is reachable without
19
+ -- writing `savepoint` at all.
20
+
21
+ -- Case A (control): savepoint with no ALTER at all — the pre-savepoint row survives.
22
+ create table ca (id integer primary key, v text);
23
+ -- run
24
+
25
+ begin;
26
+ -- run
27
+ insert into ca values (1, 'a');
28
+ -- run
29
+ savepoint s;
30
+ -- run
31
+ rollback to savepoint s;
32
+ -- run
33
+ commit;
34
+ -- run
35
+
36
+ select id, v from ca order by id;
37
+ → [{"id":1,"v":"a"}]
38
+
39
+ drop table ca;
40
+ -- run
41
+
42
+ -- Case B: insert; savepoint; rename; rollback to savepoint. The rename is DDL and escapes
43
+ -- the rollback (the table stays renamed); the pre-savepoint row must still commit.
44
+ create table cb (id integer primary key, v text);
45
+ -- run
46
+
47
+ begin;
48
+ -- run
49
+ insert into cb values (1, 'a');
50
+ -- run
51
+ savepoint s;
52
+ -- run
53
+ alter table cb rename to cb2;
54
+ -- run
55
+ rollback to savepoint s;
56
+ -- run
57
+ commit;
58
+ -- run
59
+
60
+ select id, v from cb2 order by id;
61
+ → [{"id":1,"v":"a"}]
62
+
63
+ drop table cb2;
64
+ -- run
65
+
66
+ -- Case C: the same shape, released rather than rolled back.
67
+ create table cc (id integer primary key, v text);
68
+ -- run
69
+
70
+ begin;
71
+ -- run
72
+ insert into cc values (1, 'a');
73
+ -- run
74
+ savepoint s;
75
+ -- run
76
+ alter table cc rename to cc2;
77
+ -- run
78
+ release savepoint s;
79
+ -- run
80
+ commit;
81
+ -- run
82
+
83
+ select id, v from cc2 order by id;
84
+ → [{"id":1,"v":"a"}]
85
+
86
+ drop table cc2;
87
+ -- run
88
+
89
+ -- Case D (control): the DROP COLUMN twin of case B, which already worked — kept here so a
90
+ -- regression in the shared adopt path shows up next to the rename cases.
91
+ create table cd (id integer primary key, v text);
92
+ -- run
93
+
94
+ begin;
95
+ -- run
96
+ insert into cd values (1, 'a');
97
+ -- run
98
+ savepoint s;
99
+ -- run
100
+ alter table cd drop column v;
101
+ -- run
102
+ rollback to savepoint s;
103
+ -- run
104
+ commit;
105
+ -- run
106
+
107
+ select id from cd order by id;
108
+ → [{"id":1}]
109
+
110
+ drop table cd;
111
+ -- run
112
+
113
+ -- Case E (control): rename with NO savepoint anywhere. Always worked — the connection holds
114
+ -- a pending layer, so the snapshot-wrap path is never reached.
115
+ create table ce (id integer primary key, v text);
116
+ -- run
117
+
118
+ begin;
119
+ -- run
120
+ insert into ce values (1, 'a');
121
+ -- run
122
+ alter table ce rename to ce2;
123
+ -- run
124
+ commit;
125
+ -- run
126
+
127
+ select id, v from ce2 order by id;
128
+ → [{"id":1,"v":"a"}]
129
+
130
+ drop table ce2;
131
+ -- run
132
+
133
+ -- Case F: savepoint taken AFTER the rename, then rolled back. The row was staged before
134
+ -- both, so it survives.
135
+ create table cf (id integer primary key, v text);
136
+ -- run
137
+
138
+ begin;
139
+ -- run
140
+ insert into cf values (1, 'a');
141
+ -- run
142
+ alter table cf rename to cf2;
143
+ -- run
144
+ savepoint s;
145
+ -- run
146
+ rollback to savepoint s;
147
+ -- run
148
+ commit;
149
+ -- run
150
+
151
+ select id, v from cf2 order by id;
152
+ → [{"id":1,"v":"a"}]
153
+
154
+ drop table cf2;
155
+ -- run
156
+
157
+ -- Case G: savepoint after the rename, released.
158
+ create table cg (id integer primary key, v text);
159
+ -- run
160
+
161
+ begin;
162
+ -- run
163
+ insert into cg values (1, 'a');
164
+ -- run
165
+ alter table cg rename to cg2;
166
+ -- run
167
+ savepoint s;
168
+ -- run
169
+ release savepoint s;
170
+ -- run
171
+ commit;
172
+ -- run
173
+
174
+ select id, v from cg2 order by id;
175
+ → [{"id":1,"v":"a"}]
176
+
177
+ drop table cg2;
178
+ -- run
179
+
180
+ -- Case H: savepoint after the rename, left OPEN through COMMIT (the commit resolves it).
181
+ create table ch (id integer primary key, v text);
182
+ -- run
183
+
184
+ begin;
185
+ -- run
186
+ insert into ch values (1, 'a');
187
+ -- run
188
+ alter table ch rename to ch2;
189
+ -- run
190
+ savepoint s;
191
+ -- run
192
+ commit;
193
+ -- run
194
+
195
+ select id, v from ch2 order by id;
196
+ → [{"id":1,"v":"a"}]
197
+
198
+ drop table ch2;
199
+ -- run
200
+
201
+ -- Case I: rename FIRST, then stage the row, then a savepoint above it.
202
+ create table ci (id integer primary key, v text);
203
+ -- run
204
+
205
+ begin;
206
+ -- run
207
+ alter table ci rename to ci2;
208
+ -- run
209
+ insert into ci2 values (1, 'a');
210
+ -- run
211
+ savepoint s;
212
+ -- run
213
+ release savepoint s;
214
+ -- run
215
+ commit;
216
+ -- run
217
+
218
+ select id, v from ci2 order by id;
219
+ → [{"id":1,"v":"a"}]
220
+
221
+ drop table ci2;
222
+ -- run
223
+
224
+ -- Case K: two renames in one transaction with a savepoint between them — each rename has to
225
+ -- re-key the registry AND adopt its schema, or the second one loses the first one's work.
226
+ create table ck (id integer primary key, v text);
227
+ -- run
228
+
229
+ begin;
230
+ -- run
231
+ insert into ck values (1, 'a');
232
+ -- run
233
+ alter table ck rename to ck2;
234
+ -- run
235
+ savepoint s;
236
+ -- run
237
+ alter table ck2 rename to ck3;
238
+ -- run
239
+ release savepoint s;
240
+ -- run
241
+ commit;
242
+ -- run
243
+
244
+ select id, v from ck3 order by id;
245
+ → [{"id":1,"v":"a"}]
246
+
247
+ drop table ck3;
248
+ -- run
249
+
250
+ -- Case L: rename followed by a CONSOLIDATING alter (ADD COLUMN) in the same transaction.
251
+ -- This is the connection-registry defect: with the registry stale the transaction's own
252
+ -- connection looked like a stranger holding uncommitted work and the ADD COLUMN was refused
253
+ -- with BUSY. The staged row must survive and be backfilled.
254
+ create table cl (id integer primary key, v text);
255
+ -- run
256
+
257
+ begin;
258
+ -- run
259
+ insert into cl values (1, 'a');
260
+ -- run
261
+ savepoint s;
262
+ -- run
263
+ alter table cl rename to cl2;
264
+ -- run
265
+ alter table cl2 add column w text default 'x';
266
+ -- run
267
+ rollback to savepoint s;
268
+ -- run
269
+ commit;
270
+ -- run
271
+
272
+ select id, v, w from cl2 order by id;
273
+ → [{"id":1,"v":"a","w":"x"}]
274
+
275
+ drop table cl2;
276
+ -- run
277
+
278
+ -- Case M: rename then DROP COLUMN — the narrowing flavor of case L.
279
+ create table cm (id integer primary key, v text);
280
+ -- run
281
+
282
+ begin;
283
+ -- run
284
+ insert into cm values (1, 'a');
285
+ -- run
286
+ savepoint s;
287
+ -- run
288
+ alter table cm rename to cm2;
289
+ -- run
290
+ alter table cm2 drop column v;
291
+ -- run
292
+ rollback to savepoint s;
293
+ -- run
294
+ commit;
295
+ -- run
296
+
297
+ select id from cm2 order by id;
298
+ → [{"id":1}]
299
+
300
+ drop table cm2;
301
+ -- run
302
+
303
+ -- Case N: the same pair in the other order — DROP COLUMN then rename.
304
+ create table cn (id integer primary key, v text);
305
+ -- run
306
+
307
+ begin;
308
+ -- run
309
+ insert into cn values (1, 'a');
310
+ -- run
311
+ savepoint s;
312
+ -- run
313
+ alter table cn drop column v;
314
+ -- run
315
+ alter table cn rename to cn2;
316
+ -- run
317
+ rollback to savepoint s;
318
+ -- run
319
+ commit;
320
+ -- run
321
+
322
+ select id from cn2 order by id;
323
+ → [{"id":1}]
324
+
325
+ drop table cn2;
326
+ -- run
327
+
328
+ -- Case O (negative control): the insert happens AFTER the savepoint, so the rollback must
329
+ -- still discard it. The fix must not resurrect rows the ledger says are gone.
330
+ create table co (id integer primary key, v text);
331
+ -- run
332
+
333
+ begin;
334
+ -- run
335
+ alter table co rename to co2;
336
+ -- run
337
+ savepoint s;
338
+ -- run
339
+ insert into co2 values (1, 'a');
340
+ -- run
341
+ rollback to savepoint s;
342
+ -- run
343
+ commit;
344
+ -- run
345
+
346
+ select id, v from co2 order by id;
347
+ → []
348
+
349
+ drop table co2;
350
+ -- run
351
+
352
+ -- Case P (negative control): a full ROLLBACK, not `rollback to savepoint`. The rename is DDL
353
+ -- and escapes the rollback, but every staged row must still be discarded — the adopt must not
354
+ -- turn an abandoned transaction into a published one.
355
+ create table cp (id integer primary key, v text);
356
+ -- run
357
+
358
+ begin;
359
+ -- run
360
+ insert into cp values (1, 'a');
361
+ -- run
362
+ savepoint s;
363
+ -- run
364
+ alter table cp rename to cp2;
365
+ -- run
366
+ rollback;
367
+ -- run
368
+
369
+ select id, v from cp2 order by id;
370
+ → []
371
+
372
+ drop table cp2;
373
+ -- run
374
+
375
+ -- Case Q: the transaction keeps READING and WRITING after the rename + savepoint rollback.
376
+ -- Every case above only checks the post-COMMIT state, so nothing would catch an adopt that
377
+ -- published the right rows while leaving the transaction's own mid-flight view wrong.
378
+ create table cq (id integer primary key, v text);
379
+ -- run
380
+
381
+ begin;
382
+ -- run
383
+ insert into cq values (1, 'a');
384
+ -- run
385
+ savepoint s;
386
+ -- run
387
+ insert into cq values (2, 'b');
388
+ -- run
389
+ alter table cq rename to cq2;
390
+ -- run
391
+ rollback to savepoint s;
392
+ -- run
393
+
394
+ -- mid-transaction: the pre-savepoint row is visible under the new name, the post-savepoint
395
+ -- row is not
396
+ select id, v from cq2 order by id;
397
+ → [{"id":1,"v":"a"}]
398
+
399
+ insert into cq2 values (3, 'c');
400
+ -- run
401
+ commit;
402
+ -- run
403
+
404
+ select id, v from cq2 order by id;
405
+ → [{"id":1,"v":"a"},{"id":3,"v":"c"}]
406
+
407
+ drop table cq2;
408
+ -- run
@@ -0,0 +1,180 @@
1
+ -- 41.9-alter-constraint-body-change.sqllogic
2
+ -- Declarative differ: a named constraint whose NAME is unchanged but whose BODY
3
+ -- changed is realized as DROP CONSTRAINT + ADD CONSTRAINT (drop+recreate). The
4
+ -- re-add re-validates existing rows for UNIQUE / FOREIGN KEY (fails atomically on
5
+ -- a violation); CHECK is forward-enforcing only (its ADD does not re-validate
6
+ -- existing rows — a pre-existing limitation of the CHECK add path). Behavioral
7
+ -- assertions through `apply schema`, so this passes under both `yarn test`
8
+ -- (memory) and `yarn test:store`.
9
+
10
+ pragma foreign_keys = true;
11
+ -- run
12
+
13
+ -- ============================================================
14
+ -- 1. CHECK body change → drop+recreate; new predicate enforced forward
15
+ -- ============================================================
16
+ declare schema main {
17
+ table tc { id integer primary key, qty integer, constraint chk check (qty > 0) }
18
+ }
19
+ apply schema main;
20
+ insert into tc values (1, 5);
21
+ -- run
22
+
23
+ -- old body (qty > 0): qty = 0 rejected
24
+ insert into tc values (2, 0);
25
+ -- error: check
26
+
27
+ -- widen the body to qty >= 0 (same constraint name)
28
+ declare schema main {
29
+ table tc { id integer primary key, qty integer, constraint chk check (qty >= 0) }
30
+ }
31
+ apply schema main;
32
+ -- run
33
+
34
+ -- new body enforced: qty = 0 now accepted
35
+ insert into tc values (2, 0);
36
+ select count(*) as n from tc;
37
+ → [{"n":2}]
38
+
39
+ -- new body still rejects qty < 0
40
+ insert into tc values (3, -1);
41
+ -- error: check
42
+
43
+ -- re-applying the identical declaration is a no-op (canonical bodies match)
44
+ diff schema main;
45
+ → []
46
+
47
+ drop table tc;
48
+ -- run
49
+
50
+ -- ============================================================
51
+ -- 2. UNIQUE body change (column set widened) → drop+recreate; converges
52
+ -- ============================================================
53
+ declare schema main {
54
+ table tu { id integer primary key, a integer, b integer, constraint uq unique (a) }
55
+ }
56
+ apply schema main;
57
+ insert into tu values (1, 10, 100);
58
+ -- run
59
+
60
+ -- old body unique(a): duplicate a rejected
61
+ insert into tu values (2, 10, 200);
62
+ -- error: unique
63
+
64
+ -- widen to unique(a, b)
65
+ declare schema main {
66
+ table tu { id integer primary key, a integer, b integer, constraint uq unique (a, b) }
67
+ }
68
+ apply schema main;
69
+ -- run
70
+
71
+ -- new body unique(a,b): duplicate a with distinct b now accepted
72
+ insert into tu values (2, 10, 200);
73
+ select count(*) as n from tu;
74
+ → [{"n":2}]
75
+
76
+ -- full (a,b) duplicate still rejected
77
+ insert into tu values (3, 10, 100);
78
+ -- error: unique
79
+
80
+ diff schema main;
81
+ → []
82
+
83
+ drop table tu;
84
+ -- run
85
+
86
+ -- ============================================================
87
+ -- 3. UNIQUE body change the existing data VIOLATES → the re-add aborts the apply
88
+ -- ============================================================
89
+ -- NOTE: a body change is DROP + ADD (two statements). A multi-statement migration
90
+ -- is not atomic for schema mutations on the memory backend, so a failed re-add can
91
+ -- leave the old constraint dropped — we assert only that the apply aborts and the
92
+ -- data remains queryable, not that the prior constraint is restored.
93
+ declare schema main {
94
+ table tv { id integer primary key, a integer, b integer, constraint uq unique (a, b) }
95
+ }
96
+ apply schema main;
97
+ -- distinct on (a,b), duplicated on a alone
98
+ insert into tv values (1, 10, 100), (2, 10, 200);
99
+ -- run
100
+
101
+ -- narrow to unique(a): existing a=10 twice → re-validation fails on the re-add
102
+ declare schema main {
103
+ table tv { id integer primary key, a integer, b integer, constraint uq unique (a) }
104
+ }
105
+ -- run
106
+
107
+ apply schema main;
108
+ -- error:
109
+
110
+ -- the existing rows survive and a new distinct-on-(a,b) row is accepted
111
+ insert into tv values (3, 10, 300);
112
+ select count(*) as n from tv;
113
+ → [{"n":3}]
114
+
115
+ drop table tv;
116
+ -- run
117
+
118
+ -- ============================================================
119
+ -- 4. FOREIGN KEY body change (ON DELETE action) → drop+recreate; behavior changes
120
+ -- ============================================================
121
+ declare schema main {
122
+ table fkp { pid integer primary key }
123
+ table fkc { id integer primary key, pa integer, constraint fk foreign key (pa) references fkp(pid) on delete restrict }
124
+ }
125
+ apply schema main;
126
+ insert into fkp values (1);
127
+ insert into fkc values (10, 1);
128
+ -- run
129
+
130
+ -- old body (on delete restrict): deleting a referenced parent is blocked
131
+ delete from fkp where pid = 1;
132
+ -- error:
133
+
134
+ -- change the action to ON DELETE CASCADE
135
+ declare schema main {
136
+ table fkp { pid integer primary key }
137
+ table fkc { id integer primary key, pa integer, constraint fk foreign key (pa) references fkp(pid) on delete cascade }
138
+ }
139
+ apply schema main;
140
+ -- run
141
+
142
+ -- new body (on delete cascade): deleting the parent removes the child too
143
+ delete from fkp where pid = 1;
144
+ select count(*) as n from fkc;
145
+ → [{"n":0}]
146
+
147
+ diff schema main;
148
+ → []
149
+
150
+ drop table fkc;
151
+ drop table fkp;
152
+ -- run
153
+
154
+ -- ============================================================
155
+ -- 5. Disambiguation — a tag-only change takes SET TAGS, NOT a drop+recreate
156
+ -- ============================================================
157
+ declare schema main {
158
+ table tt { id integer primary key, a integer, constraint uq unique (a) with tags (msg = 'orig') }
159
+ }
160
+ apply schema main;
161
+ -- run
162
+
163
+ -- change only the constraint's tags (body identical)
164
+ declare schema main {
165
+ table tt { id integer primary key, a integer, constraint uq unique (a) with tags (msg = 'updated') }
166
+ }
167
+ -- run
168
+
169
+ -- the diff is a single in-place SET TAGS — no DROP/ADD CONSTRAINT
170
+ diff schema main;
171
+ → [{"ddl": "ALTER TABLE tt ALTER CONSTRAINT uq SET TAGS (msg = 'updated')"}]
172
+
173
+ apply schema main;
174
+ -- run
175
+
176
+ diff schema main;
177
+ → []
178
+
179
+ drop table tt;
180
+ -- run