@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.
Files changed (400) hide show
  1. package/README.md +2 -0
  2. package/dist/src/common/types.d.ts +4 -4
  3. package/dist/src/index.d.ts +1 -1
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +3 -2
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/schema/catalog-rendering.js +13 -1
  8. package/dist/src/schema/catalog-rendering.js.map +1 -1
  9. package/dist/src/schema/catalog.d.ts +35 -2
  10. package/dist/src/schema/catalog.d.ts.map +1 -1
  11. package/dist/src/schema/catalog.js +42 -33
  12. package/dist/src/schema/catalog.js.map +1 -1
  13. package/dist/src/schema/schema-differ.d.ts +1 -1
  14. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  15. package/dist/src/schema/schema-differ.js +195 -33
  16. package/dist/src/schema/schema-differ.js.map +1 -1
  17. package/dist/src/schema/unique-enforcement.d.ts +23 -1
  18. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  19. package/dist/src/schema/unique-enforcement.js +43 -1
  20. package/dist/src/schema/unique-enforcement.js.map +1 -1
  21. package/dist/src/vtab/memory/layer/manager.d.ts +15 -12
  22. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  23. package/dist/src/vtab/memory/layer/manager.js +87 -100
  24. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  25. package/package.json +7 -4
  26. package/test/README.md +173 -0
  27. package/test/logic/01-basic.sqllogic +39 -0
  28. package/test/logic/01.1-select-projection-extras.sqllogic +130 -0
  29. package/test/logic/01.2-strings.sqllogic +43 -0
  30. package/test/logic/01.5-insert-select.sqllogic +237 -0
  31. package/test/logic/01.6-update-extras.sqllogic +118 -0
  32. package/test/logic/01.7-update-from.sqllogic +67 -0
  33. package/test/logic/01.8-delete-extras.sqllogic +122 -0
  34. package/test/logic/01.8.1-delete-range-cow.sqllogic +115 -0
  35. package/test/logic/01.9-query-expr-dml-gates.sqllogic +32 -0
  36. package/test/logic/01.9-query-expr-dml.sqllogic +171 -0
  37. package/test/logic/01.9-query-expr-values.sqllogic +111 -0
  38. package/test/logic/01.9.1-limit-over-dml-subquery.sqllogic +119 -0
  39. package/test/logic/02-filters.sqllogic +54 -0
  40. package/test/logic/02-smoke.sqllogic +62 -0
  41. package/test/logic/02.1-bind-parameters.sqllogic +223 -0
  42. package/test/logic/03-expressions.sqllogic +190 -0
  43. package/test/logic/03.1-quoted-identifiers.sqllogic +55 -0
  44. package/test/logic/03.4-defaults.sqllogic +554 -0
  45. package/test/logic/03.4.1-default-edge-cases.sqllogic +99 -0
  46. package/test/logic/03.5-tvf.sqllogic +61 -0
  47. package/test/logic/03.6-type-system.sqllogic +544 -0
  48. package/test/logic/03.6.1-numeric-text-comparison-coercion.sqllogic +244 -0
  49. package/test/logic/03.6.2-value-to-text.sqllogic +224 -0
  50. package/test/logic/03.7-bigint-mixed-arithmetic.sqllogic +65 -0
  51. package/test/logic/03.8-not-precedence.sqllogic +255 -0
  52. package/test/logic/03.9-is-bool-predicate.sqllogic +150 -0
  53. package/test/logic/03.9.1-is-bool-predicate-partial-index.sqllogic +34 -0
  54. package/test/logic/04-order-by.sqllogic +38 -0
  55. package/test/logic/04-transactions.sqllogic +239 -0
  56. package/test/logic/04a-savepoint-lazy-attach.sqllogic +122 -0
  57. package/test/logic/05-vtab_memory.sqllogic +50 -0
  58. package/test/logic/05.0.1-vtab-memory-unique-index-collation.sqllogic +34 -0
  59. package/test/logic/05.1-composite-pk-range-scan.sqllogic +147 -0
  60. package/test/logic/05.1.1-secondary-index-range-scan.sqllogic +56 -0
  61. package/test/logic/05.2-cast-seek-correctness.sqllogic +124 -0
  62. package/test/logic/06-builtin_functions.sqllogic +149 -0
  63. package/test/logic/06.1-string-functions.sqllogic +92 -0
  64. package/test/logic/06.1.3-like-glob-edges.sqllogic +53 -0
  65. package/test/logic/06.2-math-functions.sqllogic +82 -0
  66. package/test/logic/06.3-schema.sqllogic +48 -0
  67. package/test/logic/06.3.1-schema-all-schemas.sqllogic +39 -0
  68. package/test/logic/06.3.2-schema-foreign-keys.sqllogic +208 -0
  69. package/test/logic/06.3.3-introspection-tags.sqllogic +202 -0
  70. package/test/logic/06.3.3.1-introspection-tags-index.sqllogic +74 -0
  71. package/test/logic/06.3.4-view-info.sqllogic +378 -0
  72. package/test/logic/06.3.5-column-info.sqllogic +347 -0
  73. package/test/logic/06.3.6-schema-views.sqllogic +29 -0
  74. package/test/logic/06.4-schema-search-path.sqllogic +354 -0
  75. package/test/logic/06.4.1-schema-case-insensitive.sqllogic +83 -0
  76. package/test/logic/06.4.2-collation-extras.sqllogic +472 -0
  77. package/test/logic/06.4.2.1-collation-index-access-paths.sqllogic +140 -0
  78. package/test/logic/06.4.3-write-path-collation.sqllogic +99 -0
  79. package/test/logic/06.4.4-comparison-collation-precedence.sqllogic +342 -0
  80. package/test/logic/06.4.5-any-collate-declared-keys.sqllogic +92 -0
  81. package/test/logic/06.5-polymorphic-types.sqllogic +169 -0
  82. package/test/logic/06.5.1-conversion-functions.sqllogic +173 -0
  83. package/test/logic/06.5.2-scalar-minmax.sqllogic +16 -0
  84. package/test/logic/06.5.3-undeclared-return-type-comparison.sqllogic +244 -0
  85. package/test/logic/06.5.4-declared-return-type-builtins.sqllogic +288 -0
  86. package/test/logic/06.6-aggregate-extended.sqllogic +78 -0
  87. package/test/logic/06.7-json-extended.sqllogic +53 -0
  88. package/test/logic/06.8-json-path-operators.sqllogic +99 -0
  89. package/test/logic/06.9-json-canonical-key.sqllogic +65 -0
  90. package/test/logic/06.9.1-json-coerce-once.sqllogic +417 -0
  91. package/test/logic/06.9.1.1-json-coerce-once-index.sqllogic +39 -0
  92. package/test/logic/06.9.2-json-structural-equality.sqllogic +382 -0
  93. package/test/logic/06.9.2.1-json-structural-equality-index.sqllogic +76 -0
  94. package/test/logic/06.9.3-json-index-range-seek.sqllogic +205 -0
  95. package/test/logic/07-aggregates.sqllogic +193 -0
  96. package/test/logic/07.1-aggregate-filter-clause.sqllogic +12 -0
  97. package/test/logic/07.2-aggregate-order-by.sqllogic +11 -0
  98. package/test/logic/07.3-group-by-extras.sqllogic +602 -0
  99. package/test/logic/07.3.1-group-by-order-by-key.sqllogic +164 -0
  100. package/test/logic/07.3.2-grouped-select-list-shape.sqllogic +231 -0
  101. package/test/logic/07.4-group-by-filter-composite-pk.sqllogic +120 -0
  102. package/test/logic/07.5-sum-mixed-exact-and-float.sqllogic +151 -0
  103. package/test/logic/07.5-window.sqllogic +1941 -0
  104. package/test/logic/07.5.1-window-named.sqllogic +13 -0
  105. package/test/logic/07.5.2-window-nth-value.sqllogic +13 -0
  106. package/test/logic/07.6-subqueries.sqllogic +78 -0
  107. package/test/logic/07.6.1-subquery-extras.sqllogic +93 -0
  108. package/test/logic/07.7-and-or-short-circuit.sqllogic +58 -0
  109. package/test/logic/07.7-in-subquery-caching.sqllogic +174 -0
  110. package/test/logic/07.7-scalar-agg-decorrelation.sqllogic +197 -0
  111. package/test/logic/07.7.1-in-extras.sqllogic +158 -0
  112. package/test/logic/07.7.1-scalar-agg-decorrelation-filter.sqllogic +105 -0
  113. package/test/logic/07.7.2-scalar-agg-decorrelation-nested.sqllogic +115 -0
  114. package/test/logic/07.7.3-exists-in-select-decorrelation.sqllogic +107 -0
  115. package/test/logic/07.7.4-where-conjunct-ordering.sqllogic +121 -0
  116. package/test/logic/07.7.5-filter-lost-under-index-order.sqllogic +134 -0
  117. package/test/logic/07.7.6-correlated-predicate-scope.sqllogic +178 -0
  118. package/test/logic/07.7.7-join-source-scope-shadowing.sqllogic +137 -0
  119. package/test/logic/07.7.8-correlated-ref-to-computed-column.sqllogic +165 -0
  120. package/test/logic/07.7.9-conjunct-monotonicity.sqllogic +200 -0
  121. package/test/logic/07.8-correlated-subquery-edges.sqllogic +71 -0
  122. package/test/logic/07.8.1-correlated-in-decorrelation-gates.sqllogic +156 -0
  123. package/test/logic/07.9-in-value-list.sqllogic +154 -0
  124. package/test/logic/07.9.1-in-value-list-composite-index.sqllogic +38 -0
  125. package/test/logic/08-views.sqllogic +64 -0
  126. package/test/logic/08.1-semi-anti-join.sqllogic +191 -0
  127. package/test/logic/08.1-view-edge-cases.sqllogic +118 -0
  128. package/test/logic/08.1.1-uncorrelated-in-semijoin.sqllogic +251 -0
  129. package/test/logic/08.2-existence-flag-semijoin-recovery.sqllogic +197 -0
  130. package/test/logic/08.3-existence-flag-inner-recovery.sqllogic +102 -0
  131. package/test/logic/08.4-key-set-semi-join.sqllogic +447 -0
  132. package/test/logic/09-set_operations.sqllogic +244 -0
  133. package/test/logic/09.1-set-op-cross-collation.sqllogic +230 -0
  134. package/test/logic/10-distinct_datatypes.sqllogic +127 -0
  135. package/test/logic/10.1-ddl-lifecycle.sqllogic +203 -0
  136. package/test/logic/10.1.1-create-table-syntax-edges.sqllogic +47 -0
  137. package/test/logic/10.1.2-ddl-in-transaction.sqllogic +143 -0
  138. package/test/logic/10.1.2.1-add-constraint-in-transaction.sqllogic +59 -0
  139. package/test/logic/10.1.3-ddl-drop-in-transaction.sqllogic +187 -0
  140. package/test/logic/10.1.3.1-drop-constraint-in-transaction.sqllogic +45 -0
  141. package/test/logic/10.1.4-create-table-duplicate-constraint-names.sqllogic +149 -0
  142. package/test/logic/10.1.4-ddl-transaction-policy.sqllogic +314 -0
  143. package/test/logic/10.1.5-alter-add-constraint-minted-name-disambiguation.sqllogic +219 -0
  144. package/test/logic/10.1.5-create-index-lifecycle.sqllogic +72 -0
  145. package/test/logic/10.1.6-ddl-transaction-policy-index.sqllogic +143 -0
  146. package/test/logic/10.1.7-create-table-default-type-check.sqllogic +119 -0
  147. package/test/logic/10.1.8-alter-add-check-existing-rows.sqllogic +117 -0
  148. package/test/logic/10.2-column-features.sqllogic +365 -0
  149. package/test/logic/10.2.1-table-options-rejection.sqllogic +63 -0
  150. package/test/logic/10.2.2-default-collation-memory.sqllogic +30 -0
  151. package/test/logic/10.3-function-features.sqllogic +247 -0
  152. package/test/logic/10.4-schema-scale.sqllogic +168 -0
  153. package/test/logic/10.4.1-schema-scale-indexes.sqllogic +121 -0
  154. package/test/logic/10.5-indexes.sqllogic +164 -0
  155. package/test/logic/10.5.1-partial-indexes.sqllogic +526 -0
  156. package/test/logic/10.5.2-expression-indexes.sqllogic +34 -0
  157. package/test/logic/10.5.3-desc-index-ordering.sqllogic +130 -0
  158. package/test/logic/10.5.4-composite-pk-index-update-phantom.sqllogic +55 -0
  159. package/test/logic/10.5.5-index-name-uniqueness.sqllogic +76 -0
  160. package/test/logic/10.5.6-minmax-index-boundary.sqllogic +204 -0
  161. package/test/logic/10.5.7-implicit-unique-index-lifecycle.sqllogic +1216 -0
  162. package/test/logic/10.6-distinct-edge-cases.sqllogic +119 -0
  163. package/test/logic/100-predicate-normalization-edge-cases.sqllogic +238 -0
  164. package/test/logic/100.1-where-extras.sqllogic +163 -0
  165. package/test/logic/100.1.1-where-join-on-order-indexed.sqllogic +35 -0
  166. package/test/logic/101-builtin-mutation-kills.sqllogic +974 -0
  167. package/test/logic/101-transaction-edge-cases.sqllogic +395 -0
  168. package/test/logic/102-schema-catalog-edge-cases.sqllogic +252 -0
  169. package/test/logic/102-unique-constraints.sqllogic +145 -0
  170. package/test/logic/102.0.1-schema-catalog-indexed-table.sqllogic +32 -0
  171. package/test/logic/102.1-unique-edge-cases.sqllogic +111 -0
  172. package/test/logic/102.1.1-unique-index-creation-edge-cases.sqllogic +75 -0
  173. package/test/logic/102.2-unique-collation.sqllogic +181 -0
  174. package/test/logic/102.2.1-unique-collation-index-derived.sqllogic +305 -0
  175. package/test/logic/103-database-options-edge-cases.sqllogic +108 -0
  176. package/test/logic/103.1-pragma-boolean-values.sqllogic +126 -0
  177. package/test/logic/104-emit-mutation-kills.sqllogic +236 -0
  178. package/test/logic/105-vtab-memory-mutation-kills.sqllogic +754 -0
  179. package/test/logic/105.1-vtab-memory-index-mutation-kills.sqllogic +540 -0
  180. package/test/logic/106-constraint-extractor-mutation-kills.sqllogic +350 -0
  181. package/test/logic/107-temporal-arithmetic-mutation-kills.sqllogic +833 -0
  182. package/test/logic/108-cardinality-estimation.sqllogic +146 -0
  183. package/test/logic/108.1-analyze-name-resolution.sqllogic +102 -0
  184. package/test/logic/109-aggregate-physical-selection.sqllogic +103 -0
  185. package/test/logic/11-joins.sqllogic +86 -0
  186. package/test/logic/11.1-join-using.sqllogic +267 -0
  187. package/test/logic/11.2-comma-join.sqllogic +35 -0
  188. package/test/logic/11.3-index-nested-loop-join.sqllogic +305 -0
  189. package/test/logic/11.3-mismatched-collation-join.sqllogic +74 -0
  190. package/test/logic/11.4-hash-join-side-swap.sqllogic +118 -0
  191. package/test/logic/110-scan-emitter-mutation-kills.sqllogic +121 -0
  192. package/test/logic/110.1-scan-emitter-index-scan-kills.sqllogic +47 -0
  193. package/test/logic/12-empty-primary-key.sqllogic +124 -0
  194. package/test/logic/12-join_padding_order.sqllogic +58 -0
  195. package/test/logic/12.1-orderby-index-consumption.sqllogic +40 -0
  196. package/test/logic/13-cte.sqllogic +137 -0
  197. package/test/logic/13.1-cte-multiple-recursive.sqllogic +104 -0
  198. package/test/logic/13.10-cte-qualified-name.sqllogic +136 -0
  199. package/test/logic/13.11-unreferenced-dml-cte.sqllogic +414 -0
  200. package/test/logic/13.12-nested-dml-cte-rejected.sqllogic +280 -0
  201. package/test/logic/13.2-cte-bind-params.sqllogic +98 -0
  202. package/test/logic/13.3-cte-edge-cases.sqllogic +120 -0
  203. package/test/logic/13.4-cte-extras.sqllogic +98 -0
  204. package/test/logic/13.5-cte-join-order.sqllogic +166 -0
  205. package/test/logic/13.6-cte-dml-runs-once.sqllogic +318 -0
  206. package/test/logic/13.7-cte-sibling-visibility.sqllogic +227 -0
  207. package/test/logic/13.8-insert-with-clause-visibility.sqllogic +254 -0
  208. package/test/logic/13.9-schema-authored-cte-isolation.sqllogic +328 -0
  209. package/test/logic/13.9.1-schema-authored-schema-path-isolation.sqllogic +408 -0
  210. package/test/logic/14-utilities.sqllogic +168 -0
  211. package/test/logic/15-timespan.sqllogic +279 -0
  212. package/test/logic/15.1-semantic-ordering.sqllogic +960 -0
  213. package/test/logic/15.1.1-json-check-coercion.sqllogic +178 -0
  214. package/test/logic/15.1.2-semantic-ordering-index.sqllogic +41 -0
  215. package/test/logic/15.1.3-declared-form-write-contract.sqllogic +519 -0
  216. package/test/logic/16-epoch.sqllogic +187 -0
  217. package/test/logic/17-weekday-modifier.sqllogic +78 -0
  218. package/test/logic/18-json-string-escapes.sqllogic +86 -0
  219. package/test/logic/18-strftime-extended-formats.sqllogic +68 -0
  220. package/test/logic/20-empty-single-row.sqllogic +261 -0
  221. package/test/logic/21-null-edge-cases.sqllogic +227 -0
  222. package/test/logic/21.1-where-null-comparisons.sqllogic +151 -0
  223. package/test/logic/21.1.1-where-null-comparisons-secondary-index.sqllogic +35 -0
  224. package/test/logic/21.2-between-edges.sqllogic +157 -0
  225. package/test/logic/22-boundary-values.sqllogic +175 -0
  226. package/test/logic/23-self-joins-duplicates.sqllogic +74 -0
  227. package/test/logic/24-builtin-branches.sqllogic +611 -0
  228. package/test/logic/24.1-substr-extras.sqllogic +75 -0
  229. package/test/logic/24.2-random-extras.sqllogic +39 -0
  230. package/test/logic/25-aggregate-edge-cases.sqllogic +289 -0
  231. package/test/logic/25.1-nested-aggregates.sqllogic +74 -0
  232. package/test/logic/25.2-having-edge-cases.sqllogic +318 -0
  233. package/test/logic/25.3-aggregate-isnull-empty.sqllogic +16 -0
  234. package/test/logic/25.4-groupby-fd-constant-empty.sqllogic +55 -0
  235. package/test/logic/25.5-ungrouped-aggregate-column-free-select-item.sqllogic +196 -0
  236. package/test/logic/26-join-edge-cases.sqllogic +333 -0
  237. package/test/logic/26.1-left-join-isnull-on-notnull.sqllogic +26 -0
  238. package/test/logic/26.2-left-join-on-vs-where.sqllogic +67 -0
  239. package/test/logic/26.3-join-on-constants.sqllogic +61 -0
  240. package/test/logic/26.4-join-on-is-null-nullable.sqllogic +44 -0
  241. package/test/logic/27-window-edge-cases.sqllogic +206 -0
  242. package/test/logic/27.1-window-groups-frame.sqllogic +13 -0
  243. package/test/logic/27.2-window-exclude.sqllogic +13 -0
  244. package/test/logic/27.3-window-json-aggregation.sqllogic +66 -0
  245. package/test/logic/28-set-ops-sort-edge-cases.sqllogic +444 -0
  246. package/test/logic/28.1-compound-limit-offset.sqllogic +143 -0
  247. package/test/logic/28.2-orderby-expression-extras.sqllogic +698 -0
  248. package/test/logic/28.2-set-op-branch-types.sqllogic +217 -0
  249. package/test/logic/29-constraint-edge-cases.sqllogic +442 -0
  250. package/test/logic/29.1-column-level-conflict-clause.sqllogic +171 -0
  251. package/test/logic/29.2-table-level-pk-conflict-clause.sqllogic +113 -0
  252. package/test/logic/40-constraints.sqllogic +418 -0
  253. package/test/logic/40.1-pk-desc-direction.sqllogic +76 -0
  254. package/test/logic/40.2-check-extras.sqllogic +683 -0
  255. package/test/logic/41-alter-table.sqllogic +191 -0
  256. package/test/logic/41-fk-cascade-conflict-and-self-ref.sqllogic +263 -0
  257. package/test/logic/41-fk-cross-schema.sqllogic +155 -0
  258. package/test/logic/41-fk-extended-targets.sqllogic +173 -0
  259. package/test/logic/41-foreign-keys.sqllogic +1001 -0
  260. package/test/logic/41-generated-column-errors.sqllogic +225 -0
  261. package/test/logic/41-generated-column-extras.sqllogic +598 -0
  262. package/test/logic/41-generated-column-scope.sqllogic +329 -0
  263. package/test/logic/41-generated-columns.sqllogic +361 -0
  264. package/test/logic/41.1-alter-pk.sqllogic +230 -0
  265. package/test/logic/41.1-fk-collation-conflict.sqllogic +277 -0
  266. package/test/logic/41.10-alter-drop-column-foreign-key.sqllogic +274 -0
  267. package/test/logic/41.10.1-alter-drop-column-unique-index.sqllogic +169 -0
  268. package/test/logic/41.10.2-alter-drop-column-check-and-assertion.sqllogic +1616 -0
  269. package/test/logic/41.10.3-alter-drop-column-referencing-fk.sqllogic +292 -0
  270. package/test/logic/41.10.4-drop-object-expression-dependents.sqllogic +602 -0
  271. package/test/logic/41.11-deferred-fk-with-rename.sqllogic +232 -0
  272. package/test/logic/41.12-alter-default-coercion.sqllogic +200 -0
  273. package/test/logic/41.13-alter-add-column-generated-backfill.sqllogic +566 -0
  274. package/test/logic/41.14-alter-add-column-subquery-backfill.sqllogic +129 -0
  275. package/test/logic/41.15-alter-column-default-type-check.sqllogic +178 -0
  276. package/test/logic/41.16-fk-unenforceable.sqllogic +364 -0
  277. package/test/logic/41.2-alter-column.sqllogic +382 -0
  278. package/test/logic/41.2.1-alter-column-retype-deleted-row-memory.sqllogic +32 -0
  279. package/test/logic/41.2.2-alter-column-retype-index-rebuild.sqllogic +77 -0
  280. package/test/logic/41.2.3-alter-column-set-not-null-pk-backfill.sqllogic +310 -0
  281. package/test/logic/41.2.3.1-alter-column-set-not-null-pk-backfill-secondary-index.sqllogic +37 -0
  282. package/test/logic/41.3-alter-add-column-unique.sqllogic +184 -0
  283. package/test/logic/41.3-alter-rename-propagation.sqllogic +2352 -0
  284. package/test/logic/41.3.1-alter-rename-index-propagation.sqllogic +94 -0
  285. package/test/logic/41.4-alter-add-column-constraints.sqllogic +855 -0
  286. package/test/logic/41.5-alter-misc.sqllogic +48 -0
  287. package/test/logic/41.5-cross-schema-foreign-keys.sqllogic +253 -0
  288. package/test/logic/41.6-alter-drop-rename-constraint.sqllogic +354 -0
  289. package/test/logic/41.6.1-alter-drop-constraint-index-derived.sqllogic +22 -0
  290. package/test/logic/41.7-alter-column-collate.sqllogic +105 -0
  291. package/test/logic/41.7.1-alter-column-collate-unique.sqllogic +45 -0
  292. package/test/logic/41.7.2-alter-column-collate-unique-store.sqllogic +208 -0
  293. package/test/logic/41.7.2.1-alter-column-collate-unique-index-store.sqllogic +114 -0
  294. package/test/logic/41.7.3-alter-column-retype-unique.sqllogic +293 -0
  295. package/test/logic/41.7.3.1-alter-column-retype-staged-rows-memory.sqllogic +41 -0
  296. package/test/logic/41.7.3.2-alter-column-retype-unique-index.sqllogic +72 -0
  297. package/test/logic/41.7.4-alter-column-retype-semantic-memory.sqllogic +445 -0
  298. package/test/logic/41.7.4.1-alter-column-retype-semantic-index-memory.sqllogic +91 -0
  299. package/test/logic/41.7.5-alter-column-collate-pk-staged-delete-memory.sqllogic +106 -0
  300. package/test/logic/41.8-alter-add-constraint-unique-fk.sqllogic +275 -0
  301. package/test/logic/41.8-alter-savepoint-staged-rows.sqllogic +443 -0
  302. package/test/logic/41.8.1-alter-rename-savepoint-staged-rows.sqllogic +408 -0
  303. package/test/logic/41.9-alter-constraint-body-change.sqllogic +180 -0
  304. package/test/logic/41.9-fk-restrict-batched.sqllogic +290 -0
  305. package/test/logic/42-committed-snapshot.sqllogic +254 -0
  306. package/test/logic/42-returning.sqllogic +159 -0
  307. package/test/logic/42.1-returning-extras.sqllogic +232 -0
  308. package/test/logic/42.2-returning-stored-row.sqllogic +165 -0
  309. package/test/logic/43-default-nullability.sqllogic +131 -0
  310. package/test/logic/43-transition-constraints.sqllogic +341 -0
  311. package/test/logic/43.1-default-collation.sqllogic +140 -0
  312. package/test/logic/43.1-notnull-or-conflict.sqllogic +79 -0
  313. package/test/logic/43.2-deferred-check-new-on-delete.sqllogic +95 -0
  314. package/test/logic/43.3-nullable-primary-key.sqllogic +587 -0
  315. package/test/logic/44-determinism-validation.sqllogic +164 -0
  316. package/test/logic/44-orthogonality.sqllogic +146 -0
  317. package/test/logic/44.1-nondeterministic-schema.sqllogic +316 -0
  318. package/test/logic/45-udf-determinism.sqllogic +39 -0
  319. package/test/logic/46-mutation-context.sqllogic +595 -0
  320. package/test/logic/47-upsert.sqllogic +255 -0
  321. package/test/logic/47.1-upsert-conflict-targets.sqllogic +169 -0
  322. package/test/logic/47.2-replace-and-or-clauses.sqllogic +164 -0
  323. package/test/logic/47.2.1-pk-replace-secondary-unique.sqllogic +374 -0
  324. package/test/logic/47.3-engine-or-fail.sqllogic +122 -0
  325. package/test/logic/47.3-upsert-conflict-target-collation.sqllogic +139 -0
  326. package/test/logic/47.3.1-upsert-conflict-index-derived-collation.sqllogic +25 -0
  327. package/test/logic/47.4-upsert-conflict-target-affinity.sqllogic +59 -0
  328. package/test/logic/47.5-upsert-do-update-constraints.sqllogic +440 -0
  329. package/test/logic/47.6-upsert-do-update-decomposed.sqllogic +100 -0
  330. package/test/logic/49-reference-graph.sqllogic +84 -0
  331. package/test/logic/50-declarative-schema.sqllogic +2550 -0
  332. package/test/logic/50-metadata-tags.sqllogic +1033 -0
  333. package/test/logic/50.0.1-metadata-tags-index.sqllogic +141 -0
  334. package/test/logic/50.1-declare-schema-pk.sqllogic +150 -0
  335. package/test/logic/50.2-declare-schema-renames.sqllogic +949 -0
  336. package/test/logic/50.2.1-declare-schema-index-renames.sqllogic +173 -0
  337. package/test/logic/50.3-declare-schema-duplicate-names.sqllogic +280 -0
  338. package/test/logic/50.4-declare-schema-apply-restore.sqllogic +192 -0
  339. package/test/logic/51-lens-foundation.sqllogic +147 -0
  340. package/test/logic/51-materialized-views.sqllogic +376 -0
  341. package/test/logic/51.5-materialized-views-coarsened-key.sqllogic +198 -0
  342. package/test/logic/51.7-maintained-table-attach-detach.sqllogic +468 -0
  343. package/test/logic/51.8-maintained-table-declared-constraints.sqllogic +440 -0
  344. package/test/logic/51.85-maintained-table-parent-fk.sqllogic +103 -0
  345. package/test/logic/51.9-maintained-table-secondary-unique.sqllogic +237 -0
  346. package/test/logic/51.9.1-maintained-table-partial-unique.sqllogic +36 -0
  347. package/test/logic/52-lens-overrides.sqllogic +566 -0
  348. package/test/logic/53-materialized-views-rowtime.sqllogic +1601 -0
  349. package/test/logic/53-reserved-tags.sqllogic +252 -0
  350. package/test/logic/53.1-materialized-view-write-through.sqllogic +329 -0
  351. package/test/logic/53.2-materialized-view-rename-propagation.sqllogic +483 -0
  352. package/test/logic/53.3-materialized-view-constraint-only-ddl.sqllogic +409 -0
  353. package/test/logic/53.3.1-materialized-view-index-ddl-irrelevance.sqllogic +29 -0
  354. package/test/logic/53.4-materialized-view-structural-alter-restore.sqllogic +436 -0
  355. package/test/logic/54-covering-mv-enforcement.sqllogic +314 -0
  356. package/test/logic/54.1-covering-mv-partial-enforcement.sqllogic +34 -0
  357. package/test/logic/55-internal-eviction-reporting.sqllogic +89 -0
  358. package/test/logic/55-lens-prover.sqllogic +202 -0
  359. package/test/logic/55.1-eviction-restrict-fk.sqllogic +148 -0
  360. package/test/logic/55.5-lens-authored-inverse.sqllogic +1468 -0
  361. package/test/logic/80-grow-retrieve-pass.sqllogic +79 -0
  362. package/test/logic/81-quickpick.sqllogic +24 -0
  363. package/test/logic/82-bloom-join.sqllogic +185 -0
  364. package/test/logic/83-merge-join.sqllogic +280 -0
  365. package/test/logic/84-asof-scan.sqllogic +238 -0
  366. package/test/logic/84-key-cardinality.sqllogic +50 -0
  367. package/test/logic/85-relational-const-folding.sqllogic +51 -0
  368. package/test/logic/86-scalar-cse.sqllogic +42 -0
  369. package/test/logic/90-error_paths.sqllogic +114 -0
  370. package/test/logic/90.1-parse-errors.sqllogic +77 -0
  371. package/test/logic/90.2-alter-table-errors.sqllogic +53 -0
  372. package/test/logic/90.2.1-alter-extra-errors.sqllogic +51 -0
  373. package/test/logic/90.3-expression-errors.sqllogic +43 -0
  374. package/test/logic/90.4-dml-errors.sqllogic +47 -0
  375. package/test/logic/90.5-unsupported-join-types.sqllogic +37 -0
  376. package/test/logic/90.5.1-right-full-join-read.sqllogic +157 -0
  377. package/test/logic/90.6-select-error-paths.sqllogic +57 -0
  378. package/test/logic/91-merge-join-edge-cases.sqllogic +159 -0
  379. package/test/logic/92-hash-aggregate-edge-cases.sqllogic +139 -0
  380. package/test/logic/93-ddl-view-edge-cases.sqllogic +104 -0
  381. package/test/logic/93.1-view-error-paths.sqllogic +74 -0
  382. package/test/logic/93.2-view-mutation-pending.sqllogic +108 -0
  383. package/test/logic/93.3-view-mutation-or-clause.sqllogic +60 -0
  384. package/test/logic/93.4-view-mutation.sqllogic +4881 -0
  385. package/test/logic/93.4.1-view-mutation-partial-unique-cardinality.sqllogic +31 -0
  386. package/test/logic/93.5-authored-inverse.sqllogic +415 -0
  387. package/test/logic/93.6-set-op-flagless-write.sqllogic +862 -0
  388. package/test/logic/94-tvf-edge-cases.sqllogic +58 -0
  389. package/test/logic/94.1-limit-offset-edge-cases.sqllogic +109 -0
  390. package/test/logic/94.2-limit-offset-extras.sqllogic +98 -0
  391. package/test/logic/95-assertions.sqllogic +1417 -0
  392. package/test/logic/96-subquery-edge-cases.sqllogic +276 -0
  393. package/test/logic/97-json-function-edge-cases.sqllogic +633 -0
  394. package/test/logic/97.1-json-blob-and-special-values.sqllogic +92 -0
  395. package/test/logic/98-temporal-edge-cases.sqllogic +515 -0
  396. package/test/logic/99-conversion-edge-cases.sqllogic +325 -0
  397. package/test/logic/99.0.1-schema-index-listing.sqllogic +21 -0
  398. package/test/logic/99.1-cast-syntax-extras.sqllogic +167 -0
  399. package/test/logic/drop-unique-index.sqllogic +88 -0
  400. package/test/logic/pushdown-test.sqllogic +36 -0
