@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,190 @@
1
+ -- expressions.sqllogic - Testing various expression types and operators
2
+
3
+ CREATE TABLE expr_t (i INTEGER PRIMARY KEY, n NUMERIC, t TEXT NULL, b BLOB NULL);
4
+ INSERT INTO expr_t VALUES (1, 10.5, 'hello', x'01ff'), (2, -5, 'world', x'02'), (3, 0, null, null);
5
+ -- No expected output for setup
6
+
7
+ -- Arithmetic
8
+ SELECT i + 1, n * 2, i / 2.0, i % 2 FROM expr_t WHERE i = 1;
9
+ → [{"i + 1":2,"n * 2":21,"i / 2.0":0.5,"i % 2":1}]
10
+ SELECT i + 1, n * 2, i / 2.0, i % 2 FROM expr_t WHERE i = 2;
11
+ → [{"i + 1":3,"n * 2":-10,"i / 2.0":1,"i % 2":0}]
12
+
13
+ -- Stacked unary operators
14
+ SELECT - -1;
15
+ → [{"--1":1}]
16
+ SELECT NOT NOT 1;
17
+ → [{"not not 1":true}]
18
+ SELECT ~-1;
19
+ → [{"~-1":0}]
20
+
21
+ -- Unary operators over numeric-typed operands take a specialized emit-time path
22
+ -- (see runtime/emit/unary.ts); these pin its results against the generic path.
23
+ -- REAL operand: ~ truncates toward zero before complementing.
24
+ SELECT ~5.7 AS a, ~(-5.7) AS b, -5.5 AS c, +5.5 AS d;
25
+ → [{"a":-6,"b":4,"c":-5.5,"d":5.5}]
26
+ -- BIGINT operand: stays in the bigint domain, no float round-trip.
27
+ SELECT -9223372036854775807 AS a, +9223372036854775807 AS b, ~9223372036854775807 AS c;
28
+ → [{"a":-9223372036854775807,"b":9223372036854775807,"c":-9223372036854775808}]
29
+ -- NULL propagates through every unary arithmetic operator.
30
+ SELECT -null AS a, +null AS b, ~null AS c;
31
+ → [{"a":null,"b":null,"c":null}]
32
+ -- Column-sourced operands (INTEGER key, NUMERIC column) take the same path.
33
+ SELECT -i AS a, +i AS b, ~i AS c, -n AS d, +n AS e FROM expr_t WHERE i = 2;
34
+ → [{"a":-2,"b":2,"c":-3,"d":5,"e":-5}]
35
+ -- TEXT operand keeps the generic coerce-or-null path.
36
+ SELECT -t AS a, +t AS b, ~t AS c FROM expr_t WHERE i = 1;
37
+ → [{"a":null,"b":null,"c":null}]
38
+ -- ~ is -x-1 over the WHOLE integer domain, not a 32-bit complement: every operand
39
+ -- below is past 2^31, where a ToInt32-based ~ silently wraps (~3000000000 would be
40
+ -- 1294967295). The last two land on the safe-integer boundary from both sides —
41
+ -- arithmetic narrowing (R1) hands ~ a number where it used to see a bigint.
42
+ SELECT ~2147483647 AS a, ~2147483648 AS b, ~3000000000 AS c, ~(-3000000000) AS d;
43
+ → [{"a":-2147483648,"b":-2147483649,"c":-3000000001,"d":2999999999}]
44
+ SELECT ~9007199254740990 AS a, ~(9007199254740993 - 3) AS b, ~9007199254740991 AS c;
45
+ → [{"a":-9007199254740991,"b":-9007199254740991,"c":-9007199254740992}]
46
+ -- Generic (TEXT-operand) path agrees with the numeric-fast path past 2^31.
47
+ SELECT ~'3000000000' AS a;
48
+ → [{"a":-3000000001}]
49
+
50
+ -- String Concatenation
51
+ SELECT t || ' ' || t FROM expr_t WHERE i = 1;
52
+ → [{"t || ' ' || t":"hello hello"}]
53
+
54
+ -- Comparisons
55
+ SELECT i > 1, n <= 10.5, t = 'hello', b != x'01ff' FROM expr_t WHERE i = 1;
56
+ → [{"i > 1":false,"n <= 10.5":true,"t = 'hello'":true,"b != x'01ff'":false}]
57
+ SELECT i > 1, n <= 10.5, t == 'world' FROM expr_t WHERE i = 2;
58
+ → [{"i > 1":true,"n <= 10.5":true,"t == 'world'":true}]
59
+
60
+ -- Logical Operators
61
+ SELECT i > 1 AND n < 0 FROM expr_t WHERE i = 2;
62
+ → [{"i > 1 and n < 0":true}]
63
+ SELECT i = 1 OR t = 'world' FROM expr_t ORDER BY i;
64
+ → [{"i = 1 or t = 'world'":true},{"i = 1 or t = 'world'":true},{"i = 1 or t = 'world'":null}]
65
+ SELECT NOT (n = 0) FROM expr_t WHERE i = 3;
66
+ → [{"not (n = 0)":false}]
67
+
68
+ -- XOR Operator (3VL)
69
+ SELECT 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0;
70
+ → [{"1 xor 1":false,"1 xor 0":true,"0 xor 1":true,"0 xor 0":false}]
71
+ SELECT NULL XOR 1, NULL XOR 0, 1 XOR NULL, 0 XOR NULL, NULL XOR NULL;
72
+ → [{"null xor 1":null,"null xor 0":null,"1 xor null":null,"0 xor null":null,"null xor null":null}]
73
+ SELECT (i > 1) XOR (n < 0) FROM expr_t WHERE i = 2; -- TRUE XOR TRUE -> FALSE
74
+ → [{"i > 1 xor n < 0":false}]
75
+ SELECT (i > 1) XOR (t = 'hello') FROM expr_t WHERE i = 1; -- FALSE XOR TRUE -> TRUE
76
+ → [{"i > 1 xor t = 'hello'":true}]
77
+ SELECT (i > 1) XOR n IS NULL FROM expr_t WHERE i = 1; -- FALSE XOR FALSE -> FALSE
78
+ → [{"i > 1 xor n is null":false}]
79
+ SELECT (i > 1) XOR t IS NULL FROM expr_t WHERE i = 3; -- FALSE XOR NULL -> NULL
80
+ → [{"i > 1 xor t is null":false}]
81
+
82
+ -- NULL Handling
83
+ SELECT t is null, t IS NOT NULL, n + NULL FROM expr_t WHERE i = 3;
84
+ → [{"t is null":true,"t is not null":false,"n + null":null}]
85
+ SELECT coalesce(t, 'default') FROM expr_t ORDER BY i;
86
+ → [{"coalesce(t, 'default')":"hello"},{"coalesce(t, 'default')":"world"},{"coalesce(t, 'default')":"default"}]
87
+ SELECT nullif(i, 2) FROM expr_t ORDER BY i;
88
+ → [{"nullif(i, 2)":1},{"nullif(i, 2)":null},{"nullif(i, 2)":3}]
89
+
90
+ -- CASE expressions
91
+ SELECT CASE i WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM expr_t ORDER BY i;
92
+ → [{"case i when 1 then 'one' when 2 then 'two' else 'other' end":"one"},{"case i when 1 then 'one' when 2 then 'two' else 'other' end":"two"},{"case i when 1 then 'one' when 2 then 'two' else 'other' end":"other"}]
93
+ SELECT CASE WHEN n > 0 THEN 'pos' WHEN n < 0 THEN 'neg' ELSE 'zero' END FROM expr_t ORDER BY i;
94
+ → [{"case when n > 0 then 'pos' when n < 0 then 'neg' else 'zero' end":"pos"},{"case when n > 0 then 'pos' when n < 0 then 'neg' else 'zero' end":"neg"},{"case when n > 0 then 'pos' when n < 0 then 'neg' else 'zero' end":"zero"}]
95
+
96
+ -- CASE short-circuit semantics (only the selected branch is evaluated)
97
+ -- Simple CASE, no ELSE, no match → NULL
98
+ SELECT CASE i WHEN 99 THEN 'x' END FROM expr_t WHERE i = 1;
99
+ → [{"case i when 99 then 'x' end":null}]
100
+ -- Searched CASE, no ELSE, no match → NULL
101
+ SELECT CASE WHEN i = 99 THEN 'x' END FROM expr_t WHERE i = 1;
102
+ → [{"case when i = 99 then 'x' end":null}]
103
+ -- Simple CASE with NULL base never matches any WHEN → falls to ELSE
104
+ SELECT CASE null WHEN 1 THEN 'a' ELSE 'else' END AS r;
105
+ → [{"r":"else"}]
106
+ -- Simple CASE with NULL WHEN value never matches → falls to ELSE
107
+ SELECT CASE 1 WHEN null THEN 'a' ELSE 'else' END AS r;
108
+ → [{"r":"else"}]
109
+ -- First match wins: later WHEN clauses are not consulted
110
+ SELECT CASE WHEN 1 = 1 THEN 'first' WHEN 1 = 1 THEN 'second' END AS r;
111
+ → [{"r":"first"}]
112
+
113
+ -- CAST expressions
114
+ SELECT cast(i as TEXT), cast(n as INTEGER), cast(t as REAL) FROM expr_t WHERE i = 1;
115
+ → [{"cast(i as text)":"1","cast(n as integer)":10,"cast(t as real)":0}]
116
+ SELECT cast('123' as INTEGER), cast('12.3' as REAL), cast(123 as TEXT);
117
+ → [{"cast('123' as integer)":123,"cast('12.3' as real)":12.3,"cast(123 as text)":"123"}]
118
+
119
+ -- COLLATE (basic syntax check, assumes default collation)
120
+ SELECT t FROM expr_t WHERE t = 'HELLO' COLLATE NOCASE ORDER BY i;
121
+ → [{"t":"hello"}]
122
+
123
+ DROP TABLE expr_t;
124
+
125
+ SELECT typeof(1 + 2), typeof(1.5 + 2), typeof('a' || 'b');
126
+ → [{"typeof(1 + 2)":"integer","typeof(1.5 + 2)":"real","typeof('a' || 'b')":"text"}]
127
+
128
+ -- BETWEEN
129
+ SELECT 3 BETWEEN 2 and 6 AS isbetwixt, 'a' between 'f' and 'z' AS notbetwixt;
130
+ → [{"isbetwixt":true,"notbetwixt":false}]
131
+
132
+ -- BETWEEN with COLLATE NOCASE
133
+ SELECT 'Hello' COLLATE NOCASE BETWEEN 'a' AND 'z' AS yes1, 'Hello' BETWEEN 'a' AND 'z' AS no1;
134
+ → [{"yes1":true,"no1":false}]
135
+
136
+ SELECT 'B' COLLATE NOCASE BETWEEN 'a' AND 'c' AS yes2, 'B' BETWEEN 'a' AND 'c' AS no2;
137
+ → [{"yes2":true,"no2":false}]
138
+
139
+ -- NOT BETWEEN with COLLATE NOCASE
140
+ SELECT 'Hello' COLLATE NOCASE NOT BETWEEN 'a' AND 'z' AS no3, 'Hello' NOT BETWEEN 'a' AND 'z' AS yes3;
141
+ → [{"no3":false,"yes3":true}]
142
+
143
+ -- A COLLATE on a BETWEEN *bound* governs only that bound's comparison (per-bound,
144
+ -- like `expr >= lo AND expr <= hi`), NOT the whole expression. The lower bound's NOCASE
145
+ -- makes `'hello' >= 'A'` true, but the bare upper keeps `'hello' <= 'Z'` BINARY (false),
146
+ -- so the whole BETWEEN is false — matching SQLite and the desugared two-comparison form.
147
+ SELECT 'hello' BETWEEN 'A' COLLATE NOCASE AND 'Z' AS lo_collated, 'hello' BETWEEN 'A' AND 'Z' AS plain;
148
+ → [{"lo_collated":false,"plain":false}]
149
+
150
+ -- A COLLATE on the *upper* bound likewise flips only that comparison: `'hello' <= 'Z'`
151
+ -- under NOCASE is true ('hello' <= 'z'), and the bare lower `'hello' >= 'A'` is BINARY-true,
152
+ -- so the BETWEEN is true.
153
+ SELECT 'hello' BETWEEN 'A' AND 'Z' COLLATE NOCASE AS hi_collated;
154
+ → [{"hi_collated":true}]
155
+
156
+ -- BETWEEN with NULL operands still returns NULL under COLLATE
157
+ SELECT null COLLATE NOCASE BETWEEN 'a' AND 'z' AS r1, 'b' COLLATE NOCASE BETWEEN null AND 'z' AS r2;
158
+ → [{"r1":null,"r2":null}]
159
+
160
+ -- Expression evaluation consistency across contexts
161
+ CREATE TABLE expr_context_test (id INTEGER PRIMARY KEY, a INTEGER, b INTEGER, c INTEGER NULL);
162
+ INSERT INTO expr_context_test VALUES (1, 5, 3, null), (2, -2, 4, 7), (3, 0, 1, 0);
163
+
164
+ -- Test that expressions evaluate consistently across SELECT, WHERE, HAVING
165
+ SELECT id, (a + b * 2) as expr_result FROM expr_context_test ORDER BY id;
166
+ → [{"id":1,"expr_result":11},{"id":2,"expr_result":6},{"id":3,"expr_result":2}]
167
+
168
+ -- Same expression in WHERE - should find matching rows
169
+ SELECT id, (a + b * 2) as expr_result FROM expr_context_test WHERE (a + b * 2) = 11;
170
+ → [{"id":1,"expr_result":11}]
171
+
172
+ SELECT id, (a + b * 2) as expr_result FROM expr_context_test WHERE (a + b * 2) = 6;
173
+ → [{"id":2,"expr_result":6}]
174
+
175
+ SELECT id, (a + b * 2) as expr_result FROM expr_context_test WHERE (a + b * 2) = 2;
176
+ → [{"id":3,"expr_result":2}]
177
+
178
+ -- Same expression in HAVING (a, b in GROUP BY for SQL-92 column coverage; id alone would
179
+ -- need PK-based functional-dependency analysis which Quereus does not implement)
180
+ SELECT id, (a + b * 2) as expr_result FROM expr_context_test GROUP BY id, a, b HAVING (a + b * 2) = 11;
181
+ → [{"id":1,"expr_result":11}]
182
+
183
+ SELECT id, (a + b * 2) as expr_result FROM expr_context_test GROUP BY id, a, b HAVING (a + b * 2) IN (2, 6) ORDER BY id;
184
+ → [{"id":2,"expr_result":6},{"id":3,"expr_result":2}]
185
+
186
+ -- Test more complex expressions
187
+ SELECT id, (a * b + COALESCE(c, 0)) as complex_expr FROM expr_context_test ORDER BY id;
188
+ → [{"id":1,"complex_expr":15},{"id":2,"complex_expr":-1},{"id":3,"complex_expr":0}]
189
+
190
+ DROP TABLE expr_context_test;
@@ -0,0 +1,55 @@
1
+ -- quoted-identifiers.sqllogic - Testing quoted identifier syntax
2
+ -- Tests double-quoted, backtick, and bracket identifier quoting
3
+
4
+ -- Test double-quoted table name
5
+ CREATE TABLE "QuotedTable" (id INTEGER PRIMARY KEY, value TEXT);
6
+ INSERT INTO "QuotedTable" VALUES (1, 'test');
7
+ SELECT * FROM "QuotedTable";
8
+ → [{"id":1,"value":"test"}]
9
+
10
+ -- Test double-quoted column names
11
+ CREATE TABLE test_quoted_cols ("Column One" INTEGER PRIMARY KEY, "Column Two" TEXT);
12
+ INSERT INTO test_quoted_cols ("Column One", "Column Two") VALUES (1, 'hello');
13
+ SELECT "Column One", "Column Two" FROM test_quoted_cols;
14
+ → [{"Column One":1,"Column Two":"hello"}]
15
+
16
+ -- Test backtick-quoted table name
17
+ CREATE TABLE `BacktickTable` (id INTEGER PRIMARY KEY, name TEXT);
18
+ INSERT INTO `BacktickTable` VALUES (1, 'backtick test');
19
+ SELECT * FROM `BacktickTable`;
20
+ → [{"id":1,"name":"backtick test"}]
21
+
22
+ -- Test bracket-quoted table name (SQL Server style)
23
+ CREATE TABLE [BracketTable] (id INTEGER PRIMARY KEY, data TEXT);
24
+ INSERT INTO [BracketTable] VALUES (1, 'bracket test');
25
+ SELECT * FROM [BracketTable];
26
+ → [{"id":1,"data":"bracket test"}]
27
+
28
+ -- Test quoted identifiers that are reserved words
29
+ CREATE TABLE "SELECT" (id INTEGER PRIMARY KEY, "FROM" TEXT, "WHERE" INTEGER);
30
+ INSERT INTO "SELECT" ("id", "FROM", "WHERE") VALUES (1, 'table', 42);
31
+ SELECT "FROM", "WHERE" FROM "SELECT";
32
+ → [{"FROM":"table","WHERE":42}]
33
+
34
+ -- Test quoted alias
35
+ SELECT id AS "My ID", value AS "The Value" FROM "QuotedTable";
36
+ → [{"My ID":1,"The Value":"test"}]
37
+
38
+ -- Test quoted identifiers with spaces
39
+ CREATE TABLE "Table With Spaces" ("Column With Spaces" TEXT PRIMARY KEY);
40
+ INSERT INTO "Table With Spaces" VALUES ('spacy');
41
+ SELECT "Column With Spaces" FROM "Table With Spaces";
42
+ → [{"Column With Spaces":"spacy"}]
43
+
44
+ -- Test mixed quoting styles in same query
45
+ SELECT q.id, b.id AS bid FROM "QuotedTable" q JOIN `BacktickTable` b ON q.id = b.id;
46
+ → [{"id":1,"bid":1}]
47
+
48
+ -- Clean up
49
+ DROP TABLE "QuotedTable";
50
+ DROP TABLE test_quoted_cols;
51
+ DROP TABLE `BacktickTable`;
52
+ DROP TABLE [BracketTable];
53
+ DROP TABLE "SELECT";
54
+ DROP TABLE "Table With Spaces";
55
+