@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,350 @@
|
|
|
1
|
+
-- Constraint extractor mutation kills — end-to-end SQL tests
|
|
2
|
+
-- Each query exercises a specific constraint extraction path.
|
|
3
|
+
-- A surviving mutant that corrupts the pushed-down predicate will
|
|
4
|
+
-- produce wrong rows.
|
|
5
|
+
|
|
6
|
+
-- Setup
|
|
7
|
+
CREATE TABLE ce (id INTEGER PRIMARY KEY, a INTEGER NULL, b INTEGER NULL, c TEXT NULL);
|
|
8
|
+
INSERT INTO ce VALUES (1, 10, 100, 'alpha');
|
|
9
|
+
INSERT INTO ce VALUES (2, 20, 200, 'beta');
|
|
10
|
+
INSERT INTO ce VALUES (3, 30, 300, 'gamma');
|
|
11
|
+
INSERT INTO ce VALUES (4, 40, 400, 'delta');
|
|
12
|
+
INSERT INTO ce VALUES (5, NULL, NULL, NULL);
|
|
13
|
+
|
|
14
|
+
-- ---------------------------------------------------------------
|
|
15
|
+
-- Binary operators: col op lit
|
|
16
|
+
-- ---------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
-- equality
|
|
19
|
+
select id from ce where a = 20 order by id;
|
|
20
|
+
→ [{"id": 2}]
|
|
21
|
+
|
|
22
|
+
-- greater than
|
|
23
|
+
select id from ce where a > 20 order by id;
|
|
24
|
+
→ [{"id": 3}, {"id": 4}]
|
|
25
|
+
|
|
26
|
+
-- greater than or equal
|
|
27
|
+
select id from ce where a >= 20 order by id;
|
|
28
|
+
→ [{"id": 2}, {"id": 3}, {"id": 4}]
|
|
29
|
+
|
|
30
|
+
-- less than
|
|
31
|
+
select id from ce where a < 20 order by id;
|
|
32
|
+
→ [{"id": 1}]
|
|
33
|
+
|
|
34
|
+
-- less than or equal
|
|
35
|
+
select id from ce where a <= 20 order by id;
|
|
36
|
+
→ [{"id": 1}, {"id": 2}]
|
|
37
|
+
|
|
38
|
+
-- ---------------------------------------------------------------
|
|
39
|
+
-- flipOperator: lit op col (reversed pattern)
|
|
40
|
+
-- ---------------------------------------------------------------
|
|
41
|
+
|
|
42
|
+
-- 20 = a (same as a = 20)
|
|
43
|
+
select id from ce where 20 = a order by id;
|
|
44
|
+
→ [{"id": 2}]
|
|
45
|
+
|
|
46
|
+
-- 20 < a (same as a > 20)
|
|
47
|
+
select id from ce where 20 < a order by id;
|
|
48
|
+
→ [{"id": 3}, {"id": 4}]
|
|
49
|
+
|
|
50
|
+
-- 20 <= a (same as a >= 20)
|
|
51
|
+
select id from ce where 20 <= a order by id;
|
|
52
|
+
→ [{"id": 2}, {"id": 3}, {"id": 4}]
|
|
53
|
+
|
|
54
|
+
-- 20 > a (same as a < 20)
|
|
55
|
+
select id from ce where 20 > a order by id;
|
|
56
|
+
→ [{"id": 1}]
|
|
57
|
+
|
|
58
|
+
-- 20 >= a (same as a <= 20)
|
|
59
|
+
select id from ce where 20 >= a order by id;
|
|
60
|
+
→ [{"id": 1}, {"id": 2}]
|
|
61
|
+
|
|
62
|
+
-- ---------------------------------------------------------------
|
|
63
|
+
-- BETWEEN (inclusive bounds)
|
|
64
|
+
-- ---------------------------------------------------------------
|
|
65
|
+
|
|
66
|
+
select id from ce where a between 20 and 30 order by id;
|
|
67
|
+
→ [{"id": 2}, {"id": 3}]
|
|
68
|
+
|
|
69
|
+
-- boundary: exact match on lower
|
|
70
|
+
select id from ce where a between 10 and 10 order by id;
|
|
71
|
+
→ [{"id": 1}]
|
|
72
|
+
|
|
73
|
+
-- NOT BETWEEN — should still produce correct rows (residual filter)
|
|
74
|
+
select id from ce where a not between 20 and 30 order by id;
|
|
75
|
+
→ [{"id": 1}, {"id": 4}]
|
|
76
|
+
|
|
77
|
+
-- ---------------------------------------------------------------
|
|
78
|
+
-- IN / NOT IN
|
|
79
|
+
-- ---------------------------------------------------------------
|
|
80
|
+
|
|
81
|
+
select id from ce where a in (10, 30) order by id;
|
|
82
|
+
→ [{"id": 1}, {"id": 3}]
|
|
83
|
+
|
|
84
|
+
-- single element IN
|
|
85
|
+
select id from ce where a in (20) order by id;
|
|
86
|
+
→ [{"id": 2}]
|
|
87
|
+
|
|
88
|
+
-- multi-element
|
|
89
|
+
select id from ce where a in (10, 20, 30, 40) order by id;
|
|
90
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}]
|
|
91
|
+
|
|
92
|
+
-- ---------------------------------------------------------------
|
|
93
|
+
-- IS NULL / IS NOT NULL
|
|
94
|
+
-- ---------------------------------------------------------------
|
|
95
|
+
|
|
96
|
+
select id from ce where a is null order by id;
|
|
97
|
+
→ [{"id": 5}]
|
|
98
|
+
|
|
99
|
+
select id from ce where a is not null order by id;
|
|
100
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}]
|
|
101
|
+
|
|
102
|
+
select id from ce where c is null order by id;
|
|
103
|
+
→ [{"id": 5}]
|
|
104
|
+
|
|
105
|
+
select id from ce where c is not null order by id;
|
|
106
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}]
|
|
107
|
+
|
|
108
|
+
-- ---------------------------------------------------------------
|
|
109
|
+
-- AND decomposition
|
|
110
|
+
-- ---------------------------------------------------------------
|
|
111
|
+
|
|
112
|
+
select id from ce where a > 10 and a < 40 order by id;
|
|
113
|
+
→ [{"id": 2}, {"id": 3}]
|
|
114
|
+
|
|
115
|
+
-- deeply nested AND
|
|
116
|
+
select id from ce where a >= 10 and a <= 40 and b > 100 order by id;
|
|
117
|
+
→ [{"id": 2}, {"id": 3}, {"id": 4}]
|
|
118
|
+
|
|
119
|
+
-- ---------------------------------------------------------------
|
|
120
|
+
-- OR → IN collapse (a=1 OR a=2 OR a=3)
|
|
121
|
+
-- ---------------------------------------------------------------
|
|
122
|
+
|
|
123
|
+
select id from ce where a = 10 or a = 30 order by id;
|
|
124
|
+
→ [{"id": 1}, {"id": 3}]
|
|
125
|
+
|
|
126
|
+
select id from ce where a = 10 or a = 20 or a = 30 order by id;
|
|
127
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}]
|
|
128
|
+
|
|
129
|
+
-- mixed col=lit and lit=col in OR
|
|
130
|
+
select id from ce where 10 = a or a = 30 order by id;
|
|
131
|
+
→ [{"id": 1}, {"id": 3}]
|
|
132
|
+
|
|
133
|
+
-- OR with different columns — should NOT collapse to IN
|
|
134
|
+
select id from ce where a = 10 or b = 200 order by id;
|
|
135
|
+
→ [{"id": 1}, {"id": 2}]
|
|
136
|
+
|
|
137
|
+
-- ---------------------------------------------------------------
|
|
138
|
+
-- OR → range gaps
|
|
139
|
+
-- ---------------------------------------------------------------
|
|
140
|
+
|
|
141
|
+
-- a < 20 OR a > 30 → range gap
|
|
142
|
+
select id from ce where a < 20 or a > 30 order by id;
|
|
143
|
+
→ [{"id": 1}, {"id": 4}]
|
|
144
|
+
|
|
145
|
+
-- a <= 10 OR a >= 40 → inclusive bounds
|
|
146
|
+
select id from ce where a <= 10 or a >= 40 order by id;
|
|
147
|
+
→ [{"id": 1}, {"id": 4}]
|
|
148
|
+
|
|
149
|
+
-- ---------------------------------------------------------------
|
|
150
|
+
-- Per-table slicing (two-table join predicates)
|
|
151
|
+
-- ---------------------------------------------------------------
|
|
152
|
+
|
|
153
|
+
CREATE TABLE ce2 (id INTEGER PRIMARY KEY, x INTEGER, y INTEGER);
|
|
154
|
+
INSERT INTO ce2 VALUES (1, 100, 1000);
|
|
155
|
+
INSERT INTO ce2 VALUES (2, 200, 2000);
|
|
156
|
+
INSERT INTO ce2 VALUES (3, 300, 3000);
|
|
157
|
+
|
|
158
|
+
-- Join with per-table predicates
|
|
159
|
+
select ce.id, ce2.id as id2
|
|
160
|
+
from ce join ce2 on ce.b = ce2.x
|
|
161
|
+
where ce.a > 10 and ce2.y < 3000
|
|
162
|
+
order by ce.id;
|
|
163
|
+
→ [{"id": 2, "id2": 2}]
|
|
164
|
+
|
|
165
|
+
-- ---------------------------------------------------------------
|
|
166
|
+
-- Mixed extractable + residual
|
|
167
|
+
-- ---------------------------------------------------------------
|
|
168
|
+
|
|
169
|
+
-- CASE expression is residual, equality is extractable
|
|
170
|
+
select id from ce where a = 10 and case when b > 50 then 1 else 0 end = 1 order by id;
|
|
171
|
+
→ [{"id": 1}]
|
|
172
|
+
|
|
173
|
+
-- ---------------------------------------------------------------
|
|
174
|
+
-- BETWEEN inside AND
|
|
175
|
+
-- ---------------------------------------------------------------
|
|
176
|
+
|
|
177
|
+
select id from ce where a between 10 and 30 and b > 100 order by id;
|
|
178
|
+
→ [{"id": 2}, {"id": 3}]
|
|
179
|
+
|
|
180
|
+
-- ---------------------------------------------------------------
|
|
181
|
+
-- IN inside AND
|
|
182
|
+
-- ---------------------------------------------------------------
|
|
183
|
+
|
|
184
|
+
select id from ce where a in (10, 20) and b < 300 order by id;
|
|
185
|
+
→ [{"id": 1}, {"id": 2}]
|
|
186
|
+
|
|
187
|
+
-- ---------------------------------------------------------------
|
|
188
|
+
-- Covered key: equality on primary key returns exactly one row
|
|
189
|
+
-- ---------------------------------------------------------------
|
|
190
|
+
|
|
191
|
+
select id, a from ce where id = 3;
|
|
192
|
+
→ [{"id": 3, "a": 30}]
|
|
193
|
+
|
|
194
|
+
-- ---------------------------------------------------------------
|
|
195
|
+
-- LIKE / GLOB operators
|
|
196
|
+
-- ---------------------------------------------------------------
|
|
197
|
+
|
|
198
|
+
select id from ce where c like 'al%' order by id;
|
|
199
|
+
→ [{"id": 1}]
|
|
200
|
+
|
|
201
|
+
select id from ce where c like '%ta' order by id;
|
|
202
|
+
→ [{"id": 2}, {"id": 4}]
|
|
203
|
+
|
|
204
|
+
-- ---------------------------------------------------------------
|
|
205
|
+
-- Boundary: > vs >= distinction
|
|
206
|
+
-- ---------------------------------------------------------------
|
|
207
|
+
|
|
208
|
+
select id from ce where a > 10 order by id;
|
|
209
|
+
→ [{"id": 2}, {"id": 3}, {"id": 4}]
|
|
210
|
+
|
|
211
|
+
select id from ce where a >= 10 order by id;
|
|
212
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}]
|
|
213
|
+
|
|
214
|
+
-- Boundary: < vs <= distinction
|
|
215
|
+
select id from ce where a < 40 order by id;
|
|
216
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}]
|
|
217
|
+
|
|
218
|
+
select id from ce where a <= 40 order by id;
|
|
219
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}]
|
|
220
|
+
|
|
221
|
+
-- ---------------------------------------------------------------
|
|
222
|
+
-- Parameterized queries
|
|
223
|
+
-- ---------------------------------------------------------------
|
|
224
|
+
|
|
225
|
+
select id from ce where a = :val;
|
|
226
|
+
-- params: {"val": 30}
|
|
227
|
+
→ [{"id": 3}]
|
|
228
|
+
|
|
229
|
+
-- ---------------------------------------------------------------
|
|
230
|
+
-- Multiple predicates on same column
|
|
231
|
+
-- ---------------------------------------------------------------
|
|
232
|
+
|
|
233
|
+
select id from ce where a > 10 and a < 30 order by id;
|
|
234
|
+
→ [{"id": 2}]
|
|
235
|
+
|
|
236
|
+
select id from ce where a >= 10 and a <= 30 order by id;
|
|
237
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}]
|
|
238
|
+
|
|
239
|
+
-- ---------------------------------------------------------------
|
|
240
|
+
-- BETWEEN boundary values
|
|
241
|
+
-- ---------------------------------------------------------------
|
|
242
|
+
|
|
243
|
+
select id from ce where a between 20 and 20 order by id;
|
|
244
|
+
→ [{"id": 2}]
|
|
245
|
+
|
|
246
|
+
select id from ce where a between 10 and 40 order by id;
|
|
247
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}]
|
|
248
|
+
|
|
249
|
+
-- ---------------------------------------------------------------
|
|
250
|
+
-- Complex AND + OR
|
|
251
|
+
-- ---------------------------------------------------------------
|
|
252
|
+
|
|
253
|
+
select id from ce where (a = 10 or a = 20) and b > 100 order by id;
|
|
254
|
+
→ [{"id": 2}]
|
|
255
|
+
|
|
256
|
+
select id from ce where a in (10, 30) and b between 100 and 300 order by id;
|
|
257
|
+
→ [{"id": 1}, {"id": 3}]
|
|
258
|
+
|
|
259
|
+
-- ---------------------------------------------------------------
|
|
260
|
+
-- IS NULL with AND/OR
|
|
261
|
+
-- ---------------------------------------------------------------
|
|
262
|
+
|
|
263
|
+
select id from ce where a is null or b is null order by id;
|
|
264
|
+
→ [{"id": 5}]
|
|
265
|
+
|
|
266
|
+
select id from ce where a is not null and b > 200 order by id;
|
|
267
|
+
→ [{"id": 3}, {"id": 4}]
|
|
268
|
+
|
|
269
|
+
-- ---------------------------------------------------------------
|
|
270
|
+
-- Cross-table join constraint slicing
|
|
271
|
+
-- ---------------------------------------------------------------
|
|
272
|
+
|
|
273
|
+
select ce.id from ce join ce2 on ce.b = ce2.x where ce2.x = 100;
|
|
274
|
+
→ [{"id": 1}]
|
|
275
|
+
|
|
276
|
+
select ce.id, ce2.id as id2 from ce join ce2 on ce.a * 10 = ce2.x order by ce.id;
|
|
277
|
+
→ [{"id": 1, "id2": 1}, {"id": 2, "id2": 2}, {"id": 3, "id2": 3}]
|
|
278
|
+
|
|
279
|
+
-- ---------------------------------------------------------------
|
|
280
|
+
-- OR range: a>30 OR a<20 (gap in the middle)
|
|
281
|
+
-- ---------------------------------------------------------------
|
|
282
|
+
|
|
283
|
+
select id from ce where a > 30 or a < 20 order by id;
|
|
284
|
+
→ [{"id": 1}, {"id": 4}]
|
|
285
|
+
|
|
286
|
+
-- ---------------------------------------------------------------
|
|
287
|
+
-- Subquery IN (should not extract — goes through different path)
|
|
288
|
+
-- ---------------------------------------------------------------
|
|
289
|
+
|
|
290
|
+
select id from ce where b in (select x from ce2) order by id;
|
|
291
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}]
|
|
292
|
+
|
|
293
|
+
-- ---------------------------------------------------------------
|
|
294
|
+
-- NOT IN
|
|
295
|
+
-- ---------------------------------------------------------------
|
|
296
|
+
|
|
297
|
+
select id from ce where a not in (10, 20) order by id;
|
|
298
|
+
→ [{"id": 3}, {"id": 4}]
|
|
299
|
+
|
|
300
|
+
-- ---------------------------------------------------------------
|
|
301
|
+
-- OR of 4 equalities → IN collapse
|
|
302
|
+
-- ---------------------------------------------------------------
|
|
303
|
+
|
|
304
|
+
select id from ce where a = 10 or a = 20 or a = 30 or a = 40 order by id;
|
|
305
|
+
→ [{"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}]
|
|
306
|
+
|
|
307
|
+
-- ---------------------------------------------------------------
|
|
308
|
+
-- OR of inequality + equality → mixed
|
|
309
|
+
-- ---------------------------------------------------------------
|
|
310
|
+
|
|
311
|
+
select id from ce where a = 10 or a > 30 order by id;
|
|
312
|
+
→ [{"id": 1}, {"id": 4}]
|
|
313
|
+
|
|
314
|
+
-- ---------------------------------------------------------------
|
|
315
|
+
-- CAST in WHERE clause
|
|
316
|
+
-- ---------------------------------------------------------------
|
|
317
|
+
|
|
318
|
+
select id from ce where cast(a as text) = '20' order by id;
|
|
319
|
+
→ [{"id": 2}]
|
|
320
|
+
|
|
321
|
+
-- ---------------------------------------------------------------
|
|
322
|
+
-- Aggregate with constraint on grouped column
|
|
323
|
+
-- ---------------------------------------------------------------
|
|
324
|
+
|
|
325
|
+
select a, count(*) as cnt from ce where a is not null group by a having count(*) > 0 order by a;
|
|
326
|
+
→ [{"a": 10, "cnt": 1}, {"a": 20, "cnt": 1}, {"a": 30, "cnt": 1}, {"a": 40, "cnt": 1}]
|
|
327
|
+
|
|
328
|
+
-- ---------------------------------------------------------------
|
|
329
|
+
-- Join + constraint on each table
|
|
330
|
+
-- ---------------------------------------------------------------
|
|
331
|
+
|
|
332
|
+
select ce.id, ce2.id as id2
|
|
333
|
+
from ce cross join ce2
|
|
334
|
+
where ce.a = 10 and ce2.x = 200
|
|
335
|
+
order by ce.id;
|
|
336
|
+
→ [{"id": 1, "id2": 2}]
|
|
337
|
+
|
|
338
|
+
-- ---------------------------------------------------------------
|
|
339
|
+
-- Multiple OR ranges
|
|
340
|
+
-- ---------------------------------------------------------------
|
|
341
|
+
|
|
342
|
+
select id from ce where (a < 15 or a > 35) and b is not null order by id;
|
|
343
|
+
→ [{"id": 1}, {"id": 4}]
|
|
344
|
+
|
|
345
|
+
-- ---------------------------------------------------------------
|
|
346
|
+
-- Cleanup
|
|
347
|
+
-- ---------------------------------------------------------------
|
|
348
|
+
|
|
349
|
+
DROP TABLE ce;
|
|
350
|
+
DROP TABLE ce2;
|