@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,354 @@
|
|
|
1
|
+
-- Schema Search Path Tests
|
|
2
|
+
-- Tests for WITH SCHEMA clause and PRAGMA schema_path
|
|
3
|
+
|
|
4
|
+
-- Setup: Create tables in main schema
|
|
5
|
+
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
|
|
6
|
+
INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob');
|
|
7
|
+
|
|
8
|
+
CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER, amount REAL);
|
|
9
|
+
INSERT INTO orders VALUES (1, 1, 100.50), (2, 2, 200.75);
|
|
10
|
+
|
|
11
|
+
-- Test 1: Default behavior - unqualified names resolve to main
|
|
12
|
+
SELECT * FROM users ORDER BY id;
|
|
13
|
+
→ [{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]
|
|
14
|
+
|
|
15
|
+
-- Test 2: WITH SCHEMA clause with main (should work)
|
|
16
|
+
SELECT * FROM users WITH SCHEMA main ORDER BY id;
|
|
17
|
+
→ [{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]
|
|
18
|
+
|
|
19
|
+
-- Test 3: WITH SCHEMA on JOIN queries
|
|
20
|
+
SELECT u.id, u.name, o.id as order_id, o.amount FROM users u JOIN orders o ON u.id = o.user_id WITH SCHEMA main ORDER BY u.id;
|
|
21
|
+
→ [{"id":1,"name":"Alice","order_id":1,"amount":100.5},{"id":2,"name":"Bob","order_id":2,"amount":200.75}]
|
|
22
|
+
|
|
23
|
+
-- Test 4: PRAGMA schema_path - set and query
|
|
24
|
+
PRAGMA schema_path = 'main';
|
|
25
|
+
|
|
26
|
+
PRAGMA schema_path;
|
|
27
|
+
→ [{"name":"schema_path","value":"main"}]
|
|
28
|
+
|
|
29
|
+
-- Test 5: After setting pragma, unqualified names still work
|
|
30
|
+
SELECT * FROM users ORDER BY id;
|
|
31
|
+
→ [{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]
|
|
32
|
+
|
|
33
|
+
-- Test 6: INSERT with WITH SCHEMA
|
|
34
|
+
INSERT INTO users (id, name) VALUES (3, 'Charlie') WITH SCHEMA main;
|
|
35
|
+
|
|
36
|
+
SELECT * FROM users WHERE id = 3;
|
|
37
|
+
→ [{"id":3,"name":"Charlie"}]
|
|
38
|
+
|
|
39
|
+
-- Test 7: UPDATE with WITH SCHEMA
|
|
40
|
+
UPDATE users SET name = 'Alice Updated' WHERE id = 1 WITH SCHEMA main;
|
|
41
|
+
|
|
42
|
+
SELECT name FROM users WHERE id = 1;
|
|
43
|
+
→ [{"name":"Alice Updated"}]
|
|
44
|
+
|
|
45
|
+
-- Test 8: DELETE with WITH SCHEMA
|
|
46
|
+
DELETE FROM users WHERE id = 3 WITH SCHEMA main;
|
|
47
|
+
|
|
48
|
+
SELECT COUNT(*) as count FROM users;
|
|
49
|
+
→ [{"count":2}]
|
|
50
|
+
|
|
51
|
+
-- Test 9: WITH SCHEMA with CTEs
|
|
52
|
+
WITH active_users AS (SELECT * FROM users WHERE id <= 2) SELECT * FROM active_users WITH SCHEMA main ORDER BY id;
|
|
53
|
+
→ [{"id":1,"name":"Alice Updated"},{"id":2,"name":"Bob"}]
|
|
54
|
+
|
|
55
|
+
-- Test 10: RETURNING with WITH SCHEMA
|
|
56
|
+
INSERT INTO users (id, name) VALUES (4, 'David') WITH SCHEMA main RETURNING id, name;
|
|
57
|
+
→ [{"id":4,"name":"David"}]
|
|
58
|
+
|
|
59
|
+
-- Test 11: Multiple table references with different schemas via WITH SCHEMA
|
|
60
|
+
SELECT u.name, o.amount, o.id as oid FROM users u JOIN orders o ON u.id = o.user_id WITH SCHEMA main ORDER BY o.id;
|
|
61
|
+
→ [{"name":"Alice Updated","amount":100.5,"oid":1},{"name":"Bob","amount":200.75,"oid":2}]
|
|
62
|
+
|
|
63
|
+
-- Test 12: Subqueries work with WITH SCHEMA
|
|
64
|
+
SELECT * FROM (SELECT * FROM users WHERE id > 0) sub WITH SCHEMA main ORDER BY id;
|
|
65
|
+
→ [{"id":1,"name":"Alice Updated"},{"id":2,"name":"Bob"},{"id":4,"name":"David"}]
|
|
66
|
+
|
|
67
|
+
-- Test 13: WITH SCHEMA and WITH CONTEXT can appear in any order
|
|
68
|
+
-- Note: We'd need mutation context tables to fully test this, but we can verify parsing
|
|
69
|
+
|
|
70
|
+
-- ===================================
|
|
71
|
+
-- Non-default schema: DML with WITH SCHEMA
|
|
72
|
+
-- Tests that INSERT/UPDATE/DELETE properly propagate schema path context
|
|
73
|
+
-- ===================================
|
|
74
|
+
|
|
75
|
+
-- Create a custom schema with tables
|
|
76
|
+
declare schema myapp {
|
|
77
|
+
table products {
|
|
78
|
+
id INTEGER PRIMARY KEY,
|
|
79
|
+
name TEXT NOT NULL,
|
|
80
|
+
status TEXT DEFAULT 'active'
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
apply schema myapp;
|
|
85
|
+
|
|
86
|
+
-- run
|
|
87
|
+
|
|
88
|
+
-- Seed data via explicit schema qualification (baseline, no bug)
|
|
89
|
+
INSERT INTO myapp.products (id, name) VALUES (1, 'Widget');
|
|
90
|
+
|
|
91
|
+
SELECT * FROM myapp.products;
|
|
92
|
+
→ [{"id":1,"name":"Widget","status":"active"}]
|
|
93
|
+
|
|
94
|
+
-- Test 14: UPDATE with WITH SCHEMA on non-default schema (update.ts:68 bug)
|
|
95
|
+
-- The source scan must use contextWithSchemaPath to resolve the unqualified table name
|
|
96
|
+
UPDATE products SET name = 'Gadget' WHERE id = 1 WITH SCHEMA myapp;
|
|
97
|
+
|
|
98
|
+
SELECT * FROM myapp.products WHERE id = 1;
|
|
99
|
+
→ [{"id":1,"name":"Gadget","status":"active"}]
|
|
100
|
+
|
|
101
|
+
-- Test 15: INSERT with WITH SCHEMA on non-default schema (insert.ts:528 bug)
|
|
102
|
+
-- Row expansion (default value computation) must use contextWithSchemaPath
|
|
103
|
+
INSERT INTO products (id, name) VALUES (2, 'Doohickey') WITH SCHEMA myapp;
|
|
104
|
+
|
|
105
|
+
SELECT * FROM myapp.products ORDER BY id;
|
|
106
|
+
→ [{"id":1,"name":"Gadget","status":"active"},{"id":2,"name":"Doohickey","status":"active"}]
|
|
107
|
+
|
|
108
|
+
-- Test 16: DELETE with WITH SCHEMA on non-default schema (verify parity with delete.ts)
|
|
109
|
+
DELETE FROM products WHERE id = 2 WITH SCHEMA myapp;
|
|
110
|
+
|
|
111
|
+
SELECT COUNT(*) as count FROM myapp.products;
|
|
112
|
+
→ [{"count":1}]
|
|
113
|
+
|
|
114
|
+
-- Test 17: INSERT with WITH SCHEMA + RETURNING on non-default schema
|
|
115
|
+
INSERT INTO products (id, name) VALUES (3, 'Thingamajig') WITH SCHEMA myapp RETURNING id, name, status;
|
|
116
|
+
→ [{"id":3,"name":"Thingamajig","status":"active"}]
|
|
117
|
+
|
|
118
|
+
-- Test 17a: a SUBQUERY inside RETURNING also resolves on the statement's schema path.
|
|
119
|
+
-- INSERT used to build RETURNING against the bare context, so an unqualified name in a
|
|
120
|
+
-- RETURNING subquery ignored WITH SCHEMA and reported "not found in schema path: main"
|
|
121
|
+
-- (UPDATE and DELETE already resolved it). `lookup` exists only in myapp, and is not
|
|
122
|
+
-- touched by the insert, so the count is stable.
|
|
123
|
+
CREATE TABLE myapp.lookup (k INTEGER PRIMARY KEY);
|
|
124
|
+
INSERT INTO myapp.lookup VALUES (1), (2), (3);
|
|
125
|
+
|
|
126
|
+
INSERT INTO products (id, name) VALUES (5, 'Whatsit') WITH SCHEMA myapp
|
|
127
|
+
RETURNING id, (SELECT COUNT(*) FROM lookup) AS n;
|
|
128
|
+
→ [{"id":5,"n":3}]
|
|
129
|
+
|
|
130
|
+
DELETE FROM myapp.products WHERE id = 5;
|
|
131
|
+
|
|
132
|
+
-- Test 17b: the ON CONFLICT arm resolves the schema path too, and now EXECUTEs a
|
|
133
|
+
-- subquery in that position: `DmlExecutorNode` exposes its ON CONFLICT expressions as
|
|
134
|
+
-- optimizer-visible children, so their subquery subtrees get rewritten. Fixed by
|
|
135
|
+
-- `bug-dml-side-expressions-invisible-to-optimizer`.
|
|
136
|
+
INSERT INTO products (id, name) VALUES (3, 'Dupe')
|
|
137
|
+
ON CONFLICT (id) DO UPDATE SET name = (SELECT COUNT(*) FROM lookup)
|
|
138
|
+
WITH SCHEMA myapp RETURNING name;
|
|
139
|
+
→ [{"name":"3"}]
|
|
140
|
+
|
|
141
|
+
DROP TABLE myapp.lookup;
|
|
142
|
+
|
|
143
|
+
-- ===================================
|
|
144
|
+
-- Non-default schema: write-through a view whose home schema is not on the path
|
|
145
|
+
-- The stored body's unqualified `products` must resolve next to the VIEW (myapp),
|
|
146
|
+
-- for the write exactly as for the read — the session path here is 'main'.
|
|
147
|
+
-- ===================================
|
|
148
|
+
|
|
149
|
+
-- Test 18: INSERT / UPDATE / DELETE through a view stored in myapp
|
|
150
|
+
CREATE VIEW myapp.product_names AS SELECT id, name FROM products;
|
|
151
|
+
|
|
152
|
+
INSERT INTO myapp.product_names (id, name) VALUES (4, 'Gizmo');
|
|
153
|
+
|
|
154
|
+
SELECT id, name, status FROM myapp.products WHERE id = 4;
|
|
155
|
+
→ [{"id":4,"name":"Gizmo","status":"active"}]
|
|
156
|
+
|
|
157
|
+
UPDATE myapp.product_names SET name = 'Gizmo II' WHERE id = 4;
|
|
158
|
+
|
|
159
|
+
SELECT id, name FROM myapp.products WHERE id = 4;
|
|
160
|
+
→ [{"id":4,"name":"Gizmo II"}]
|
|
161
|
+
|
|
162
|
+
DELETE FROM myapp.product_names WHERE id = 4;
|
|
163
|
+
|
|
164
|
+
SELECT COUNT(*) as count FROM myapp.products WHERE id = 4;
|
|
165
|
+
→ [{"count":0}]
|
|
166
|
+
|
|
167
|
+
-- Test 19: on a name collision the view's home schema wins over the session path
|
|
168
|
+
CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT);
|
|
169
|
+
INSERT INTO products (id, name) VALUES (9, 'main-row');
|
|
170
|
+
|
|
171
|
+
UPDATE myapp.product_names SET name = 'via-view' WHERE id = 3;
|
|
172
|
+
|
|
173
|
+
SELECT id, name FROM myapp.products WHERE id = 3;
|
|
174
|
+
→ [{"id":3,"name":"via-view"}]
|
|
175
|
+
|
|
176
|
+
SELECT id, name FROM main.products;
|
|
177
|
+
→ [{"id":9,"name":"main-row"}]
|
|
178
|
+
|
|
179
|
+
DROP TABLE products;
|
|
180
|
+
DROP VIEW myapp.product_names;
|
|
181
|
+
|
|
182
|
+
-- Clean up custom schema
|
|
183
|
+
DROP TABLE myapp.products;
|
|
184
|
+
|
|
185
|
+
-- Clean up
|
|
186
|
+
DROP TABLE users;
|
|
187
|
+
DROP TABLE orders;
|
|
188
|
+
|
|
189
|
+
-- ===================================
|
|
190
|
+
-- Unqualified VIEW names resolve through the schema search path, exactly as
|
|
191
|
+
-- unqualified table names do (bug-unqualified-view-name-ignores-schema-path).
|
|
192
|
+
-- ===================================
|
|
193
|
+
|
|
194
|
+
CREATE TABLE temp.rt (id INTEGER PRIMARY KEY, x INTEGER);
|
|
195
|
+
INSERT INTO temp.rt VALUES (1, 10);
|
|
196
|
+
CREATE VIEW temp.rv AS SELECT id, x FROM rt;
|
|
197
|
+
|
|
198
|
+
-- Test 20: qualified reference (baseline, never depended on the path)
|
|
199
|
+
SELECT * FROM temp.rv;
|
|
200
|
+
→ [{"id":1,"x":10}]
|
|
201
|
+
|
|
202
|
+
-- Test 21: with `temp` OFF the session path an unqualified view is not found —
|
|
203
|
+
-- the same answer an unqualified table in `temp` gets, hint included
|
|
204
|
+
PRAGMA schema_path = 'main';
|
|
205
|
+
|
|
206
|
+
SELECT * FROM rv;
|
|
207
|
+
-- error: Did you mean: temp.rv?
|
|
208
|
+
|
|
209
|
+
SELECT * FROM rt;
|
|
210
|
+
-- error: Did you mean: temp.rt?
|
|
211
|
+
|
|
212
|
+
-- Test 22: with `temp` ON the path both resolve
|
|
213
|
+
PRAGMA schema_path = 'temp,main';
|
|
214
|
+
|
|
215
|
+
SELECT * FROM rv;
|
|
216
|
+
→ [{"id":1,"x":10}]
|
|
217
|
+
|
|
218
|
+
SELECT * FROM rt;
|
|
219
|
+
→ [{"id":1,"x":10}]
|
|
220
|
+
|
|
221
|
+
-- Test 23: a view composed over another view in the same non-main schema
|
|
222
|
+
CREATE VIEW temp.rv2 AS SELECT id, x FROM rv;
|
|
223
|
+
|
|
224
|
+
SELECT * FROM temp.rv2;
|
|
225
|
+
→ [{"id":1,"x":10}]
|
|
226
|
+
|
|
227
|
+
SELECT * FROM rv2;
|
|
228
|
+
→ [{"id":1,"x":10}]
|
|
229
|
+
|
|
230
|
+
-- Test 24: unqualified INSERT / UPDATE / DELETE through a non-main view
|
|
231
|
+
INSERT INTO rv (id, x) VALUES (2, 20);
|
|
232
|
+
|
|
233
|
+
SELECT id, x FROM temp.rt ORDER BY id;
|
|
234
|
+
→ [{"id":1,"x":10},{"id":2,"x":20}]
|
|
235
|
+
|
|
236
|
+
UPDATE rv SET x = 21 WHERE id = 2;
|
|
237
|
+
|
|
238
|
+
SELECT id, x FROM temp.rt WHERE id = 2;
|
|
239
|
+
→ [{"id":2,"x":21}]
|
|
240
|
+
|
|
241
|
+
DELETE FROM rv WHERE id = 2;
|
|
242
|
+
|
|
243
|
+
SELECT COUNT(*) as count FROM temp.rt;
|
|
244
|
+
→ [{"count":1}]
|
|
245
|
+
|
|
246
|
+
-- Test 25: statement-level WITH SCHEMA reaches the view too
|
|
247
|
+
-- (`temp` is a keyword in the WITH SCHEMA position, hence the quoted form)
|
|
248
|
+
PRAGMA schema_path = 'main';
|
|
249
|
+
|
|
250
|
+
SELECT id, x FROM rv WITH SCHEMA "temp";
|
|
251
|
+
→ [{"id":1,"x":10}]
|
|
252
|
+
|
|
253
|
+
UPDATE rv SET x = 12 WHERE id = 1 WITH SCHEMA "temp";
|
|
254
|
+
|
|
255
|
+
SELECT id, x FROM temp.rt WHERE id = 1;
|
|
256
|
+
→ [{"id":1,"x":12}]
|
|
257
|
+
|
|
258
|
+
UPDATE temp.rv SET x = 10 WHERE id = 1;
|
|
259
|
+
|
|
260
|
+
DROP VIEW temp.rv2;
|
|
261
|
+
DROP VIEW temp.rv;
|
|
262
|
+
DROP TABLE temp.rt;
|
|
263
|
+
|
|
264
|
+
-- Test 26: within-path ordering — a TABLE in an earlier entry beats a VIEW of
|
|
265
|
+
-- the same name in a later one, and vice versa. (A table/view collision inside
|
|
266
|
+
-- ONE schema is impossible; CREATE TABLE / CREATE VIEW reject it.)
|
|
267
|
+
CREATE TABLE main.dual_name (id INTEGER PRIMARY KEY, tag TEXT);
|
|
268
|
+
INSERT INTO main.dual_name VALUES (1, 'table-in-main');
|
|
269
|
+
CREATE TABLE temp.dn_src (id INTEGER PRIMARY KEY, tag TEXT);
|
|
270
|
+
INSERT INTO temp.dn_src VALUES (1, 'view-in-temp');
|
|
271
|
+
CREATE VIEW temp.dual_name AS SELECT id, tag FROM dn_src;
|
|
272
|
+
|
|
273
|
+
PRAGMA schema_path = 'main,temp';
|
|
274
|
+
|
|
275
|
+
SELECT tag FROM dual_name;
|
|
276
|
+
→ [{"tag":"table-in-main"}]
|
|
277
|
+
|
|
278
|
+
PRAGMA schema_path = 'temp,main';
|
|
279
|
+
|
|
280
|
+
SELECT tag FROM dual_name;
|
|
281
|
+
→ [{"tag":"view-in-temp"}]
|
|
282
|
+
|
|
283
|
+
-- a qualified reference is unaffected by the path either way
|
|
284
|
+
SELECT tag FROM main.dual_name;
|
|
285
|
+
→ [{"tag":"table-in-main"}]
|
|
286
|
+
|
|
287
|
+
SELECT tag FROM temp.dual_name;
|
|
288
|
+
→ [{"tag":"view-in-temp"}]
|
|
289
|
+
|
|
290
|
+
-- Test 27: the same ordering governs a WRITE target, not just a read
|
|
291
|
+
CREATE TABLE temp.dn_w_src (id INTEGER PRIMARY KEY, tag TEXT);
|
|
292
|
+
INSERT INTO temp.dn_w_src VALUES (1, 'view-in-temp');
|
|
293
|
+
CREATE VIEW temp.dn_w AS SELECT id, tag FROM dn_w_src;
|
|
294
|
+
CREATE TABLE main.dn_w (id INTEGER PRIMARY KEY, tag TEXT);
|
|
295
|
+
INSERT INTO main.dn_w VALUES (1, 'table-in-main');
|
|
296
|
+
|
|
297
|
+
PRAGMA schema_path = 'main,temp';
|
|
298
|
+
|
|
299
|
+
UPDATE dn_w SET tag = 'wrote-main' WHERE id = 1;
|
|
300
|
+
|
|
301
|
+
SELECT tag FROM main.dn_w;
|
|
302
|
+
→ [{"tag":"wrote-main"}]
|
|
303
|
+
|
|
304
|
+
SELECT tag FROM temp.dn_w_src;
|
|
305
|
+
→ [{"tag":"view-in-temp"}]
|
|
306
|
+
|
|
307
|
+
PRAGMA schema_path = 'temp,main';
|
|
308
|
+
|
|
309
|
+
UPDATE dn_w SET tag = 'wrote-temp-view' WHERE id = 1;
|
|
310
|
+
|
|
311
|
+
SELECT tag FROM main.dn_w;
|
|
312
|
+
→ [{"tag":"wrote-main"}]
|
|
313
|
+
|
|
314
|
+
SELECT tag FROM temp.dn_w_src;
|
|
315
|
+
→ [{"tag":"wrote-temp-view"}]
|
|
316
|
+
|
|
317
|
+
PRAGMA schema_path = 'main';
|
|
318
|
+
|
|
319
|
+
DROP VIEW temp.dn_w;
|
|
320
|
+
DROP TABLE temp.dn_w_src;
|
|
321
|
+
DROP TABLE main.dn_w;
|
|
322
|
+
|
|
323
|
+
DROP VIEW temp.dual_name;
|
|
324
|
+
DROP TABLE temp.dn_src;
|
|
325
|
+
DROP TABLE main.dual_name;
|
|
326
|
+
|
|
327
|
+
-- Test 28: a user-declared (non-`temp`) schema behaves identically — the `temp`
|
|
328
|
+
-- coverage above must not be reading a temp-only special case.
|
|
329
|
+
CREATE TABLE myapp.ut (id INTEGER PRIMARY KEY, x INTEGER);
|
|
330
|
+
INSERT INTO myapp.ut VALUES (1, 10);
|
|
331
|
+
CREATE VIEW myapp.uv AS SELECT id, x FROM ut;
|
|
332
|
+
|
|
333
|
+
SELECT * FROM uv;
|
|
334
|
+
-- error: Did you mean: myapp.uv?
|
|
335
|
+
|
|
336
|
+
PRAGMA schema_path = 'myapp,main';
|
|
337
|
+
|
|
338
|
+
SELECT * FROM uv;
|
|
339
|
+
→ [{"id":1,"x":10}]
|
|
340
|
+
|
|
341
|
+
INSERT INTO uv (id, x) VALUES (2, 20);
|
|
342
|
+
|
|
343
|
+
SELECT id, x FROM myapp.ut ORDER BY id;
|
|
344
|
+
→ [{"id":1,"x":10},{"id":2,"x":20}]
|
|
345
|
+
|
|
346
|
+
DELETE FROM uv WHERE id = 2;
|
|
347
|
+
|
|
348
|
+
PRAGMA schema_path = 'main';
|
|
349
|
+
|
|
350
|
+
SELECT id, x FROM uv WITH SCHEMA myapp;
|
|
351
|
+
→ [{"id":1,"x":10}]
|
|
352
|
+
|
|
353
|
+
DROP VIEW myapp.uv;
|
|
354
|
+
DROP TABLE myapp.ut;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
-- Schema Case-Insensitive Name Tests
|
|
2
|
+
-- Verifies that schema names are case-insensitive throughout the system
|
|
3
|
+
|
|
4
|
+
-- Setup: Create a custom schema with mixed-case name via declarative schema
|
|
5
|
+
declare schema MyApp {
|
|
6
|
+
table items {
|
|
7
|
+
id INTEGER PRIMARY KEY,
|
|
8
|
+
name TEXT
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
seed items (
|
|
12
|
+
(1, 'Widget'),
|
|
13
|
+
(2, 'Gadget')
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
-- run
|
|
18
|
+
|
|
19
|
+
apply schema MyApp with seed;
|
|
20
|
+
|
|
21
|
+
-- run
|
|
22
|
+
|
|
23
|
+
-- Test 1: Access table using original case
|
|
24
|
+
SELECT * FROM MyApp.items ORDER BY id;
|
|
25
|
+
→ [{"id":1,"name":"Widget"},{"id":2,"name":"Gadget"}]
|
|
26
|
+
|
|
27
|
+
-- Test 2: Access table using lowercase schema name
|
|
28
|
+
SELECT * FROM myapp.items ORDER BY id;
|
|
29
|
+
→ [{"id":1,"name":"Widget"},{"id":2,"name":"Gadget"}]
|
|
30
|
+
|
|
31
|
+
-- Test 3: Access table using uppercase schema name
|
|
32
|
+
SELECT * FROM MYAPP.items ORDER BY id;
|
|
33
|
+
→ [{"id":1,"name":"Widget"},{"id":2,"name":"Gadget"}]
|
|
34
|
+
|
|
35
|
+
-- Test 4: Access table using mixed case schema name
|
|
36
|
+
SELECT * FROM mYaPp.items ORDER BY id;
|
|
37
|
+
→ [{"id":1,"name":"Widget"},{"id":2,"name":"Gadget"}]
|
|
38
|
+
|
|
39
|
+
-- Test 5: INSERT using different case schema name
|
|
40
|
+
INSERT INTO myapp.items VALUES (3, 'Doohickey');
|
|
41
|
+
|
|
42
|
+
SELECT * FROM MyApp.items WHERE id = 3;
|
|
43
|
+
→ [{"id":3,"name":"Doohickey"}]
|
|
44
|
+
|
|
45
|
+
-- Test 6: UPDATE using different case schema name
|
|
46
|
+
UPDATE MYAPP.items SET name = 'Updated Widget' WHERE id = 1;
|
|
47
|
+
|
|
48
|
+
SELECT name FROM myapp.items WHERE id = 1;
|
|
49
|
+
→ [{"name":"Updated Widget"}]
|
|
50
|
+
|
|
51
|
+
-- Test 7: DELETE using different case schema name
|
|
52
|
+
DELETE FROM mYaPp.items WHERE id = 3;
|
|
53
|
+
|
|
54
|
+
SELECT COUNT(*) as cnt FROM MyApp.items;
|
|
55
|
+
→ [{"cnt":2}]
|
|
56
|
+
|
|
57
|
+
-- Test 8: Main schema is also case-insensitive
|
|
58
|
+
CREATE TABLE test_main (id INTEGER PRIMARY KEY, val TEXT);
|
|
59
|
+
INSERT INTO test_main VALUES (1, 'hello');
|
|
60
|
+
|
|
61
|
+
SELECT * FROM Main.test_main;
|
|
62
|
+
→ [{"id":1,"val":"hello"}]
|
|
63
|
+
|
|
64
|
+
SELECT * FROM MAIN.test_main;
|
|
65
|
+
→ [{"id":1,"val":"hello"}]
|
|
66
|
+
|
|
67
|
+
DROP TABLE test_main;
|
|
68
|
+
|
|
69
|
+
-- Test 9: Views with mixed-case schema names
|
|
70
|
+
CREATE VIEW myapp.item_names AS SELECT name FROM myapp.items;
|
|
71
|
+
|
|
72
|
+
SELECT * FROM MyApp.item_names ORDER BY name;
|
|
73
|
+
→ [{"name":"Gadget"},{"name":"Updated Widget"}]
|
|
74
|
+
|
|
75
|
+
SELECT * FROM MYAPP.item_names ORDER BY name;
|
|
76
|
+
→ [{"name":"Gadget"},{"name":"Updated Widget"}]
|
|
77
|
+
|
|
78
|
+
-- Test 10: Drop view with different case
|
|
79
|
+
DROP VIEW MyApp.item_names;
|
|
80
|
+
|
|
81
|
+
SELECT * FROM myapp.item_names;
|
|
82
|
+
-- error:
|
|
83
|
+
|