@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,276 @@
|
|
|
1
|
+
-- subquery-edge-cases.sqllogic - Subquery emitter edge cases
|
|
2
|
+
-- Targets: subquery.ts — IN with NULLs, scalar empty, EXISTS empty, deeply nested
|
|
3
|
+
|
|
4
|
+
-- ===== IN VALUE LIST EDGE CASES =====
|
|
5
|
+
|
|
6
|
+
-- IN value list: match → true
|
|
7
|
+
SELECT 10 IN (10, 20, 30) AS result;
|
|
8
|
+
→ [{"result":true}]
|
|
9
|
+
|
|
10
|
+
-- IN value list: no match, no nulls → false
|
|
11
|
+
SELECT 99 IN (10, 20, 30) AS result;
|
|
12
|
+
→ [{"result":false}]
|
|
13
|
+
|
|
14
|
+
-- IN value list: no match but has null → null (SQL three-valued logic)
|
|
15
|
+
SELECT 99 IN (10, null, 30) AS result;
|
|
16
|
+
→ [{"result":null}]
|
|
17
|
+
|
|
18
|
+
-- IN value list: match despite null → true (match takes priority)
|
|
19
|
+
SELECT 10 IN (10, null, 30) AS result;
|
|
20
|
+
→ [{"result":true}]
|
|
21
|
+
|
|
22
|
+
-- IN value list: null condition → null
|
|
23
|
+
SELECT null IN (10, 20, 30) AS result;
|
|
24
|
+
→ [{"result":null}]
|
|
25
|
+
|
|
26
|
+
-- IN value list: null condition with nulls in list → null
|
|
27
|
+
SELECT null IN (10, null, 30) AS result;
|
|
28
|
+
→ [{"result":null}]
|
|
29
|
+
|
|
30
|
+
-- IN single value: match
|
|
31
|
+
SELECT 5 IN (5) AS result;
|
|
32
|
+
→ [{"result":true}]
|
|
33
|
+
|
|
34
|
+
-- IN single value: no match
|
|
35
|
+
SELECT 5 IN (6) AS result;
|
|
36
|
+
→ [{"result":false}]
|
|
37
|
+
|
|
38
|
+
-- ===== IN SUBQUERY EDGE CASES =====
|
|
39
|
+
|
|
40
|
+
CREATE TABLE sq_vals (id INTEGER PRIMARY KEY, val INTEGER NULL);
|
|
41
|
+
INSERT INTO sq_vals VALUES (1, 10), (2, 20), (3, null), (4, 30), (5, null);
|
|
42
|
+
|
|
43
|
+
-- IN subquery: match found
|
|
44
|
+
SELECT 10 IN (SELECT val FROM sq_vals WHERE val IS NOT NULL) AS result;
|
|
45
|
+
→ [{"result":true}]
|
|
46
|
+
|
|
47
|
+
-- IN subquery: no match, subquery has NULLs → null
|
|
48
|
+
SELECT 99 IN (SELECT val FROM sq_vals) AS result;
|
|
49
|
+
→ [{"result":null}]
|
|
50
|
+
|
|
51
|
+
-- IN subquery: match found despite NULLs → true
|
|
52
|
+
SELECT 20 IN (SELECT val FROM sq_vals) AS result;
|
|
53
|
+
→ [{"result":true}]
|
|
54
|
+
|
|
55
|
+
-- IN subquery: null condition → null
|
|
56
|
+
SELECT null IN (SELECT val FROM sq_vals) AS result;
|
|
57
|
+
→ [{"result":null}]
|
|
58
|
+
|
|
59
|
+
-- IN subquery: empty subquery → false
|
|
60
|
+
SELECT 10 IN (SELECT val FROM sq_vals WHERE val > 1000) AS result;
|
|
61
|
+
→ [{"result":false}]
|
|
62
|
+
|
|
63
|
+
-- IN subquery: no match, no NULLs → false
|
|
64
|
+
SELECT 99 IN (SELECT val FROM sq_vals WHERE val IS NOT NULL) AS result;
|
|
65
|
+
→ [{"result":false}]
|
|
66
|
+
|
|
67
|
+
-- ===== EXISTS EDGE CASES =====
|
|
68
|
+
|
|
69
|
+
-- EXISTS: non-empty → true
|
|
70
|
+
SELECT EXISTS (SELECT 1 FROM sq_vals) AS result;
|
|
71
|
+
→ [{"result":true}]
|
|
72
|
+
|
|
73
|
+
-- EXISTS: empty → false
|
|
74
|
+
SELECT EXISTS (SELECT 1 FROM sq_vals WHERE val > 1000) AS result;
|
|
75
|
+
→ [{"result":false}]
|
|
76
|
+
|
|
77
|
+
-- EXISTS: subquery returns NULLs (still true — rows exist)
|
|
78
|
+
SELECT EXISTS (SELECT val FROM sq_vals WHERE val IS NULL) AS result;
|
|
79
|
+
→ [{"result":true}]
|
|
80
|
+
|
|
81
|
+
-- NOT EXISTS: non-empty → false
|
|
82
|
+
SELECT NOT EXISTS (SELECT 1 FROM sq_vals) AS result;
|
|
83
|
+
→ [{"result":false}]
|
|
84
|
+
|
|
85
|
+
-- NOT EXISTS: empty → true
|
|
86
|
+
SELECT NOT EXISTS (SELECT 1 FROM sq_vals WHERE val > 1000) AS result;
|
|
87
|
+
→ [{"result":true}]
|
|
88
|
+
|
|
89
|
+
-- ===== SCALAR SUBQUERY EDGE CASES =====
|
|
90
|
+
|
|
91
|
+
-- Scalar subquery: 0 rows → null
|
|
92
|
+
SELECT (SELECT val FROM sq_vals WHERE val > 1000) AS result;
|
|
93
|
+
→ [{"result":null}]
|
|
94
|
+
|
|
95
|
+
-- Scalar subquery: 1 row with null value → null
|
|
96
|
+
SELECT (SELECT val FROM sq_vals WHERE id = 3) AS result;
|
|
97
|
+
→ [{"result":null}]
|
|
98
|
+
|
|
99
|
+
-- Scalar subquery: 1 row with non-null value
|
|
100
|
+
SELECT (SELECT val FROM sq_vals WHERE id = 1) AS result;
|
|
101
|
+
→ [{"result":10}]
|
|
102
|
+
|
|
103
|
+
-- Scalar subquery: multiple rows → error
|
|
104
|
+
SELECT (SELECT val FROM sq_vals WHERE val IS NOT NULL);
|
|
105
|
+
-- error: Scalar subquery returned more than one row
|
|
106
|
+
|
|
107
|
+
DROP TABLE sq_vals;
|
|
108
|
+
|
|
109
|
+
-- ===== DEEPLY NESTED CORRELATED SUBQUERIES =====
|
|
110
|
+
|
|
111
|
+
CREATE TABLE sq_a (id INTEGER PRIMARY KEY, val INTEGER);
|
|
112
|
+
CREATE TABLE sq_b (id INTEGER PRIMARY KEY, a_id INTEGER, val INTEGER);
|
|
113
|
+
CREATE TABLE sq_c (id INTEGER PRIMARY KEY, b_id INTEGER, val INTEGER);
|
|
114
|
+
|
|
115
|
+
INSERT INTO sq_a VALUES (1, 100), (2, 200);
|
|
116
|
+
INSERT INTO sq_b VALUES (10, 1, 50), (20, 1, 60), (30, 2, 70);
|
|
117
|
+
INSERT INTO sq_c VALUES (100, 10, 5), (200, 20, 6), (300, 30, 7);
|
|
118
|
+
|
|
119
|
+
-- Three-level correlated: sum of sums
|
|
120
|
+
-- a.id=1: b rows {10,20} → c sums {5, 6} → outer sum = 11
|
|
121
|
+
-- a.id=2: b rows {30} → c sums {7} → outer sum = 7
|
|
122
|
+
SELECT a.id,
|
|
123
|
+
(SELECT sum(
|
|
124
|
+
(SELECT sum(c.val) FROM sq_c c WHERE c.b_id = b.id)
|
|
125
|
+
) FROM sq_b b WHERE b.a_id = a.id) AS deep_sum
|
|
126
|
+
FROM sq_a a ORDER BY a.id;
|
|
127
|
+
→ [{"id":1,"deep_sum":11},{"id":2,"deep_sum":7}]
|
|
128
|
+
|
|
129
|
+
-- Correlated subquery in HAVING
|
|
130
|
+
SELECT a.id, count(*) AS cnt
|
|
131
|
+
FROM sq_b b JOIN sq_a a ON b.a_id = a.id
|
|
132
|
+
GROUP BY a.id
|
|
133
|
+
HAVING count(*) > (SELECT 1)
|
|
134
|
+
ORDER BY a.id;
|
|
135
|
+
→ [{"id":1,"cnt":2}]
|
|
136
|
+
|
|
137
|
+
-- Correlated subquery with no matching rows → null aggregate
|
|
138
|
+
SELECT a.id,
|
|
139
|
+
(SELECT sum(b.val) FROM sq_b b WHERE b.a_id = a.id AND b.val > 1000) AS filtered_sum
|
|
140
|
+
FROM sq_a a ORDER BY a.id;
|
|
141
|
+
→ [{"id":1,"filtered_sum":null},{"id":2,"filtered_sum":null}]
|
|
142
|
+
|
|
143
|
+
-- IN subquery used in WHERE with correlated condition
|
|
144
|
+
SELECT a.id FROM sq_a a
|
|
145
|
+
WHERE a.id IN (SELECT b.a_id FROM sq_b b WHERE b.val > 55)
|
|
146
|
+
ORDER BY a.id;
|
|
147
|
+
→ [{"id":1},{"id":2}]
|
|
148
|
+
|
|
149
|
+
DROP TABLE sq_c;
|
|
150
|
+
DROP TABLE sq_b;
|
|
151
|
+
DROP TABLE sq_a;
|
|
152
|
+
|
|
153
|
+
-- ===== IN WITH COLUMN VALUES (tests dynamic vs constant path) =====
|
|
154
|
+
|
|
155
|
+
CREATE TABLE sq_in_t (id INTEGER PRIMARY KEY, val INTEGER NULL);
|
|
156
|
+
INSERT INTO sq_in_t VALUES (1, 10), (2, 20), (3, null), (4, 30);
|
|
157
|
+
|
|
158
|
+
-- Column IN constant list: exercises constant BTree path
|
|
159
|
+
SELECT id, val IN (10, 30) AS matched FROM sq_in_t ORDER BY id;
|
|
160
|
+
→ [{"id":1,"matched":true},{"id":2,"matched":false},{"id":3,"matched":null},{"id":4,"matched":true}]
|
|
161
|
+
|
|
162
|
+
-- Column IN constant list with null: null column → null, non-match → null
|
|
163
|
+
SELECT id, val IN (10, null) AS matched FROM sq_in_t ORDER BY id;
|
|
164
|
+
→ [{"id":1,"matched":true},{"id":2,"matched":null},{"id":3,"matched":null},{"id":4,"matched":null}]
|
|
165
|
+
|
|
166
|
+
-- NOT IN with nulls: classic SQL gotcha
|
|
167
|
+
SELECT id FROM sq_in_t WHERE val NOT IN (10, null);
|
|
168
|
+
→ []
|
|
169
|
+
|
|
170
|
+
-- NOT IN without nulls
|
|
171
|
+
SELECT id FROM sq_in_t WHERE val NOT IN (10, 30) ORDER BY id;
|
|
172
|
+
→ [{"id":2}]
|
|
173
|
+
|
|
174
|
+
DROP TABLE sq_in_t;
|
|
175
|
+
|
|
176
|
+
-- ===== CONSTANT SCALAR SUBQUERY AS A PREDICATE VALUE =====
|
|
177
|
+
-- Constant folding replaces an uncorrelated constant scalar subquery with a
|
|
178
|
+
-- LiteralNode whose value is a still-pending Promise; that must not be treated
|
|
179
|
+
-- as a plan-time constant by the sargable-range-rewrite rule or the
|
|
180
|
+
-- constraint extractor (bug-constant-subquery-literal-crashes-predicate-rewrite).
|
|
181
|
+
|
|
182
|
+
CREATE TABLE sq_const_t (id INTEGER PRIMARY KEY, v INTEGER, status TEXT);
|
|
183
|
+
INSERT INTO sq_const_t VALUES (1, 1, 'x'), (2, 2, 'y');
|
|
184
|
+
|
|
185
|
+
-- Equality against a folded constant scalar subquery
|
|
186
|
+
SELECT id FROM sq_const_t WHERE v = (SELECT 1);
|
|
187
|
+
→ [{"id":1}]
|
|
188
|
+
|
|
189
|
+
-- Equality against a folded constant scalar subquery, text column
|
|
190
|
+
SELECT id FROM sq_const_t WHERE status = (SELECT 'x');
|
|
191
|
+
→ [{"id":1}]
|
|
192
|
+
|
|
193
|
+
-- BETWEEN with folded constant scalar subquery bounds
|
|
194
|
+
SELECT id FROM sq_const_t WHERE v BETWEEN (SELECT 1) AND (SELECT 2) ORDER BY id;
|
|
195
|
+
→ [{"id":1},{"id":2}]
|
|
196
|
+
|
|
197
|
+
-- IN list mixing a folded constant scalar subquery and an ordinary literal
|
|
198
|
+
SELECT id FROM sq_const_t WHERE v IN ((SELECT 1), 2) ORDER BY id;
|
|
199
|
+
→ [{"id":1},{"id":2}]
|
|
200
|
+
|
|
201
|
+
-- Range operators against folded constant scalar subquery bounds
|
|
202
|
+
SELECT id FROM sq_const_t WHERE v > (SELECT 1) ORDER BY id;
|
|
203
|
+
→ [{"id":2}]
|
|
204
|
+
|
|
205
|
+
SELECT id FROM sq_const_t WHERE v >= (SELECT 1) AND v < (SELECT 2) ORDER BY id;
|
|
206
|
+
→ [{"id":1}]
|
|
207
|
+
|
|
208
|
+
-- Folded constant scalar subquery on the LEFT of the comparison
|
|
209
|
+
SELECT id FROM sq_const_t WHERE (SELECT 2) = v;
|
|
210
|
+
→ [{"id":2}]
|
|
211
|
+
|
|
212
|
+
-- Against the PRIMARY KEY column, where the constraint would otherwise become a seek key
|
|
213
|
+
SELECT id FROM sq_const_t WHERE id = (SELECT 2);
|
|
214
|
+
→ [{"id":2}]
|
|
215
|
+
|
|
216
|
+
-- NOT IN list mixing a folded constant scalar subquery and an ordinary literal
|
|
217
|
+
SELECT id FROM sq_const_t WHERE v NOT IN ((SELECT 1), 99) ORDER BY id;
|
|
218
|
+
→ [{"id":2}]
|
|
219
|
+
|
|
220
|
+
-- Control: aggregate subquery is never folded to a literal, already worked
|
|
221
|
+
SELECT id FROM sq_const_t WHERE status = (SELECT max(status) FROM sq_const_t);
|
|
222
|
+
→ [{"id":2}]
|
|
223
|
+
|
|
224
|
+
DROP TABLE sq_const_t;
|
|
225
|
+
|
|
226
|
+
-- ===== TWO DIFFERENT CONSTANT SCALAR SUBQUERIES IN ONE STATEMENT =====
|
|
227
|
+
-- Each uncorrelated constant scalar subquery folds to a LiteralNode whose value is a
|
|
228
|
+
-- still-pending Promise. The expression fingerprinter used to canonicalize every such
|
|
229
|
+
-- literal to the same string, so common-subexpression elimination collapsed two
|
|
230
|
+
-- expressions that differ only in which subquery they contain into one shared
|
|
231
|
+
-- computation (bug-constant-subquery-literals-collide-in-cse).
|
|
232
|
+
|
|
233
|
+
CREATE TABLE sq_cse_t (id INTEGER PRIMARY KEY, x INTEGER);
|
|
234
|
+
INSERT INTO sq_cse_t VALUES (1, 10), (2, 20);
|
|
235
|
+
|
|
236
|
+
-- Two distinct constant subqueries inside larger projection expressions
|
|
237
|
+
SELECT x + (SELECT 1) AS a, x + (SELECT 2) AS b FROM sq_cse_t WHERE id = 1;
|
|
238
|
+
→ [{"a":11,"b":12}]
|
|
239
|
+
|
|
240
|
+
-- Two distinct constant subqueries across the arms of a disjunction: collapsing them
|
|
241
|
+
-- silently dropped a qualifying row
|
|
242
|
+
SELECT id FROM sq_cse_t WHERE x = (SELECT 10) OR x = (SELECT 20) ORDER BY id;
|
|
243
|
+
→ [{"id":1},{"id":2}]
|
|
244
|
+
|
|
245
|
+
-- Three distinct constant subqueries in one projection
|
|
246
|
+
SELECT x + (SELECT 1) AS a, x + (SELECT 2) AS b, x + (SELECT 3) AS c FROM sq_cse_t WHERE id = 1;
|
|
247
|
+
→ [{"a":11,"b":12,"c":13}]
|
|
248
|
+
|
|
249
|
+
-- Repeating the SAME constant subquery stays consistent (both arms see the same value)
|
|
250
|
+
SELECT x + (SELECT 5) AS a, x + (SELECT 5) AS b FROM sq_cse_t WHERE id = 2;
|
|
251
|
+
→ [{"a":25,"b":25}]
|
|
252
|
+
|
|
253
|
+
-- Distinct constant subqueries in the ORDER BY chain
|
|
254
|
+
SELECT id, x + (SELECT 100) AS a FROM sq_cse_t ORDER BY x + (SELECT 1), x + (SELECT 2);
|
|
255
|
+
→ [{"id":1,"a":110},{"id":2,"a":120}]
|
|
256
|
+
|
|
257
|
+
-- Projection and filter across the Project→Filter chain that ruleScalarCSE actually
|
|
258
|
+
-- targets: collapsing these two changes the ROW SET, not just a column value.
|
|
259
|
+
-- Correct: only x=20 passes (22 > 21), projecting 21. Sharing `x + (SELECT 1)` yields
|
|
260
|
+
-- no rows; sharing `x + (SELECT 2)` yields a=22.
|
|
261
|
+
SELECT x + (SELECT 1) AS a FROM sq_cse_t WHERE x + (SELECT 2) > 21 ORDER BY id;
|
|
262
|
+
→ [{"a":21}]
|
|
263
|
+
|
|
264
|
+
-- Control: bare constant subqueries as whole projections (never CSE candidates)
|
|
265
|
+
SELECT (SELECT 1) AS a, (SELECT 2) AS b FROM sq_cse_t WHERE id = 1;
|
|
266
|
+
→ [{"a":1,"b":2}]
|
|
267
|
+
|
|
268
|
+
-- Control: ordinary literals in the same shape already fingerprint distinctly
|
|
269
|
+
SELECT x + 1 AS a, x + 2 AS b FROM sq_cse_t WHERE id = 1;
|
|
270
|
+
→ [{"a":11,"b":12}]
|
|
271
|
+
|
|
272
|
+
-- Control: ordinary literals across a disjunction
|
|
273
|
+
SELECT id FROM sq_cse_t WHERE x = 10 OR x = 20 ORDER BY id;
|
|
274
|
+
→ [{"id":1},{"id":2}]
|
|
275
|
+
|
|
276
|
+
DROP TABLE sq_cse_t;
|