@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,365 @@
|
|
|
1
|
+
-- Column features: defaults, collation, nullability, and type interactions
|
|
2
|
+
|
|
3
|
+
-- ===================================
|
|
4
|
+
-- 1. Default Values
|
|
5
|
+
-- ===================================
|
|
6
|
+
|
|
7
|
+
-- 1a. Column with DEFAULT literal value
|
|
8
|
+
create table t_def_literal (
|
|
9
|
+
id integer primary key,
|
|
10
|
+
status text default 'active'
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
insert into t_def_literal (id) values (1);
|
|
14
|
+
|
|
15
|
+
select * from t_def_literal where id = 1;
|
|
16
|
+
→ [{"id":1,"status":"active"}]
|
|
17
|
+
|
|
18
|
+
-- 1b. Override the default with an explicit value
|
|
19
|
+
insert into t_def_literal (id, status) values (2, 'inactive');
|
|
20
|
+
|
|
21
|
+
select * from t_def_literal where id = 2;
|
|
22
|
+
→ [{"id":2,"status":"inactive"}]
|
|
23
|
+
|
|
24
|
+
drop table t_def_literal;
|
|
25
|
+
|
|
26
|
+
-- 1c. Column with DEFAULT expression
|
|
27
|
+
create table t_def_expr (
|
|
28
|
+
id integer primary key,
|
|
29
|
+
computed integer default (length('hello'))
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
insert into t_def_expr (id) values (1);
|
|
33
|
+
|
|
34
|
+
select * from t_def_expr where id = 1;
|
|
35
|
+
→ [{"id":1,"computed":5}]
|
|
36
|
+
|
|
37
|
+
-- Override the computed default
|
|
38
|
+
insert into t_def_expr (id, computed) values (2, 99);
|
|
39
|
+
|
|
40
|
+
select * from t_def_expr where id = 2;
|
|
41
|
+
→ [{"id":2,"computed":99}]
|
|
42
|
+
|
|
43
|
+
drop table t_def_expr;
|
|
44
|
+
|
|
45
|
+
-- 1d. Multiple columns with different defaults
|
|
46
|
+
create table t_def_multi (
|
|
47
|
+
id integer primary key,
|
|
48
|
+
label text default 'untitled',
|
|
49
|
+
priority integer default 0,
|
|
50
|
+
tag text default ('tag_' || 'default')
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
-- Insert with only primary key — all defaults applied
|
|
54
|
+
insert into t_def_multi (id) values (1);
|
|
55
|
+
|
|
56
|
+
select * from t_def_multi where id = 1;
|
|
57
|
+
→ [{"id":1,"label":"untitled","priority":0,"tag":"tag_default"}]
|
|
58
|
+
|
|
59
|
+
-- Insert with some columns specified
|
|
60
|
+
insert into t_def_multi (id, priority) values (2, 5);
|
|
61
|
+
|
|
62
|
+
select * from t_def_multi where id = 2;
|
|
63
|
+
→ [{"id":2,"label":"untitled","priority":5,"tag":"tag_default"}]
|
|
64
|
+
|
|
65
|
+
-- Insert with all columns specified
|
|
66
|
+
insert into t_def_multi (id, label, priority, tag) values (3, 'custom', 10, 'special');
|
|
67
|
+
|
|
68
|
+
select * from t_def_multi where id = 3;
|
|
69
|
+
→ [{"id":3,"label":"custom","priority":10,"tag":"special"}]
|
|
70
|
+
|
|
71
|
+
-- Verify all rows
|
|
72
|
+
select * from t_def_multi order by id;
|
|
73
|
+
→ [{"id":1,"label":"untitled","priority":0,"tag":"tag_default"},{"id":2,"label":"untitled","priority":5,"tag":"tag_default"},{"id":3,"label":"custom","priority":10,"tag":"special"}]
|
|
74
|
+
|
|
75
|
+
drop table t_def_multi;
|
|
76
|
+
|
|
77
|
+
-- ===================================
|
|
78
|
+
-- 2. Collation
|
|
79
|
+
-- ===================================
|
|
80
|
+
|
|
81
|
+
-- 2a. COLLATE NOCASE — case-insensitive equality
|
|
82
|
+
create table t_nocase (
|
|
83
|
+
id integer primary key,
|
|
84
|
+
name text collate NOCASE
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
insert into t_nocase values (1, 'Alice'), (2, 'bob'), (3, 'CHARLIE'), (4, 'alice');
|
|
88
|
+
|
|
89
|
+
-- Case-insensitive equality: 'Alice' = 'alice'
|
|
90
|
+
select id from t_nocase where name = 'alice' order by id;
|
|
91
|
+
→ [{"id":1},{"id":4}]
|
|
92
|
+
|
|
93
|
+
select id from t_nocase where name = 'BOB' order by id;
|
|
94
|
+
→ [{"id":2}]
|
|
95
|
+
|
|
96
|
+
-- Case-insensitive ordering
|
|
97
|
+
select name from t_nocase order by name, id;
|
|
98
|
+
→ [{"name":"Alice"},{"name":"alice"},{"name":"bob"},{"name":"CHARLIE"}]
|
|
99
|
+
|
|
100
|
+
drop table t_nocase;
|
|
101
|
+
|
|
102
|
+
-- 2b. COLLATE BINARY (default) — case-sensitive behavior
|
|
103
|
+
create table t_binary (
|
|
104
|
+
id integer primary key,
|
|
105
|
+
name text collate BINARY
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
insert into t_binary values (1, 'Alice'), (2, 'alice'), (3, 'ALICE');
|
|
109
|
+
|
|
110
|
+
-- Binary equality is case-sensitive
|
|
111
|
+
select id from t_binary where name = 'Alice';
|
|
112
|
+
→ [{"id":1}]
|
|
113
|
+
|
|
114
|
+
select id from t_binary where name = 'alice';
|
|
115
|
+
→ [{"id":2}]
|
|
116
|
+
|
|
117
|
+
-- Binary ordering: uppercase before lowercase (ASCII order)
|
|
118
|
+
select name from t_binary order by name;
|
|
119
|
+
→ [{"name":"ALICE"},{"name":"Alice"},{"name":"alice"}]
|
|
120
|
+
|
|
121
|
+
drop table t_binary;
|
|
122
|
+
|
|
123
|
+
-- 2c. COLLATE RTRIM — trailing-space-insensitive comparison
|
|
124
|
+
create table t_rtrim (
|
|
125
|
+
id integer primary key,
|
|
126
|
+
val text collate RTRIM
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
insert into t_rtrim values (1, 'hello'), (2, 'hello '), (3, 'world'), (4, 'world ');
|
|
130
|
+
|
|
131
|
+
-- RTRIM: 'hello' = 'hello '
|
|
132
|
+
select id from t_rtrim where val = 'hello' order by id;
|
|
133
|
+
→ [{"id":1},{"id":2}]
|
|
134
|
+
|
|
135
|
+
-- RTRIM: 'world' = 'world '
|
|
136
|
+
select id from t_rtrim where val = 'world' order by id;
|
|
137
|
+
→ [{"id":3},{"id":4}]
|
|
138
|
+
|
|
139
|
+
-- Exact match without trailing spaces
|
|
140
|
+
select id from t_rtrim where val = 'hello ' order by id;
|
|
141
|
+
→ [{"id":1},{"id":2}]
|
|
142
|
+
|
|
143
|
+
drop table t_rtrim;
|
|
144
|
+
|
|
145
|
+
-- 2d. Collation in ORDER BY clause (overriding column collation)
|
|
146
|
+
create table t_collate_order (
|
|
147
|
+
id integer primary key,
|
|
148
|
+
name text
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
insert into t_collate_order values (1, 'banana'), (2, 'Apple'), (3, 'cherry'), (4, 'Blueberry');
|
|
152
|
+
|
|
153
|
+
-- Default (binary) ordering: uppercase sorts before lowercase
|
|
154
|
+
select name from t_collate_order order by name;
|
|
155
|
+
→ [{"name":"Apple"},{"name":"Blueberry"},{"name":"banana"},{"name":"cherry"}]
|
|
156
|
+
|
|
157
|
+
-- NOCASE ordering in ORDER BY
|
|
158
|
+
select name from t_collate_order order by name collate nocase;
|
|
159
|
+
→ [{"name":"Apple"},{"name":"banana"},{"name":"Blueberry"},{"name":"cherry"}]
|
|
160
|
+
|
|
161
|
+
drop table t_collate_order;
|
|
162
|
+
|
|
163
|
+
-- 2e. Undecorated text PRIMARY KEY default collation is backend-divergent
|
|
164
|
+
-- (memory → BINARY, store → NOCASE), so the assertion lives in the
|
|
165
|
+
-- memory-only file 10.2.2-default-collation-memory.sqllogic. See
|
|
166
|
+
-- docs/schema.md §"Per-column PK key collation" for the cross-backend contrast.
|
|
167
|
+
|
|
168
|
+
-- ===================================
|
|
169
|
+
-- 3. NOT NULL / NULL Behavior
|
|
170
|
+
-- ===================================
|
|
171
|
+
|
|
172
|
+
-- 3a. Default NOT NULL behavior (Third Manifesto)
|
|
173
|
+
create table t_nn_default (
|
|
174
|
+
id integer primary key,
|
|
175
|
+
name text,
|
|
176
|
+
score integer
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
-- Valid insert
|
|
180
|
+
insert into t_nn_default values (1, 'Alice', 95);
|
|
181
|
+
|
|
182
|
+
select * from t_nn_default where id = 1;
|
|
183
|
+
→ [{"id":1,"name":"Alice","score":95}]
|
|
184
|
+
|
|
185
|
+
-- NULL into column without NULL keyword should fail
|
|
186
|
+
insert into t_nn_default values (2, null, 80);
|
|
187
|
+
-- error: NOT NULL constraint failed: t_nn_default.name
|
|
188
|
+
|
|
189
|
+
insert into t_nn_default values (3, 'Bob', null);
|
|
190
|
+
-- error: NOT NULL constraint failed: t_nn_default.score
|
|
191
|
+
|
|
192
|
+
-- Omitting a NOT NULL column with no default should fail
|
|
193
|
+
insert into t_nn_default (id, name) values (4, 'Charlie');
|
|
194
|
+
-- error: NOT NULL constraint failed: t_nn_default.score
|
|
195
|
+
|
|
196
|
+
drop table t_nn_default;
|
|
197
|
+
|
|
198
|
+
-- 3b. Explicit NULL column — insert NULL should succeed
|
|
199
|
+
create table t_nullable (
|
|
200
|
+
id integer primary key,
|
|
201
|
+
required_field text,
|
|
202
|
+
optional_field text null
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
-- NULL in optional field succeeds
|
|
206
|
+
insert into t_nullable values (1, 'hello', null);
|
|
207
|
+
|
|
208
|
+
select * from t_nullable where id = 1;
|
|
209
|
+
→ [{"id":1,"required_field":"hello","optional_field":null}]
|
|
210
|
+
|
|
211
|
+
-- NULL in required field fails (default NOT NULL)
|
|
212
|
+
insert into t_nullable values (2, null, 'world');
|
|
213
|
+
-- error: NOT NULL constraint failed: t_nullable.required_field
|
|
214
|
+
|
|
215
|
+
-- Omitting optional field (no default) still needs a value or explicit NULL
|
|
216
|
+
insert into t_nullable (id, required_field) values (3, 'test');
|
|
217
|
+
|
|
218
|
+
select optional_field from t_nullable where id = 3;
|
|
219
|
+
→ [{"optional_field":null}]
|
|
220
|
+
|
|
221
|
+
drop table t_nullable;
|
|
222
|
+
|
|
223
|
+
-- 3c. A primary key column takes its nullability from its own declaration, not from key
|
|
224
|
+
-- membership. Undecorated under the shipped `not_null` default → NOT NULL, like any column.
|
|
225
|
+
create table t_pk_nn (
|
|
226
|
+
id integer primary key,
|
|
227
|
+
val text
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
insert into t_pk_nn values (null, 'test');
|
|
231
|
+
-- error: NOT NULL constraint failed: t_pk_nn.id
|
|
232
|
+
|
|
233
|
+
drop table t_pk_nn;
|
|
234
|
+
|
|
235
|
+
-- ...and an explicit `null` on the key column is honoured: `primary key` names the row identity
|
|
236
|
+
-- and implies nothing about nullability. Full coverage in 43.3-nullable-primary-key.
|
|
237
|
+
create table t_pk_null (
|
|
238
|
+
id integer null primary key,
|
|
239
|
+
val text
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
insert into t_pk_null values (null, 'test');
|
|
243
|
+
|
|
244
|
+
select id, val from t_pk_null;
|
|
245
|
+
→ [{"id":null,"val":"test"}]
|
|
246
|
+
|
|
247
|
+
-- The NULL key is a real identity: a second one collides.
|
|
248
|
+
insert into t_pk_null values (null, 'again');
|
|
249
|
+
-- error: UNIQUE constraint failed
|
|
250
|
+
|
|
251
|
+
drop table t_pk_null;
|
|
252
|
+
|
|
253
|
+
-- 3d. Update to NULL on NOT NULL column should fail
|
|
254
|
+
create table t_update_nn (
|
|
255
|
+
id integer primary key,
|
|
256
|
+
name text
|
|
257
|
+
);
|
|
258
|
+
insert into t_update_nn values (1, 'original');
|
|
259
|
+
|
|
260
|
+
select name from t_update_nn where id = 1;
|
|
261
|
+
→ [{"name":"original"}]
|
|
262
|
+
|
|
263
|
+
update t_update_nn set name = null where id = 1;
|
|
264
|
+
-- error: NOT NULL constraint failed: t_update_nn.name
|
|
265
|
+
|
|
266
|
+
-- Verify value unchanged after failed update
|
|
267
|
+
select name from t_update_nn where id = 1;
|
|
268
|
+
→ [{"name":"original"}]
|
|
269
|
+
|
|
270
|
+
drop table t_update_nn;
|
|
271
|
+
|
|
272
|
+
-- ===================================
|
|
273
|
+
-- 4. Type System Interactions
|
|
274
|
+
-- ===================================
|
|
275
|
+
|
|
276
|
+
-- 4a. Column with INTEGER type — verify type coercion on insert
|
|
277
|
+
create table t_types (
|
|
278
|
+
id integer primary key,
|
|
279
|
+
int_col integer,
|
|
280
|
+
text_col text,
|
|
281
|
+
real_col real
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
-- Insert with matching types
|
|
285
|
+
insert into t_types values (1, 42, 'hello', 3.14);
|
|
286
|
+
|
|
287
|
+
select typeof(int_col), typeof(text_col), typeof(real_col) from t_types where id = 1;
|
|
288
|
+
→ [{"typeof(int_col)":"integer","typeof(text_col)":"text","typeof(real_col)":"real"}]
|
|
289
|
+
|
|
290
|
+
-- Insert string that coerces to integer
|
|
291
|
+
insert into t_types values (2, '100', 'world', '2.71');
|
|
292
|
+
|
|
293
|
+
select typeof(int_col), int_col, typeof(real_col), real_col from t_types where id = 2;
|
|
294
|
+
→ [{"typeof(int_col)":"integer","int_col":100,"typeof(real_col)":"real","real_col":2.71}]
|
|
295
|
+
|
|
296
|
+
-- Insert integer into text column — stored as text
|
|
297
|
+
insert into t_types values (3, 7, 999, 0);
|
|
298
|
+
|
|
299
|
+
select typeof(text_col), text_col from t_types where id = 3;
|
|
300
|
+
→ [{"typeof(text_col)":"text","text_col":"999"}]
|
|
301
|
+
|
|
302
|
+
-- Insert integer into real column — coerced to real
|
|
303
|
+
select typeof(real_col), real_col from t_types where id = 3;
|
|
304
|
+
→ [{"typeof(real_col)":"integer","real_col":0}]
|
|
305
|
+
|
|
306
|
+
drop table t_types;
|
|
307
|
+
|
|
308
|
+
-- 4b. typeof() on literal expressions through a table context
|
|
309
|
+
create table t_typeof (
|
|
310
|
+
id integer primary key,
|
|
311
|
+
val_int integer,
|
|
312
|
+
val_text text,
|
|
313
|
+
val_real real,
|
|
314
|
+
val_blob blob,
|
|
315
|
+
val_any any null
|
|
316
|
+
);
|
|
317
|
+
|
|
318
|
+
insert into t_typeof values (1, 42, 'hello', 3.14, x'cafe', null);
|
|
319
|
+
|
|
320
|
+
select
|
|
321
|
+
typeof(val_int) as t_int,
|
|
322
|
+
typeof(val_text) as t_text,
|
|
323
|
+
typeof(val_real) as t_real,
|
|
324
|
+
typeof(val_blob) as t_blob,
|
|
325
|
+
typeof(val_any) as t_any
|
|
326
|
+
from t_typeof where id = 1;
|
|
327
|
+
→ [{"t_int":"integer","t_text":"text","t_real":"real","t_blob":"blob","t_any":"null"}]
|
|
328
|
+
|
|
329
|
+
drop table t_typeof;
|
|
330
|
+
|
|
331
|
+
-- 4c. Type coercion edge cases
|
|
332
|
+
create table t_coerce (
|
|
333
|
+
id integer primary key,
|
|
334
|
+
int_col integer,
|
|
335
|
+
real_col real
|
|
336
|
+
);
|
|
337
|
+
|
|
338
|
+
-- Boolean to integer
|
|
339
|
+
insert into t_coerce values (1, true, false);
|
|
340
|
+
|
|
341
|
+
select int_col, real_col from t_coerce where id = 1;
|
|
342
|
+
→ [{"int_col":1,"real_col":0}]
|
|
343
|
+
|
|
344
|
+
-- Real to integer (truncation)
|
|
345
|
+
insert into t_coerce values (2, 9.7, 9.7);
|
|
346
|
+
|
|
347
|
+
select int_col, real_col from t_coerce where id = 2;
|
|
348
|
+
→ [{"int_col":9,"real_col":9.7}]
|
|
349
|
+
|
|
350
|
+
drop table t_coerce;
|
|
351
|
+
|
|
352
|
+
-- 4d. Interaction of defaults and types
|
|
353
|
+
create table t_def_type (
|
|
354
|
+
id integer primary key,
|
|
355
|
+
count integer default 0,
|
|
356
|
+
label text default 'none',
|
|
357
|
+
ratio real default 1.5
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
insert into t_def_type (id) values (1);
|
|
361
|
+
|
|
362
|
+
select typeof(count), count, typeof(label), label, typeof(ratio), ratio from t_def_type where id = 1;
|
|
363
|
+
→ [{"typeof(count)":"integer","count":0,"typeof(label)":"text","label":"none","typeof(ratio)":"real","ratio":1.5}]
|
|
364
|
+
|
|
365
|
+
drop table t_def_type;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
-- adapted from SQLite test/tableopts.test
|
|
2
|
+
-- Quereus has no WITHOUT ROWID and uses logical/physical type separation
|
|
3
|
+
-- (STRICT semantics by design). These fixtures pin the parser hygiene and
|
|
4
|
+
-- the type-enforcement story for SQLite-style table options.
|
|
5
|
+
|
|
6
|
+
-- ===================================
|
|
7
|
+
-- 1. Unknown trailing table option rejected
|
|
8
|
+
-- ===================================
|
|
9
|
+
|
|
10
|
+
create table t_bad_opt (id integer primary key, b text) unknown_option;
|
|
11
|
+
-- error:
|
|
12
|
+
|
|
13
|
+
-- bare "without" is a parse error
|
|
14
|
+
create table t_bare_without (id integer primary key, b text) without;
|
|
15
|
+
-- error:
|
|
16
|
+
|
|
17
|
+
-- "without" remains usable as a table name (not a reserved word)
|
|
18
|
+
create table without_t (id integer primary key, b text);
|
|
19
|
+
insert into without_t values (1, 'xyzzy');
|
|
20
|
+
select * from without_t where b = 'xyzzy';
|
|
21
|
+
→ [{"id":1,"b":"xyzzy"}]
|
|
22
|
+
drop table without_t;
|
|
23
|
+
|
|
24
|
+
-- ===================================
|
|
25
|
+
-- 2. WITHOUT ROWID rejected (Quereus has no rowids)
|
|
26
|
+
-- ===================================
|
|
27
|
+
|
|
28
|
+
create table t_wr (id integer primary key, b text) without rowid;
|
|
29
|
+
-- error:
|
|
30
|
+
|
|
31
|
+
drop table if exists t_wr;
|
|
32
|
+
|
|
33
|
+
-- ===================================
|
|
34
|
+
-- 3. STRICT-equivalent type enforcement (Quereus is STRICT-by-design)
|
|
35
|
+
-- ===================================
|
|
36
|
+
|
|
37
|
+
create table t_strict (
|
|
38
|
+
i integer primary key,
|
|
39
|
+
t text,
|
|
40
|
+
r real,
|
|
41
|
+
b blob
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
-- matching types succeed
|
|
45
|
+
insert into t_strict values (1, 'hello', 3.14, x'ab');
|
|
46
|
+
|
|
47
|
+
select typeof(i), typeof(t), typeof(r), typeof(b) from t_strict where i = 1;
|
|
48
|
+
→ [{"typeof(i)":"integer","typeof(t)":"text","typeof(r)":"real","typeof(b)":"blob"}]
|
|
49
|
+
|
|
50
|
+
-- non-numeric text into integer column rejected (no implicit affinity coercion)
|
|
51
|
+
insert into t_strict values (2, 'x', 'not-a-number', x'00');
|
|
52
|
+
-- error:
|
|
53
|
+
|
|
54
|
+
drop table t_strict;
|
|
55
|
+
|
|
56
|
+
-- 'any' columns are the explicit opt-out for mixed types
|
|
57
|
+
create table t_any (id integer primary key, v any null);
|
|
58
|
+
insert into t_any values (1, 1), (2, 'two'), (3, 3.14), (4, x'ab'), (5, null);
|
|
59
|
+
|
|
60
|
+
select typeof(v) from t_any order by id;
|
|
61
|
+
→ [{"typeof(v)":"integer"},{"typeof(v)":"text"},{"typeof(v)":"real"},{"typeof(v)":"blob"},{"typeof(v)":"null"}]
|
|
62
|
+
|
|
63
|
+
drop table t_any;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-- ===================================================================
|
|
2
|
+
-- Memory-only: default collation of an undecorated text PRIMARY KEY
|
|
3
|
+
-- ===================================================================
|
|
4
|
+
--
|
|
5
|
+
-- This file is registered in MEMORY_ONLY_FILES (test/logic.spec.ts) and is
|
|
6
|
+
-- SKIPPED under store mode (QUEREUS_TEST_STORE) on purpose: the default key
|
|
7
|
+
-- collation of an *undecorated* text PK is intentionally backend-divergent.
|
|
8
|
+
--
|
|
9
|
+
-- memory module → BINARY ('a' and 'A' are distinct rows)
|
|
10
|
+
-- store module → NOCASE ('a' and 'A' collide; the second insert raises UNIQUE)
|
|
11
|
+
--
|
|
12
|
+
-- The memory side honors the session default_collation (BINARY out of box) via
|
|
13
|
+
-- resolveDefaultCollation (quereus/src/schema/table.ts); the store side applies
|
|
14
|
+
-- its table-level key collation K (NOCASE by default) via reconcilePkCollations
|
|
15
|
+
-- (quereus-store/store-module-schema-rewrite.ts). The store leg of this contract is covered by
|
|
16
|
+
-- create-table-conformance.spec.ts. See docs/schema.md §"Per-column PK key
|
|
17
|
+
-- collation" for the full cross-backend contrast.
|
|
18
|
+
|
|
19
|
+
-- Undecorated text PK reports BINARY under the memory module.
|
|
20
|
+
create table t_text_pk (x text primary key);
|
|
21
|
+
select name, collation from table_info('t_text_pk');
|
|
22
|
+
→ [{"name":"x","collation":"BINARY"}]
|
|
23
|
+
|
|
24
|
+
-- BINARY PK: 'a' and 'A' are distinct rows (would collide under NOCASE).
|
|
25
|
+
insert into t_text_pk values ('a');
|
|
26
|
+
insert into t_text_pk values ('A');
|
|
27
|
+
select count(*) as n from t_text_pk;
|
|
28
|
+
→ [{"n":2}]
|
|
29
|
+
|
|
30
|
+
drop table t_text_pk;
|