@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.
- package/README.md +2 -0
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +17 -69
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/package.json +7 -4
- package/test/README.md +173 -0
- package/test/logic/01-basic.sqllogic +39 -0
- package/test/logic/01.1-select-projection-extras.sqllogic +130 -0
- package/test/logic/01.2-strings.sqllogic +43 -0
- package/test/logic/01.5-insert-select.sqllogic +237 -0
- package/test/logic/01.6-update-extras.sqllogic +118 -0
- package/test/logic/01.7-update-from.sqllogic +67 -0
- package/test/logic/01.8-delete-extras.sqllogic +122 -0
- package/test/logic/01.8.1-delete-range-cow.sqllogic +115 -0
- package/test/logic/01.9-query-expr-dml-gates.sqllogic +32 -0
- package/test/logic/01.9-query-expr-dml.sqllogic +171 -0
- package/test/logic/01.9-query-expr-values.sqllogic +111 -0
- package/test/logic/01.9.1-limit-over-dml-subquery.sqllogic +119 -0
- package/test/logic/02-filters.sqllogic +54 -0
- package/test/logic/02-smoke.sqllogic +62 -0
- package/test/logic/02.1-bind-parameters.sqllogic +223 -0
- package/test/logic/03-expressions.sqllogic +190 -0
- package/test/logic/03.1-quoted-identifiers.sqllogic +55 -0
- package/test/logic/03.4-defaults.sqllogic +554 -0
- package/test/logic/03.4.1-default-edge-cases.sqllogic +99 -0
- package/test/logic/03.5-tvf.sqllogic +61 -0
- package/test/logic/03.6-type-system.sqllogic +544 -0
- package/test/logic/03.6.1-numeric-text-comparison-coercion.sqllogic +244 -0
- package/test/logic/03.6.2-value-to-text.sqllogic +224 -0
- package/test/logic/03.7-bigint-mixed-arithmetic.sqllogic +65 -0
- package/test/logic/03.8-not-precedence.sqllogic +255 -0
- package/test/logic/03.9-is-bool-predicate.sqllogic +150 -0
- package/test/logic/03.9.1-is-bool-predicate-partial-index.sqllogic +34 -0
- package/test/logic/04-order-by.sqllogic +38 -0
- package/test/logic/04-transactions.sqllogic +239 -0
- package/test/logic/04a-savepoint-lazy-attach.sqllogic +122 -0
- package/test/logic/05-vtab_memory.sqllogic +50 -0
- package/test/logic/05.0.1-vtab-memory-unique-index-collation.sqllogic +34 -0
- package/test/logic/05.1-composite-pk-range-scan.sqllogic +147 -0
- package/test/logic/05.1.1-secondary-index-range-scan.sqllogic +56 -0
- package/test/logic/05.2-cast-seek-correctness.sqllogic +124 -0
- package/test/logic/06-builtin_functions.sqllogic +149 -0
- package/test/logic/06.1-string-functions.sqllogic +92 -0
- package/test/logic/06.1.3-like-glob-edges.sqllogic +53 -0
- package/test/logic/06.2-math-functions.sqllogic +82 -0
- package/test/logic/06.3-schema.sqllogic +48 -0
- package/test/logic/06.3.1-schema-all-schemas.sqllogic +39 -0
- package/test/logic/06.3.2-schema-foreign-keys.sqllogic +208 -0
- package/test/logic/06.3.3-introspection-tags.sqllogic +202 -0
- package/test/logic/06.3.3.1-introspection-tags-index.sqllogic +74 -0
- package/test/logic/06.3.4-view-info.sqllogic +378 -0
- package/test/logic/06.3.5-column-info.sqllogic +347 -0
- package/test/logic/06.3.6-schema-views.sqllogic +29 -0
- package/test/logic/06.4-schema-search-path.sqllogic +354 -0
- package/test/logic/06.4.1-schema-case-insensitive.sqllogic +83 -0
- package/test/logic/06.4.2-collation-extras.sqllogic +472 -0
- package/test/logic/06.4.2.1-collation-index-access-paths.sqllogic +140 -0
- package/test/logic/06.4.3-write-path-collation.sqllogic +99 -0
- package/test/logic/06.4.4-comparison-collation-precedence.sqllogic +342 -0
- package/test/logic/06.4.5-any-collate-declared-keys.sqllogic +92 -0
- package/test/logic/06.5-polymorphic-types.sqllogic +169 -0
- package/test/logic/06.5.1-conversion-functions.sqllogic +173 -0
- package/test/logic/06.5.2-scalar-minmax.sqllogic +16 -0
- package/test/logic/06.5.3-undeclared-return-type-comparison.sqllogic +244 -0
- package/test/logic/06.5.4-declared-return-type-builtins.sqllogic +288 -0
- package/test/logic/06.6-aggregate-extended.sqllogic +78 -0
- package/test/logic/06.7-json-extended.sqllogic +53 -0
- package/test/logic/06.8-json-path-operators.sqllogic +99 -0
- package/test/logic/06.9-json-canonical-key.sqllogic +65 -0
- package/test/logic/06.9.1-json-coerce-once.sqllogic +417 -0
- package/test/logic/06.9.1.1-json-coerce-once-index.sqllogic +39 -0
- package/test/logic/06.9.2-json-structural-equality.sqllogic +382 -0
- package/test/logic/06.9.2.1-json-structural-equality-index.sqllogic +76 -0
- package/test/logic/06.9.3-json-index-range-seek.sqllogic +205 -0
- package/test/logic/07-aggregates.sqllogic +193 -0
- package/test/logic/07.1-aggregate-filter-clause.sqllogic +12 -0
- package/test/logic/07.2-aggregate-order-by.sqllogic +11 -0
- package/test/logic/07.3-group-by-extras.sqllogic +602 -0
- package/test/logic/07.3.1-group-by-order-by-key.sqllogic +164 -0
- package/test/logic/07.3.2-grouped-select-list-shape.sqllogic +231 -0
- package/test/logic/07.4-group-by-filter-composite-pk.sqllogic +120 -0
- package/test/logic/07.5-sum-mixed-exact-and-float.sqllogic +151 -0
- package/test/logic/07.5-window.sqllogic +1941 -0
- package/test/logic/07.5.1-window-named.sqllogic +13 -0
- package/test/logic/07.5.2-window-nth-value.sqllogic +13 -0
- package/test/logic/07.6-subqueries.sqllogic +78 -0
- package/test/logic/07.6.1-subquery-extras.sqllogic +93 -0
- package/test/logic/07.7-and-or-short-circuit.sqllogic +58 -0
- package/test/logic/07.7-in-subquery-caching.sqllogic +174 -0
- package/test/logic/07.7-scalar-agg-decorrelation.sqllogic +197 -0
- package/test/logic/07.7.1-in-extras.sqllogic +158 -0
- package/test/logic/07.7.1-scalar-agg-decorrelation-filter.sqllogic +105 -0
- package/test/logic/07.7.2-scalar-agg-decorrelation-nested.sqllogic +115 -0
- package/test/logic/07.7.3-exists-in-select-decorrelation.sqllogic +107 -0
- package/test/logic/07.7.4-where-conjunct-ordering.sqllogic +121 -0
- package/test/logic/07.7.5-filter-lost-under-index-order.sqllogic +134 -0
- package/test/logic/07.7.6-correlated-predicate-scope.sqllogic +178 -0
- package/test/logic/07.7.7-join-source-scope-shadowing.sqllogic +137 -0
- package/test/logic/07.7.8-correlated-ref-to-computed-column.sqllogic +165 -0
- package/test/logic/07.7.9-conjunct-monotonicity.sqllogic +200 -0
- package/test/logic/07.8-correlated-subquery-edges.sqllogic +71 -0
- package/test/logic/07.8.1-correlated-in-decorrelation-gates.sqllogic +156 -0
- package/test/logic/07.9-in-value-list.sqllogic +154 -0
- package/test/logic/07.9.1-in-value-list-composite-index.sqllogic +38 -0
- package/test/logic/08-views.sqllogic +64 -0
- package/test/logic/08.1-semi-anti-join.sqllogic +191 -0
- package/test/logic/08.1-view-edge-cases.sqllogic +118 -0
- package/test/logic/08.1.1-uncorrelated-in-semijoin.sqllogic +251 -0
- package/test/logic/08.2-existence-flag-semijoin-recovery.sqllogic +197 -0
- package/test/logic/08.3-existence-flag-inner-recovery.sqllogic +102 -0
- package/test/logic/08.4-key-set-semi-join.sqllogic +447 -0
- package/test/logic/09-set_operations.sqllogic +244 -0
- package/test/logic/09.1-set-op-cross-collation.sqllogic +230 -0
- package/test/logic/10-distinct_datatypes.sqllogic +127 -0
- package/test/logic/10.1-ddl-lifecycle.sqllogic +203 -0
- package/test/logic/10.1.1-create-table-syntax-edges.sqllogic +47 -0
- package/test/logic/10.1.2-ddl-in-transaction.sqllogic +143 -0
- package/test/logic/10.1.2.1-add-constraint-in-transaction.sqllogic +59 -0
- package/test/logic/10.1.3-ddl-drop-in-transaction.sqllogic +187 -0
- package/test/logic/10.1.3.1-drop-constraint-in-transaction.sqllogic +45 -0
- package/test/logic/10.1.4-create-table-duplicate-constraint-names.sqllogic +149 -0
- package/test/logic/10.1.4-ddl-transaction-policy.sqllogic +314 -0
- package/test/logic/10.1.5-alter-add-constraint-minted-name-disambiguation.sqllogic +219 -0
- package/test/logic/10.1.5-create-index-lifecycle.sqllogic +72 -0
- package/test/logic/10.1.6-ddl-transaction-policy-index.sqllogic +143 -0
- package/test/logic/10.1.7-create-table-default-type-check.sqllogic +119 -0
- package/test/logic/10.1.8-alter-add-check-existing-rows.sqllogic +117 -0
- package/test/logic/10.2-column-features.sqllogic +365 -0
- package/test/logic/10.2.1-table-options-rejection.sqllogic +63 -0
- package/test/logic/10.2.2-default-collation-memory.sqllogic +30 -0
- package/test/logic/10.3-function-features.sqllogic +247 -0
- package/test/logic/10.4-schema-scale.sqllogic +168 -0
- package/test/logic/10.4.1-schema-scale-indexes.sqllogic +121 -0
- package/test/logic/10.5-indexes.sqllogic +164 -0
- package/test/logic/10.5.1-partial-indexes.sqllogic +526 -0
- package/test/logic/10.5.2-expression-indexes.sqllogic +34 -0
- package/test/logic/10.5.3-desc-index-ordering.sqllogic +130 -0
- package/test/logic/10.5.4-composite-pk-index-update-phantom.sqllogic +55 -0
- package/test/logic/10.5.5-index-name-uniqueness.sqllogic +76 -0
- package/test/logic/10.5.6-minmax-index-boundary.sqllogic +204 -0
- package/test/logic/10.5.7-implicit-unique-index-lifecycle.sqllogic +1216 -0
- package/test/logic/10.6-distinct-edge-cases.sqllogic +119 -0
- package/test/logic/100-predicate-normalization-edge-cases.sqllogic +238 -0
- package/test/logic/100.1-where-extras.sqllogic +163 -0
- package/test/logic/100.1.1-where-join-on-order-indexed.sqllogic +35 -0
- package/test/logic/101-builtin-mutation-kills.sqllogic +974 -0
- package/test/logic/101-transaction-edge-cases.sqllogic +395 -0
- package/test/logic/102-schema-catalog-edge-cases.sqllogic +252 -0
- package/test/logic/102-unique-constraints.sqllogic +145 -0
- package/test/logic/102.0.1-schema-catalog-indexed-table.sqllogic +32 -0
- package/test/logic/102.1-unique-edge-cases.sqllogic +111 -0
- package/test/logic/102.1.1-unique-index-creation-edge-cases.sqllogic +75 -0
- package/test/logic/102.2-unique-collation.sqllogic +181 -0
- package/test/logic/102.2.1-unique-collation-index-derived.sqllogic +305 -0
- package/test/logic/103-database-options-edge-cases.sqllogic +108 -0
- package/test/logic/103.1-pragma-boolean-values.sqllogic +126 -0
- package/test/logic/104-emit-mutation-kills.sqllogic +236 -0
- package/test/logic/105-vtab-memory-mutation-kills.sqllogic +754 -0
- package/test/logic/105.1-vtab-memory-index-mutation-kills.sqllogic +540 -0
- package/test/logic/106-constraint-extractor-mutation-kills.sqllogic +350 -0
- package/test/logic/107-temporal-arithmetic-mutation-kills.sqllogic +833 -0
- package/test/logic/108-cardinality-estimation.sqllogic +146 -0
- package/test/logic/108.1-analyze-name-resolution.sqllogic +102 -0
- package/test/logic/109-aggregate-physical-selection.sqllogic +103 -0
- package/test/logic/11-joins.sqllogic +86 -0
- package/test/logic/11.1-join-using.sqllogic +267 -0
- package/test/logic/11.2-comma-join.sqllogic +35 -0
- package/test/logic/11.3-index-nested-loop-join.sqllogic +305 -0
- package/test/logic/11.3-mismatched-collation-join.sqllogic +74 -0
- package/test/logic/11.4-hash-join-side-swap.sqllogic +118 -0
- package/test/logic/110-scan-emitter-mutation-kills.sqllogic +121 -0
- package/test/logic/110.1-scan-emitter-index-scan-kills.sqllogic +47 -0
- package/test/logic/12-empty-primary-key.sqllogic +124 -0
- package/test/logic/12-join_padding_order.sqllogic +58 -0
- package/test/logic/12.1-orderby-index-consumption.sqllogic +40 -0
- package/test/logic/13-cte.sqllogic +137 -0
- package/test/logic/13.1-cte-multiple-recursive.sqllogic +104 -0
- package/test/logic/13.10-cte-qualified-name.sqllogic +136 -0
- package/test/logic/13.11-unreferenced-dml-cte.sqllogic +414 -0
- package/test/logic/13.12-nested-dml-cte-rejected.sqllogic +280 -0
- package/test/logic/13.2-cte-bind-params.sqllogic +98 -0
- package/test/logic/13.3-cte-edge-cases.sqllogic +120 -0
- package/test/logic/13.4-cte-extras.sqllogic +98 -0
- package/test/logic/13.5-cte-join-order.sqllogic +166 -0
- package/test/logic/13.6-cte-dml-runs-once.sqllogic +318 -0
- package/test/logic/13.7-cte-sibling-visibility.sqllogic +227 -0
- package/test/logic/13.8-insert-with-clause-visibility.sqllogic +254 -0
- package/test/logic/13.9-schema-authored-cte-isolation.sqllogic +328 -0
- package/test/logic/13.9.1-schema-authored-schema-path-isolation.sqllogic +408 -0
- package/test/logic/14-utilities.sqllogic +168 -0
- package/test/logic/15-timespan.sqllogic +279 -0
- package/test/logic/15.1-semantic-ordering.sqllogic +960 -0
- package/test/logic/15.1.1-json-check-coercion.sqllogic +178 -0
- package/test/logic/15.1.2-semantic-ordering-index.sqllogic +41 -0
- package/test/logic/15.1.3-declared-form-write-contract.sqllogic +519 -0
- package/test/logic/16-epoch.sqllogic +187 -0
- package/test/logic/17-weekday-modifier.sqllogic +78 -0
- package/test/logic/18-json-string-escapes.sqllogic +86 -0
- package/test/logic/18-strftime-extended-formats.sqllogic +68 -0
- package/test/logic/20-empty-single-row.sqllogic +261 -0
- package/test/logic/21-null-edge-cases.sqllogic +227 -0
- package/test/logic/21.1-where-null-comparisons.sqllogic +151 -0
- package/test/logic/21.1.1-where-null-comparisons-secondary-index.sqllogic +35 -0
- package/test/logic/21.2-between-edges.sqllogic +157 -0
- package/test/logic/22-boundary-values.sqllogic +175 -0
- package/test/logic/23-self-joins-duplicates.sqllogic +74 -0
- package/test/logic/24-builtin-branches.sqllogic +611 -0
- package/test/logic/24.1-substr-extras.sqllogic +75 -0
- package/test/logic/24.2-random-extras.sqllogic +39 -0
- package/test/logic/25-aggregate-edge-cases.sqllogic +289 -0
- package/test/logic/25.1-nested-aggregates.sqllogic +74 -0
- package/test/logic/25.2-having-edge-cases.sqllogic +318 -0
- package/test/logic/25.3-aggregate-isnull-empty.sqllogic +16 -0
- package/test/logic/25.4-groupby-fd-constant-empty.sqllogic +55 -0
- package/test/logic/25.5-ungrouped-aggregate-column-free-select-item.sqllogic +196 -0
- package/test/logic/26-join-edge-cases.sqllogic +333 -0
- package/test/logic/26.1-left-join-isnull-on-notnull.sqllogic +26 -0
- package/test/logic/26.2-left-join-on-vs-where.sqllogic +67 -0
- package/test/logic/26.3-join-on-constants.sqllogic +61 -0
- package/test/logic/26.4-join-on-is-null-nullable.sqllogic +44 -0
- package/test/logic/27-window-edge-cases.sqllogic +206 -0
- package/test/logic/27.1-window-groups-frame.sqllogic +13 -0
- package/test/logic/27.2-window-exclude.sqllogic +13 -0
- package/test/logic/27.3-window-json-aggregation.sqllogic +66 -0
- package/test/logic/28-set-ops-sort-edge-cases.sqllogic +444 -0
- package/test/logic/28.1-compound-limit-offset.sqllogic +143 -0
- package/test/logic/28.2-orderby-expression-extras.sqllogic +698 -0
- package/test/logic/28.2-set-op-branch-types.sqllogic +217 -0
- package/test/logic/29-constraint-edge-cases.sqllogic +442 -0
- package/test/logic/29.1-column-level-conflict-clause.sqllogic +171 -0
- package/test/logic/29.2-table-level-pk-conflict-clause.sqllogic +113 -0
- package/test/logic/40-constraints.sqllogic +418 -0
- package/test/logic/40.1-pk-desc-direction.sqllogic +76 -0
- package/test/logic/40.2-check-extras.sqllogic +683 -0
- package/test/logic/41-alter-table.sqllogic +191 -0
- package/test/logic/41-fk-cascade-conflict-and-self-ref.sqllogic +263 -0
- package/test/logic/41-fk-cross-schema.sqllogic +155 -0
- package/test/logic/41-fk-extended-targets.sqllogic +173 -0
- package/test/logic/41-foreign-keys.sqllogic +1001 -0
- package/test/logic/41-generated-column-errors.sqllogic +225 -0
- package/test/logic/41-generated-column-extras.sqllogic +598 -0
- package/test/logic/41-generated-column-scope.sqllogic +329 -0
- package/test/logic/41-generated-columns.sqllogic +361 -0
- package/test/logic/41.1-alter-pk.sqllogic +230 -0
- package/test/logic/41.1-fk-collation-conflict.sqllogic +277 -0
- package/test/logic/41.10-alter-drop-column-foreign-key.sqllogic +274 -0
- package/test/logic/41.10.1-alter-drop-column-unique-index.sqllogic +169 -0
- package/test/logic/41.10.2-alter-drop-column-check-and-assertion.sqllogic +1616 -0
- package/test/logic/41.10.3-alter-drop-column-referencing-fk.sqllogic +292 -0
- package/test/logic/41.10.4-drop-object-expression-dependents.sqllogic +602 -0
- package/test/logic/41.11-deferred-fk-with-rename.sqllogic +232 -0
- package/test/logic/41.12-alter-default-coercion.sqllogic +200 -0
- package/test/logic/41.13-alter-add-column-generated-backfill.sqllogic +566 -0
- package/test/logic/41.14-alter-add-column-subquery-backfill.sqllogic +129 -0
- package/test/logic/41.15-alter-column-default-type-check.sqllogic +178 -0
- package/test/logic/41.16-fk-unenforceable.sqllogic +364 -0
- package/test/logic/41.2-alter-column.sqllogic +382 -0
- package/test/logic/41.2.1-alter-column-retype-deleted-row-memory.sqllogic +32 -0
- package/test/logic/41.2.2-alter-column-retype-index-rebuild.sqllogic +77 -0
- package/test/logic/41.2.3-alter-column-set-not-null-pk-backfill.sqllogic +310 -0
- package/test/logic/41.2.3.1-alter-column-set-not-null-pk-backfill-secondary-index.sqllogic +37 -0
- package/test/logic/41.3-alter-add-column-unique.sqllogic +184 -0
- package/test/logic/41.3-alter-rename-propagation.sqllogic +2352 -0
- package/test/logic/41.3.1-alter-rename-index-propagation.sqllogic +94 -0
- package/test/logic/41.4-alter-add-column-constraints.sqllogic +855 -0
- package/test/logic/41.5-alter-misc.sqllogic +48 -0
- package/test/logic/41.5-cross-schema-foreign-keys.sqllogic +253 -0
- package/test/logic/41.6-alter-drop-rename-constraint.sqllogic +354 -0
- package/test/logic/41.6.1-alter-drop-constraint-index-derived.sqllogic +22 -0
- package/test/logic/41.7-alter-column-collate.sqllogic +105 -0
- package/test/logic/41.7.1-alter-column-collate-unique.sqllogic +45 -0
- package/test/logic/41.7.2-alter-column-collate-unique-store.sqllogic +208 -0
- package/test/logic/41.7.2.1-alter-column-collate-unique-index-store.sqllogic +114 -0
- package/test/logic/41.7.3-alter-column-retype-unique.sqllogic +293 -0
- package/test/logic/41.7.3.1-alter-column-retype-staged-rows-memory.sqllogic +41 -0
- package/test/logic/41.7.3.2-alter-column-retype-unique-index.sqllogic +72 -0
- package/test/logic/41.7.4-alter-column-retype-semantic-memory.sqllogic +445 -0
- package/test/logic/41.7.4.1-alter-column-retype-semantic-index-memory.sqllogic +91 -0
- package/test/logic/41.7.5-alter-column-collate-pk-staged-delete-memory.sqllogic +106 -0
- package/test/logic/41.8-alter-add-constraint-unique-fk.sqllogic +275 -0
- package/test/logic/41.8-alter-savepoint-staged-rows.sqllogic +443 -0
- package/test/logic/41.8.1-alter-rename-savepoint-staged-rows.sqllogic +408 -0
- package/test/logic/41.9-alter-constraint-body-change.sqllogic +180 -0
- package/test/logic/41.9-fk-restrict-batched.sqllogic +290 -0
- package/test/logic/42-committed-snapshot.sqllogic +254 -0
- package/test/logic/42-returning.sqllogic +159 -0
- package/test/logic/42.1-returning-extras.sqllogic +232 -0
- package/test/logic/42.2-returning-stored-row.sqllogic +165 -0
- package/test/logic/43-default-nullability.sqllogic +131 -0
- package/test/logic/43-transition-constraints.sqllogic +341 -0
- package/test/logic/43.1-default-collation.sqllogic +140 -0
- package/test/logic/43.1-notnull-or-conflict.sqllogic +79 -0
- package/test/logic/43.2-deferred-check-new-on-delete.sqllogic +95 -0
- package/test/logic/43.3-nullable-primary-key.sqllogic +587 -0
- package/test/logic/44-determinism-validation.sqllogic +164 -0
- package/test/logic/44-orthogonality.sqllogic +146 -0
- package/test/logic/44.1-nondeterministic-schema.sqllogic +316 -0
- package/test/logic/45-udf-determinism.sqllogic +39 -0
- package/test/logic/46-mutation-context.sqllogic +595 -0
- package/test/logic/47-upsert.sqllogic +255 -0
- package/test/logic/47.1-upsert-conflict-targets.sqllogic +169 -0
- package/test/logic/47.2-replace-and-or-clauses.sqllogic +164 -0
- package/test/logic/47.2.1-pk-replace-secondary-unique.sqllogic +374 -0
- package/test/logic/47.3-engine-or-fail.sqllogic +122 -0
- package/test/logic/47.3-upsert-conflict-target-collation.sqllogic +139 -0
- package/test/logic/47.3.1-upsert-conflict-index-derived-collation.sqllogic +25 -0
- package/test/logic/47.4-upsert-conflict-target-affinity.sqllogic +59 -0
- package/test/logic/47.5-upsert-do-update-constraints.sqllogic +440 -0
- package/test/logic/47.6-upsert-do-update-decomposed.sqllogic +100 -0
- package/test/logic/49-reference-graph.sqllogic +84 -0
- package/test/logic/50-declarative-schema.sqllogic +2550 -0
- package/test/logic/50-metadata-tags.sqllogic +1033 -0
- package/test/logic/50.0.1-metadata-tags-index.sqllogic +141 -0
- package/test/logic/50.1-declare-schema-pk.sqllogic +150 -0
- package/test/logic/50.2-declare-schema-renames.sqllogic +949 -0
- package/test/logic/50.2.1-declare-schema-index-renames.sqllogic +210 -0
- package/test/logic/50.3-declare-schema-duplicate-names.sqllogic +280 -0
- package/test/logic/50.4-declare-schema-apply-restore.sqllogic +192 -0
- package/test/logic/51-lens-foundation.sqllogic +147 -0
- package/test/logic/51-materialized-views.sqllogic +376 -0
- package/test/logic/51.5-materialized-views-coarsened-key.sqllogic +198 -0
- package/test/logic/51.7-maintained-table-attach-detach.sqllogic +468 -0
- package/test/logic/51.8-maintained-table-declared-constraints.sqllogic +440 -0
- package/test/logic/51.85-maintained-table-parent-fk.sqllogic +103 -0
- package/test/logic/51.9-maintained-table-secondary-unique.sqllogic +237 -0
- package/test/logic/51.9.1-maintained-table-partial-unique.sqllogic +36 -0
- package/test/logic/52-lens-overrides.sqllogic +566 -0
- package/test/logic/53-materialized-views-rowtime.sqllogic +1601 -0
- package/test/logic/53-reserved-tags.sqllogic +252 -0
- package/test/logic/53.1-materialized-view-write-through.sqllogic +329 -0
- package/test/logic/53.2-materialized-view-rename-propagation.sqllogic +483 -0
- package/test/logic/53.3-materialized-view-constraint-only-ddl.sqllogic +409 -0
- package/test/logic/53.3.1-materialized-view-index-ddl-irrelevance.sqllogic +29 -0
- package/test/logic/53.4-materialized-view-structural-alter-restore.sqllogic +436 -0
- package/test/logic/54-covering-mv-enforcement.sqllogic +314 -0
- package/test/logic/54.1-covering-mv-partial-enforcement.sqllogic +34 -0
- package/test/logic/55-internal-eviction-reporting.sqllogic +89 -0
- package/test/logic/55-lens-prover.sqllogic +202 -0
- package/test/logic/55.1-eviction-restrict-fk.sqllogic +148 -0
- package/test/logic/55.5-lens-authored-inverse.sqllogic +1468 -0
- package/test/logic/80-grow-retrieve-pass.sqllogic +79 -0
- package/test/logic/81-quickpick.sqllogic +24 -0
- package/test/logic/82-bloom-join.sqllogic +185 -0
- package/test/logic/83-merge-join.sqllogic +280 -0
- package/test/logic/84-asof-scan.sqllogic +238 -0
- package/test/logic/84-key-cardinality.sqllogic +50 -0
- package/test/logic/85-relational-const-folding.sqllogic +51 -0
- package/test/logic/86-scalar-cse.sqllogic +42 -0
- package/test/logic/90-error_paths.sqllogic +114 -0
- package/test/logic/90.1-parse-errors.sqllogic +77 -0
- package/test/logic/90.2-alter-table-errors.sqllogic +53 -0
- package/test/logic/90.2.1-alter-extra-errors.sqllogic +51 -0
- package/test/logic/90.3-expression-errors.sqllogic +43 -0
- package/test/logic/90.4-dml-errors.sqllogic +47 -0
- package/test/logic/90.5-unsupported-join-types.sqllogic +37 -0
- package/test/logic/90.5.1-right-full-join-read.sqllogic +157 -0
- package/test/logic/90.6-select-error-paths.sqllogic +57 -0
- package/test/logic/91-merge-join-edge-cases.sqllogic +159 -0
- package/test/logic/92-hash-aggregate-edge-cases.sqllogic +139 -0
- package/test/logic/93-ddl-view-edge-cases.sqllogic +104 -0
- package/test/logic/93.1-view-error-paths.sqllogic +74 -0
- package/test/logic/93.2-view-mutation-pending.sqllogic +108 -0
- package/test/logic/93.3-view-mutation-or-clause.sqllogic +60 -0
- package/test/logic/93.4-view-mutation.sqllogic +4881 -0
- package/test/logic/93.4.1-view-mutation-partial-unique-cardinality.sqllogic +31 -0
- package/test/logic/93.5-authored-inverse.sqllogic +415 -0
- package/test/logic/93.6-set-op-flagless-write.sqllogic +862 -0
- package/test/logic/94-tvf-edge-cases.sqllogic +58 -0
- package/test/logic/94.1-limit-offset-edge-cases.sqllogic +109 -0
- package/test/logic/94.2-limit-offset-extras.sqllogic +98 -0
- package/test/logic/95-assertions.sqllogic +1417 -0
- package/test/logic/96-subquery-edge-cases.sqllogic +276 -0
- package/test/logic/97-json-function-edge-cases.sqllogic +633 -0
- package/test/logic/97.1-json-blob-and-special-values.sqllogic +92 -0
- package/test/logic/98-temporal-edge-cases.sqllogic +515 -0
- package/test/logic/99-conversion-edge-cases.sqllogic +325 -0
- package/test/logic/99.0.1-schema-index-listing.sqllogic +21 -0
- package/test/logic/99.1-cast-syntax-extras.sqllogic +167 -0
- package/test/logic/drop-unique-index.sqllogic +88 -0
- 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
|