@quereus/quereus 4.20.1 → 4.20.3

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.
Files changed (380) hide show
  1. package/README.md +2 -0
  2. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  3. package/dist/src/schema/schema-differ.js +17 -69
  4. package/dist/src/schema/schema-differ.js.map +1 -1
  5. package/package.json +7 -4
  6. package/test/README.md +173 -0
  7. package/test/logic/01-basic.sqllogic +39 -0
  8. package/test/logic/01.1-select-projection-extras.sqllogic +130 -0
  9. package/test/logic/01.2-strings.sqllogic +43 -0
  10. package/test/logic/01.5-insert-select.sqllogic +237 -0
  11. package/test/logic/01.6-update-extras.sqllogic +118 -0
  12. package/test/logic/01.7-update-from.sqllogic +67 -0
  13. package/test/logic/01.8-delete-extras.sqllogic +122 -0
  14. package/test/logic/01.8.1-delete-range-cow.sqllogic +115 -0
  15. package/test/logic/01.9-query-expr-dml-gates.sqllogic +32 -0
  16. package/test/logic/01.9-query-expr-dml.sqllogic +171 -0
  17. package/test/logic/01.9-query-expr-values.sqllogic +111 -0
  18. package/test/logic/01.9.1-limit-over-dml-subquery.sqllogic +119 -0
  19. package/test/logic/02-filters.sqllogic +54 -0
  20. package/test/logic/02-smoke.sqllogic +62 -0
  21. package/test/logic/02.1-bind-parameters.sqllogic +223 -0
  22. package/test/logic/03-expressions.sqllogic +190 -0
  23. package/test/logic/03.1-quoted-identifiers.sqllogic +55 -0
  24. package/test/logic/03.4-defaults.sqllogic +554 -0
  25. package/test/logic/03.4.1-default-edge-cases.sqllogic +99 -0
  26. package/test/logic/03.5-tvf.sqllogic +61 -0
  27. package/test/logic/03.6-type-system.sqllogic +544 -0
  28. package/test/logic/03.6.1-numeric-text-comparison-coercion.sqllogic +244 -0
  29. package/test/logic/03.6.2-value-to-text.sqllogic +224 -0
  30. package/test/logic/03.7-bigint-mixed-arithmetic.sqllogic +65 -0
  31. package/test/logic/03.8-not-precedence.sqllogic +255 -0
  32. package/test/logic/03.9-is-bool-predicate.sqllogic +150 -0
  33. package/test/logic/03.9.1-is-bool-predicate-partial-index.sqllogic +34 -0
  34. package/test/logic/04-order-by.sqllogic +38 -0
  35. package/test/logic/04-transactions.sqllogic +239 -0
  36. package/test/logic/04a-savepoint-lazy-attach.sqllogic +122 -0
  37. package/test/logic/05-vtab_memory.sqllogic +50 -0
  38. package/test/logic/05.0.1-vtab-memory-unique-index-collation.sqllogic +34 -0
  39. package/test/logic/05.1-composite-pk-range-scan.sqllogic +147 -0
  40. package/test/logic/05.1.1-secondary-index-range-scan.sqllogic +56 -0
  41. package/test/logic/05.2-cast-seek-correctness.sqllogic +124 -0
  42. package/test/logic/06-builtin_functions.sqllogic +149 -0
  43. package/test/logic/06.1-string-functions.sqllogic +92 -0
  44. package/test/logic/06.1.3-like-glob-edges.sqllogic +53 -0
  45. package/test/logic/06.2-math-functions.sqllogic +82 -0
  46. package/test/logic/06.3-schema.sqllogic +48 -0
  47. package/test/logic/06.3.1-schema-all-schemas.sqllogic +39 -0
  48. package/test/logic/06.3.2-schema-foreign-keys.sqllogic +208 -0
  49. package/test/logic/06.3.3-introspection-tags.sqllogic +202 -0
  50. package/test/logic/06.3.3.1-introspection-tags-index.sqllogic +74 -0
  51. package/test/logic/06.3.4-view-info.sqllogic +378 -0
  52. package/test/logic/06.3.5-column-info.sqllogic +347 -0
  53. package/test/logic/06.3.6-schema-views.sqllogic +29 -0
  54. package/test/logic/06.4-schema-search-path.sqllogic +354 -0
  55. package/test/logic/06.4.1-schema-case-insensitive.sqllogic +83 -0
  56. package/test/logic/06.4.2-collation-extras.sqllogic +472 -0
  57. package/test/logic/06.4.2.1-collation-index-access-paths.sqllogic +140 -0
  58. package/test/logic/06.4.3-write-path-collation.sqllogic +99 -0
  59. package/test/logic/06.4.4-comparison-collation-precedence.sqllogic +342 -0
  60. package/test/logic/06.4.5-any-collate-declared-keys.sqllogic +92 -0
  61. package/test/logic/06.5-polymorphic-types.sqllogic +169 -0
  62. package/test/logic/06.5.1-conversion-functions.sqllogic +173 -0
  63. package/test/logic/06.5.2-scalar-minmax.sqllogic +16 -0
  64. package/test/logic/06.5.3-undeclared-return-type-comparison.sqllogic +244 -0
  65. package/test/logic/06.5.4-declared-return-type-builtins.sqllogic +288 -0
  66. package/test/logic/06.6-aggregate-extended.sqllogic +78 -0
  67. package/test/logic/06.7-json-extended.sqllogic +53 -0
  68. package/test/logic/06.8-json-path-operators.sqllogic +99 -0
  69. package/test/logic/06.9-json-canonical-key.sqllogic +65 -0
  70. package/test/logic/06.9.1-json-coerce-once.sqllogic +417 -0
  71. package/test/logic/06.9.1.1-json-coerce-once-index.sqllogic +39 -0
  72. package/test/logic/06.9.2-json-structural-equality.sqllogic +382 -0
  73. package/test/logic/06.9.2.1-json-structural-equality-index.sqllogic +76 -0
  74. package/test/logic/06.9.3-json-index-range-seek.sqllogic +205 -0
  75. package/test/logic/07-aggregates.sqllogic +193 -0
  76. package/test/logic/07.1-aggregate-filter-clause.sqllogic +12 -0
  77. package/test/logic/07.2-aggregate-order-by.sqllogic +11 -0
  78. package/test/logic/07.3-group-by-extras.sqllogic +602 -0
  79. package/test/logic/07.3.1-group-by-order-by-key.sqllogic +164 -0
  80. package/test/logic/07.3.2-grouped-select-list-shape.sqllogic +231 -0
  81. package/test/logic/07.4-group-by-filter-composite-pk.sqllogic +120 -0
  82. package/test/logic/07.5-sum-mixed-exact-and-float.sqllogic +151 -0
  83. package/test/logic/07.5-window.sqllogic +1941 -0
  84. package/test/logic/07.5.1-window-named.sqllogic +13 -0
  85. package/test/logic/07.5.2-window-nth-value.sqllogic +13 -0
  86. package/test/logic/07.6-subqueries.sqllogic +78 -0
  87. package/test/logic/07.6.1-subquery-extras.sqllogic +93 -0
  88. package/test/logic/07.7-and-or-short-circuit.sqllogic +58 -0
  89. package/test/logic/07.7-in-subquery-caching.sqllogic +174 -0
  90. package/test/logic/07.7-scalar-agg-decorrelation.sqllogic +197 -0
  91. package/test/logic/07.7.1-in-extras.sqllogic +158 -0
  92. package/test/logic/07.7.1-scalar-agg-decorrelation-filter.sqllogic +105 -0
  93. package/test/logic/07.7.2-scalar-agg-decorrelation-nested.sqllogic +115 -0
  94. package/test/logic/07.7.3-exists-in-select-decorrelation.sqllogic +107 -0
  95. package/test/logic/07.7.4-where-conjunct-ordering.sqllogic +121 -0
  96. package/test/logic/07.7.5-filter-lost-under-index-order.sqllogic +134 -0
  97. package/test/logic/07.7.6-correlated-predicate-scope.sqllogic +178 -0
  98. package/test/logic/07.7.7-join-source-scope-shadowing.sqllogic +137 -0
  99. package/test/logic/07.7.8-correlated-ref-to-computed-column.sqllogic +165 -0
  100. package/test/logic/07.7.9-conjunct-monotonicity.sqllogic +200 -0
  101. package/test/logic/07.8-correlated-subquery-edges.sqllogic +71 -0
  102. package/test/logic/07.8.1-correlated-in-decorrelation-gates.sqllogic +156 -0
  103. package/test/logic/07.9-in-value-list.sqllogic +154 -0
  104. package/test/logic/07.9.1-in-value-list-composite-index.sqllogic +38 -0
  105. package/test/logic/08-views.sqllogic +64 -0
  106. package/test/logic/08.1-semi-anti-join.sqllogic +191 -0
  107. package/test/logic/08.1-view-edge-cases.sqllogic +118 -0
  108. package/test/logic/08.1.1-uncorrelated-in-semijoin.sqllogic +251 -0
  109. package/test/logic/08.2-existence-flag-semijoin-recovery.sqllogic +197 -0
  110. package/test/logic/08.3-existence-flag-inner-recovery.sqllogic +102 -0
  111. package/test/logic/08.4-key-set-semi-join.sqllogic +447 -0
  112. package/test/logic/09-set_operations.sqllogic +244 -0
  113. package/test/logic/09.1-set-op-cross-collation.sqllogic +230 -0
  114. package/test/logic/10-distinct_datatypes.sqllogic +127 -0
  115. package/test/logic/10.1-ddl-lifecycle.sqllogic +203 -0
  116. package/test/logic/10.1.1-create-table-syntax-edges.sqllogic +47 -0
  117. package/test/logic/10.1.2-ddl-in-transaction.sqllogic +143 -0
  118. package/test/logic/10.1.2.1-add-constraint-in-transaction.sqllogic +59 -0
  119. package/test/logic/10.1.3-ddl-drop-in-transaction.sqllogic +187 -0
  120. package/test/logic/10.1.3.1-drop-constraint-in-transaction.sqllogic +45 -0
  121. package/test/logic/10.1.4-create-table-duplicate-constraint-names.sqllogic +149 -0
  122. package/test/logic/10.1.4-ddl-transaction-policy.sqllogic +314 -0
  123. package/test/logic/10.1.5-alter-add-constraint-minted-name-disambiguation.sqllogic +219 -0
  124. package/test/logic/10.1.5-create-index-lifecycle.sqllogic +72 -0
  125. package/test/logic/10.1.6-ddl-transaction-policy-index.sqllogic +143 -0
  126. package/test/logic/10.1.7-create-table-default-type-check.sqllogic +119 -0
  127. package/test/logic/10.1.8-alter-add-check-existing-rows.sqllogic +117 -0
  128. package/test/logic/10.2-column-features.sqllogic +365 -0
  129. package/test/logic/10.2.1-table-options-rejection.sqllogic +63 -0
  130. package/test/logic/10.2.2-default-collation-memory.sqllogic +30 -0
  131. package/test/logic/10.3-function-features.sqllogic +247 -0
  132. package/test/logic/10.4-schema-scale.sqllogic +168 -0
  133. package/test/logic/10.4.1-schema-scale-indexes.sqllogic +121 -0
  134. package/test/logic/10.5-indexes.sqllogic +164 -0
  135. package/test/logic/10.5.1-partial-indexes.sqllogic +526 -0
  136. package/test/logic/10.5.2-expression-indexes.sqllogic +34 -0
  137. package/test/logic/10.5.3-desc-index-ordering.sqllogic +130 -0
  138. package/test/logic/10.5.4-composite-pk-index-update-phantom.sqllogic +55 -0
  139. package/test/logic/10.5.5-index-name-uniqueness.sqllogic +76 -0
  140. package/test/logic/10.5.6-minmax-index-boundary.sqllogic +204 -0
  141. package/test/logic/10.5.7-implicit-unique-index-lifecycle.sqllogic +1216 -0
  142. package/test/logic/10.6-distinct-edge-cases.sqllogic +119 -0
  143. package/test/logic/100-predicate-normalization-edge-cases.sqllogic +238 -0
  144. package/test/logic/100.1-where-extras.sqllogic +163 -0
  145. package/test/logic/100.1.1-where-join-on-order-indexed.sqllogic +35 -0
  146. package/test/logic/101-builtin-mutation-kills.sqllogic +974 -0
  147. package/test/logic/101-transaction-edge-cases.sqllogic +395 -0
  148. package/test/logic/102-schema-catalog-edge-cases.sqllogic +252 -0
  149. package/test/logic/102-unique-constraints.sqllogic +145 -0
  150. package/test/logic/102.0.1-schema-catalog-indexed-table.sqllogic +32 -0
  151. package/test/logic/102.1-unique-edge-cases.sqllogic +111 -0
  152. package/test/logic/102.1.1-unique-index-creation-edge-cases.sqllogic +75 -0
  153. package/test/logic/102.2-unique-collation.sqllogic +181 -0
  154. package/test/logic/102.2.1-unique-collation-index-derived.sqllogic +305 -0
  155. package/test/logic/103-database-options-edge-cases.sqllogic +108 -0
  156. package/test/logic/103.1-pragma-boolean-values.sqllogic +126 -0
  157. package/test/logic/104-emit-mutation-kills.sqllogic +236 -0
  158. package/test/logic/105-vtab-memory-mutation-kills.sqllogic +754 -0
  159. package/test/logic/105.1-vtab-memory-index-mutation-kills.sqllogic +540 -0
  160. package/test/logic/106-constraint-extractor-mutation-kills.sqllogic +350 -0
  161. package/test/logic/107-temporal-arithmetic-mutation-kills.sqllogic +833 -0
  162. package/test/logic/108-cardinality-estimation.sqllogic +146 -0
  163. package/test/logic/108.1-analyze-name-resolution.sqllogic +102 -0
  164. package/test/logic/109-aggregate-physical-selection.sqllogic +103 -0
  165. package/test/logic/11-joins.sqllogic +86 -0
  166. package/test/logic/11.1-join-using.sqllogic +267 -0
  167. package/test/logic/11.2-comma-join.sqllogic +35 -0
  168. package/test/logic/11.3-index-nested-loop-join.sqllogic +305 -0
  169. package/test/logic/11.3-mismatched-collation-join.sqllogic +74 -0
  170. package/test/logic/11.4-hash-join-side-swap.sqllogic +118 -0
  171. package/test/logic/110-scan-emitter-mutation-kills.sqllogic +121 -0
  172. package/test/logic/110.1-scan-emitter-index-scan-kills.sqllogic +47 -0
  173. package/test/logic/12-empty-primary-key.sqllogic +124 -0
  174. package/test/logic/12-join_padding_order.sqllogic +58 -0
  175. package/test/logic/12.1-orderby-index-consumption.sqllogic +40 -0
  176. package/test/logic/13-cte.sqllogic +137 -0
  177. package/test/logic/13.1-cte-multiple-recursive.sqllogic +104 -0
  178. package/test/logic/13.10-cte-qualified-name.sqllogic +136 -0
  179. package/test/logic/13.11-unreferenced-dml-cte.sqllogic +414 -0
  180. package/test/logic/13.12-nested-dml-cte-rejected.sqllogic +280 -0
  181. package/test/logic/13.2-cte-bind-params.sqllogic +98 -0
  182. package/test/logic/13.3-cte-edge-cases.sqllogic +120 -0
  183. package/test/logic/13.4-cte-extras.sqllogic +98 -0
  184. package/test/logic/13.5-cte-join-order.sqllogic +166 -0
  185. package/test/logic/13.6-cte-dml-runs-once.sqllogic +318 -0
  186. package/test/logic/13.7-cte-sibling-visibility.sqllogic +227 -0
  187. package/test/logic/13.8-insert-with-clause-visibility.sqllogic +254 -0
  188. package/test/logic/13.9-schema-authored-cte-isolation.sqllogic +328 -0
  189. package/test/logic/13.9.1-schema-authored-schema-path-isolation.sqllogic +408 -0
  190. package/test/logic/14-utilities.sqllogic +168 -0
  191. package/test/logic/15-timespan.sqllogic +279 -0
  192. package/test/logic/15.1-semantic-ordering.sqllogic +960 -0
  193. package/test/logic/15.1.1-json-check-coercion.sqllogic +178 -0
  194. package/test/logic/15.1.2-semantic-ordering-index.sqllogic +41 -0
  195. package/test/logic/15.1.3-declared-form-write-contract.sqllogic +519 -0
  196. package/test/logic/16-epoch.sqllogic +187 -0
  197. package/test/logic/17-weekday-modifier.sqllogic +78 -0
  198. package/test/logic/18-json-string-escapes.sqllogic +86 -0
  199. package/test/logic/18-strftime-extended-formats.sqllogic +68 -0
  200. package/test/logic/20-empty-single-row.sqllogic +261 -0
  201. package/test/logic/21-null-edge-cases.sqllogic +227 -0
  202. package/test/logic/21.1-where-null-comparisons.sqllogic +151 -0
  203. package/test/logic/21.1.1-where-null-comparisons-secondary-index.sqllogic +35 -0
  204. package/test/logic/21.2-between-edges.sqllogic +157 -0
  205. package/test/logic/22-boundary-values.sqllogic +175 -0
  206. package/test/logic/23-self-joins-duplicates.sqllogic +74 -0
  207. package/test/logic/24-builtin-branches.sqllogic +611 -0
  208. package/test/logic/24.1-substr-extras.sqllogic +75 -0
  209. package/test/logic/24.2-random-extras.sqllogic +39 -0
  210. package/test/logic/25-aggregate-edge-cases.sqllogic +289 -0
  211. package/test/logic/25.1-nested-aggregates.sqllogic +74 -0
  212. package/test/logic/25.2-having-edge-cases.sqllogic +318 -0
  213. package/test/logic/25.3-aggregate-isnull-empty.sqllogic +16 -0
  214. package/test/logic/25.4-groupby-fd-constant-empty.sqllogic +55 -0
  215. package/test/logic/25.5-ungrouped-aggregate-column-free-select-item.sqllogic +196 -0
  216. package/test/logic/26-join-edge-cases.sqllogic +333 -0
  217. package/test/logic/26.1-left-join-isnull-on-notnull.sqllogic +26 -0
  218. package/test/logic/26.2-left-join-on-vs-where.sqllogic +67 -0
  219. package/test/logic/26.3-join-on-constants.sqllogic +61 -0
  220. package/test/logic/26.4-join-on-is-null-nullable.sqllogic +44 -0
  221. package/test/logic/27-window-edge-cases.sqllogic +206 -0
  222. package/test/logic/27.1-window-groups-frame.sqllogic +13 -0
  223. package/test/logic/27.2-window-exclude.sqllogic +13 -0
  224. package/test/logic/27.3-window-json-aggregation.sqllogic +66 -0
  225. package/test/logic/28-set-ops-sort-edge-cases.sqllogic +444 -0
  226. package/test/logic/28.1-compound-limit-offset.sqllogic +143 -0
  227. package/test/logic/28.2-orderby-expression-extras.sqllogic +698 -0
  228. package/test/logic/28.2-set-op-branch-types.sqllogic +217 -0
  229. package/test/logic/29-constraint-edge-cases.sqllogic +442 -0
  230. package/test/logic/29.1-column-level-conflict-clause.sqllogic +171 -0
  231. package/test/logic/29.2-table-level-pk-conflict-clause.sqllogic +113 -0
  232. package/test/logic/40-constraints.sqllogic +418 -0
  233. package/test/logic/40.1-pk-desc-direction.sqllogic +76 -0
  234. package/test/logic/40.2-check-extras.sqllogic +683 -0
  235. package/test/logic/41-alter-table.sqllogic +191 -0
  236. package/test/logic/41-fk-cascade-conflict-and-self-ref.sqllogic +263 -0
  237. package/test/logic/41-fk-cross-schema.sqllogic +155 -0
  238. package/test/logic/41-fk-extended-targets.sqllogic +173 -0
  239. package/test/logic/41-foreign-keys.sqllogic +1001 -0
  240. package/test/logic/41-generated-column-errors.sqllogic +225 -0
  241. package/test/logic/41-generated-column-extras.sqllogic +598 -0
  242. package/test/logic/41-generated-column-scope.sqllogic +329 -0
  243. package/test/logic/41-generated-columns.sqllogic +361 -0
  244. package/test/logic/41.1-alter-pk.sqllogic +230 -0
  245. package/test/logic/41.1-fk-collation-conflict.sqllogic +277 -0
  246. package/test/logic/41.10-alter-drop-column-foreign-key.sqllogic +274 -0
  247. package/test/logic/41.10.1-alter-drop-column-unique-index.sqllogic +169 -0
  248. package/test/logic/41.10.2-alter-drop-column-check-and-assertion.sqllogic +1616 -0
  249. package/test/logic/41.10.3-alter-drop-column-referencing-fk.sqllogic +292 -0
  250. package/test/logic/41.10.4-drop-object-expression-dependents.sqllogic +602 -0
  251. package/test/logic/41.11-deferred-fk-with-rename.sqllogic +232 -0
  252. package/test/logic/41.12-alter-default-coercion.sqllogic +200 -0
  253. package/test/logic/41.13-alter-add-column-generated-backfill.sqllogic +566 -0
  254. package/test/logic/41.14-alter-add-column-subquery-backfill.sqllogic +129 -0
  255. package/test/logic/41.15-alter-column-default-type-check.sqllogic +178 -0
  256. package/test/logic/41.16-fk-unenforceable.sqllogic +364 -0
  257. package/test/logic/41.2-alter-column.sqllogic +382 -0
  258. package/test/logic/41.2.1-alter-column-retype-deleted-row-memory.sqllogic +32 -0
  259. package/test/logic/41.2.2-alter-column-retype-index-rebuild.sqllogic +77 -0
  260. package/test/logic/41.2.3-alter-column-set-not-null-pk-backfill.sqllogic +310 -0
  261. package/test/logic/41.2.3.1-alter-column-set-not-null-pk-backfill-secondary-index.sqllogic +37 -0
  262. package/test/logic/41.3-alter-add-column-unique.sqllogic +184 -0
  263. package/test/logic/41.3-alter-rename-propagation.sqllogic +2352 -0
  264. package/test/logic/41.3.1-alter-rename-index-propagation.sqllogic +94 -0
  265. package/test/logic/41.4-alter-add-column-constraints.sqllogic +855 -0
  266. package/test/logic/41.5-alter-misc.sqllogic +48 -0
  267. package/test/logic/41.5-cross-schema-foreign-keys.sqllogic +253 -0
  268. package/test/logic/41.6-alter-drop-rename-constraint.sqllogic +354 -0
  269. package/test/logic/41.6.1-alter-drop-constraint-index-derived.sqllogic +22 -0
  270. package/test/logic/41.7-alter-column-collate.sqllogic +105 -0
  271. package/test/logic/41.7.1-alter-column-collate-unique.sqllogic +45 -0
  272. package/test/logic/41.7.2-alter-column-collate-unique-store.sqllogic +208 -0
  273. package/test/logic/41.7.2.1-alter-column-collate-unique-index-store.sqllogic +114 -0
  274. package/test/logic/41.7.3-alter-column-retype-unique.sqllogic +293 -0
  275. package/test/logic/41.7.3.1-alter-column-retype-staged-rows-memory.sqllogic +41 -0
  276. package/test/logic/41.7.3.2-alter-column-retype-unique-index.sqllogic +72 -0
  277. package/test/logic/41.7.4-alter-column-retype-semantic-memory.sqllogic +445 -0
  278. package/test/logic/41.7.4.1-alter-column-retype-semantic-index-memory.sqllogic +91 -0
  279. package/test/logic/41.7.5-alter-column-collate-pk-staged-delete-memory.sqllogic +106 -0
  280. package/test/logic/41.8-alter-add-constraint-unique-fk.sqllogic +275 -0
  281. package/test/logic/41.8-alter-savepoint-staged-rows.sqllogic +443 -0
  282. package/test/logic/41.8.1-alter-rename-savepoint-staged-rows.sqllogic +408 -0
  283. package/test/logic/41.9-alter-constraint-body-change.sqllogic +180 -0
  284. package/test/logic/41.9-fk-restrict-batched.sqllogic +290 -0
  285. package/test/logic/42-committed-snapshot.sqllogic +254 -0
  286. package/test/logic/42-returning.sqllogic +159 -0
  287. package/test/logic/42.1-returning-extras.sqllogic +232 -0
  288. package/test/logic/42.2-returning-stored-row.sqllogic +165 -0
  289. package/test/logic/43-default-nullability.sqllogic +131 -0
  290. package/test/logic/43-transition-constraints.sqllogic +341 -0
  291. package/test/logic/43.1-default-collation.sqllogic +140 -0
  292. package/test/logic/43.1-notnull-or-conflict.sqllogic +79 -0
  293. package/test/logic/43.2-deferred-check-new-on-delete.sqllogic +95 -0
  294. package/test/logic/43.3-nullable-primary-key.sqllogic +587 -0
  295. package/test/logic/44-determinism-validation.sqllogic +164 -0
  296. package/test/logic/44-orthogonality.sqllogic +146 -0
  297. package/test/logic/44.1-nondeterministic-schema.sqllogic +316 -0
  298. package/test/logic/45-udf-determinism.sqllogic +39 -0
  299. package/test/logic/46-mutation-context.sqllogic +595 -0
  300. package/test/logic/47-upsert.sqllogic +255 -0
  301. package/test/logic/47.1-upsert-conflict-targets.sqllogic +169 -0
  302. package/test/logic/47.2-replace-and-or-clauses.sqllogic +164 -0
  303. package/test/logic/47.2.1-pk-replace-secondary-unique.sqllogic +374 -0
  304. package/test/logic/47.3-engine-or-fail.sqllogic +122 -0
  305. package/test/logic/47.3-upsert-conflict-target-collation.sqllogic +139 -0
  306. package/test/logic/47.3.1-upsert-conflict-index-derived-collation.sqllogic +25 -0
  307. package/test/logic/47.4-upsert-conflict-target-affinity.sqllogic +59 -0
  308. package/test/logic/47.5-upsert-do-update-constraints.sqllogic +440 -0
  309. package/test/logic/47.6-upsert-do-update-decomposed.sqllogic +100 -0
  310. package/test/logic/49-reference-graph.sqllogic +84 -0
  311. package/test/logic/50-declarative-schema.sqllogic +2550 -0
  312. package/test/logic/50-metadata-tags.sqllogic +1033 -0
  313. package/test/logic/50.0.1-metadata-tags-index.sqllogic +141 -0
  314. package/test/logic/50.1-declare-schema-pk.sqllogic +150 -0
  315. package/test/logic/50.2-declare-schema-renames.sqllogic +949 -0
  316. package/test/logic/50.2.1-declare-schema-index-renames.sqllogic +210 -0
  317. package/test/logic/50.3-declare-schema-duplicate-names.sqllogic +280 -0
  318. package/test/logic/50.4-declare-schema-apply-restore.sqllogic +192 -0
  319. package/test/logic/51-lens-foundation.sqllogic +147 -0
  320. package/test/logic/51-materialized-views.sqllogic +376 -0
  321. package/test/logic/51.5-materialized-views-coarsened-key.sqllogic +198 -0
  322. package/test/logic/51.7-maintained-table-attach-detach.sqllogic +468 -0
  323. package/test/logic/51.8-maintained-table-declared-constraints.sqllogic +440 -0
  324. package/test/logic/51.85-maintained-table-parent-fk.sqllogic +103 -0
  325. package/test/logic/51.9-maintained-table-secondary-unique.sqllogic +237 -0
  326. package/test/logic/51.9.1-maintained-table-partial-unique.sqllogic +36 -0
  327. package/test/logic/52-lens-overrides.sqllogic +566 -0
  328. package/test/logic/53-materialized-views-rowtime.sqllogic +1601 -0
  329. package/test/logic/53-reserved-tags.sqllogic +252 -0
  330. package/test/logic/53.1-materialized-view-write-through.sqllogic +329 -0
  331. package/test/logic/53.2-materialized-view-rename-propagation.sqllogic +483 -0
  332. package/test/logic/53.3-materialized-view-constraint-only-ddl.sqllogic +409 -0
  333. package/test/logic/53.3.1-materialized-view-index-ddl-irrelevance.sqllogic +29 -0
  334. package/test/logic/53.4-materialized-view-structural-alter-restore.sqllogic +436 -0
  335. package/test/logic/54-covering-mv-enforcement.sqllogic +314 -0
  336. package/test/logic/54.1-covering-mv-partial-enforcement.sqllogic +34 -0
  337. package/test/logic/55-internal-eviction-reporting.sqllogic +89 -0
  338. package/test/logic/55-lens-prover.sqllogic +202 -0
  339. package/test/logic/55.1-eviction-restrict-fk.sqllogic +148 -0
  340. package/test/logic/55.5-lens-authored-inverse.sqllogic +1468 -0
  341. package/test/logic/80-grow-retrieve-pass.sqllogic +79 -0
  342. package/test/logic/81-quickpick.sqllogic +24 -0
  343. package/test/logic/82-bloom-join.sqllogic +185 -0
  344. package/test/logic/83-merge-join.sqllogic +280 -0
  345. package/test/logic/84-asof-scan.sqllogic +238 -0
  346. package/test/logic/84-key-cardinality.sqllogic +50 -0
  347. package/test/logic/85-relational-const-folding.sqllogic +51 -0
  348. package/test/logic/86-scalar-cse.sqllogic +42 -0
  349. package/test/logic/90-error_paths.sqllogic +114 -0
  350. package/test/logic/90.1-parse-errors.sqllogic +77 -0
  351. package/test/logic/90.2-alter-table-errors.sqllogic +53 -0
  352. package/test/logic/90.2.1-alter-extra-errors.sqllogic +51 -0
  353. package/test/logic/90.3-expression-errors.sqllogic +43 -0
  354. package/test/logic/90.4-dml-errors.sqllogic +47 -0
  355. package/test/logic/90.5-unsupported-join-types.sqllogic +37 -0
  356. package/test/logic/90.5.1-right-full-join-read.sqllogic +157 -0
  357. package/test/logic/90.6-select-error-paths.sqllogic +57 -0
  358. package/test/logic/91-merge-join-edge-cases.sqllogic +159 -0
  359. package/test/logic/92-hash-aggregate-edge-cases.sqllogic +139 -0
  360. package/test/logic/93-ddl-view-edge-cases.sqllogic +104 -0
  361. package/test/logic/93.1-view-error-paths.sqllogic +74 -0
  362. package/test/logic/93.2-view-mutation-pending.sqllogic +108 -0
  363. package/test/logic/93.3-view-mutation-or-clause.sqllogic +60 -0
  364. package/test/logic/93.4-view-mutation.sqllogic +4881 -0
  365. package/test/logic/93.4.1-view-mutation-partial-unique-cardinality.sqllogic +31 -0
  366. package/test/logic/93.5-authored-inverse.sqllogic +415 -0
  367. package/test/logic/93.6-set-op-flagless-write.sqllogic +862 -0
  368. package/test/logic/94-tvf-edge-cases.sqllogic +58 -0
  369. package/test/logic/94.1-limit-offset-edge-cases.sqllogic +109 -0
  370. package/test/logic/94.2-limit-offset-extras.sqllogic +98 -0
  371. package/test/logic/95-assertions.sqllogic +1417 -0
  372. package/test/logic/96-subquery-edge-cases.sqllogic +276 -0
  373. package/test/logic/97-json-function-edge-cases.sqllogic +633 -0
  374. package/test/logic/97.1-json-blob-and-special-values.sqllogic +92 -0
  375. package/test/logic/98-temporal-edge-cases.sqllogic +515 -0
  376. package/test/logic/99-conversion-edge-cases.sqllogic +325 -0
  377. package/test/logic/99.0.1-schema-index-listing.sqllogic +21 -0
  378. package/test/logic/99.1-cast-syntax-extras.sqllogic +167 -0
  379. package/test/logic/drop-unique-index.sqllogic +88 -0
  380. package/test/logic/pushdown-test.sqllogic +36 -0
