@quereus/quereus 4.20.1 → 4.20.2
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/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 +173 -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,382 @@
|
|
|
1
|
+
-- ALTER TABLE ALTER COLUMN: per-attribute changes
|
|
2
|
+
-- Covers SET/DROP NOT NULL, SET DATA TYPE, SET/DROP DEFAULT.
|
|
3
|
+
|
|
4
|
+
-- ===================================
|
|
5
|
+
-- 1. DROP NOT NULL (relax) then insert null
|
|
6
|
+
-- ===================================
|
|
7
|
+
|
|
8
|
+
create table t_notnull (id integer primary key, c integer not null);
|
|
9
|
+
insert into t_notnull values (1, 10);
|
|
10
|
+
alter table t_notnull alter column c drop not null;
|
|
11
|
+
insert into t_notnull values (2, null);
|
|
12
|
+
|
|
13
|
+
select * from t_notnull order by id;
|
|
14
|
+
→ [{"id": 1, "c": 10}, {"id": 2, "c": null}]
|
|
15
|
+
|
|
16
|
+
drop table t_notnull;
|
|
17
|
+
|
|
18
|
+
-- ===================================
|
|
19
|
+
-- 2. SET NOT NULL (tighten) — fails on existing NULL
|
|
20
|
+
-- ===================================
|
|
21
|
+
|
|
22
|
+
create table t_tighten (id integer primary key, c integer null);
|
|
23
|
+
insert into t_tighten values (1, 10);
|
|
24
|
+
insert into t_tighten values (2, null);
|
|
25
|
+
-- run
|
|
26
|
+
|
|
27
|
+
alter table t_tighten alter column c set not null;
|
|
28
|
+
-- error: contains NULL values
|
|
29
|
+
|
|
30
|
+
drop table t_tighten;
|
|
31
|
+
|
|
32
|
+
-- ===================================
|
|
33
|
+
-- 3. SET NOT NULL succeeds when no NULLs present, rejects null insert
|
|
34
|
+
-- ===================================
|
|
35
|
+
|
|
36
|
+
create table t_ok (id integer primary key, c integer null);
|
|
37
|
+
insert into t_ok values (1, 10);
|
|
38
|
+
insert into t_ok values (2, 20);
|
|
39
|
+
alter table t_ok alter column c set not null;
|
|
40
|
+
-- run
|
|
41
|
+
|
|
42
|
+
insert into t_ok values (3, null);
|
|
43
|
+
-- error: NOT NULL
|
|
44
|
+
|
|
45
|
+
-- Confirm pre-existing rows unharmed
|
|
46
|
+
select * from t_ok order by id;
|
|
47
|
+
→ [{"id": 1, "c": 10}, {"id": 2, "c": 20}]
|
|
48
|
+
|
|
49
|
+
drop table t_ok;
|
|
50
|
+
|
|
51
|
+
-- ===================================
|
|
52
|
+
-- 4. SET DEFAULT, then DROP DEFAULT
|
|
53
|
+
-- ===================================
|
|
54
|
+
|
|
55
|
+
create table t_def (id integer primary key, c integer null);
|
|
56
|
+
insert into t_def values (1, 10);
|
|
57
|
+
alter table t_def alter column c set default 99;
|
|
58
|
+
insert into t_def (id) values (2);
|
|
59
|
+
|
|
60
|
+
select * from t_def order by id;
|
|
61
|
+
→ [{"id": 1, "c": 10}, {"id": 2, "c": 99}]
|
|
62
|
+
|
|
63
|
+
alter table t_def alter column c drop default;
|
|
64
|
+
insert into t_def (id) values (3);
|
|
65
|
+
|
|
66
|
+
select * from t_def where id = 3;
|
|
67
|
+
→ [{"id": 3, "c": null}]
|
|
68
|
+
|
|
69
|
+
drop table t_def;
|
|
70
|
+
|
|
71
|
+
-- ===================================
|
|
72
|
+
-- 5. SET DATA TYPE — integer → real preserves numeric values
|
|
73
|
+
-- ===================================
|
|
74
|
+
|
|
75
|
+
create table t_type (id integer primary key, c integer null);
|
|
76
|
+
insert into t_type values (1, 10);
|
|
77
|
+
insert into t_type values (2, 20);
|
|
78
|
+
alter table t_type alter column c set data type real;
|
|
79
|
+
|
|
80
|
+
select * from t_type order by id;
|
|
81
|
+
→ [{"id": 1, "c": 10}, {"id": 2, "c": 20}]
|
|
82
|
+
|
|
83
|
+
drop table t_type;
|
|
84
|
+
|
|
85
|
+
-- ===================================
|
|
86
|
+
-- 6. DROP NOT NULL on a PK column is permitted (key membership does not imply NOT NULL —
|
|
87
|
+
-- docs/schema.md § "Primary-key nullability") and is metadata-only: no row is rewritten,
|
|
88
|
+
-- so no key moves. SET DATA TYPE on a PK column is a DIFFERENT rule and still refused.
|
|
89
|
+
-- Full coverage in 43.3-nullable-primary-key § 9.
|
|
90
|
+
-- ===================================
|
|
91
|
+
|
|
92
|
+
create table t_pk (id integer primary key, c integer);
|
|
93
|
+
insert into t_pk values (1, 10);
|
|
94
|
+
-- run
|
|
95
|
+
|
|
96
|
+
alter table t_pk alter column id drop not null;
|
|
97
|
+
-- run
|
|
98
|
+
|
|
99
|
+
select name, "notnull", pk from table_info('t_pk') where name = 'id';
|
|
100
|
+
→ [{"name":"id","notnull":0,"pk":1}]
|
|
101
|
+
|
|
102
|
+
-- The existing row is untouched and still addressable by key.
|
|
103
|
+
select id, c from t_pk;
|
|
104
|
+
→ [{"id":1,"c":10}]
|
|
105
|
+
|
|
106
|
+
alter table t_pk alter column id set data type text;
|
|
107
|
+
-- error: Cannot SET DATA TYPE on PRIMARY KEY column
|
|
108
|
+
|
|
109
|
+
drop table t_pk;
|
|
110
|
+
|
|
111
|
+
-- ===================================
|
|
112
|
+
-- 7. SET DATA TYPE text -> integer converts existing rows in place
|
|
113
|
+
-- (values must be physically rewritten, not left as text, and a lookup on the
|
|
114
|
+
-- column must find rows by the new numeric value; the secondary-index variant is
|
|
115
|
+
-- 41.2.2-alter-column-retype-index-rebuild)
|
|
116
|
+
-- ===================================
|
|
117
|
+
|
|
118
|
+
create table t_conv (id integer primary key, v text);
|
|
119
|
+
insert into t_conv values (1, '10'), (2, '9');
|
|
120
|
+
alter table t_conv alter column v set data type integer;
|
|
121
|
+
|
|
122
|
+
select id, v, typeof(v) from t_conv order by id;
|
|
123
|
+
→ [{"id": 1, "v": 10, "typeof(v)": "integer"}, {"id": 2, "v": 9, "typeof(v)": "integer"}]
|
|
124
|
+
|
|
125
|
+
select id from t_conv where v = 9;
|
|
126
|
+
→ [{"id": 2}]
|
|
127
|
+
|
|
128
|
+
drop table t_conv;
|
|
129
|
+
|
|
130
|
+
-- ===================================
|
|
131
|
+
-- 8. SET NOT NULL backfills existing NULL rows from the column default
|
|
132
|
+
-- (no NULL may survive in the column after the ALTER succeeds)
|
|
133
|
+
-- ===================================
|
|
134
|
+
|
|
135
|
+
create table t_backfill (id integer primary key, v integer null default 7);
|
|
136
|
+
insert into t_backfill values (1, null), (2, null), (3, 5);
|
|
137
|
+
alter table t_backfill alter column v set not null;
|
|
138
|
+
|
|
139
|
+
select id, v from t_backfill order by id;
|
|
140
|
+
→ [{"id": 1, "v": 7}, {"id": 2, "v": 7}, {"id": 3, "v": 5}]
|
|
141
|
+
|
|
142
|
+
select count(*) as n from t_backfill where v is null;
|
|
143
|
+
→ [{"n": 0}]
|
|
144
|
+
|
|
145
|
+
drop table t_backfill;
|
|
146
|
+
|
|
147
|
+
-- ===================================
|
|
148
|
+
-- 9. SET DATA TYPE conversion failure leaves ALL rows untouched
|
|
149
|
+
-- (a row that converts must NOT be rewritten if a LATER row fails to
|
|
150
|
+
-- convert — the ALTER is all-or-nothing, not partial)
|
|
151
|
+
-- ===================================
|
|
152
|
+
|
|
153
|
+
create table t_partial (id integer primary key, v text);
|
|
154
|
+
insert into t_partial values (1, '10'), (2, 'abc');
|
|
155
|
+
-- run
|
|
156
|
+
|
|
157
|
+
alter table t_partial alter column v set data type integer;
|
|
158
|
+
-- error: Cannot convert value
|
|
159
|
+
|
|
160
|
+
-- Row 1 ('10') converted fine but row 2 ('abc') failed; neither may be
|
|
161
|
+
-- rewritten. Both stay as their original text values under the unchanged type.
|
|
162
|
+
select id, v, typeof(v) from t_partial order by id;
|
|
163
|
+
→ [{"id": 1, "v": "10", "typeof(v)": "text"}, {"id": 2, "v": "abc", "typeof(v)": "text"}]
|
|
164
|
+
|
|
165
|
+
drop table t_partial;
|
|
166
|
+
|
|
167
|
+
-- ===================================
|
|
168
|
+
-- 10. SET DATA TYPE within one storage class still validates values
|
|
169
|
+
-- (text → date shares the TEXT storage class, but a value DATE cannot
|
|
170
|
+
-- parse must reject the ALTER, leaving type and value untouched — the
|
|
171
|
+
-- column must never declare DATE while holding 'hello')
|
|
172
|
+
-- ===================================
|
|
173
|
+
|
|
174
|
+
create table t_narrow (id integer primary key, v text);
|
|
175
|
+
insert into t_narrow values (1, 'hello');
|
|
176
|
+
-- run
|
|
177
|
+
|
|
178
|
+
alter table t_narrow alter column v set data type date;
|
|
179
|
+
-- error: Cannot convert value
|
|
180
|
+
|
|
181
|
+
select v, typeof(v) from t_narrow;
|
|
182
|
+
→ [{"v": "hello", "typeof(v)": "text"}]
|
|
183
|
+
|
|
184
|
+
drop table t_narrow;
|
|
185
|
+
|
|
186
|
+
-- ===================================
|
|
187
|
+
-- 11. SET DATA TYPE within one storage class normalizes values
|
|
188
|
+
-- (an accepted retype rewrites each value to the new type's canonical
|
|
189
|
+
-- spelling — the state an INSERT would have produced. DATE compares
|
|
190
|
+
-- BINARY over the stored text, so without the rewrite the row would be
|
|
191
|
+
-- invisible to an equality lookup for the canonical date)
|
|
192
|
+
-- ===================================
|
|
193
|
+
|
|
194
|
+
create table t_norm (id integer primary key, v text);
|
|
195
|
+
insert into t_norm values (1, '2024-06-05T00:00:00Z');
|
|
196
|
+
alter table t_norm alter column v set data type date;
|
|
197
|
+
|
|
198
|
+
select id, v from t_norm;
|
|
199
|
+
→ [{"id": 1, "v": "2024-06-05"}]
|
|
200
|
+
|
|
201
|
+
select id from t_norm where v = '2024-06-05';
|
|
202
|
+
→ [{"id": 1}]
|
|
203
|
+
|
|
204
|
+
drop table t_norm;
|
|
205
|
+
|
|
206
|
+
-- ===================================
|
|
207
|
+
-- 12. text → timespan normalizes human-readable durations to ISO 8601
|
|
208
|
+
-- ===================================
|
|
209
|
+
|
|
210
|
+
create table t_span (id integer primary key, v text);
|
|
211
|
+
insert into t_span values (1, '1 hour');
|
|
212
|
+
alter table t_span alter column v set data type timespan;
|
|
213
|
+
|
|
214
|
+
select id, v from t_span;
|
|
215
|
+
→ [{"id": 1, "v": "PT1H"}]
|
|
216
|
+
|
|
217
|
+
-- TIMESPAN compares by elapsed time, so any equal-elapsed spelling finds the row.
|
|
218
|
+
select id from t_span where v = 'PT60M';
|
|
219
|
+
→ [{"id": 1}]
|
|
220
|
+
|
|
221
|
+
drop table t_span;
|
|
222
|
+
|
|
223
|
+
-- ===================================
|
|
224
|
+
-- 13. Temporal → temporal narrowing: values re-parse under the new type
|
|
225
|
+
-- (date → time converts as an INSERT would — a bare date carries an
|
|
226
|
+
-- implicit 00:00:00; time → date rejects, a bare time holds no date)
|
|
227
|
+
-- ===================================
|
|
228
|
+
|
|
229
|
+
create table t_temporal (id integer primary key, v text);
|
|
230
|
+
insert into t_temporal values (1, '2024-06-05');
|
|
231
|
+
alter table t_temporal alter column v set data type date;
|
|
232
|
+
alter table t_temporal alter column v set data type time;
|
|
233
|
+
|
|
234
|
+
select id, v from t_temporal;
|
|
235
|
+
→ [{"id": 1, "v": "00:00:00"}]
|
|
236
|
+
|
|
237
|
+
drop table t_temporal;
|
|
238
|
+
|
|
239
|
+
create table t_time (id integer primary key, v text);
|
|
240
|
+
insert into t_time values (1, '14:30:00');
|
|
241
|
+
alter table t_time alter column v set data type time;
|
|
242
|
+
-- run
|
|
243
|
+
|
|
244
|
+
alter table t_time alter column v set data type date;
|
|
245
|
+
-- error: Cannot convert value
|
|
246
|
+
|
|
247
|
+
select v from t_time;
|
|
248
|
+
→ [{"v": "14:30:00"}]
|
|
249
|
+
|
|
250
|
+
drop table t_time;
|
|
251
|
+
|
|
252
|
+
-- ===================================
|
|
253
|
+
-- 14. Alias retype (text → varchar(50)) stays schema-only
|
|
254
|
+
-- (inferType flattens both to the same TEXT type; no value is scanned
|
|
255
|
+
-- or rewritten, and declared lengths are not enforced)
|
|
256
|
+
-- ===================================
|
|
257
|
+
|
|
258
|
+
create table t_alias (id integer primary key, v text);
|
|
259
|
+
insert into t_alias values (1, 'a value much longer than any varchar(2) would allow');
|
|
260
|
+
alter table t_alias alter column v set data type varchar(2);
|
|
261
|
+
|
|
262
|
+
select id, v from t_alias;
|
|
263
|
+
→ [{"id": 1, "v": "a value much longer than any varchar(2) would allow"}]
|
|
264
|
+
|
|
265
|
+
drop table t_alias;
|
|
266
|
+
|
|
267
|
+
-- ===================================
|
|
268
|
+
-- 15. Same-class retype inside a transaction: effective-row semantics
|
|
269
|
+
-- (a pending illegal value the transaction can SEE rejects; the
|
|
270
|
+
-- transaction's own pending rows are normalized along with the
|
|
271
|
+
-- committed ones. The deleted-row half — a value only in a row the
|
|
272
|
+
-- transaction DELETED does not block — is memory-only, in 41.2.1)
|
|
273
|
+
-- ===================================
|
|
274
|
+
|
|
275
|
+
create table t_tx (id integer primary key, v text);
|
|
276
|
+
insert into t_tx values (1, '2024-01-01');
|
|
277
|
+
begin;
|
|
278
|
+
insert into t_tx values (2, 'bogus');
|
|
279
|
+
-- run
|
|
280
|
+
|
|
281
|
+
alter table t_tx alter column v set data type date;
|
|
282
|
+
-- error: Cannot convert value
|
|
283
|
+
|
|
284
|
+
rollback;
|
|
285
|
+
begin;
|
|
286
|
+
insert into t_tx values (4, '2024-06-05T00:00:00Z');
|
|
287
|
+
alter table t_tx alter column v set data type date;
|
|
288
|
+
|
|
289
|
+
-- The pending insert is already normalized in-transaction.
|
|
290
|
+
select id, v from t_tx order by id;
|
|
291
|
+
→ [{"id": 1, "v": "2024-01-01"}, {"id": 4, "v": "2024-06-05"}]
|
|
292
|
+
|
|
293
|
+
commit;
|
|
294
|
+
|
|
295
|
+
select id, v from t_tx order by id;
|
|
296
|
+
→ [{"id": 1, "v": "2024-01-01"}, {"id": 4, "v": "2024-06-05"}]
|
|
297
|
+
|
|
298
|
+
select id from t_tx where v = '2024-06-05';
|
|
299
|
+
→ [{"id": 4}]
|
|
300
|
+
|
|
301
|
+
drop table t_tx;
|
|
302
|
+
|
|
303
|
+
-- ===================================
|
|
304
|
+
-- 16. Structures keyed by the column follow the rewrite
|
|
305
|
+
-- (normalization moves each value, so every index over the column must be
|
|
306
|
+
-- rebuilt from the CONVERTED rows — otherwise an index-driven lookup still
|
|
307
|
+
-- probes the pre-retype spelling and misses, and UNIQUE keeps enforcing on
|
|
308
|
+
-- the old text)
|
|
309
|
+
-- ===================================
|
|
310
|
+
|
|
311
|
+
create table t_idx (id integer primary key, v text unique);
|
|
312
|
+
insert into t_idx values (1, '2024-06-05T00:00:00Z'), (2, '2024-01-02');
|
|
313
|
+
alter table t_idx alter column v set data type date;
|
|
314
|
+
|
|
315
|
+
select id, v from t_idx order by v;
|
|
316
|
+
→ [{"id": 2, "v": "2024-01-02"}, {"id": 1, "v": "2024-06-05"}]
|
|
317
|
+
|
|
318
|
+
select id from t_idx where v = '2024-06-05';
|
|
319
|
+
→ [{"id": 1}]
|
|
320
|
+
|
|
321
|
+
-- UNIQUE now enforces over the NORMALIZED value: another spelling of a
|
|
322
|
+
-- stored date is a duplicate.
|
|
323
|
+
insert into t_idx values (3, '2024-06-05T00:00:00Z');
|
|
324
|
+
-- error: UNIQUE constraint failed
|
|
325
|
+
|
|
326
|
+
-- ...and a genuinely new date is still accepted, findable by either spelling.
|
|
327
|
+
insert into t_idx values (4, '2024-07-04T00:00:00Z');
|
|
328
|
+
select id, v from t_idx where v = '2024-07-04';
|
|
329
|
+
→ [{"id": 4, "v": "2024-07-04"}]
|
|
330
|
+
|
|
331
|
+
drop table t_idx;
|
|
332
|
+
|
|
333
|
+
-- 16b. …the same inside the DDL transaction, where the structure keyed by the column
|
|
334
|
+
-- is a SECONDARY INDEX, lives in 41.2.2-alter-column-retype-index-rebuild § 3.
|
|
335
|
+
|
|
336
|
+
-- 16c. …and the pending-row collision the normalization creates is judged over the
|
|
337
|
+
-- transaction's EFFECTIVE rows: the ALTER rejects and the transaction stays usable.
|
|
338
|
+
create table t_txdup (id integer primary key, v text unique);
|
|
339
|
+
insert into t_txdup values (1, '2024-06-05');
|
|
340
|
+
begin;
|
|
341
|
+
insert into t_txdup values (2, '2024-06-05T00:00:00Z');
|
|
342
|
+
-- run
|
|
343
|
+
|
|
344
|
+
alter table t_txdup alter column v set data type date;
|
|
345
|
+
-- error: UNIQUE constraint failed
|
|
346
|
+
|
|
347
|
+
-- the transaction survived: dropping the offending row lets the retry pass
|
|
348
|
+
delete from t_txdup where id = 2;
|
|
349
|
+
alter table t_txdup alter column v set data type date;
|
|
350
|
+
commit;
|
|
351
|
+
|
|
352
|
+
select id, v from t_txdup order by id;
|
|
353
|
+
→ [{"id": 1, "v": "2024-06-05"}]
|
|
354
|
+
|
|
355
|
+
drop table t_txdup;
|
|
356
|
+
|
|
357
|
+
-- ===================================
|
|
358
|
+
-- 17. Writes AFTER the retype, in the same transaction, see the new type
|
|
359
|
+
-- (the rest of the transaction coerces and enforces under the retyped
|
|
360
|
+
-- column, so a non-canonical spelling normalizes on the way in and
|
|
361
|
+
-- duplicates the row it now equals)
|
|
362
|
+
-- ===================================
|
|
363
|
+
|
|
364
|
+
create table t_after (id integer primary key, v text unique);
|
|
365
|
+
insert into t_after values (1, '2024-01-01');
|
|
366
|
+
begin;
|
|
367
|
+
alter table t_after alter column v set data type date;
|
|
368
|
+
insert into t_after values (2, '2024-06-05T00:00:00Z');
|
|
369
|
+
-- run
|
|
370
|
+
|
|
371
|
+
select id, v from t_after order by id;
|
|
372
|
+
→ [{"id": 1, "v": "2024-01-01"}, {"id": 2, "v": "2024-06-05"}]
|
|
373
|
+
|
|
374
|
+
insert into t_after values (3, '2024-06-05');
|
|
375
|
+
-- error: UNIQUE constraint failed
|
|
376
|
+
|
|
377
|
+
commit;
|
|
378
|
+
|
|
379
|
+
select id, v from t_after order by id;
|
|
380
|
+
→ [{"id": 1, "v": "2024-01-01"}, {"id": 2, "v": "2024-06-05"}]
|
|
381
|
+
|
|
382
|
+
drop table t_after;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
-- ALTER COLUMN SET DATA TYPE: a value only in a row the transaction has DELETED does
|
|
2
|
+
-- not block the retype. The convert pre-pass walks the transaction's EFFECTIVE rows
|
|
3
|
+
-- (committed rows overlaid with its own pending writes), so a deleted row's
|
|
4
|
+
-- unconvertible value is deliberately not counted against the ALTER.
|
|
5
|
+
--
|
|
6
|
+
-- MEMORY-ONLY (listed in MEMORY_ONLY_FILES): the store's throw-only convert pass scans
|
|
7
|
+
-- the store's OWN effective rows and ignores the wrapper-supplied effective stream (see
|
|
8
|
+
-- the NOTE in StoreModule.alterColumnSetDataType) — behind the isolation wrapper a
|
|
9
|
+
-- transaction's delete is an overlay tombstone the store cannot see, so the store leg
|
|
10
|
+
-- rejects on the deleted row's value where memory accepts. The known rollback corner
|
|
11
|
+
-- (rollback restores the row under the new type) is tracked as
|
|
12
|
+
-- bug-retype-of-deleted-row-leaves-wrong-typed-value.
|
|
13
|
+
|
|
14
|
+
create table t_del (id integer primary key, v text);
|
|
15
|
+
insert into t_del values (1, '2024-01-01'), (2, 'not-a-date');
|
|
16
|
+
-- run
|
|
17
|
+
|
|
18
|
+
begin;
|
|
19
|
+
-- run
|
|
20
|
+
delete from t_del where id = 2;
|
|
21
|
+
-- run
|
|
22
|
+
|
|
23
|
+
-- The only unconvertible value lives in a row this transaction deleted — accepted.
|
|
24
|
+
alter table t_del alter column v set data type date;
|
|
25
|
+
-- run
|
|
26
|
+
commit;
|
|
27
|
+
-- run
|
|
28
|
+
|
|
29
|
+
select id, v from t_del order by id;
|
|
30
|
+
→ [{"id": 1, "v": "2024-01-01"}]
|
|
31
|
+
|
|
32
|
+
drop table t_del;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
-- 41.2.2-alter-column-retype-index-rebuild.sqllogic
|
|
2
|
+
--
|
|
3
|
+
-- requires-capability: standalone-index-ddl
|
|
4
|
+
--
|
|
5
|
+
-- Carved out of 41.2-alter-column: 14 of that file's 17 scenarios (ADD/DROP NOT NULL,
|
|
6
|
+
-- DEFAULT, PK guards, backfill, the retype value rewrite itself, and the retype's
|
|
7
|
+
-- effect on an inline UNIQUE) need no index DDL. What needs a standalone
|
|
8
|
+
-- `create index` is the SECONDARY-index rebuild — the parent still proves the rewrite
|
|
9
|
+
-- and the UNIQUE re-enforcement through the auto-index, this file proves it for a
|
|
10
|
+
-- user-created index.
|
|
11
|
+
--
|
|
12
|
+
-- Subject: ALTER COLUMN SET DATA TYPE physically rewrites values, so every secondary
|
|
13
|
+
-- index over the column must be rebuilt from the CONVERTED rows — otherwise an
|
|
14
|
+
-- index-driven lookup still probes the pre-retype spelling and misses. Holds for
|
|
15
|
+
-- committed rows and for the transaction's own pending row.
|
|
16
|
+
|
|
17
|
+
-- ===================================
|
|
18
|
+
-- 1. text -> integer: the index finds rows by the new numeric value
|
|
19
|
+
-- ===================================
|
|
20
|
+
|
|
21
|
+
create table t_conv (id integer primary key, v text);
|
|
22
|
+
create index t_conv_v on t_conv (v);
|
|
23
|
+
insert into t_conv values (1, '10'), (2, '9');
|
|
24
|
+
alter table t_conv alter column v set data type integer;
|
|
25
|
+
|
|
26
|
+
select id from t_conv where v = 9;
|
|
27
|
+
→ [{"id": 2}]
|
|
28
|
+
|
|
29
|
+
drop table t_conv;
|
|
30
|
+
|
|
31
|
+
-- ===================================
|
|
32
|
+
-- 2. text -> date: normalization moves each value, so the index is rebuilt from the
|
|
33
|
+
-- converted rows and both spellings resolve to the normalized one
|
|
34
|
+
-- ===================================
|
|
35
|
+
|
|
36
|
+
create table t_idx (id integer primary key, v text);
|
|
37
|
+
create index t_idx_v2 on t_idx (v);
|
|
38
|
+
insert into t_idx values (1, '2024-06-05T00:00:00Z'), (2, '2024-01-02');
|
|
39
|
+
alter table t_idx alter column v set data type date;
|
|
40
|
+
|
|
41
|
+
select id, v from t_idx order by v;
|
|
42
|
+
→ [{"id": 2, "v": "2024-01-02"}, {"id": 1, "v": "2024-06-05"}]
|
|
43
|
+
|
|
44
|
+
select id from t_idx where v = '2024-06-05';
|
|
45
|
+
→ [{"id": 1}]
|
|
46
|
+
|
|
47
|
+
-- a genuinely new date is findable by either spelling.
|
|
48
|
+
insert into t_idx values (4, '2024-07-04T00:00:00Z');
|
|
49
|
+
select id, v from t_idx where v = '2024-07-04';
|
|
50
|
+
→ [{"id": 4, "v": "2024-07-04"}]
|
|
51
|
+
|
|
52
|
+
drop table t_idx;
|
|
53
|
+
|
|
54
|
+
-- ===================================
|
|
55
|
+
-- 3. …the same inside the DDL transaction: the transaction's own pending row is
|
|
56
|
+
-- converted AND re-indexed, before and after commit.
|
|
57
|
+
-- ===================================
|
|
58
|
+
|
|
59
|
+
create table t_idxtx (id integer primary key, v text);
|
|
60
|
+
create index t_idxtx_v on t_idxtx (v);
|
|
61
|
+
insert into t_idxtx values (1, '2024-01-02');
|
|
62
|
+
begin;
|
|
63
|
+
insert into t_idxtx values (2, '2024-06-05T00:00:00Z');
|
|
64
|
+
alter table t_idxtx alter column v set data type date;
|
|
65
|
+
|
|
66
|
+
select id from t_idxtx where v = '2024-06-05';
|
|
67
|
+
→ [{"id": 2}]
|
|
68
|
+
|
|
69
|
+
commit;
|
|
70
|
+
|
|
71
|
+
select id from t_idxtx where v = '2024-06-05';
|
|
72
|
+
→ [{"id": 2}]
|
|
73
|
+
|
|
74
|
+
select id, v from t_idxtx order by v;
|
|
75
|
+
→ [{"id": 1, "v": "2024-01-02"}, {"id": 2, "v": "2024-06-05"}]
|
|
76
|
+
|
|
77
|
+
drop table t_idxtx;
|