@@ -0,0 +1,354 @@
1
+ -- Schema Search Path Tests
2
+ -- Tests for WITH SCHEMA clause and PRAGMA schema_path
3
+
4
+ -- Setup: Create tables in main schema
5
+ CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
6
+ INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob');
7
+
8
+ CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER, amount REAL);
9
+ INSERT INTO orders VALUES (1, 1, 100.50), (2, 2, 200.75);
10
+
11
+ -- Test 1: Default behavior - unqualified names resolve to main
12
+ SELECT * FROM users ORDER BY id;
13
+ → [{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]
14
+
15
+ -- Test 2: WITH SCHEMA clause with main (should work)
16
+ SELECT * FROM users WITH SCHEMA main ORDER BY id;
17
+ → [{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]
18
+
19
+ -- Test 3: WITH SCHEMA on JOIN queries
20
+ SELECT u.id, u.name, o.id as order_id, o.amount FROM users u JOIN orders o ON u.id = o.user_id WITH SCHEMA main ORDER BY u.id;
21
+ → [{"id":1,"name":"Alice","order_id":1,"amount":100.5},{"id":2,"name":"Bob","order_id":2,"amount":200.75}]
22
+
23
+ -- Test 4: PRAGMA schema_path - set and query
24
+ PRAGMA schema_path = 'main';
25
+
26
+ PRAGMA schema_path;
27
+ → [{"name":"schema_path","value":"main"}]
28
+
29
+ -- Test 5: After setting pragma, unqualified names still work
30
+ SELECT * FROM users ORDER BY id;
31
+ → [{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]
32
+
33
+ -- Test 6: INSERT with WITH SCHEMA
34
+ INSERT INTO users (id, name) VALUES (3, 'Charlie') WITH SCHEMA main;
35
+
36
+ SELECT * FROM users WHERE id = 3;
37
+ → [{"id":3,"name":"Charlie"}]
38
+
39
+ -- Test 7: UPDATE with WITH SCHEMA
40
+ UPDATE users SET name = 'Alice Updated' WHERE id = 1 WITH SCHEMA main;
41
+
42
+ SELECT name FROM users WHERE id = 1;
43
+ → [{"name":"Alice Updated"}]
44
+
45
+ -- Test 8: DELETE with WITH SCHEMA
46
+ DELETE FROM users WHERE id = 3 WITH SCHEMA main;
47
+
48
+ SELECT COUNT(*) as count FROM users;
49
+ → [{"count":2}]
50
+
51
+ -- Test 9: WITH SCHEMA with CTEs
52
+ WITH active_users AS (SELECT * FROM users WHERE id <= 2) SELECT * FROM active_users WITH SCHEMA main ORDER BY id;
53
+ → [{"id":1,"name":"Alice Updated"},{"id":2,"name":"Bob"}]
54
+
55
+ -- Test 10: RETURNING with WITH SCHEMA
56
+ INSERT INTO users (id, name) VALUES (4, 'David') WITH SCHEMA main RETURNING id, name;
57
+ → [{"id":4,"name":"David"}]
58
+
59
+ -- Test 11: Multiple table references with different schemas via WITH SCHEMA
60
+ SELECT u.name, o.amount, o.id as oid FROM users u JOIN orders o ON u.id = o.user_id WITH SCHEMA main ORDER BY o.id;
61
+ → [{"name":"Alice Updated","amount":100.5,"oid":1},{"name":"Bob","amount":200.75,"oid":2}]
62
+
63
+ -- Test 12: Subqueries work with WITH SCHEMA
64
+ SELECT * FROM (SELECT * FROM users WHERE id > 0) sub WITH SCHEMA main ORDER BY id;
65
+ → [{"id":1,"name":"Alice Updated"},{"id":2,"name":"Bob"},{"id":4,"name":"David"}]
66
+
67
+ -- Test 13: WITH SCHEMA and WITH CONTEXT can appear in any order
68
+ -- Note: We'd need mutation context tables to fully test this, but we can verify parsing
69
+
70
+ -- ===================================
71
+ -- Non-default schema: DML with WITH SCHEMA
72
+ -- Tests that INSERT/UPDATE/DELETE properly propagate schema path context
73
+ -- ===================================
74
+
75
+ -- Create a custom schema with tables
76
+ declare schema myapp {
77
+ table products {
78
+ id INTEGER PRIMARY KEY,
79
+ name TEXT NOT NULL,
80
+ status TEXT DEFAULT 'active'
81
+ }
82
+ }
83
+
84
+ apply schema myapp;
85
+
86
+ -- run
87
+
88
+ -- Seed data via explicit schema qualification (baseline, no bug)
89
+ INSERT INTO myapp.products (id, name) VALUES (1, 'Widget');
90
+
91
+ SELECT * FROM myapp.products;
92
+ → [{"id":1,"name":"Widget","status":"active"}]
93
+
94
+ -- Test 14: UPDATE with WITH SCHEMA on non-default schema (update.ts:68 bug)
95
+ -- The source scan must use contextWithSchemaPath to resolve the unqualified table name
96
+ UPDATE products SET name = 'Gadget' WHERE id = 1 WITH SCHEMA myapp;
97
+
98
+ SELECT * FROM myapp.products WHERE id = 1;
99
+ → [{"id":1,"name":"Gadget","status":"active"}]
100
+
101
+ -- Test 15: INSERT with WITH SCHEMA on non-default schema (insert.ts:528 bug)
102
+ -- Row expansion (default value computation) must use contextWithSchemaPath
103
+ INSERT INTO products (id, name) VALUES (2, 'Doohickey') WITH SCHEMA myapp;
104
+
105
+ SELECT * FROM myapp.products ORDER BY id;
106
+ → [{"id":1,"name":"Gadget","status":"active"},{"id":2,"name":"Doohickey","status":"active"}]
107
+
108
+ -- Test 16: DELETE with WITH SCHEMA on non-default schema (verify parity with delete.ts)
109
+ DELETE FROM products WHERE id = 2 WITH SCHEMA myapp;
110
+
111
+ SELECT COUNT(*) as count FROM myapp.products;
112
+ → [{"count":1}]
113
+
114
+ -- Test 17: INSERT with WITH SCHEMA + RETURNING on non-default schema
115
+ INSERT INTO products (id, name) VALUES (3, 'Thingamajig') WITH SCHEMA myapp RETURNING id, name, status;
116
+ → [{"id":3,"name":"Thingamajig","status":"active"}]
117
+
118
+ -- Test 17a: a SUBQUERY inside RETURNING also resolves on the statement's schema path.
119
+ -- INSERT used to build RETURNING against the bare context, so an unqualified name in a
120
+ -- RETURNING subquery ignored WITH SCHEMA and reported "not found in schema path: main"
121
+ -- (UPDATE and DELETE already resolved it). `lookup` exists only in myapp, and is not
122
+ -- touched by the insert, so the count is stable.
123
+ CREATE TABLE myapp.lookup (k INTEGER PRIMARY KEY);
124
+ INSERT INTO myapp.lookup VALUES (1), (2), (3);
125
+
126
+ INSERT INTO products (id, name) VALUES (5, 'Whatsit') WITH SCHEMA myapp
127
+ RETURNING id, (SELECT COUNT(*) FROM lookup) AS n;
128
+ → [{"id":5,"n":3}]
129
+
130
+ DELETE FROM myapp.products WHERE id = 5;
131
+
132
+ -- Test 17b: the ON CONFLICT arm resolves the schema path too, and now EXECUTEs a
133
+ -- subquery in that position: `DmlExecutorNode` exposes its ON CONFLICT expressions as
134
+ -- optimizer-visible children, so their subquery subtrees get rewritten. Fixed by
135
+ -- `bug-dml-side-expressions-invisible-to-optimizer`.
136
+ INSERT INTO products (id, name) VALUES (3, 'Dupe')
137
+ ON CONFLICT (id) DO UPDATE SET name = (SELECT COUNT(*) FROM lookup)
138
+ WITH SCHEMA myapp RETURNING name;
139
+ → [{"name":"3"}]
140
+
141
+ DROP TABLE myapp.lookup;
142
+
143
+ -- ===================================
144
+ -- Non-default schema: write-through a view whose home schema is not on the path
145
+ -- The stored body's unqualified `products` must resolve next to the VIEW (myapp),
146
+ -- for the write exactly as for the read — the session path here is 'main'.
147
+ -- ===================================
148
+
149
+ -- Test 18: INSERT / UPDATE / DELETE through a view stored in myapp
150
+ CREATE VIEW myapp.product_names AS SELECT id, name FROM products;
151
+
152
+ INSERT INTO myapp.product_names (id, name) VALUES (4, 'Gizmo');
153
+
154
+ SELECT id, name, status FROM myapp.products WHERE id = 4;
155
+ → [{"id":4,"name":"Gizmo","status":"active"}]
156
+
157
+ UPDATE myapp.product_names SET name = 'Gizmo II' WHERE id = 4;
158
+
159
+ SELECT id, name FROM myapp.products WHERE id = 4;
160
+ → [{"id":4,"name":"Gizmo II"}]
161
+
162
+ DELETE FROM myapp.product_names WHERE id = 4;
163
+
164
+ SELECT COUNT(*) as count FROM myapp.products WHERE id = 4;
165
+ → [{"count":0}]
166
+
167
+ -- Test 19: on a name collision the view's home schema wins over the session path
168
+ CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT);
169
+ INSERT INTO products (id, name) VALUES (9, 'main-row');
170
+
171
+ UPDATE myapp.product_names SET name = 'via-view' WHERE id = 3;
172
+
173
+ SELECT id, name FROM myapp.products WHERE id = 3;
174
+ → [{"id":3,"name":"via-view"}]
175
+
176
+ SELECT id, name FROM main.products;
177
+ → [{"id":9,"name":"main-row"}]
178
+
179
+ DROP TABLE products;
180
+ DROP VIEW myapp.product_names;
181
+
182
+ -- Clean up custom schema
183
+ DROP TABLE myapp.products;
184
+
185
+ -- Clean up
186
+ DROP TABLE users;
187
+ DROP TABLE orders;
188
+
189
+ -- ===================================
190
+ -- Unqualified VIEW names resolve through the schema search path, exactly as
191
+ -- unqualified table names do (bug-unqualified-view-name-ignores-schema-path).
192
+ -- ===================================
193
+
194
+ CREATE TABLE temp.rt (id INTEGER PRIMARY KEY, x INTEGER);
195
+ INSERT INTO temp.rt VALUES (1, 10);
196
+ CREATE VIEW temp.rv AS SELECT id, x FROM rt;
197
+
198
+ -- Test 20: qualified reference (baseline, never depended on the path)
199
+ SELECT * FROM temp.rv;
200
+ → [{"id":1,"x":10}]
201
+
202
+ -- Test 21: with `temp` OFF the session path an unqualified view is not found —
203
+ -- the same answer an unqualified table in `temp` gets, hint included
204
+ PRAGMA schema_path = 'main';
205
+
206
+ SELECT * FROM rv;
207
+ -- error: Did you mean: temp.rv?
208
+
209
+ SELECT * FROM rt;
210
+ -- error: Did you mean: temp.rt?
211
+
212
+ -- Test 22: with `temp` ON the path both resolve
213
+ PRAGMA schema_path = 'temp,main';
214
+
215
+ SELECT * FROM rv;
216
+ → [{"id":1,"x":10}]
217
+
218
+ SELECT * FROM rt;
219
+ → [{"id":1,"x":10}]
220
+
221
+ -- Test 23: a view composed over another view in the same non-main schema
222
+ CREATE VIEW temp.rv2 AS SELECT id, x FROM rv;
223
+
224
+ SELECT * FROM temp.rv2;
225
+ → [{"id":1,"x":10}]
226
+
227
+ SELECT * FROM rv2;
228
+ → [{"id":1,"x":10}]
229
+
230
+ -- Test 24: unqualified INSERT / UPDATE / DELETE through a non-main view
231
+ INSERT INTO rv (id, x) VALUES (2, 20);
232
+
233
+ SELECT id, x FROM temp.rt ORDER BY id;
234
+ → [{"id":1,"x":10},{"id":2,"x":20}]
235
+
236
+ UPDATE rv SET x = 21 WHERE id = 2;
237
+
238
+ SELECT id, x FROM temp.rt WHERE id = 2;
239
+ → [{"id":2,"x":21}]
240
+
241
+ DELETE FROM rv WHERE id = 2;
242
+
243
+ SELECT COUNT(*) as count FROM temp.rt;
244
+ → [{"count":1}]
245
+
246
+ -- Test 25: statement-level WITH SCHEMA reaches the view too
247
+ -- (`temp` is a keyword in the WITH SCHEMA position, hence the quoted form)
248
+ PRAGMA schema_path = 'main';
249
+
250
+ SELECT id, x FROM rv WITH SCHEMA "temp";
251
+ → [{"id":1,"x":10}]
252
+
253
+ UPDATE rv SET x = 12 WHERE id = 1 WITH SCHEMA "temp";
254
+
255
+ SELECT id, x FROM temp.rt WHERE id = 1;
256
+ → [{"id":1,"x":12}]
257
+
258
+ UPDATE temp.rv SET x = 10 WHERE id = 1;
259
+
260
+ DROP VIEW temp.rv2;
261
+ DROP VIEW temp.rv;
262
+ DROP TABLE temp.rt;
263
+
264
+ -- Test 26: within-path ordering — a TABLE in an earlier entry beats a VIEW of
265
+ -- the same name in a later one, and vice versa. (A table/view collision inside
266
+ -- ONE schema is impossible; CREATE TABLE / CREATE VIEW reject it.)
267
+ CREATE TABLE main.dual_name (id INTEGER PRIMARY KEY, tag TEXT);
268
+ INSERT INTO main.dual_name VALUES (1, 'table-in-main');
269
+ CREATE TABLE temp.dn_src (id INTEGER PRIMARY KEY, tag TEXT);
270
+ INSERT INTO temp.dn_src VALUES (1, 'view-in-temp');
271
+ CREATE VIEW temp.dual_name AS SELECT id, tag FROM dn_src;
272
+
273
+ PRAGMA schema_path = 'main,temp';
274
+
275
+ SELECT tag FROM dual_name;
276
+ → [{"tag":"table-in-main"}]
277
+
278
+ PRAGMA schema_path = 'temp,main';
279
+
280
+ SELECT tag FROM dual_name;
281
+ → [{"tag":"view-in-temp"}]
282
+
283
+ -- a qualified reference is unaffected by the path either way
284
+ SELECT tag FROM main.dual_name;
285
+ → [{"tag":"table-in-main"}]
286
+
287
+ SELECT tag FROM temp.dual_name;
288
+ → [{"tag":"view-in-temp"}]
289
+
290
+ -- Test 27: the same ordering governs a WRITE target, not just a read
291
+ CREATE TABLE temp.dn_w_src (id INTEGER PRIMARY KEY, tag TEXT);
292
+ INSERT INTO temp.dn_w_src VALUES (1, 'view-in-temp');
293
+ CREATE VIEW temp.dn_w AS SELECT id, tag FROM dn_w_src;
294
+ CREATE TABLE main.dn_w (id INTEGER PRIMARY KEY, tag TEXT);
295
+ INSERT INTO main.dn_w VALUES (1, 'table-in-main');
296
+
297
+ PRAGMA schema_path = 'main,temp';
298
+
299
+ UPDATE dn_w SET tag = 'wrote-main' WHERE id = 1;
300
+
301
+ SELECT tag FROM main.dn_w;
302
+ → [{"tag":"wrote-main"}]
303
+
304
+ SELECT tag FROM temp.dn_w_src;
305
+ → [{"tag":"view-in-temp"}]
306
+
307
+ PRAGMA schema_path = 'temp,main';
308
+
309
+ UPDATE dn_w SET tag = 'wrote-temp-view' WHERE id = 1;
310
+
311
+ SELECT tag FROM main.dn_w;
312
+ → [{"tag":"wrote-main"}]
313
+
314
+ SELECT tag FROM temp.dn_w_src;
315
+ → [{"tag":"wrote-temp-view"}]
316
+
317
+ PRAGMA schema_path = 'main';
318
+
319
+ DROP VIEW temp.dn_w;
320
+ DROP TABLE temp.dn_w_src;
321
+ DROP TABLE main.dn_w;
322
+
323
+ DROP VIEW temp.dual_name;
324
+ DROP TABLE temp.dn_src;
325
+ DROP TABLE main.dual_name;
326
+
327
+ -- Test 28: a user-declared (non-`temp`) schema behaves identically — the `temp`
328
+ -- coverage above must not be reading a temp-only special case.
329
+ CREATE TABLE myapp.ut (id INTEGER PRIMARY KEY, x INTEGER);
330
+ INSERT INTO myapp.ut VALUES (1, 10);
331
+ CREATE VIEW myapp.uv AS SELECT id, x FROM ut;
332
+
333
+ SELECT * FROM uv;
334
+ -- error: Did you mean: myapp.uv?
335
+
336
+ PRAGMA schema_path = 'myapp,main';
337
+
338
+ SELECT * FROM uv;
339
+ → [{"id":1,"x":10}]
340
+
341
+ INSERT INTO uv (id, x) VALUES (2, 20);
342
+
343
+ SELECT id, x FROM myapp.ut ORDER BY id;
344
+ → [{"id":1,"x":10},{"id":2,"x":20}]
345
+
346
+ DELETE FROM uv WHERE id = 2;
347
+
348
+ PRAGMA schema_path = 'main';
349
+
350
+ SELECT id, x FROM uv WITH SCHEMA myapp;
351
+ → [{"id":1,"x":10}]
352
+
353
+ DROP VIEW myapp.uv;
354
+ DROP TABLE myapp.ut;
@@ -0,0 +1,83 @@
1
+ -- Schema Case-Insensitive Name Tests
2
+ -- Verifies that schema names are case-insensitive throughout the system
3
+
4
+ -- Setup: Create a custom schema with mixed-case name via declarative schema
5
+ declare schema MyApp {
6
+ table items {
7
+ id INTEGER PRIMARY KEY,
8
+ name TEXT
9
+ }
10
+
11
+ seed items (
12
+ (1, 'Widget'),
13
+ (2, 'Gadget')
14
+ )
15
+ }
16
+
17
+ -- run
18
+
19
+ apply schema MyApp with seed;
20
+
21
+ -- run
22
+
23
+ -- Test 1: Access table using original case
24
+ SELECT * FROM MyApp.items ORDER BY id;
25
+ → [{"id":1,"name":"Widget"},{"id":2,"name":"Gadget"}]
26
+
27
+ -- Test 2: Access table using lowercase schema name
28
+ SELECT * FROM myapp.items ORDER BY id;
29
+ → [{"id":1,"name":"Widget"},{"id":2,"name":"Gadget"}]
30
+
31
+ -- Test 3: Access table using uppercase schema name
32
+ SELECT * FROM MYAPP.items ORDER BY id;
33
+ → [{"id":1,"name":"Widget"},{"id":2,"name":"Gadget"}]
34
+
35
+ -- Test 4: Access table using mixed case schema name
36
+ SELECT * FROM mYaPp.items ORDER BY id;
37
+ → [{"id":1,"name":"Widget"},{"id":2,"name":"Gadget"}]
38
+
39
+ -- Test 5: INSERT using different case schema name
40
+ INSERT INTO myapp.items VALUES (3, 'Doohickey');
41
+
42
+ SELECT * FROM MyApp.items WHERE id = 3;
43
+ → [{"id":3,"name":"Doohickey"}]
44
+
45
+ -- Test 6: UPDATE using different case schema name
46
+ UPDATE MYAPP.items SET name = 'Updated Widget' WHERE id = 1;
47
+
48
+ SELECT name FROM myapp.items WHERE id = 1;
49
+ → [{"name":"Updated Widget"}]
50
+
51
+ -- Test 7: DELETE using different case schema name
52
+ DELETE FROM mYaPp.items WHERE id = 3;
53
+
54
+ SELECT COUNT(*) as cnt FROM MyApp.items;
55
+ → [{"cnt":2}]
56
+
57
+ -- Test 8: Main schema is also case-insensitive
58
+ CREATE TABLE test_main (id INTEGER PRIMARY KEY, val TEXT);
59
+ INSERT INTO test_main VALUES (1, 'hello');
60
+
61
+ SELECT * FROM Main.test_main;
62
+ → [{"id":1,"val":"hello"}]
63
+
64
+ SELECT * FROM MAIN.test_main;
65
+ → [{"id":1,"val":"hello"}]
66
+
67
+ DROP TABLE test_main;
68
+
69
+ -- Test 9: Views with mixed-case schema names
70
+ CREATE VIEW myapp.item_names AS SELECT name FROM myapp.items;
71
+
72
+ SELECT * FROM MyApp.item_names ORDER BY name;
73
+ → [{"name":"Gadget"},{"name":"Updated Widget"}]
74
+
75
+ SELECT * FROM MYAPP.item_names ORDER BY name;
76
+ → [{"name":"Gadget"},{"name":"Updated Widget"}]
77
+
78
+ -- Test 10: Drop view with different case
79
+ DROP VIEW MyApp.item_names;
80
+
81
+ SELECT * FROM myapp.item_names;
82
+ -- error:
83
+