@@ -0,0 +1,78 @@
1
+ -- weekday modifier tests
2
+ -- SQLite "weekday N" advances the date forward to the next occurrence of
3
+ -- weekday N (0=Sunday..6=Saturday). If the date is already on that weekday,
4
+ -- no change is made.
5
+
6
+ -- 2024-07-22 is a Monday (weekday 1)
7
+
8
+ -- Same weekday → no change
9
+ SELECT date('2024-07-22', 'weekday 1');
10
+ → ["2024-07-22"]
11
+
12
+ -- Monday → next Tuesday (1 day forward)
13
+ SELECT date('2024-07-22', 'weekday 2');
14
+ → ["2024-07-23"]
15
+
16
+ -- Monday → next Wednesday (2 days forward)
17
+ SELECT date('2024-07-22', 'weekday 3');
18
+ → ["2024-07-24"]
19
+
20
+ -- Monday → next Thursday (3 days forward)
21
+ SELECT date('2024-07-22', 'weekday 4');
22
+ → ["2024-07-25"]
23
+
24
+ -- Monday → next Friday (4 days forward)
25
+ SELECT date('2024-07-22', 'weekday 5');
26
+ → ["2024-07-26"]
27
+
28
+ -- Monday → next Saturday (5 days forward)
29
+ SELECT date('2024-07-22', 'weekday 6');
30
+ → ["2024-07-27"]
31
+
32
+ -- Monday → next Sunday (6 days forward)
33
+ SELECT date('2024-07-22', 'weekday 0');
34
+ → ["2024-07-28"]
35
+
36
+ -- 2024-07-26 is a Friday (weekday 5)
37
+
38
+ -- Friday → same Friday (no change)
39
+ SELECT date('2024-07-26', 'weekday 5');
40
+ → ["2024-07-26"]
41
+
42
+ -- Friday → next Saturday (1 day forward)
43
+ SELECT date('2024-07-26', 'weekday 6');
44
+ → ["2024-07-27"]
45
+
46
+ -- Friday → next Sunday (2 days forward)
47
+ SELECT date('2024-07-26', 'weekday 0');
48
+ → ["2024-07-28"]
49
+
50
+ -- Friday → next Monday (3 days forward)
51
+ SELECT date('2024-07-26', 'weekday 1');
52
+ → ["2024-07-29"]
53
+
54
+ -- Friday → next Wednesday (5 days forward)
55
+ SELECT date('2024-07-26', 'weekday 3');
56
+ → ["2024-07-31"]
57
+
58
+ -- 2024-07-28 is a Sunday (weekday 0)
59
+
60
+ -- Sunday → same Sunday (no change)
61
+ SELECT date('2024-07-28', 'weekday 0');
62
+ → ["2024-07-28"]
63
+
64
+ -- Sunday → next Monday (1 day forward)
65
+ SELECT date('2024-07-28', 'weekday 1');
66
+ → ["2024-07-29"]
67
+
68
+ -- Sunday → next Saturday (6 days forward)
69
+ SELECT date('2024-07-28', 'weekday 6');
70
+ → ["2024-08-03"]
71
+
72
+ -- Weekday modifier with datetime function
73
+ SELECT datetime('2024-07-22 10:30:00', 'weekday 3');
74
+ → ["2024-07-24 10:30:00"]
75
+
76
+ -- Weekday modifier combined with start of day
77
+ SELECT datetime('2024-07-22 10:30:00', 'weekday 3', 'start of day');
78
+ → ["2024-07-24 00:00:00"]
@@ -0,0 +1,86 @@
1
+ -- 18-json-string-escapes.sqllogic
2
+ -- adapted from SQLite test/json101.test (json101-1.2 and surrounding escape coverage)
3
+ -- Standard JSON string-escape sequences round-trip through JSON construction
4
+ -- and quoting. Quereus uses native JSON.parse / JSON.stringify, so the standard
5
+ -- two-character escapes (\" \\ \/ \b \f \n \r \t) and \uXXXX must round-trip.
6
+
7
+ -- ============================================================
8
+ -- json_quote: escape characters in strings
9
+ -- ============================================================
10
+
11
+ SELECT json_quote('String "\ Test');
12
+ → [{"json_quote('String \"\\ Test')":"\"String \\\"\\\\ Test\""}]
13
+
14
+ -- Double quote (use char(92) to obtain a literal backslash safely)
15
+ SELECT json_quote('he said "hi"');
16
+ → [{"json_quote('he said \"hi\"')":"\"he said \\\"hi\\\"\""}]
17
+
18
+ -- Newline character inside string literal (real LF)
19
+ SELECT json_quote('a
20
+ b');
21
+ → [{"json_quote('a\nb')":"\"a\\nb\""}]
22
+
23
+ -- ============================================================
24
+ -- json_array: round-trip strings with embedded escapes
25
+ -- ============================================================
26
+
27
+ -- Embedded double-quote in array element
28
+ SELECT json_array('he said "hi"');
29
+ → [["he said \"hi\""]]
30
+
31
+ SELECT json_array('a\\b');
32
+ → [["a\\\\b"]]
33
+
34
+ -- Embedded forward slash (no escape required)
35
+ SELECT json_array('a/b');
36
+ → [["a/b"]]
37
+
38
+ -- ============================================================
39
+ -- json_extract: parse strings with standard escape sequences
40
+ -- ============================================================
41
+
42
+ SELECT json_extract('{"a":"he said \"hi\""}', '$.a');
43
+ → ["he said \"hi\""]
44
+
45
+ SELECT json_extract('{"a":"a\\b"}', '$.a');
46
+ → ["a\\b"]
47
+
48
+ SELECT json_extract('{"a":"line1\nline2"}', '$.a');
49
+ → ["line1\nline2"]
50
+
51
+ SELECT json_extract('{"a":"col1\tcol2"}', '$.a');
52
+ → ["col1\tcol2"]
53
+
54
+ -- \uXXXX: ASCII letter (no backslash so not affected)
55
+ SELECT json_extract('{"a":"A"}', '$.a');
56
+ → ["A"]
57
+
58
+ -- \uXXXX: Latin-1 supplement (literal char in SQL source)
59
+ SELECT json_extract('{"a":"é"}', '$.a');
60
+ → ["é"]
61
+
62
+ -- Surrogate pair: U+1D11E (musical G clef, literal)
63
+ SELECT json_extract('{"a":"𝄞"}', '$.a');
64
+ → ["𝄞"]
65
+
66
+ -- ============================================================
67
+ -- json_valid: malformed escape sequences rejected
68
+ -- ============================================================
69
+
70
+ SELECT json_valid('{"a":"\xZZ"}');
71
+ → [{"json_valid('{\"a\":\"\\xZZ\"}')":false}]
72
+
73
+ SELECT json_valid('{"a":"\u00"}');
74
+ → [{"json_valid('{\"a\":\"\\u00\"}')":false}]
75
+
76
+ -- ============================================================
77
+ -- json_array_length on a string containing a structural character
78
+ -- ============================================================
79
+
80
+ -- Comma inside a quoted string must not be treated as element separator
81
+ SELECT json_array_length('["a,b","c,d","e"]');
82
+ → [3]
83
+
84
+ -- Bracket inside a quoted string must not break parsing
85
+ SELECT json_array_length('["[","]","["]');
86
+ → [3]
@@ -0,0 +1,68 @@
1
+ -- 18-strftime-extended-formats.sqllogic
2
+ -- adapted from SQLite test/date4.test
3
+ -- Extended strftime format specifiers beyond what 16-epoch.sqllogic and
4
+ -- 24-builtin-branches.sqllogic exercise. Per docs/datetime.md %W is documented
5
+ -- as the ISO 8601 week number; we also probe the SQLite-aliased forms %U
6
+ -- (Sunday-first week), %V (ISO week), %G (ISO week-numbering year), and
7
+ -- %g (two-digit ISO year).
8
+
9
+ -- ============================================================
10
+ -- %W — ISO 8601 week number (already documented)
11
+ -- ============================================================
12
+
13
+ -- 2024-01-01 is a Monday → ISO week 01
14
+ SELECT strftime('%W', '2024-01-01');
15
+ → ["01"]
16
+
17
+ -- 2024-12-30 is a Monday → ISO week 53? No: 2024 W01 = 2024-01-01..07; 2024-12-30 is W53? Actually 2024 has 52 ISO weeks, week 1 starts on 2024-01-01. 2024-12-30 falls in W01 of 2025.
18
+ SELECT strftime('%W', '2024-12-30');
19
+ → ["01"]
20
+
21
+ -- ============================================================
22
+ -- %V — ISO 8601 week of year (01-53). Often equal to %W.
23
+ -- ============================================================
24
+
25
+ -- 2024-01-01 (Monday) is ISO week 01
26
+ SELECT strftime('%V', '2024-01-01');
27
+ → ["01"]
28
+
29
+ -- 2023-01-01 (Sunday) is ISO week 52 of year 2022
30
+ SELECT strftime('%V', '2023-01-01');
31
+ → ["52"]
32
+
33
+ -- ============================================================
34
+ -- %G — ISO 8601 week-numbering year (4-digit)
35
+ -- ============================================================
36
+
37
+ -- 2023-01-01 is in ISO year 2022
38
+ SELECT strftime('%G', '2023-01-01');
39
+ → ["2022"]
40
+
41
+ -- 2024-12-30 is in ISO year 2025
42
+ SELECT strftime('%G', '2024-12-30');
43
+ → ["2025"]
44
+
45
+ -- ============================================================
46
+ -- %g — ISO 8601 week-numbering year (2-digit)
47
+ -- ============================================================
48
+
49
+ -- 2023-01-01 → ISO year 22
50
+ SELECT strftime('%g', '2023-01-01');
51
+ → ["22"]
52
+
53
+ -- 2024-12-30 → ISO year 25
54
+ SELECT strftime('%g', '2024-12-30');
55
+ → ["25"]
56
+
57
+ -- ============================================================
58
+ -- %U — Sunday-first week of year (00-53)
59
+ -- Quereus does not implement %U; per docs/datetime.md unsupported
60
+ -- specifiers are output literally.
61
+ -- ============================================================
62
+
63
+ SELECT strftime('%U', '2024-01-01');
64
+ → ["%U"]
65
+
66
+ SELECT strftime('%U', '2024-01-07');
67
+ → ["%U"]
68
+
@@ -0,0 +1,261 @@
1
+ -- empty-single-row.sqllogic - Edge-case tests for empty tables, single-row tables, and empty set operations
2
+
3
+ -- =============================================================================
4
+ -- Empty table tests (0 rows)
5
+ -- =============================================================================
6
+
7
+ -- Setup empty table
8
+ create table e (id integer primary key, val text, num integer);
9
+
10
+ -- Setup populated table
11
+ create table p (id integer primary key, val text);
12
+ insert into p values (1, 'p1'), (2, 'p2'), (3, 'p3');
13
+
14
+ -- -----------------------------------------------------------------------------
15
+ -- 1. SELECT from empty table
16
+ -- -----------------------------------------------------------------------------
17
+
18
+ select * from e;
19
+ → []
20
+
21
+ select * from e where id > 0;
22
+ → []
23
+
24
+ select id, val from e;
25
+ → []
26
+
27
+ -- -----------------------------------------------------------------------------
28
+ -- 2. Aggregates over empty table
29
+ -- -----------------------------------------------------------------------------
30
+
31
+ select count(*) from e;
32
+ → [{"count(*)":0}]
33
+
34
+ select count(val) from e;
35
+ → [{"count(val)":0}]
36
+
37
+ select sum(num) from e;
38
+ → [{"sum(num)":null}]
39
+
40
+ select avg(num) from e;
41
+ → [{"avg(num)":null}]
42
+
43
+ select min(num) from e;
44
+ → [{"min(num)":null}]
45
+
46
+ select max(num) from e;
47
+ → [{"max(num)":null}]
48
+
49
+ select group_concat(val, ',') from e;
50
+ → [{"group_concat(val, ',')":null}]
51
+
52
+ -- Multiple aggregates in one query
53
+ select count(*), sum(num), min(val) from e;
54
+ → [{"count(*)":0,"sum(num)":null,"min(val)":null}]
55
+
56
+ -- -----------------------------------------------------------------------------
57
+ -- 3. JOINs where one or both sides are empty
58
+ -- -----------------------------------------------------------------------------
59
+
60
+ -- INNER JOIN empty × populated
61
+ select e.id, p.id from e inner join p on e.id = p.id;
62
+ → []
63
+
64
+ -- INNER JOIN populated × empty
65
+ select p.id, e.id from p inner join e on p.id = e.id;
66
+ → []
67
+
68
+ -- LEFT JOIN populated × empty — rows with null on right side
69
+ select p.id, p.val, e.id from p left join e on p.id = e.id order by p.id;
70
+ → [{"id":1,"val":"p1","id:1":null},{"id":2,"val":"p2","id:1":null},{"id":3,"val":"p3","id:1":null}]
71
+
72
+ -- LEFT JOIN empty × populated
73
+ select e.id, p.id from e left join p on e.id = p.id;
74
+ → []
75
+
76
+ -- CROSS JOIN empty × populated
77
+ select e.id, p.id from e cross join p;
78
+ → []
79
+
80
+ -- CROSS JOIN populated × empty
81
+ select p.id, e.id from p cross join e;
82
+ → []
83
+
84
+ -- INNER JOIN empty × empty (self-join)
85
+ select e1.id, e2.id from e e1 inner join e e2 on e1.id = e2.id;
86
+ → []
87
+
88
+ -- -----------------------------------------------------------------------------
89
+ -- 4. Subqueries returning empty
90
+ -- -----------------------------------------------------------------------------
91
+
92
+ select * from p where id in (select id from e);
93
+ → []
94
+
95
+ select * from p where exists (select 1 from e);
96
+ → []
97
+
98
+ select * from p where not exists (select 1 from e) order by id;
99
+ → [{"id":1,"val":"p1"},{"id":2,"val":"p2"},{"id":3,"val":"p3"}]
100
+
101
+ -- Scalar subquery from empty table
102
+ select (select val from e);
103
+ → [{"(select val from e)":null}]
104
+
105
+ -- -----------------------------------------------------------------------------
106
+ -- 5. CTE producing 0 rows
107
+ -- -----------------------------------------------------------------------------
108
+
109
+ with empty_cte as (select * from e) select count(*) from empty_cte;
110
+ → [{"count(*)":0}]
111
+
112
+ -- CTE empty joined with populated table
113
+ with empty_cte as (select * from e) select p.id from empty_cte inner join p on empty_cte.id = p.id;
114
+ → []
115
+
116
+ -- -----------------------------------------------------------------------------
117
+ -- 6. Set operations with empty side
118
+ -- -----------------------------------------------------------------------------
119
+
120
+ select id from e union select id from p order by id;
121
+ → [{"id":1},{"id":2},{"id":3}]
122
+
123
+ select id from p union select id from e order by id;
124
+ → [{"id":1},{"id":2},{"id":3}]
125
+
126
+ select id from e intersect select id from p;
127
+ → []
128
+
129
+ select id from e except select id from p;
130
+ → []
131
+
132
+ select id from e union all select id from e;
133
+ → []
134
+
135
+ -- -----------------------------------------------------------------------------
136
+ -- 7. DML on empty table
137
+ -- -----------------------------------------------------------------------------
138
+
139
+ update e set val = 'x' where id = 1;
140
+
141
+ delete from e where id = 1;
142
+
143
+ -- Verify table still empty after DML
144
+ select count(*) from e;
145
+ → [{"count(*)":0}]
146
+
147
+ -- -----------------------------------------------------------------------------
148
+ -- 8. INSERT ... SELECT from empty source
149
+ -- -----------------------------------------------------------------------------
150
+
151
+ -- Save row count before
152
+ select count(*) from p;
153
+ → [{"count(*)":3}]
154
+
155
+ insert into p (id, val) select id, val from e;
156
+
157
+ -- Verify p unchanged
158
+ select count(*) from p;
159
+ → [{"count(*)":3}]
160
+
161
+ -- -----------------------------------------------------------------------------
162
+ -- 9. Window functions over empty result set
163
+ -- -----------------------------------------------------------------------------
164
+
165
+ select id, row_number() over (order by id) from e;
166
+ → []
167
+
168
+ select id, sum(num) over () from e;
169
+ → []
170
+
171
+ -- =============================================================================
172
+ -- Single-row table tests
173
+ -- =============================================================================
174
+
175
+ -- Setup single-row table
176
+ create table s (id integer primary key, val text, num integer);
177
+ insert into s values (1, 'only', 42);
178
+
179
+ -- Setup single-row join partner
180
+ create table s2 (id integer primary key, val text);
181
+ insert into s2 values (1, 'solo');
182
+
183
+ -- -----------------------------------------------------------------------------
184
+ -- 1. All join types with single-row on one or both sides
185
+ -- -----------------------------------------------------------------------------
186
+
187
+ -- INNER JOIN s × s2 with matching condition
188
+ select s.id, s.val, s2.id, s2.val from s inner join s2 on s.id = s2.id;
189
+ → [{"id":1,"val":"only","id:1":1,"val:1":"solo"}]
190
+
191
+ -- INNER JOIN s × s2 with non-matching condition
192
+ select s.id, s2.id from s inner join s2 on s.id = s2.id + 1;
193
+ → []
194
+
195
+ -- LEFT JOIN s × s2 matching
196
+ select s.id, s.val, s2.id, s2.val from s left join s2 on s.id = s2.id;
197
+ → [{"id":1,"val":"only","id:1":1,"val:1":"solo"}]
198
+
199
+ -- LEFT JOIN s × s2 non-matching
200
+ select s.id, s.val, s2.id, s2.val from s left join s2 on s.id = s2.id + 1;
201
+ → [{"id":1,"val":"only","id:1":null,"val:1":null}]
202
+
203
+ -- CROSS JOIN s × s2
204
+ select s.id, s2.id from s cross join s2;
205
+ → [{"id":1,"id:1":1}]
206
+
207
+ -- CROSS JOIN single-row × multi-row
208
+ select s.id, p.id from s cross join p order by p.id;
209
+ → [{"id":1,"id:1":1},{"id":1,"id:1":2},{"id":1,"id:1":3}]
210
+
211
+ -- Join with populated table p on matching key
212
+ select s.id, s.val, p.val from s inner join p on s.id = p.id;
213
+ → [{"id":1,"val":"only","val:1":"p1"}]
214
+
215
+ -- -----------------------------------------------------------------------------
216
+ -- 2. GROUP BY on single row
217
+ -- -----------------------------------------------------------------------------
218
+
219
+ select val, count(*) from s group by val;
220
+ → [{"val":"only","count(*)":1}]
221
+
222
+ select val, sum(num) from s group by val;
223
+ → [{"val":"only","sum(num)":42}]
224
+
225
+ -- GROUP BY with HAVING that matches
226
+ select val, count(*) as cnt from s group by val having cnt = 1;
227
+ → [{"val":"only","cnt":1}]
228
+
229
+ -- GROUP BY with HAVING that doesn't match
230
+ select val, count(*) as cnt from s group by val having cnt > 1;
231
+ → []
232
+
233
+ -- -----------------------------------------------------------------------------
234
+ -- 3. Window functions with single-row partition
235
+ -- -----------------------------------------------------------------------------
236
+
237
+ select id, row_number() over (order by id) as rn from s;
238
+ → [{"id":1,"rn":1}]
239
+
240
+ select id, rank() over (order by id) as rnk from s;
241
+ → [{"id":1,"rnk":1}]
242
+
243
+ select id, sum(num) over () as total from s;
244
+ → [{"id":1,"total":42}]
245
+
246
+ -- lag: no previous row
247
+ select id, lag(num) over (order by id) as prev from s;
248
+ → [{"id":1,"prev":null}]
249
+
250
+ -- lead: no next row
251
+ select id, lead(num) over (order by id) as nxt from s;
252
+ → [{"id":1,"nxt":null}]
253
+
254
+ -- =============================================================================
255
+ -- Cleanup
256
+ -- =============================================================================
257
+
258
+ drop table e;
259
+ drop table p;
260
+ drop table s;
261
+ drop table s2;