@quereus/quereus 4.20.0 → 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/dist/src/common/types.d.ts +4 -4
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/schema/catalog-rendering.js +13 -1
- package/dist/src/schema/catalog-rendering.js.map +1 -1
- package/dist/src/schema/catalog.d.ts +35 -2
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +42 -33
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts +1 -1
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +195 -33
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +23 -1
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
- package/dist/src/schema/unique-enforcement.js +43 -1
- package/dist/src/schema/unique-enforcement.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +15 -12
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +87 -100
- package/dist/src/vtab/memory/layer/manager.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 +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,141 @@
|
|
|
1
|
+
-- 50.0.1-metadata-tags-index.sqllogic - Tag round-trips on INDEX objects.
|
|
2
|
+
--
|
|
3
|
+
-- requires-capability: standalone-index-ddl
|
|
4
|
+
--
|
|
5
|
+
-- Carved out of 50-metadata-tags: the `with tags` system applies to every schema-object
|
|
6
|
+
-- kind, and 50-metadata-tags exercises the whole system (SET / ADD / DROP TAGS, reserved
|
|
7
|
+
-- key validation and mis-siting, NOTFOUND, implicit covering structures) on tables,
|
|
8
|
+
-- columns, constraints, views and materialized views without index DDL. The phases whose
|
|
9
|
+
-- object is a user-created index need `create index`, so they live here.
|
|
10
|
+
--
|
|
11
|
+
-- Phase numbers keep their original 50-metadata-tags labels so cross-references resolve.
|
|
12
|
+
--
|
|
13
|
+
-- Subject: tags declared on CREATE INDEX round-trip through schema() and index_info();
|
|
14
|
+
-- ALTER INDEX SET / ADD / DROP TAGS replace, merge and delete them; and reserved
|
|
15
|
+
-- `quereus.*` keys are validated at the physical-index site on every one of those paths.
|
|
16
|
+
|
|
17
|
+
CREATE TABLE Products (
|
|
18
|
+
id INTEGER PRIMARY KEY,
|
|
19
|
+
name TEXT NOT NULL,
|
|
20
|
+
price REAL NOT NULL
|
|
21
|
+
);
|
|
22
|
+
INSERT INTO Products VALUES (1, 'Widget', 9.99), (2, 'Gadget', 19.99);
|
|
23
|
+
|
|
24
|
+
-- ===================================================================
|
|
25
|
+
-- Phase 5: Index-level tags
|
|
26
|
+
-- ===================================================================
|
|
27
|
+
|
|
28
|
+
CREATE INDEX idx_product_name ON Products (name)
|
|
29
|
+
WITH TAGS (purpose = 'search optimization');
|
|
30
|
+
|
|
31
|
+
-- Verify index works
|
|
32
|
+
SELECT name FROM Products WHERE name = 'Widget';
|
|
33
|
+
→ [{"name":"Widget"}]
|
|
34
|
+
|
|
35
|
+
-- Round-trip: index tags via schema() and index_info()
|
|
36
|
+
SELECT json_extract(tags, '$.purpose') AS purpose
|
|
37
|
+
FROM schema() WHERE type = 'index' AND name = 'idx_product_name';
|
|
38
|
+
→ [{"purpose":"search optimization"}]
|
|
39
|
+
|
|
40
|
+
SELECT index_name, column_name, json_extract(tags, '$.purpose') AS purpose
|
|
41
|
+
FROM index_info('Products') WHERE index_name = 'idx_product_name';
|
|
42
|
+
→ [{"index_name":"idx_product_name","column_name":"name","purpose":"search optimization"}]
|
|
43
|
+
|
|
44
|
+
-- ===================================================================
|
|
45
|
+
-- Phase 18: ALTER INDEX ... SET TAGS (whole-set replace + clear)
|
|
46
|
+
-- ===================================================================
|
|
47
|
+
|
|
48
|
+
-- idx_product_name (Phase 5) was created with a purpose tag.
|
|
49
|
+
SELECT json_extract(tags, '$.purpose') AS purpose
|
|
50
|
+
FROM schema() WHERE type = 'index' AND name = 'idx_product_name';
|
|
51
|
+
→ [{"purpose":"search optimization"}]
|
|
52
|
+
|
|
53
|
+
-- Whole-set replace.
|
|
54
|
+
ALTER INDEX idx_product_name SET TAGS (owner = 'search-team', purpose = 'fulltext');
|
|
55
|
+
SELECT index_name, json_extract(tags, '$.owner') AS owner, json_extract(tags, '$.purpose') AS purpose
|
|
56
|
+
FROM index_info('Products') WHERE index_name = 'idx_product_name';
|
|
57
|
+
→ [{"index_name":"idx_product_name","owner":"search-team","purpose":"fulltext"}]
|
|
58
|
+
|
|
59
|
+
-- The index still answers lookups after the tag mutation.
|
|
60
|
+
SELECT name FROM Products WHERE name = 'Widget';
|
|
61
|
+
→ [{"name":"Widget"}]
|
|
62
|
+
|
|
63
|
+
-- Clear all tags → tags IS NULL.
|
|
64
|
+
ALTER INDEX idx_product_name SET TAGS ();
|
|
65
|
+
SELECT tags FROM schema() WHERE type = 'index' AND name = 'idx_product_name';
|
|
66
|
+
→ [{"tags":null}]
|
|
67
|
+
|
|
68
|
+
-- ===================================================================
|
|
69
|
+
-- Phase 21: reserved-tag typo rejection on the index ALTER path
|
|
70
|
+
-- ===================================================================
|
|
71
|
+
|
|
72
|
+
-- physical-index site rejects an unknown reserved key.
|
|
73
|
+
ALTER INDEX idx_product_name SET TAGS ("quereus.bogus" = 1);
|
|
74
|
+
-- error: reserved tag
|
|
75
|
+
|
|
76
|
+
-- ===================================================================
|
|
77
|
+
-- Phase 23: reserved-tag validation on the direct CREATE INDEX path
|
|
78
|
+
-- ===================================================================
|
|
79
|
+
|
|
80
|
+
-- CREATE INDEX unknown reserved key rejected (physical-index site).
|
|
81
|
+
CREATE INDEX ix_rsv_bad ON Products (price) WITH TAGS ("quereus.bogus" = 1);
|
|
82
|
+
-- error: reserved tag
|
|
83
|
+
|
|
84
|
+
-- Valid quereus.id accepted on an index and round-trips through schema() / index_info().
|
|
85
|
+
CREATE INDEX ix_rsv_ok ON Products (price) WITH TAGS ("quereus.id" = 'idx-thing');
|
|
86
|
+
SELECT json_extract(tags, '$."quereus.id"') AS qid
|
|
87
|
+
FROM schema() WHERE type = 'index' AND name = 'ix_rsv_ok';
|
|
88
|
+
→ [{"qid":"idx-thing"}]
|
|
89
|
+
|
|
90
|
+
SELECT index_name, json_extract(tags, '$."quereus.id"') AS qid
|
|
91
|
+
FROM index_info('Products') WHERE index_name = 'ix_rsv_ok';
|
|
92
|
+
→ [{"index_name":"ix_rsv_ok","qid":"idx-thing"}]
|
|
93
|
+
|
|
94
|
+
-- ===================================================================
|
|
95
|
+
-- Phase 33: ALTER INDEX ... ADD / DROP TAGS (per-key merge + delete)
|
|
96
|
+
-- ===================================================================
|
|
97
|
+
|
|
98
|
+
CREATE TABLE ITbl (id INTEGER PRIMARY KEY, name TEXT);
|
|
99
|
+
INSERT INTO ITbl VALUES (1, 'Widget'), (2, 'Gadget');
|
|
100
|
+
CREATE INDEX ix_itbl_name ON ITbl (name) WITH TAGS (purpose = 'search');
|
|
101
|
+
|
|
102
|
+
-- ADD merges onto the index's live tags.
|
|
103
|
+
ALTER INDEX ix_itbl_name ADD TAGS (owner = 'team', purpose = 'fulltext');
|
|
104
|
+
SELECT json_extract(tags, '$.owner') AS owner, json_extract(tags, '$.purpose') AS purpose
|
|
105
|
+
FROM schema() WHERE type = 'index' AND name = 'ix_itbl_name';
|
|
106
|
+
→ [{"owner":"team","purpose":"fulltext"}]
|
|
107
|
+
|
|
108
|
+
-- The index still answers lookups after the merge.
|
|
109
|
+
SELECT name FROM ITbl WHERE name = 'Widget';
|
|
110
|
+
→ [{"name":"Widget"}]
|
|
111
|
+
|
|
112
|
+
-- DROP one key, keep the rest.
|
|
113
|
+
ALTER INDEX ix_itbl_name DROP TAGS (owner);
|
|
114
|
+
SELECT json_type(tags, '$.owner') AS owner_type, json_extract(tags, '$.purpose') AS purpose
|
|
115
|
+
FROM schema() WHERE type = 'index' AND name = 'ix_itbl_name';
|
|
116
|
+
→ [{"owner_type":null,"purpose":"fulltext"}]
|
|
117
|
+
|
|
118
|
+
-- DROP of an absent key → NOTFOUND (atomic).
|
|
119
|
+
ALTER INDEX ix_itbl_name DROP TAGS (nope);
|
|
120
|
+
-- error: not found
|
|
121
|
+
|
|
122
|
+
-- Drop the last key → tags IS NULL.
|
|
123
|
+
ALTER INDEX ix_itbl_name DROP TAGS (purpose);
|
|
124
|
+
SELECT tags FROM schema() WHERE type = 'index' AND name = 'ix_itbl_name';
|
|
125
|
+
→ [{"tags":null}]
|
|
126
|
+
|
|
127
|
+
-- ===================================================================
|
|
128
|
+
-- Phase 36: ADD validates reserved keys at the physical-index site; DROP does not
|
|
129
|
+
-- ===================================================================
|
|
130
|
+
|
|
131
|
+
-- ADD rejects an unknown reserved key at the physical-index site.
|
|
132
|
+
ALTER INDEX ix_itbl_name ADD TAGS ("quereus.bogus" = 1);
|
|
133
|
+
-- error: reserved tag
|
|
134
|
+
|
|
135
|
+
-- Same for an index: quereus.id is legal at physical-index; DROP removes it.
|
|
136
|
+
ALTER INDEX ix_itbl_name ADD TAGS ("quereus.id" = 'idx-thing');
|
|
137
|
+
SELECT json_extract(tags, '$."quereus.id"') AS qid FROM schema() WHERE type = 'index' AND name = 'ix_itbl_name';
|
|
138
|
+
→ [{"qid":"idx-thing"}]
|
|
139
|
+
ALTER INDEX ix_itbl_name DROP TAGS ("quereus.id");
|
|
140
|
+
SELECT tags FROM schema() WHERE type = 'index' AND name = 'ix_itbl_name';
|
|
141
|
+
→ [{"tags":null}]
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
-- Declarative schema: PRIMARY KEY alteration via apply schema
|
|
2
|
+
|
|
3
|
+
-- ===================================
|
|
4
|
+
-- 1. Apply schema that re-keys a table (no column changes)
|
|
5
|
+
-- ===================================
|
|
6
|
+
|
|
7
|
+
-- Create initial table with id as PK
|
|
8
|
+
create table t_pk (id integer primary key, code integer not null, name text);
|
|
9
|
+
insert into t_pk values (1, 100, 'Alice'), (2, 200, 'Bob');
|
|
10
|
+
|
|
11
|
+
-- Declare schema with code as PK instead of id
|
|
12
|
+
declare schema main {
|
|
13
|
+
table t_pk (
|
|
14
|
+
id integer,
|
|
15
|
+
code integer primary key,
|
|
16
|
+
name text
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
-- run
|
|
21
|
+
|
|
22
|
+
-- Diff should show ALTER PRIMARY KEY
|
|
23
|
+
diff schema main;
|
|
24
|
+
→ [{"ddl": "ALTER TABLE t_pk ALTER PRIMARY KEY (code)"}]
|
|
25
|
+
|
|
26
|
+
-- Apply should succeed
|
|
27
|
+
apply schema main;
|
|
28
|
+
|
|
29
|
+
-- run
|
|
30
|
+
|
|
31
|
+
-- Data preserved
|
|
32
|
+
select count(*) as cnt from t_pk;
|
|
33
|
+
→ [{"cnt": 2}]
|
|
34
|
+
|
|
35
|
+
-- PK changed
|
|
36
|
+
select name, pk from table_info('t_pk') where pk > 0;
|
|
37
|
+
→ [{"name": "code", "pk": 1}]
|
|
38
|
+
|
|
39
|
+
-- Round-trip: diff should be empty
|
|
40
|
+
diff schema main;
|
|
41
|
+
→ []
|
|
42
|
+
|
|
43
|
+
drop table t_pk;
|
|
44
|
+
|
|
45
|
+
-- ===================================
|
|
46
|
+
-- 2. Apply schema that re-keys and drops old PK column
|
|
47
|
+
-- ===================================
|
|
48
|
+
|
|
49
|
+
create table t_pk_drop (old_id integer primary key, new_id integer not null, name text);
|
|
50
|
+
insert into t_pk_drop values (1, 100, 'Alice'), (2, 200, 'Bob');
|
|
51
|
+
|
|
52
|
+
-- Declare schema without old_id, with new_id as PK
|
|
53
|
+
declare schema main {
|
|
54
|
+
table t_pk_drop (
|
|
55
|
+
new_id integer primary key,
|
|
56
|
+
name text
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
-- run
|
|
61
|
+
|
|
62
|
+
-- Diff should show ALTER PRIMARY KEY and DROP COLUMN
|
|
63
|
+
diff schema main;
|
|
64
|
+
→ [{"ddl": "ALTER TABLE t_pk_drop ALTER PRIMARY KEY (new_id)"}, {"ddl": "ALTER TABLE t_pk_drop DROP COLUMN old_id"}]
|
|
65
|
+
|
|
66
|
+
-- Apply should succeed (rekey happens before drop)
|
|
67
|
+
apply schema main;
|
|
68
|
+
|
|
69
|
+
-- run
|
|
70
|
+
|
|
71
|
+
-- Data preserved (minus dropped column)
|
|
72
|
+
select count(*) as cnt from t_pk_drop;
|
|
73
|
+
→ [{"cnt": 2}]
|
|
74
|
+
|
|
75
|
+
select * from t_pk_drop order by new_id;
|
|
76
|
+
→ [{"new_id": 100, "name": "Alice"}, {"new_id": 200, "name": "Bob"}]
|
|
77
|
+
|
|
78
|
+
-- Round-trip: diff should be empty
|
|
79
|
+
diff schema main;
|
|
80
|
+
→ []
|
|
81
|
+
|
|
82
|
+
drop table t_pk_drop;
|
|
83
|
+
|
|
84
|
+
-- ===================================
|
|
85
|
+
-- 3. Apply schema that only reorders PK columns
|
|
86
|
+
-- ===================================
|
|
87
|
+
|
|
88
|
+
create table t_pk_reorder (a integer not null, b integer not null, primary key (a, b));
|
|
89
|
+
insert into t_pk_reorder values (1, 10), (2, 20);
|
|
90
|
+
|
|
91
|
+
-- Declare same columns but PK order reversed
|
|
92
|
+
declare schema main {
|
|
93
|
+
table t_pk_reorder (
|
|
94
|
+
a integer not null,
|
|
95
|
+
b integer not null,
|
|
96
|
+
primary key (b, a)
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
-- run
|
|
101
|
+
|
|
102
|
+
-- Should detect the PK reorder
|
|
103
|
+
diff schema main;
|
|
104
|
+
→ [{"ddl": "ALTER TABLE t_pk_reorder ALTER PRIMARY KEY (b, a)"}]
|
|
105
|
+
|
|
106
|
+
apply schema main;
|
|
107
|
+
|
|
108
|
+
-- run
|
|
109
|
+
|
|
110
|
+
-- Data preserved
|
|
111
|
+
select count(*) as cnt from t_pk_reorder;
|
|
112
|
+
→ [{"cnt": 2}]
|
|
113
|
+
|
|
114
|
+
-- Round-trip
|
|
115
|
+
diff schema main;
|
|
116
|
+
→ []
|
|
117
|
+
|
|
118
|
+
drop table t_pk_reorder;
|
|
119
|
+
|
|
120
|
+
-- ===================================
|
|
121
|
+
-- 4. Round-trip: declare → apply → diff is empty
|
|
122
|
+
-- ===================================
|
|
123
|
+
|
|
124
|
+
create table t_pk_rt (a integer not null, b integer not null, primary key (a));
|
|
125
|
+
insert into t_pk_rt values (1, 10), (2, 20);
|
|
126
|
+
-- run
|
|
127
|
+
|
|
128
|
+
declare schema main {
|
|
129
|
+
table t_pk_rt (
|
|
130
|
+
a integer not null,
|
|
131
|
+
b integer not null,
|
|
132
|
+
primary key (b)
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
-- run
|
|
137
|
+
|
|
138
|
+
apply schema main;
|
|
139
|
+
|
|
140
|
+
-- run
|
|
141
|
+
|
|
142
|
+
-- Round-trip: diff should be empty
|
|
143
|
+
diff schema main;
|
|
144
|
+
→ []
|
|
145
|
+
|
|
146
|
+
-- Data preserved
|
|
147
|
+
select count(*) as cnt from t_pk_rt;
|
|
148
|
+
→ [{"cnt": 2}]
|
|
149
|
+
|
|
150
|
+
drop table t_pk_rt;
|