@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,232 @@
|
|
|
1
|
+
-- Deferred FK checks queued before an `alter table ... rename to` in the SAME
|
|
2
|
+
-- transaction must still evaluate at commit, against the table's CURRENT name.
|
|
3
|
+
-- Regression for: a queued check whose evaluator was compiled against the
|
|
4
|
+
-- pre-rename name failed the COMMIT with an engine-level "connect failed"
|
|
5
|
+
-- (memory) or a false constraint violation (store) instead of passing.
|
|
6
|
+
|
|
7
|
+
pragma foreign_keys = true;
|
|
8
|
+
|
|
9
|
+
-- ===================================
|
|
10
|
+
-- 1. Renaming the PARENT after the deferred check is queued
|
|
11
|
+
-- ===================================
|
|
12
|
+
|
|
13
|
+
create table dr_p (id integer primary key);
|
|
14
|
+
create table dr_c (id integer primary key,
|
|
15
|
+
pid integer null references dr_p(id) deferrable initially deferred);
|
|
16
|
+
|
|
17
|
+
begin;
|
|
18
|
+
insert into dr_c values (10, 1); -- queues the deferred FK check against dr_p
|
|
19
|
+
alter table dr_p rename to dr_p2;
|
|
20
|
+
insert into dr_p2 values (1); -- the parent row the check needs
|
|
21
|
+
commit;
|
|
22
|
+
|
|
23
|
+
select id, pid from dr_c order by id;
|
|
24
|
+
→ [{"id":10,"pid":1}]
|
|
25
|
+
|
|
26
|
+
select id from dr_p2 order by id;
|
|
27
|
+
→ [{"id":1}]
|
|
28
|
+
|
|
29
|
+
-- ===================================
|
|
30
|
+
-- 2. Same shape, but the parent row never arrives — the check must still be
|
|
31
|
+
-- evaluated and must REPORT the violation (not an internal error).
|
|
32
|
+
-- ===================================
|
|
33
|
+
|
|
34
|
+
create table dr_p3 (id integer primary key);
|
|
35
|
+
create table dr_c3 (id integer primary key,
|
|
36
|
+
pid integer null references dr_p3(id) deferrable initially deferred);
|
|
37
|
+
|
|
38
|
+
begin;
|
|
39
|
+
insert into dr_c3 values (10, 1);
|
|
40
|
+
alter table dr_p3 rename to dr_p4;
|
|
41
|
+
commit;
|
|
42
|
+
-- error: constraint
|
|
43
|
+
|
|
44
|
+
select count(*) as cnt from dr_c3;
|
|
45
|
+
→ [{"cnt":0}]
|
|
46
|
+
|
|
47
|
+
-- ===================================
|
|
48
|
+
-- 3. Self-referential deferred FK + rename (case 10 of
|
|
49
|
+
-- 41-fk-cascade-conflict-and-self-ref.sqllogic, plus a rename)
|
|
50
|
+
-- ===================================
|
|
51
|
+
|
|
52
|
+
create table dr_sd (id integer primary key,
|
|
53
|
+
pid integer null references dr_sd(id) deferrable initially deferred);
|
|
54
|
+
|
|
55
|
+
begin;
|
|
56
|
+
insert into dr_sd values (2, 1); -- forward reference: parent not there yet
|
|
57
|
+
alter table dr_sd rename to dr_sd2;
|
|
58
|
+
insert into dr_sd2 values (1, null);
|
|
59
|
+
commit;
|
|
60
|
+
|
|
61
|
+
select id, pid from dr_sd2 order by id;
|
|
62
|
+
→ [{"id":1,"pid":null},{"id":2,"pid":1}]
|
|
63
|
+
|
|
64
|
+
-- ===================================
|
|
65
|
+
-- 4. Renaming only the CHILD (the table the queued row belongs to)
|
|
66
|
+
-- ===================================
|
|
67
|
+
|
|
68
|
+
create table dr_p5 (id integer primary key);
|
|
69
|
+
create table dr_c5 (id integer primary key,
|
|
70
|
+
pid integer null references dr_p5(id) deferrable initially deferred);
|
|
71
|
+
|
|
72
|
+
begin;
|
|
73
|
+
insert into dr_c5 values (10, 1);
|
|
74
|
+
alter table dr_c5 rename to dr_c6;
|
|
75
|
+
insert into dr_p5 values (1);
|
|
76
|
+
commit;
|
|
77
|
+
|
|
78
|
+
select id, pid from dr_c6 order by id;
|
|
79
|
+
→ [{"id":10,"pid":1}]
|
|
80
|
+
|
|
81
|
+
-- ===================================
|
|
82
|
+
-- 5. Two renames of the same table in one transaction
|
|
83
|
+
-- ===================================
|
|
84
|
+
|
|
85
|
+
create table dr_p7 (id integer primary key);
|
|
86
|
+
create table dr_c7 (id integer primary key,
|
|
87
|
+
pid integer null references dr_p7(id) deferrable initially deferred);
|
|
88
|
+
|
|
89
|
+
begin;
|
|
90
|
+
insert into dr_c7 values (10, 1);
|
|
91
|
+
alter table dr_p7 rename to dr_p8;
|
|
92
|
+
alter table dr_p8 rename to dr_p9;
|
|
93
|
+
insert into dr_p9 values (1);
|
|
94
|
+
commit;
|
|
95
|
+
|
|
96
|
+
select id, pid from dr_c7 order by id;
|
|
97
|
+
→ [{"id":10,"pid":1}]
|
|
98
|
+
|
|
99
|
+
-- ===================================
|
|
100
|
+
-- 6. Renaming a column the deferred check reads, on both sides
|
|
101
|
+
-- ===================================
|
|
102
|
+
|
|
103
|
+
create table dr_p10 (id integer primary key, tag text);
|
|
104
|
+
create table dr_c10 (id integer primary key,
|
|
105
|
+
pid integer null references dr_p10(id) deferrable initially deferred);
|
|
106
|
+
|
|
107
|
+
begin;
|
|
108
|
+
insert into dr_c10 values (10, 1);
|
|
109
|
+
alter table dr_p10 rename column id to key_id;
|
|
110
|
+
alter table dr_c10 rename column pid to parent_id;
|
|
111
|
+
insert into dr_p10 values (1, 'x');
|
|
112
|
+
commit;
|
|
113
|
+
|
|
114
|
+
select id, parent_id from dr_c10 order by id;
|
|
115
|
+
→ [{"id":10,"parent_id":1}]
|
|
116
|
+
|
|
117
|
+
-- ===================================
|
|
118
|
+
-- 7. A freed name reused by a FRESH table in the same transaction must NOT be
|
|
119
|
+
-- redirected — this is why the remap is per queued entry, not database-wide.
|
|
120
|
+
-- ===================================
|
|
121
|
+
|
|
122
|
+
create table dr_p11 (id integer primary key);
|
|
123
|
+
create table dr_c11 (id integer primary key,
|
|
124
|
+
pid integer null references dr_p11(id) deferrable initially deferred);
|
|
125
|
+
|
|
126
|
+
begin;
|
|
127
|
+
insert into dr_c11 values (10, 1);
|
|
128
|
+
alter table dr_p11 rename to dr_p12; -- the FK now points at dr_p12
|
|
129
|
+
insert into dr_p12 values (1);
|
|
130
|
+
create table dr_p11 (id integer primary key); -- fresh, unrelated table
|
|
131
|
+
insert into dr_p11 values (99);
|
|
132
|
+
commit;
|
|
133
|
+
|
|
134
|
+
select id, pid from dr_c11 order by id;
|
|
135
|
+
→ [{"id":10,"pid":1}]
|
|
136
|
+
|
|
137
|
+
select id from dr_p11 order by id;
|
|
138
|
+
→ [{"id":99}]
|
|
139
|
+
|
|
140
|
+
-- ===================================
|
|
141
|
+
-- 8. …and renaming that reused name again must still not drag the parked check
|
|
142
|
+
-- along: the parked entry already knows where ITS table went.
|
|
143
|
+
-- ===================================
|
|
144
|
+
|
|
145
|
+
create table dr_p13 (id integer primary key);
|
|
146
|
+
create table dr_c13 (id integer primary key,
|
|
147
|
+
pid integer null references dr_p13(id) deferrable initially deferred);
|
|
148
|
+
|
|
149
|
+
begin;
|
|
150
|
+
insert into dr_c13 values (10, 1);
|
|
151
|
+
alter table dr_p13 rename to dr_p14; -- parked check now reads dr_p14
|
|
152
|
+
insert into dr_p14 values (1); -- the parent row it needs
|
|
153
|
+
create table dr_p13 (id integer primary key); -- fresh table takes the freed name
|
|
154
|
+
insert into dr_p13 values (99);
|
|
155
|
+
alter table dr_p13 rename to dr_p15; -- must NOT re-point the parked check
|
|
156
|
+
commit;
|
|
157
|
+
|
|
158
|
+
select id, pid from dr_c13 order by id;
|
|
159
|
+
→ [{"id":10,"pid":1}]
|
|
160
|
+
|
|
161
|
+
select id from dr_p14 order by id;
|
|
162
|
+
→ [{"id":1}]
|
|
163
|
+
|
|
164
|
+
select id from dr_p15 order by id;
|
|
165
|
+
→ [{"id":99}]
|
|
166
|
+
|
|
167
|
+
-- ===================================
|
|
168
|
+
-- 9. Cross-schema: the remap keys are `<schema>.<name>`, so a rename in ONE
|
|
169
|
+
-- schema must never follow a same-named table in another. Here the parked
|
|
170
|
+
-- check reads `s2.dr_x`, which is renamed to `dr_x2`; renaming the unrelated
|
|
171
|
+
-- `main.dr_x2` afterwards must leave the parked check pointing at `s2.dr_x2`.
|
|
172
|
+
-- ===================================
|
|
173
|
+
|
|
174
|
+
declare schema s2 {}
|
|
175
|
+
apply schema s2;
|
|
176
|
+
-- run
|
|
177
|
+
|
|
178
|
+
create table s2.dr_x (id integer primary key);
|
|
179
|
+
create table dr_x2 (id integer primary key); -- main, colliding bare name
|
|
180
|
+
create table dr_cx (id integer primary key,
|
|
181
|
+
pid integer null references s2.dr_x(id) deferrable initially deferred);
|
|
182
|
+
|
|
183
|
+
begin;
|
|
184
|
+
insert into dr_cx values (10, 1);
|
|
185
|
+
alter table s2.dr_x rename to dr_x2; -- parked check now reads s2.dr_x2
|
|
186
|
+
insert into s2.dr_x2 values (1); -- the parent row it needs
|
|
187
|
+
alter table dr_x2 rename to dr_x3; -- main.dr_x2 — must NOT drag the check along
|
|
188
|
+
commit;
|
|
189
|
+
|
|
190
|
+
select id, pid from dr_cx order by id;
|
|
191
|
+
→ [{"id":10,"pid":1}]
|
|
192
|
+
|
|
193
|
+
select id from s2.dr_x2 order by id;
|
|
194
|
+
→ [{"id":1}]
|
|
195
|
+
|
|
196
|
+
-- ===================================
|
|
197
|
+
-- 10. The other deferred shape: a CHECK containing a subquery is auto-deferred
|
|
198
|
+
-- (constraint-builder's `needsDeferred`), so this parks a check that reads
|
|
199
|
+
-- `dr_lookup` — a table neither side of any FK — and then renames it.
|
|
200
|
+
--
|
|
201
|
+
-- The value the check needs is inserted into the RENAMED table, after the
|
|
202
|
+
-- rename and before commit. This discriminates the remap for real: the
|
|
203
|
+
-- check is genuinely deferred to COMMIT and re-reads the live table there
|
|
204
|
+
-- (`bug-deferred-subquery-check-reads-stale-state`), so a broken
|
|
205
|
+
-- `notifyTableRename` remap — or a regression back to immediate
|
|
206
|
+
-- evaluation — would read the wrong table state and reject 'z', which
|
|
207
|
+
-- only exists under the table's post-rename name.
|
|
208
|
+
-- ===================================
|
|
209
|
+
|
|
210
|
+
create table dr_lookup (code text primary key);
|
|
211
|
+
insert into dr_lookup values ('a'), ('b');
|
|
212
|
+
create table dr_ck (id integer primary key, code text,
|
|
213
|
+
constraint dr_ck_code check (code in (select code from dr_lookup)));
|
|
214
|
+
|
|
215
|
+
begin;
|
|
216
|
+
insert into dr_ck values (1, 'z');
|
|
217
|
+
alter table dr_lookup rename to dr_lookup2;
|
|
218
|
+
insert into dr_lookup2 values ('z');
|
|
219
|
+
commit;
|
|
220
|
+
|
|
221
|
+
select id, code from dr_ck order by id;
|
|
222
|
+
→ [{"id":1,"code":"z"}]
|
|
223
|
+
|
|
224
|
+
-- …and the violation is still REPORTED as a constraint failure across a rename.
|
|
225
|
+
begin;
|
|
226
|
+
insert into dr_ck values (2, 'zzz');
|
|
227
|
+
alter table dr_lookup2 rename to dr_lookup3;
|
|
228
|
+
commit;
|
|
229
|
+
-- error: constraint
|
|
230
|
+
|
|
231
|
+
select count(*) as cnt from dr_ck;
|
|
232
|
+
→ [{"cnt":1}]
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
-- ALTER backfill DEFAULTs are converted to the column's declared type.
|
|
2
|
+
--
|
|
3
|
+
-- A backfilled cell must be indistinguishable from the cell a fresh INSERT under
|
|
4
|
+
-- the same DEFAULT would produce — same value, same typeof — for the literal
|
|
5
|
+
-- ADD COLUMN path, the per-row `new.<col>` evaluator path, and the SET NOT NULL
|
|
6
|
+
-- backfill. Runs under both the memory module (`yarn test`) and the store module
|
|
7
|
+
-- (`yarn test:store`); `typeof(...)` reads the stored value, so it is
|
|
8
|
+
-- module-agnostic.
|
|
9
|
+
|
|
10
|
+
-- ============================================================
|
|
11
|
+
-- 1. ADD COLUMN, literal default whose type differs from the column's
|
|
12
|
+
-- ============================================================
|
|
13
|
+
|
|
14
|
+
create table t_lit (a integer primary key, b integer);
|
|
15
|
+
insert into t_lit values (1, 10);
|
|
16
|
+
-- run
|
|
17
|
+
|
|
18
|
+
alter table t_lit add column n integer default '7';
|
|
19
|
+
-- run
|
|
20
|
+
|
|
21
|
+
-- Row 2 is inserted AFTER the ALTER, so the same DEFAULT applies through the
|
|
22
|
+
-- ordinary write path. Both rows must agree on value and on typeof.
|
|
23
|
+
insert into t_lit (a, b) values (2, 20);
|
|
24
|
+
-- run
|
|
25
|
+
|
|
26
|
+
select a, n, typeof(n) as t from t_lit order by a;
|
|
27
|
+
→ [{"a":1,"n":7,"t":"integer"},{"a":2,"n":7,"t":"integer"}]
|
|
28
|
+
|
|
29
|
+
drop table t_lit;
|
|
30
|
+
-- run
|
|
31
|
+
|
|
32
|
+
-- Signed numeric default (a UnaryExpr, not a bare literal) on a REAL column.
|
|
33
|
+
create table t_neg (a integer primary key, b integer);
|
|
34
|
+
insert into t_neg values (1, 10);
|
|
35
|
+
-- run
|
|
36
|
+
|
|
37
|
+
alter table t_neg add column n real default -123.0;
|
|
38
|
+
-- run
|
|
39
|
+
|
|
40
|
+
insert into t_neg (a, b) values (2, 20);
|
|
41
|
+
-- run
|
|
42
|
+
|
|
43
|
+
-- `typeof` reports the stored VALUE's storage class, and an integral REAL reads back
|
|
44
|
+
-- as 'integer' — on both rows, which is the point: backfill and insert agree.
|
|
45
|
+
select a, n, typeof(n) as t from t_neg order by a;
|
|
46
|
+
→ [{"a":1,"n":-123,"t":"integer"},{"a":2,"n":-123,"t":"integer"}]
|
|
47
|
+
|
|
48
|
+
drop table t_neg;
|
|
49
|
+
-- run
|
|
50
|
+
|
|
51
|
+
-- ============================================================
|
|
52
|
+
-- 2. ADD COLUMN, literal default on a JSON column
|
|
53
|
+
--
|
|
54
|
+
-- The DEFAULT's raw source text ('"abc"') is not the stored form any write path
|
|
55
|
+
-- produces — the stored form is the parsed JSON scalar (abc).
|
|
56
|
+
-- ============================================================
|
|
57
|
+
|
|
58
|
+
create table t_json (a integer primary key, b integer);
|
|
59
|
+
insert into t_json values (1, 10);
|
|
60
|
+
-- run
|
|
61
|
+
|
|
62
|
+
alter table t_json add column n json default '"abc"';
|
|
63
|
+
-- run
|
|
64
|
+
|
|
65
|
+
insert into t_json (a, b) values (2, 20);
|
|
66
|
+
-- run
|
|
67
|
+
|
|
68
|
+
select a, n from t_json order by a;
|
|
69
|
+
→ [{"a":1,"n":"abc"},{"a":2,"n":"abc"}]
|
|
70
|
+
|
|
71
|
+
drop table t_json;
|
|
72
|
+
-- run
|
|
73
|
+
|
|
74
|
+
-- ============================================================
|
|
75
|
+
-- 2b. ADD COLUMN, literal default on temporal columns
|
|
76
|
+
--
|
|
77
|
+
-- A temporal type's parse CANONICALIZES, so the backfilled cell must hold the
|
|
78
|
+
-- canonical spelling (the one `set data type` rewrites to and an INSERT stores),
|
|
79
|
+
-- not the DEFAULT's raw source text.
|
|
80
|
+
-- ============================================================
|
|
81
|
+
|
|
82
|
+
create table t_temporal (a integer primary key, b integer);
|
|
83
|
+
insert into t_temporal values (1, 10);
|
|
84
|
+
-- run
|
|
85
|
+
|
|
86
|
+
alter table t_temporal add column d date default '2024-06-05T00:00:00Z';
|
|
87
|
+
-- run
|
|
88
|
+
|
|
89
|
+
alter table t_temporal add column sp timespan default '1 hour';
|
|
90
|
+
-- run
|
|
91
|
+
|
|
92
|
+
insert into t_temporal (a, b) values (2, 20);
|
|
93
|
+
-- run
|
|
94
|
+
|
|
95
|
+
select a, d, sp from t_temporal order by a;
|
|
96
|
+
→ [{"a":1,"d":"2024-06-05","sp":"PT1H"},{"a":2,"d":"2024-06-05","sp":"PT1H"}]
|
|
97
|
+
|
|
98
|
+
drop table t_temporal;
|
|
99
|
+
-- run
|
|
100
|
+
|
|
101
|
+
-- ============================================================
|
|
102
|
+
-- 3. ADD COLUMN, per-row `new.<col>` evaluator default across types
|
|
103
|
+
-- ============================================================
|
|
104
|
+
|
|
105
|
+
create table t_eval (a integer primary key, b text);
|
|
106
|
+
insert into t_eval values (1, '7');
|
|
107
|
+
-- run
|
|
108
|
+
|
|
109
|
+
alter table t_eval add column n integer default (new.b);
|
|
110
|
+
-- run
|
|
111
|
+
|
|
112
|
+
insert into t_eval (a, b) values (2, '20');
|
|
113
|
+
-- run
|
|
114
|
+
|
|
115
|
+
select a, n, typeof(n) as t from t_eval order by a;
|
|
116
|
+
→ [{"a":1,"n":7,"t":"integer"},{"a":2,"n":20,"t":"integer"}]
|
|
117
|
+
|
|
118
|
+
drop table t_eval;
|
|
119
|
+
-- run
|
|
120
|
+
|
|
121
|
+
-- ============================================================
|
|
122
|
+
-- 4. Regression guard: identity case must NOT be re-converted
|
|
123
|
+
--
|
|
124
|
+
-- When the default expression's static type already IS the new column's type,
|
|
125
|
+
-- the evaluated value is ALREADY in stored form and must be copied verbatim.
|
|
126
|
+
-- JSON's parse reads a plain JS string as JSON *source*, so a blanket coercion
|
|
127
|
+
-- would turn the stored text `9` into the number 9 and throw on stored `abc`.
|
|
128
|
+
-- ============================================================
|
|
129
|
+
|
|
130
|
+
create table t_ident (a integer primary key, j json);
|
|
131
|
+
insert into t_ident values (1, '"abc"'), (2, '9');
|
|
132
|
+
-- run
|
|
133
|
+
|
|
134
|
+
select a, j from t_ident order by a;
|
|
135
|
+
→ [{"a":1,"j":"abc"},{"a":2,"j":9}]
|
|
136
|
+
|
|
137
|
+
alter table t_ident add column k json default (new.j);
|
|
138
|
+
-- run
|
|
139
|
+
|
|
140
|
+
select a, k from t_ident order by a;
|
|
141
|
+
→ [{"a":1,"k":"abc"},{"a":2,"k":9}]
|
|
142
|
+
|
|
143
|
+
drop table t_ident;
|
|
144
|
+
-- run
|
|
145
|
+
|
|
146
|
+
-- ============================================================
|
|
147
|
+
-- 5. ALTER COLUMN ... SET NOT NULL backfills the converted DEFAULT
|
|
148
|
+
-- ============================================================
|
|
149
|
+
|
|
150
|
+
create table t_snn (a integer primary key, b integer null default '5');
|
|
151
|
+
insert into t_snn (a, b) values (1, null);
|
|
152
|
+
-- run
|
|
153
|
+
|
|
154
|
+
alter table t_snn alter column b set not null;
|
|
155
|
+
-- run
|
|
156
|
+
|
|
157
|
+
select a, b, typeof(b) as t from t_snn order by a;
|
|
158
|
+
→ [{"a":1,"b":5,"t":"integer"}]
|
|
159
|
+
|
|
160
|
+
-- The backfilled cell matches what an INSERT letting the DEFAULT apply stores.
|
|
161
|
+
insert into t_snn (a) values (2);
|
|
162
|
+
-- run
|
|
163
|
+
|
|
164
|
+
select a, b, typeof(b) as t from t_snn order by a;
|
|
165
|
+
→ [{"a":1,"b":5,"t":"integer"},{"a":2,"b":5,"t":"integer"}]
|
|
166
|
+
|
|
167
|
+
drop table t_snn;
|
|
168
|
+
-- run
|
|
169
|
+
|
|
170
|
+
-- ============================================================
|
|
171
|
+
-- 6. An unconvertible literal default rejects the ALTER
|
|
172
|
+
--
|
|
173
|
+
-- Same MISMATCH the equivalent INSERT raises, and — deliberately — regardless of
|
|
174
|
+
-- how many rows the table happens to hold, so DDL acceptance does not depend on
|
|
175
|
+
-- the data.
|
|
176
|
+
-- ============================================================
|
|
177
|
+
|
|
178
|
+
create table t_bad (a integer primary key);
|
|
179
|
+
insert into t_bad values (1);
|
|
180
|
+
-- run
|
|
181
|
+
|
|
182
|
+
alter table t_bad add column n integer default 'abc';
|
|
183
|
+
-- error: Type conversion failed
|
|
184
|
+
|
|
185
|
+
-- The column was not added.
|
|
186
|
+
select * from t_bad order by a;
|
|
187
|
+
→ [{"a":1}]
|
|
188
|
+
|
|
189
|
+
drop table t_bad;
|
|
190
|
+
-- run
|
|
191
|
+
|
|
192
|
+
-- Empty table: same rejection.
|
|
193
|
+
create table t_bad_empty (a integer primary key);
|
|
194
|
+
-- run
|
|
195
|
+
|
|
196
|
+
alter table t_bad_empty add column n integer default 'abc';
|
|
197
|
+
-- error: Type conversion failed
|
|
198
|
+
|
|
199
|
+
drop table t_bad_empty;
|
|
200
|
+
-- run
|