@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,193 @@
|
|
|
1
|
+
-- aggregates.sqllogic - Testing aggregate functions and GROUP BY/HAVING
|
|
2
|
+
|
|
3
|
+
CREATE TABLE agg_t (id INTEGER PRIMARY KEY, grp TEXT, val INTEGER NULL);
|
|
4
|
+
INSERT INTO agg_t VALUES (1, 'a', 10), (2, 'b', 20), (3, 'a', 30), (4, 'b', 40), (5, 'c', 50), (6, 'a', null);
|
|
5
|
+
|
|
6
|
+
-- Basic aggregates
|
|
7
|
+
SELECT count(*), count(val), sum(val), avg(val), min(val), max(val) FROM agg_t;
|
|
8
|
+
→ [{"count(*)":6,"count(val)":5,"sum(val)":150,"avg(val)":30,"min(val)":10,"max(val)":50}]
|
|
9
|
+
|
|
10
|
+
-- GROUP BY
|
|
11
|
+
SELECT grp, count(*) as cnt, sum(val) as total FROM agg_t GROUP BY grp ORDER BY grp;
|
|
12
|
+
→ [{"grp":"a","cnt":3,"total":40},{"grp":"b","cnt":2,"total":60},{"grp":"c","cnt":1,"total":50}]
|
|
13
|
+
|
|
14
|
+
-- GROUP BY with NULL value in aggregation
|
|
15
|
+
SELECT grp, count(val) FROM agg_t GROUP BY grp ORDER BY grp;
|
|
16
|
+
→ [{"grp":"a","count(val)":2},{"grp":"b","count(val)":2},{"grp":"c","count(val)":1}]
|
|
17
|
+
|
|
18
|
+
-- HAVING clause
|
|
19
|
+
SELECT grp, sum(val) as total FROM agg_t GROUP BY grp HAVING total > 40 ORDER BY grp;
|
|
20
|
+
→ [{"grp":"b","total":60},{"grp":"c","total":50}]
|
|
21
|
+
|
|
22
|
+
-- HAVING clause referencing alias
|
|
23
|
+
SELECT grp, sum(val) as total FROM agg_t GROUP BY grp HAVING total > 40 ORDER BY grp;
|
|
24
|
+
→ [{"grp":"b","total":60},{"grp":"c","total":50}]
|
|
25
|
+
|
|
26
|
+
-- HAVING on a GROUP BY column is pushed below the aggregate (rule-aggregate-predicate-pushdown).
|
|
27
|
+
-- Result rows must be unchanged by the rewrite.
|
|
28
|
+
SELECT grp, sum(val) as total FROM agg_t GROUP BY grp HAVING grp > 'a' ORDER BY grp;
|
|
29
|
+
→ [{"grp":"b","total":60},{"grp":"c","total":50}]
|
|
30
|
+
|
|
31
|
+
-- Mixed HAVING: GROUP-BY-column conjunct is pushed below, aggregate-output conjunct stays above.
|
|
32
|
+
SELECT grp, sum(val) as total FROM agg_t GROUP BY grp HAVING grp >= 'b' AND sum(val) > 40 ORDER BY grp;
|
|
33
|
+
→ [{"grp":"b","total":60},{"grp":"c","total":50}]
|
|
34
|
+
|
|
35
|
+
-- HAVING without GROUP BY
|
|
36
|
+
SELECT sum(val) FROM agg_t HAVING sum(val) > 100;
|
|
37
|
+
→ [{"sum(val)":150}]
|
|
38
|
+
|
|
39
|
+
-- Aggregate with empty input
|
|
40
|
+
CREATE TABLE empty_agg(x NULL);
|
|
41
|
+
SELECT count(*), sum(x) FROM empty_agg;
|
|
42
|
+
→ [{"count(*)":0,"sum(x)":null}]
|
|
43
|
+
DROP TABLE empty_agg;
|
|
44
|
+
|
|
45
|
+
-- group_concat
|
|
46
|
+
SELECT group_concat(val) FROM agg_t WHERE grp = 'a';
|
|
47
|
+
→ [{"group_concat(val)":"10,30"}]
|
|
48
|
+
SELECT group_concat(val, '|') FROM agg_t WHERE grp = 'b' ORDER BY val;
|
|
49
|
+
→ [{"group_concat(val, '|')":"20|40"}]
|
|
50
|
+
|
|
51
|
+
-- DISTINCT aggregates (Example: COUNT)
|
|
52
|
+
SELECT count(distinct grp) FROM agg_t;
|
|
53
|
+
→ [{"count(distinct grp)":3}]
|
|
54
|
+
INSERT INTO agg_t VALUES (7, 'c', 50);
|
|
55
|
+
SELECT count(distinct val) FROM agg_t WHERE grp = 'c';
|
|
56
|
+
→ [{"count(distinct val)":1}]
|
|
57
|
+
|
|
58
|
+
-- HAVING with COUNT(DISTINCT) - aggregate only in HAVING, not in SELECT
|
|
59
|
+
SELECT grp FROM agg_t GROUP BY grp HAVING count(distinct val) > 1 ORDER BY grp;
|
|
60
|
+
→ [{"grp":"a"},{"grp":"b"}]
|
|
61
|
+
|
|
62
|
+
-- HAVING with COUNT(DISTINCT) - aggregate in both SELECT and HAVING
|
|
63
|
+
SELECT grp, count(distinct val) as cd FROM agg_t GROUP BY grp HAVING count(distinct val) > 1 ORDER BY grp;
|
|
64
|
+
→ [{"grp":"a","cd":2},{"grp":"b","cd":2}]
|
|
65
|
+
|
|
66
|
+
-- HAVING with SUM(DISTINCT)
|
|
67
|
+
SELECT grp FROM agg_t GROUP BY grp HAVING sum(distinct val) > 45 ORDER BY grp;
|
|
68
|
+
→ [{"grp":"b"},{"grp":"c"}]
|
|
69
|
+
|
|
70
|
+
-- SELECT has COUNT(val), HAVING has COUNT(DISTINCT val) - must be different aggregates
|
|
71
|
+
SELECT grp, count(val) as cv FROM agg_t GROUP BY grp HAVING count(distinct val) = 1 ORDER BY grp;
|
|
72
|
+
→ [{"grp":"c","cv":2}]
|
|
73
|
+
|
|
74
|
+
-- HAVING expression with multiple DISTINCT aggregates
|
|
75
|
+
SELECT grp FROM agg_t GROUP BY grp HAVING count(distinct val) + count(distinct grp) > 2 ORDER BY grp;
|
|
76
|
+
→ [{"grp":"a"},{"grp":"b"}]
|
|
77
|
+
|
|
78
|
+
-- Constant literals are allowed in aggregate queries
|
|
79
|
+
SELECT grp, count(*) as cnt, 0 AS constant FROM agg_t GROUP BY grp ORDER BY grp;
|
|
80
|
+
→ [{"grp":"a","cnt":3,"constant":0},{"grp":"b","cnt":2,"constant":0},{"grp":"c","cnt":2,"constant":0}]
|
|
81
|
+
|
|
82
|
+
-- Non-grouped columns not allowed with aggregates
|
|
83
|
+
SELECT grp, count(*), val FROM agg_t GROUP BY grp;
|
|
84
|
+
-- error: Column 'val' must appear in the GROUP BY clause or be used in an aggregate function
|
|
85
|
+
|
|
86
|
+
-- Scalar functions wrapping aggregates
|
|
87
|
+
SELECT coalesce(max(id), 0) FROM agg_t;
|
|
88
|
+
→ [{"coalesce(max(id), 0)":7}]
|
|
89
|
+
|
|
90
|
+
SELECT coalesce(max(val), 0) FROM agg_t;
|
|
91
|
+
→ [{"coalesce(max(val), 0)":50}]
|
|
92
|
+
|
|
93
|
+
SELECT coalesce(min(val), -1) FROM agg_t;
|
|
94
|
+
→ [{"coalesce(min(val), -1)":10}]
|
|
95
|
+
|
|
96
|
+
-- Scalar wrapping aggregate with GROUP BY
|
|
97
|
+
SELECT grp, coalesce(max(val), 0) FROM agg_t GROUP BY grp ORDER BY grp;
|
|
98
|
+
→ [{"grp":"a","coalesce(max(val), 0)":30},{"grp":"b","coalesce(max(val), 0)":40},{"grp":"c","coalesce(max(val), 0)":50}]
|
|
99
|
+
|
|
100
|
+
-- Arithmetic on aggregate results
|
|
101
|
+
SELECT max(val) + 1 FROM agg_t;
|
|
102
|
+
→ [{"max(val) + 1":51}]
|
|
103
|
+
|
|
104
|
+
DROP TABLE agg_t;
|
|
105
|
+
|
|
106
|
+
-- GROUP BY with NULL group key
|
|
107
|
+
CREATE TABLE agg_null_grp (id INTEGER PRIMARY KEY, grp TEXT NULL, val INTEGER);
|
|
108
|
+
INSERT INTO agg_null_grp VALUES
|
|
109
|
+
(1, 'a', 10),
|
|
110
|
+
(2, null, 20),
|
|
111
|
+
(3, 'a', 30),
|
|
112
|
+
(4, null, 40),
|
|
113
|
+
(5, 'b', 50);
|
|
114
|
+
|
|
115
|
+
SELECT grp, count(*) as cnt, sum(val) as total FROM agg_null_grp GROUP BY grp ORDER BY grp NULLS FIRST;
|
|
116
|
+
→ [{"grp":null,"cnt":2,"total":60},{"grp":"a","cnt":2,"total":40},{"grp":"b","cnt":1,"total":50}]
|
|
117
|
+
|
|
118
|
+
DROP TABLE agg_null_grp;
|
|
119
|
+
|
|
120
|
+
-- Test aggregate function commutativity (order independence)
|
|
121
|
+
CREATE TABLE agg_order_test (id INTEGER PRIMARY KEY, val REAL NULL);
|
|
122
|
+
INSERT INTO agg_order_test VALUES (1, 1), (2, 2), (3, 3), (4, null), (5, 4.5), (6, -1);
|
|
123
|
+
|
|
124
|
+
SELECT SUM(val), COUNT(val), MAX(val), MIN(val) FROM agg_order_test;
|
|
125
|
+
→ [{"sum(val)":9.5,"count(val)":5,"max(val)":4.5,"min(val)":-1}]
|
|
126
|
+
|
|
127
|
+
-- Clear and insert in different order - results should be identical
|
|
128
|
+
DELETE FROM agg_order_test;
|
|
129
|
+
INSERT INTO agg_order_test VALUES (1, 4.5), (2, null), (3, -1), (4, 3), (5, 1), (6, 2);
|
|
130
|
+
|
|
131
|
+
SELECT SUM(val), COUNT(val), MAX(val), MIN(val) FROM agg_order_test;
|
|
132
|
+
→ [{"sum(val)":9.5,"count(val)":5,"max(val)":4.5,"min(val)":-1}]
|
|
133
|
+
|
|
134
|
+
-- Test with more complex mixed data
|
|
135
|
+
DELETE FROM agg_order_test;
|
|
136
|
+
INSERT INTO agg_order_test VALUES (1, 0), (2, 1), (3, null), (4, 2), (5, null), (6, 3);
|
|
137
|
+
|
|
138
|
+
SELECT SUM(val), AVG(val), COUNT(val), COUNT(*) FROM agg_order_test;
|
|
139
|
+
→ [{"sum(val)":6,"avg(val)":1.5,"count(val)":4,"count(*)":6}]
|
|
140
|
+
|
|
141
|
+
DROP TABLE agg_order_test;
|
|
142
|
+
|
|
143
|
+
-- GROUP BY FD simplification — PK-driven
|
|
144
|
+
-- `id` is the PK, so `id → name` and `id → email` hold. The optimizer drops
|
|
145
|
+
-- `name` and `email` from GROUP BY and re-emits them as MIN() picker
|
|
146
|
+
-- aggregates. Result rows must be unchanged by the rewrite.
|
|
147
|
+
CREATE TABLE agg_fd_pk (id INTEGER PRIMARY KEY, name TEXT, email TEXT);
|
|
148
|
+
INSERT INTO agg_fd_pk VALUES
|
|
149
|
+
(1, 'a', 'a@x'),
|
|
150
|
+
(2, 'b', 'b@x'),
|
|
151
|
+
(3, 'b', 'b@y');
|
|
152
|
+
|
|
153
|
+
SELECT id, name, email FROM agg_fd_pk GROUP BY id, name, email ORDER BY id;
|
|
154
|
+
→ [{"id":1,"name":"a","email":"a@x"},{"id":2,"name":"b","email":"b@x"},{"id":3,"name":"b","email":"b@y"}]
|
|
155
|
+
|
|
156
|
+
DROP TABLE agg_fd_pk;
|
|
157
|
+
|
|
158
|
+
-- GROUP BY FD simplification — EC-driven
|
|
159
|
+
-- `WHERE a = b` makes a ≡ b under the filter, so the optimizer drops one of
|
|
160
|
+
-- the two from GROUP BY and re-emits it as a MIN() picker. Result rows must
|
|
161
|
+
-- match the un-simplified semantics.
|
|
162
|
+
CREATE TABLE agg_fd_ec (id INTEGER PRIMARY KEY, a INTEGER, b INTEGER);
|
|
163
|
+
INSERT INTO agg_fd_ec VALUES (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 1, 1);
|
|
164
|
+
|
|
165
|
+
SELECT a, b FROM agg_fd_ec WHERE a = b GROUP BY a, b ORDER BY a;
|
|
166
|
+
→ [{"a":1,"b":1},{"a":2,"b":2},{"a":3,"b":3}]
|
|
167
|
+
|
|
168
|
+
DROP TABLE agg_fd_ec;
|
|
169
|
+
|
|
170
|
+
-- count(distinct blob_col) — the DISTINCT tree's entry is the bare BLOB scalar
|
|
171
|
+
-- (a Uint8Array), which inheritree's default freeze-on-insert cannot store
|
|
172
|
+
-- (bug-in-subquery-blob-values-crash).
|
|
173
|
+
--
|
|
174
|
+
-- The GROUP BY column here LEADS the primary key, so the index scan already
|
|
175
|
+
-- supplies grouped order and the optimizer picks StreamAggregate — which is what
|
|
176
|
+
-- makes this file (rather than 92-hash-aggregate-edge-cases) the right home for
|
|
177
|
+
-- the grouped case: it reaches the stream emitter's per-group distinct-tree reset.
|
|
178
|
+
-- A GROUP BY on an unindexed column costs out to HashAggregate instead; that
|
|
179
|
+
-- variant is covered in 92-hash-aggregate-edge-cases.
|
|
180
|
+
CREATE TABLE agg_blob (grp TEXT, id INTEGER, b BLOB NULL, PRIMARY KEY (grp, id));
|
|
181
|
+
INSERT INTO agg_blob VALUES
|
|
182
|
+
('a', 1, x'6162'), ('a', 2, x'6162'), ('a', 3, x'6164'),
|
|
183
|
+
('b', 4, x'6162'), ('b', 5, null);
|
|
184
|
+
|
|
185
|
+
-- No GROUP BY: always StreamAggregate, single accumulator + single tree
|
|
186
|
+
SELECT count(distinct b) AS cd FROM agg_blob;
|
|
187
|
+
→ [{"cd":2}]
|
|
188
|
+
|
|
189
|
+
-- Grouped: a fresh tree per group (first-group and new-group reset paths)
|
|
190
|
+
SELECT grp, count(distinct b) AS cd FROM agg_blob GROUP BY grp ORDER BY grp;
|
|
191
|
+
→ [{"grp":"a","cd":2},{"grp":"b","cd":1}]
|
|
192
|
+
|
|
193
|
+
DROP TABLE agg_blob;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
-- adapted from SQLite test/aggfunc.test, test/window4.test, test/window6.test
|
|
2
|
+
-- FILTER (WHERE …) clause restricts which rows feed an aggregate or window aggregate.
|
|
3
|
+
-- Quereus parser does not currently accept FILTER (WHERE ...) on aggregates.
|
|
4
|
+
-- Document the rejection.
|
|
5
|
+
|
|
6
|
+
create table af (id integer primary key, grp text, val integer null, flag integer);
|
|
7
|
+
insert into af values (1, 'a', 10, 1), (2, 'a', 20, 0);
|
|
8
|
+
|
|
9
|
+
select count(*) filter (where val > 15) as c from af;
|
|
10
|
+
-- error: filter
|
|
11
|
+
|
|
12
|
+
drop table af;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
-- adapted from SQLite test/aggfunc.test (aggorderby)
|
|
2
|
+
-- ORDER BY inside an aggregate function call (e.g. group_concat(... ORDER BY ...))
|
|
3
|
+
-- is not currently supported by the Quereus parser. Document the rejection.
|
|
4
|
+
|
|
5
|
+
create table ob (id integer primary key, grp text, val text, pri integer);
|
|
6
|
+
insert into ob values (1, 'a', 'x', 2), (2, 'a', 'y', 1);
|
|
7
|
+
|
|
8
|
+
select group_concat(val order by pri) as gc from ob;
|
|
9
|
+
-- error: order
|
|
10
|
+
|
|
11
|
+
drop table ob;
|