@quereus/quereus 4.20.1 → 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 (377) hide show
  1. package/README.md +2 -0
  2. package/package.json +7 -4
  3. package/test/README.md +173 -0
  4. package/test/logic/01-basic.sqllogic +39 -0
  5. package/test/logic/01.1-select-projection-extras.sqllogic +130 -0
  6. package/test/logic/01.2-strings.sqllogic +43 -0
  7. package/test/logic/01.5-insert-select.sqllogic +237 -0
  8. package/test/logic/01.6-update-extras.sqllogic +118 -0
  9. package/test/logic/01.7-update-from.sqllogic +67 -0
  10. package/test/logic/01.8-delete-extras.sqllogic +122 -0
  11. package/test/logic/01.8.1-delete-range-cow.sqllogic +115 -0
  12. package/test/logic/01.9-query-expr-dml-gates.sqllogic +32 -0
  13. package/test/logic/01.9-query-expr-dml.sqllogic +171 -0
  14. package/test/logic/01.9-query-expr-values.sqllogic +111 -0
  15. package/test/logic/01.9.1-limit-over-dml-subquery.sqllogic +119 -0
  16. package/test/logic/02-filters.sqllogic +54 -0
  17. package/test/logic/02-smoke.sqllogic +62 -0
  18. package/test/logic/02.1-bind-parameters.sqllogic +223 -0
  19. package/test/logic/03-expressions.sqllogic +190 -0
  20. package/test/logic/03.1-quoted-identifiers.sqllogic +55 -0
  21. package/test/logic/03.4-defaults.sqllogic +554 -0
  22. package/test/logic/03.4.1-default-edge-cases.sqllogic +99 -0
  23. package/test/logic/03.5-tvf.sqllogic +61 -0
  24. package/test/logic/03.6-type-system.sqllogic +544 -0
  25. package/test/logic/03.6.1-numeric-text-comparison-coercion.sqllogic +244 -0
  26. package/test/logic/03.6.2-value-to-text.sqllogic +224 -0
  27. package/test/logic/03.7-bigint-mixed-arithmetic.sqllogic +65 -0
  28. package/test/logic/03.8-not-precedence.sqllogic +255 -0
  29. package/test/logic/03.9-is-bool-predicate.sqllogic +150 -0
  30. package/test/logic/03.9.1-is-bool-predicate-partial-index.sqllogic +34 -0
  31. package/test/logic/04-order-by.sqllogic +38 -0
  32. package/test/logic/04-transactions.sqllogic +239 -0
  33. package/test/logic/04a-savepoint-lazy-attach.sqllogic +122 -0
  34. package/test/logic/05-vtab_memory.sqllogic +50 -0
  35. package/test/logic/05.0.1-vtab-memory-unique-index-collation.sqllogic +34 -0
  36. package/test/logic/05.1-composite-pk-range-scan.sqllogic +147 -0
  37. package/test/logic/05.1.1-secondary-index-range-scan.sqllogic +56 -0
  38. package/test/logic/05.2-cast-seek-correctness.sqllogic +124 -0
  39. package/test/logic/06-builtin_functions.sqllogic +149 -0
  40. package/test/logic/06.1-string-functions.sqllogic +92 -0
  41. package/test/logic/06.1.3-like-glob-edges.sqllogic +53 -0
  42. package/test/logic/06.2-math-functions.sqllogic +82 -0
  43. package/test/logic/06.3-schema.sqllogic +48 -0
  44. package/test/logic/06.3.1-schema-all-schemas.sqllogic +39 -0
  45. package/test/logic/06.3.2-schema-foreign-keys.sqllogic +208 -0
  46. package/test/logic/06.3.3-introspection-tags.sqllogic +202 -0
  47. package/test/logic/06.3.3.1-introspection-tags-index.sqllogic +74 -0
  48. package/test/logic/06.3.4-view-info.sqllogic +378 -0
  49. package/test/logic/06.3.5-column-info.sqllogic +347 -0
  50. package/test/logic/06.3.6-schema-views.sqllogic +29 -0
  51. package/test/logic/06.4-schema-search-path.sqllogic +354 -0
  52. package/test/logic/06.4.1-schema-case-insensitive.sqllogic +83 -0
  53. package/test/logic/06.4.2-collation-extras.sqllogic +472 -0
  54. package/test/logic/06.4.2.1-collation-index-access-paths.sqllogic +140 -0
  55. package/test/logic/06.4.3-write-path-collation.sqllogic +99 -0
  56. package/test/logic/06.4.4-comparison-collation-precedence.sqllogic +342 -0
  57. package/test/logic/06.4.5-any-collate-declared-keys.sqllogic +92 -0
  58. package/test/logic/06.5-polymorphic-types.sqllogic +169 -0
  59. package/test/logic/06.5.1-conversion-functions.sqllogic +173 -0
  60. package/test/logic/06.5.2-scalar-minmax.sqllogic +16 -0
  61. package/test/logic/06.5.3-undeclared-return-type-comparison.sqllogic +244 -0
  62. package/test/logic/06.5.4-declared-return-type-builtins.sqllogic +288 -0
  63. package/test/logic/06.6-aggregate-extended.sqllogic +78 -0
  64. package/test/logic/06.7-json-extended.sqllogic +53 -0
  65. package/test/logic/06.8-json-path-operators.sqllogic +99 -0
  66. package/test/logic/06.9-json-canonical-key.sqllogic +65 -0
  67. package/test/logic/06.9.1-json-coerce-once.sqllogic +417 -0
  68. package/test/logic/06.9.1.1-json-coerce-once-index.sqllogic +39 -0
  69. package/test/logic/06.9.2-json-structural-equality.sqllogic +382 -0
  70. package/test/logic/06.9.2.1-json-structural-equality-index.sqllogic +76 -0
  71. package/test/logic/06.9.3-json-index-range-seek.sqllogic +205 -0
  72. package/test/logic/07-aggregates.sqllogic +193 -0
  73. package/test/logic/07.1-aggregate-filter-clause.sqllogic +12 -0
  74. package/test/logic/07.2-aggregate-order-by.sqllogic +11 -0
  75. package/test/logic/07.3-group-by-extras.sqllogic +602 -0
  76. package/test/logic/07.3.1-group-by-order-by-key.sqllogic +164 -0
  77. package/test/logic/07.3.2-grouped-select-list-shape.sqllogic +231 -0
  78. package/test/logic/07.4-group-by-filter-composite-pk.sqllogic +120 -0
  79. package/test/logic/07.5-sum-mixed-exact-and-float.sqllogic +151 -0
  80. package/test/logic/07.5-window.sqllogic +1941 -0
  81. package/test/logic/07.5.1-window-named.sqllogic +13 -0
  82. package/test/logic/07.5.2-window-nth-value.sqllogic +13 -0
  83. package/test/logic/07.6-subqueries.sqllogic +78 -0
  84. package/test/logic/07.6.1-subquery-extras.sqllogic +93 -0
  85. package/test/logic/07.7-and-or-short-circuit.sqllogic +58 -0
  86. package/test/logic/07.7-in-subquery-caching.sqllogic +174 -0
  87. package/test/logic/07.7-scalar-agg-decorrelation.sqllogic +197 -0
  88. package/test/logic/07.7.1-in-extras.sqllogic +158 -0
  89. package/test/logic/07.7.1-scalar-agg-decorrelation-filter.sqllogic +105 -0
  90. package/test/logic/07.7.2-scalar-agg-decorrelation-nested.sqllogic +115 -0
  91. package/test/logic/07.7.3-exists-in-select-decorrelation.sqllogic +107 -0
  92. package/test/logic/07.7.4-where-conjunct-ordering.sqllogic +121 -0
  93. package/test/logic/07.7.5-filter-lost-under-index-order.sqllogic +134 -0
  94. package/test/logic/07.7.6-correlated-predicate-scope.sqllogic +178 -0
  95. package/test/logic/07.7.7-join-source-scope-shadowing.sqllogic +137 -0
  96. package/test/logic/07.7.8-correlated-ref-to-computed-column.sqllogic +165 -0
  97. package/test/logic/07.7.9-conjunct-monotonicity.sqllogic +200 -0
  98. package/test/logic/07.8-correlated-subquery-edges.sqllogic +71 -0
  99. package/test/logic/07.8.1-correlated-in-decorrelation-gates.sqllogic +156 -0
  100. package/test/logic/07.9-in-value-list.sqllogic +154 -0
  101. package/test/logic/07.9.1-in-value-list-composite-index.sqllogic +38 -0
  102. package/test/logic/08-views.sqllogic +64 -0
  103. package/test/logic/08.1-semi-anti-join.sqllogic +191 -0
  104. package/test/logic/08.1-view-edge-cases.sqllogic +118 -0
  105. package/test/logic/08.1.1-uncorrelated-in-semijoin.sqllogic +251 -0
  106. package/test/logic/08.2-existence-flag-semijoin-recovery.sqllogic +197 -0
  107. package/test/logic/08.3-existence-flag-inner-recovery.sqllogic +102 -0
  108. package/test/logic/08.4-key-set-semi-join.sqllogic +447 -0
  109. package/test/logic/09-set_operations.sqllogic +244 -0
  110. package/test/logic/09.1-set-op-cross-collation.sqllogic +230 -0
  111. package/test/logic/10-distinct_datatypes.sqllogic +127 -0
  112. package/test/logic/10.1-ddl-lifecycle.sqllogic +203 -0
  113. package/test/logic/10.1.1-create-table-syntax-edges.sqllogic +47 -0
  114. package/test/logic/10.1.2-ddl-in-transaction.sqllogic +143 -0
  115. package/test/logic/10.1.2.1-add-constraint-in-transaction.sqllogic +59 -0
  116. package/test/logic/10.1.3-ddl-drop-in-transaction.sqllogic +187 -0
  117. package/test/logic/10.1.3.1-drop-constraint-in-transaction.sqllogic +45 -0
  118. package/test/logic/10.1.4-create-table-duplicate-constraint-names.sqllogic +149 -0
  119. package/test/logic/10.1.4-ddl-transaction-policy.sqllogic +314 -0
  120. package/test/logic/10.1.5-alter-add-constraint-minted-name-disambiguation.sqllogic +219 -0
  121. package/test/logic/10.1.5-create-index-lifecycle.sqllogic +72 -0
  122. package/test/logic/10.1.6-ddl-transaction-policy-index.sqllogic +143 -0
  123. package/test/logic/10.1.7-create-table-default-type-check.sqllogic +119 -0
  124. package/test/logic/10.1.8-alter-add-check-existing-rows.sqllogic +117 -0
  125. package/test/logic/10.2-column-features.sqllogic +365 -0
  126. package/test/logic/10.2.1-table-options-rejection.sqllogic +63 -0
  127. package/test/logic/10.2.2-default-collation-memory.sqllogic +30 -0
  128. package/test/logic/10.3-function-features.sqllogic +247 -0
  129. package/test/logic/10.4-schema-scale.sqllogic +168 -0
  130. package/test/logic/10.4.1-schema-scale-indexes.sqllogic +121 -0
  131. package/test/logic/10.5-indexes.sqllogic +164 -0
  132. package/test/logic/10.5.1-partial-indexes.sqllogic +526 -0
  133. package/test/logic/10.5.2-expression-indexes.sqllogic +34 -0
  134. package/test/logic/10.5.3-desc-index-ordering.sqllogic +130 -0
  135. package/test/logic/10.5.4-composite-pk-index-update-phantom.sqllogic +55 -0
  136. package/test/logic/10.5.5-index-name-uniqueness.sqllogic +76 -0
  137. package/test/logic/10.5.6-minmax-index-boundary.sqllogic +204 -0
  138. package/test/logic/10.5.7-implicit-unique-index-lifecycle.sqllogic +1216 -0
  139. package/test/logic/10.6-distinct-edge-cases.sqllogic +119 -0
  140. package/test/logic/100-predicate-normalization-edge-cases.sqllogic +238 -0
  141. package/test/logic/100.1-where-extras.sqllogic +163 -0
  142. package/test/logic/100.1.1-where-join-on-order-indexed.sqllogic +35 -0
  143. package/test/logic/101-builtin-mutation-kills.sqllogic +974 -0
  144. package/test/logic/101-transaction-edge-cases.sqllogic +395 -0
  145. package/test/logic/102-schema-catalog-edge-cases.sqllogic +252 -0
  146. package/test/logic/102-unique-constraints.sqllogic +145 -0
  147. package/test/logic/102.0.1-schema-catalog-indexed-table.sqllogic +32 -0
  148. package/test/logic/102.1-unique-edge-cases.sqllogic +111 -0
  149. package/test/logic/102.1.1-unique-index-creation-edge-cases.sqllogic +75 -0
  150. package/test/logic/102.2-unique-collation.sqllogic +181 -0
  151. package/test/logic/102.2.1-unique-collation-index-derived.sqllogic +305 -0
  152. package/test/logic/103-database-options-edge-cases.sqllogic +108 -0
  153. package/test/logic/103.1-pragma-boolean-values.sqllogic +126 -0
  154. package/test/logic/104-emit-mutation-kills.sqllogic +236 -0
  155. package/test/logic/105-vtab-memory-mutation-kills.sqllogic +754 -0
  156. package/test/logic/105.1-vtab-memory-index-mutation-kills.sqllogic +540 -0
  157. package/test/logic/106-constraint-extractor-mutation-kills.sqllogic +350 -0
  158. package/test/logic/107-temporal-arithmetic-mutation-kills.sqllogic +833 -0
  159. package/test/logic/108-cardinality-estimation.sqllogic +146 -0
  160. package/test/logic/108.1-analyze-name-resolution.sqllogic +102 -0
  161. package/test/logic/109-aggregate-physical-selection.sqllogic +103 -0
  162. package/test/logic/11-joins.sqllogic +86 -0
  163. package/test/logic/11.1-join-using.sqllogic +267 -0
  164. package/test/logic/11.2-comma-join.sqllogic +35 -0
  165. package/test/logic/11.3-index-nested-loop-join.sqllogic +305 -0
  166. package/test/logic/11.3-mismatched-collation-join.sqllogic +74 -0
  167. package/test/logic/11.4-hash-join-side-swap.sqllogic +118 -0
  168. package/test/logic/110-scan-emitter-mutation-kills.sqllogic +121 -0
  169. package/test/logic/110.1-scan-emitter-index-scan-kills.sqllogic +47 -0
  170. package/test/logic/12-empty-primary-key.sqllogic +124 -0
  171. package/test/logic/12-join_padding_order.sqllogic +58 -0
  172. package/test/logic/12.1-orderby-index-consumption.sqllogic +40 -0
  173. package/test/logic/13-cte.sqllogic +137 -0
  174. package/test/logic/13.1-cte-multiple-recursive.sqllogic +104 -0
  175. package/test/logic/13.10-cte-qualified-name.sqllogic +136 -0
  176. package/test/logic/13.11-unreferenced-dml-cte.sqllogic +414 -0
  177. package/test/logic/13.12-nested-dml-cte-rejected.sqllogic +280 -0
  178. package/test/logic/13.2-cte-bind-params.sqllogic +98 -0
  179. package/test/logic/13.3-cte-edge-cases.sqllogic +120 -0
  180. package/test/logic/13.4-cte-extras.sqllogic +98 -0
  181. package/test/logic/13.5-cte-join-order.sqllogic +166 -0
  182. package/test/logic/13.6-cte-dml-runs-once.sqllogic +318 -0
  183. package/test/logic/13.7-cte-sibling-visibility.sqllogic +227 -0
  184. package/test/logic/13.8-insert-with-clause-visibility.sqllogic +254 -0
  185. package/test/logic/13.9-schema-authored-cte-isolation.sqllogic +328 -0
  186. package/test/logic/13.9.1-schema-authored-schema-path-isolation.sqllogic +408 -0
  187. package/test/logic/14-utilities.sqllogic +168 -0
  188. package/test/logic/15-timespan.sqllogic +279 -0
  189. package/test/logic/15.1-semantic-ordering.sqllogic +960 -0
  190. package/test/logic/15.1.1-json-check-coercion.sqllogic +178 -0
  191. package/test/logic/15.1.2-semantic-ordering-index.sqllogic +41 -0
  192. package/test/logic/15.1.3-declared-form-write-contract.sqllogic +519 -0
  193. package/test/logic/16-epoch.sqllogic +187 -0
  194. package/test/logic/17-weekday-modifier.sqllogic +78 -0
  195. package/test/logic/18-json-string-escapes.sqllogic +86 -0
  196. package/test/logic/18-strftime-extended-formats.sqllogic +68 -0
  197. package/test/logic/20-empty-single-row.sqllogic +261 -0
  198. package/test/logic/21-null-edge-cases.sqllogic +227 -0
  199. package/test/logic/21.1-where-null-comparisons.sqllogic +151 -0
  200. package/test/logic/21.1.1-where-null-comparisons-secondary-index.sqllogic +35 -0
  201. package/test/logic/21.2-between-edges.sqllogic +157 -0
  202. package/test/logic/22-boundary-values.sqllogic +175 -0
  203. package/test/logic/23-self-joins-duplicates.sqllogic +74 -0
  204. package/test/logic/24-builtin-branches.sqllogic +611 -0
  205. package/test/logic/24.1-substr-extras.sqllogic +75 -0
  206. package/test/logic/24.2-random-extras.sqllogic +39 -0
  207. package/test/logic/25-aggregate-edge-cases.sqllogic +289 -0
  208. package/test/logic/25.1-nested-aggregates.sqllogic +74 -0
  209. package/test/logic/25.2-having-edge-cases.sqllogic +318 -0
  210. package/test/logic/25.3-aggregate-isnull-empty.sqllogic +16 -0
  211. package/test/logic/25.4-groupby-fd-constant-empty.sqllogic +55 -0
  212. package/test/logic/25.5-ungrouped-aggregate-column-free-select-item.sqllogic +196 -0
  213. package/test/logic/26-join-edge-cases.sqllogic +333 -0
  214. package/test/logic/26.1-left-join-isnull-on-notnull.sqllogic +26 -0
  215. package/test/logic/26.2-left-join-on-vs-where.sqllogic +67 -0
  216. package/test/logic/26.3-join-on-constants.sqllogic +61 -0
  217. package/test/logic/26.4-join-on-is-null-nullable.sqllogic +44 -0
  218. package/test/logic/27-window-edge-cases.sqllogic +206 -0
  219. package/test/logic/27.1-window-groups-frame.sqllogic +13 -0
  220. package/test/logic/27.2-window-exclude.sqllogic +13 -0
  221. package/test/logic/27.3-window-json-aggregation.sqllogic +66 -0
  222. package/test/logic/28-set-ops-sort-edge-cases.sqllogic +444 -0
  223. package/test/logic/28.1-compound-limit-offset.sqllogic +143 -0
  224. package/test/logic/28.2-orderby-expression-extras.sqllogic +698 -0
  225. package/test/logic/28.2-set-op-branch-types.sqllogic +217 -0
  226. package/test/logic/29-constraint-edge-cases.sqllogic +442 -0
  227. package/test/logic/29.1-column-level-conflict-clause.sqllogic +171 -0
  228. package/test/logic/29.2-table-level-pk-conflict-clause.sqllogic +113 -0
  229. package/test/logic/40-constraints.sqllogic +418 -0
  230. package/test/logic/40.1-pk-desc-direction.sqllogic +76 -0
  231. package/test/logic/40.2-check-extras.sqllogic +683 -0
  232. package/test/logic/41-alter-table.sqllogic +191 -0
  233. package/test/logic/41-fk-cascade-conflict-and-self-ref.sqllogic +263 -0
  234. package/test/logic/41-fk-cross-schema.sqllogic +155 -0
  235. package/test/logic/41-fk-extended-targets.sqllogic +173 -0
  236. package/test/logic/41-foreign-keys.sqllogic +1001 -0
  237. package/test/logic/41-generated-column-errors.sqllogic +225 -0
  238. package/test/logic/41-generated-column-extras.sqllogic +598 -0
  239. package/test/logic/41-generated-column-scope.sqllogic +329 -0
  240. package/test/logic/41-generated-columns.sqllogic +361 -0
  241. package/test/logic/41.1-alter-pk.sqllogic +230 -0
  242. package/test/logic/41.1-fk-collation-conflict.sqllogic +277 -0
  243. package/test/logic/41.10-alter-drop-column-foreign-key.sqllogic +274 -0
  244. package/test/logic/41.10.1-alter-drop-column-unique-index.sqllogic +169 -0
  245. package/test/logic/41.10.2-alter-drop-column-check-and-assertion.sqllogic +1616 -0
  246. package/test/logic/41.10.3-alter-drop-column-referencing-fk.sqllogic +292 -0
  247. package/test/logic/41.10.4-drop-object-expression-dependents.sqllogic +602 -0
  248. package/test/logic/41.11-deferred-fk-with-rename.sqllogic +232 -0
  249. package/test/logic/41.12-alter-default-coercion.sqllogic +200 -0
  250. package/test/logic/41.13-alter-add-column-generated-backfill.sqllogic +566 -0
  251. package/test/logic/41.14-alter-add-column-subquery-backfill.sqllogic +129 -0
  252. package/test/logic/41.15-alter-column-default-type-check.sqllogic +178 -0
  253. package/test/logic/41.16-fk-unenforceable.sqllogic +364 -0
  254. package/test/logic/41.2-alter-column.sqllogic +382 -0
  255. package/test/logic/41.2.1-alter-column-retype-deleted-row-memory.sqllogic +32 -0
  256. package/test/logic/41.2.2-alter-column-retype-index-rebuild.sqllogic +77 -0
  257. package/test/logic/41.2.3-alter-column-set-not-null-pk-backfill.sqllogic +310 -0
  258. package/test/logic/41.2.3.1-alter-column-set-not-null-pk-backfill-secondary-index.sqllogic +37 -0
  259. package/test/logic/41.3-alter-add-column-unique.sqllogic +184 -0
  260. package/test/logic/41.3-alter-rename-propagation.sqllogic +2352 -0
  261. package/test/logic/41.3.1-alter-rename-index-propagation.sqllogic +94 -0
  262. package/test/logic/41.4-alter-add-column-constraints.sqllogic +855 -0
  263. package/test/logic/41.5-alter-misc.sqllogic +48 -0
  264. package/test/logic/41.5-cross-schema-foreign-keys.sqllogic +253 -0
  265. package/test/logic/41.6-alter-drop-rename-constraint.sqllogic +354 -0
  266. package/test/logic/41.6.1-alter-drop-constraint-index-derived.sqllogic +22 -0
  267. package/test/logic/41.7-alter-column-collate.sqllogic +105 -0
  268. package/test/logic/41.7.1-alter-column-collate-unique.sqllogic +45 -0
  269. package/test/logic/41.7.2-alter-column-collate-unique-store.sqllogic +208 -0
  270. package/test/logic/41.7.2.1-alter-column-collate-unique-index-store.sqllogic +114 -0
  271. package/test/logic/41.7.3-alter-column-retype-unique.sqllogic +293 -0
  272. package/test/logic/41.7.3.1-alter-column-retype-staged-rows-memory.sqllogic +41 -0
  273. package/test/logic/41.7.3.2-alter-column-retype-unique-index.sqllogic +72 -0
  274. package/test/logic/41.7.4-alter-column-retype-semantic-memory.sqllogic +445 -0
  275. package/test/logic/41.7.4.1-alter-column-retype-semantic-index-memory.sqllogic +91 -0
  276. package/test/logic/41.7.5-alter-column-collate-pk-staged-delete-memory.sqllogic +106 -0
  277. package/test/logic/41.8-alter-add-constraint-unique-fk.sqllogic +275 -0
  278. package/test/logic/41.8-alter-savepoint-staged-rows.sqllogic +443 -0
  279. package/test/logic/41.8.1-alter-rename-savepoint-staged-rows.sqllogic +408 -0
  280. package/test/logic/41.9-alter-constraint-body-change.sqllogic +180 -0
  281. package/test/logic/41.9-fk-restrict-batched.sqllogic +290 -0
  282. package/test/logic/42-committed-snapshot.sqllogic +254 -0
  283. package/test/logic/42-returning.sqllogic +159 -0
  284. package/test/logic/42.1-returning-extras.sqllogic +232 -0
  285. package/test/logic/42.2-returning-stored-row.sqllogic +165 -0
  286. package/test/logic/43-default-nullability.sqllogic +131 -0
  287. package/test/logic/43-transition-constraints.sqllogic +341 -0
  288. package/test/logic/43.1-default-collation.sqllogic +140 -0
  289. package/test/logic/43.1-notnull-or-conflict.sqllogic +79 -0
  290. package/test/logic/43.2-deferred-check-new-on-delete.sqllogic +95 -0
  291. package/test/logic/43.3-nullable-primary-key.sqllogic +587 -0
  292. package/test/logic/44-determinism-validation.sqllogic +164 -0
  293. package/test/logic/44-orthogonality.sqllogic +146 -0
  294. package/test/logic/44.1-nondeterministic-schema.sqllogic +316 -0
  295. package/test/logic/45-udf-determinism.sqllogic +39 -0
  296. package/test/logic/46-mutation-context.sqllogic +595 -0
  297. package/test/logic/47-upsert.sqllogic +255 -0
  298. package/test/logic/47.1-upsert-conflict-targets.sqllogic +169 -0
  299. package/test/logic/47.2-replace-and-or-clauses.sqllogic +164 -0
  300. package/test/logic/47.2.1-pk-replace-secondary-unique.sqllogic +374 -0
  301. package/test/logic/47.3-engine-or-fail.sqllogic +122 -0
  302. package/test/logic/47.3-upsert-conflict-target-collation.sqllogic +139 -0
  303. package/test/logic/47.3.1-upsert-conflict-index-derived-collation.sqllogic +25 -0
  304. package/test/logic/47.4-upsert-conflict-target-affinity.sqllogic +59 -0
  305. package/test/logic/47.5-upsert-do-update-constraints.sqllogic +440 -0
  306. package/test/logic/47.6-upsert-do-update-decomposed.sqllogic +100 -0
  307. package/test/logic/49-reference-graph.sqllogic +84 -0
  308. package/test/logic/50-declarative-schema.sqllogic +2550 -0
  309. package/test/logic/50-metadata-tags.sqllogic +1033 -0
  310. package/test/logic/50.0.1-metadata-tags-index.sqllogic +141 -0
  311. package/test/logic/50.1-declare-schema-pk.sqllogic +150 -0
  312. package/test/logic/50.2-declare-schema-renames.sqllogic +949 -0
  313. package/test/logic/50.2.1-declare-schema-index-renames.sqllogic +173 -0
  314. package/test/logic/50.3-declare-schema-duplicate-names.sqllogic +280 -0
  315. package/test/logic/50.4-declare-schema-apply-restore.sqllogic +192 -0
  316. package/test/logic/51-lens-foundation.sqllogic +147 -0
  317. package/test/logic/51-materialized-views.sqllogic +376 -0
  318. package/test/logic/51.5-materialized-views-coarsened-key.sqllogic +198 -0
  319. package/test/logic/51.7-maintained-table-attach-detach.sqllogic +468 -0
  320. package/test/logic/51.8-maintained-table-declared-constraints.sqllogic +440 -0
  321. package/test/logic/51.85-maintained-table-parent-fk.sqllogic +103 -0
  322. package/test/logic/51.9-maintained-table-secondary-unique.sqllogic +237 -0
  323. package/test/logic/51.9.1-maintained-table-partial-unique.sqllogic +36 -0
  324. package/test/logic/52-lens-overrides.sqllogic +566 -0
  325. package/test/logic/53-materialized-views-rowtime.sqllogic +1601 -0
  326. package/test/logic/53-reserved-tags.sqllogic +252 -0
  327. package/test/logic/53.1-materialized-view-write-through.sqllogic +329 -0
  328. package/test/logic/53.2-materialized-view-rename-propagation.sqllogic +483 -0
  329. package/test/logic/53.3-materialized-view-constraint-only-ddl.sqllogic +409 -0
  330. package/test/logic/53.3.1-materialized-view-index-ddl-irrelevance.sqllogic +29 -0
  331. package/test/logic/53.4-materialized-view-structural-alter-restore.sqllogic +436 -0
  332. package/test/logic/54-covering-mv-enforcement.sqllogic +314 -0
  333. package/test/logic/54.1-covering-mv-partial-enforcement.sqllogic +34 -0
  334. package/test/logic/55-internal-eviction-reporting.sqllogic +89 -0
  335. package/test/logic/55-lens-prover.sqllogic +202 -0
  336. package/test/logic/55.1-eviction-restrict-fk.sqllogic +148 -0
  337. package/test/logic/55.5-lens-authored-inverse.sqllogic +1468 -0
  338. package/test/logic/80-grow-retrieve-pass.sqllogic +79 -0
  339. package/test/logic/81-quickpick.sqllogic +24 -0
  340. package/test/logic/82-bloom-join.sqllogic +185 -0
  341. package/test/logic/83-merge-join.sqllogic +280 -0
  342. package/test/logic/84-asof-scan.sqllogic +238 -0
  343. package/test/logic/84-key-cardinality.sqllogic +50 -0
  344. package/test/logic/85-relational-const-folding.sqllogic +51 -0
  345. package/test/logic/86-scalar-cse.sqllogic +42 -0
  346. package/test/logic/90-error_paths.sqllogic +114 -0
  347. package/test/logic/90.1-parse-errors.sqllogic +77 -0
  348. package/test/logic/90.2-alter-table-errors.sqllogic +53 -0
  349. package/test/logic/90.2.1-alter-extra-errors.sqllogic +51 -0
  350. package/test/logic/90.3-expression-errors.sqllogic +43 -0
  351. package/test/logic/90.4-dml-errors.sqllogic +47 -0
  352. package/test/logic/90.5-unsupported-join-types.sqllogic +37 -0
  353. package/test/logic/90.5.1-right-full-join-read.sqllogic +157 -0
  354. package/test/logic/90.6-select-error-paths.sqllogic +57 -0
  355. package/test/logic/91-merge-join-edge-cases.sqllogic +159 -0
  356. package/test/logic/92-hash-aggregate-edge-cases.sqllogic +139 -0
  357. package/test/logic/93-ddl-view-edge-cases.sqllogic +104 -0
  358. package/test/logic/93.1-view-error-paths.sqllogic +74 -0
  359. package/test/logic/93.2-view-mutation-pending.sqllogic +108 -0
  360. package/test/logic/93.3-view-mutation-or-clause.sqllogic +60 -0
  361. package/test/logic/93.4-view-mutation.sqllogic +4881 -0
  362. package/test/logic/93.4.1-view-mutation-partial-unique-cardinality.sqllogic +31 -0
  363. package/test/logic/93.5-authored-inverse.sqllogic +415 -0
  364. package/test/logic/93.6-set-op-flagless-write.sqllogic +862 -0
  365. package/test/logic/94-tvf-edge-cases.sqllogic +58 -0
  366. package/test/logic/94.1-limit-offset-edge-cases.sqllogic +109 -0
  367. package/test/logic/94.2-limit-offset-extras.sqllogic +98 -0
  368. package/test/logic/95-assertions.sqllogic +1417 -0
  369. package/test/logic/96-subquery-edge-cases.sqllogic +276 -0
  370. package/test/logic/97-json-function-edge-cases.sqllogic +633 -0
  371. package/test/logic/97.1-json-blob-and-special-values.sqllogic +92 -0
  372. package/test/logic/98-temporal-edge-cases.sqllogic +515 -0
  373. package/test/logic/99-conversion-edge-cases.sqllogic +325 -0
  374. package/test/logic/99.0.1-schema-index-listing.sqllogic +21 -0
  375. package/test/logic/99.1-cast-syntax-extras.sqllogic +167 -0
  376. package/test/logic/drop-unique-index.sqllogic +88 -0
  377. package/test/logic/pushdown-test.sqllogic +36 -0
@@ -0,0 +1,137 @@
1
+ -- cte.sqllogic - Testing Common Table Expressions (WITH clause)
2
+
3
+ -- Simple non-recursive CTE
4
+ CREATE TABLE base_t (id INTEGER PRIMARY KEY, name TEXT);
5
+ INSERT INTO base_t VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');
6
+
7
+ WITH name_cte AS (
8
+ SELECT name FROM base_t WHERE id > 1
9
+ )
10
+ SELECT * FROM name_cte ORDER BY name;
11
+ → [{"name":"Bob"},{"name":"Charlie"}]
12
+
13
+ -- Multiple CTEs
14
+ WITH
15
+ cte1 AS (SELECT id, name FROM base_t WHERE id = 1),
16
+ cte2 AS (SELECT id, name FROM base_t WHERE id = 2)
17
+ SELECT * FROM cte1 UNION ALL SELECT * FROM cte2 ORDER BY id;
18
+ → [{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]
19
+
20
+ -- CTE used in INSERT
21
+ CREATE TABLE target_t (id INTEGER, name_upper TEXT);
22
+ WITH source_cte AS (
23
+ SELECT id, upper(name) as upper_name FROM base_t WHERE id = 3
24
+ )
25
+ INSERT INTO target_t (id, name_upper) SELECT id, upper_name FROM source_cte;
26
+ SELECT * FROM target_t;
27
+ → [{"id":3,"name_upper":"CHARLIE"}]
28
+ DROP TABLE target_t;
29
+
30
+ -- Basic Recursive CTE (Counting)
31
+ WITH RECURSIVE counter(n) AS (
32
+ SELECT 1
33
+ UNION ALL
34
+ SELECT n + 1 FROM counter WHERE n < 5
35
+ )
36
+ SELECT n FROM counter ORDER BY n;
37
+ → [{"n":1},{"n":2},{"n":3},{"n":4},{"n":5}]
38
+
39
+ -- Recursive CTE with base table (e.g., simple hierarchy/path)
40
+ CREATE TABLE hierarchy (id INTEGER PRIMARY KEY, parent_id INTEGER NULL, name TEXT);
41
+ INSERT INTO hierarchy VALUES (1, null, 'Root'), (2, 1, 'Child A'), (3, 1, 'Child B'), (4, 2, 'Grandchild A1');
42
+
43
+ WITH RECURSIVE path_cte(id, name, level) AS (
44
+ SELECT id, name, 0 FROM hierarchy WHERE parent_id IS NULL
45
+ UNION ALL
46
+ SELECT h.id, p.name || ' -> ' || h.name, p.level + 1
47
+ FROM hierarchy h JOIN path_cte p ON h.parent_id = p.id
48
+ )
49
+ SELECT name, level FROM path_cte ORDER BY level, name;
50
+ → [{"name":"Root","level":0},{"name":"Root -> Child A","level":1},{"name":"Root -> Child B","level":1},{"name":"Root -> Child A -> Grandchild A1","level":2}]
51
+
52
+ -- Recursive CTE with aliased table in JOIN and qualified SELECT
53
+ -- Bug reproduction: "Table 'E' not found in FROM clause for qualified SELECT *"
54
+ CREATE TABLE Entity (id INTEGER PRIMARY KEY, component_id INTEGER NULL, type TEXT);
55
+ INSERT INTO Entity VALUES (1, null, 'c'), (2, 1, 'c'), (3, 1, 'c'), (4, 2, 'c'), (5, 3, 'x');
56
+
57
+ -- Test 1: Qualified column reference E.id in recursive part
58
+ WITH RECURSIVE descendants(id) AS (
59
+ SELECT 1
60
+ UNION ALL
61
+ SELECT E.id FROM Entity E
62
+ JOIN descendants D ON E.component_id = D.id
63
+ WHERE E.type = 'c'
64
+ )
65
+ SELECT id FROM descendants ORDER BY id;
66
+ → [{"id":1},{"id":2},{"id":3},{"id":4}]
67
+
68
+ -- Test 2: SELECT * from recursive CTE with qualified column in recursive part
69
+ WITH RECURSIVE descendants(id) AS (
70
+ SELECT 1
71
+ UNION ALL
72
+ SELECT E.id FROM Entity E
73
+ JOIN descendants D ON E.component_id = D.id
74
+ WHERE E.type = 'c'
75
+ )
76
+ SELECT * FROM descendants ORDER BY id;
77
+ → [{"id":1},{"id":2},{"id":3},{"id":4}]
78
+
79
+ -- Test 3: E.* in recursive part (qualified SELECT *)
80
+ WITH RECURSIVE descendants(id, component_id, type) AS (
81
+ SELECT id, component_id, type FROM Entity WHERE id = 1
82
+ UNION ALL
83
+ SELECT E.* FROM Entity E
84
+ JOIN descendants D ON E.component_id = D.id
85
+ WHERE E.type = 'c'
86
+ )
87
+ SELECT id FROM descendants ORDER BY id;
88
+ → [{"id":1},{"id":2},{"id":3},{"id":4}]
89
+
90
+ -- Test 4: D.* (CTE alias) in recursive part
91
+ WITH RECURSIVE descendants(id) AS (
92
+ SELECT 1
93
+ UNION ALL
94
+ SELECT E.id FROM Entity E
95
+ JOIN descendants D ON E.component_id = D.id
96
+ WHERE E.type = 'c'
97
+ )
98
+ SELECT D.* FROM descendants D ORDER BY id;
99
+ → [{"id":1},{"id":2},{"id":3},{"id":4}]
100
+
101
+ -- Test 5: Internal recursive CTE reference with alias and qualified SELECT *
102
+ -- The recursive reference "descendants D" inside the recursive part
103
+ WITH RECURSIVE descendants(id, component_id, type) AS (
104
+ SELECT id, component_id, type FROM Entity WHERE id = 1
105
+ UNION ALL
106
+ SELECT E.id, E.component_id, E.type FROM Entity E
107
+ JOIN descendants D ON E.component_id = D.id
108
+ WHERE E.type = 'c'
109
+ )
110
+ SELECT D.* FROM descendants D ORDER BY id;
111
+ → [{"id":1,"component_id":null,"type":"c"},{"id":2,"component_id":1,"type":"c"},{"id":3,"component_id":1,"type":"c"},{"id":4,"component_id":2,"type":"c"}]
112
+
113
+ DROP TABLE Entity;
114
+
115
+ -- Non-recursive CTE referencing an earlier CTE in the same WITH clause
116
+ WITH
117
+ cte1 AS (SELECT id, name FROM base_t),
118
+ cte2 AS (SELECT id, name FROM cte1 WHERE id > 1)
119
+ SELECT * FROM cte2 ORDER BY id;
120
+ → [{"id":2,"name":"Bob"},{"id":3,"name":"Charlie"}]
121
+
122
+ -- Non-recursive CTE chain: cte3 references cte2, which references cte1
123
+ WITH
124
+ cte1 AS (SELECT id, name FROM base_t),
125
+ cte2 AS (SELECT id, name FROM cte1 WHERE id <= 2),
126
+ cte3 AS (SELECT name FROM cte2 WHERE id = 1)
127
+ SELECT * FROM cte3;
128
+ → [{"name":"Alice"}]
129
+
130
+ -- Non-recursive CTE with explicit column names that differ from the source query
131
+ -- Verifies that column types are mapped by position, not by name
132
+ WITH cte(x, y) AS (SELECT 1 AS a, 'hello' AS b)
133
+ SELECT typeof(x), typeof(y) FROM cte;
134
+ → [{"typeof(x)":"integer","typeof(y)":"text"}]
135
+
136
+ DROP TABLE base_t;
137
+ DROP TABLE hierarchy;
@@ -0,0 +1,104 @@
1
+ -- Testing multiple CTEs in a WITH RECURSIVE clause where later CTEs reference earlier ones
2
+
3
+ CREATE TABLE Entity (
4
+ id INTEGER PRIMARY KEY,
5
+ component_id INTEGER NULL,
6
+ p_x REAL, p_y REAL, p_z REAL,
7
+ r_x REAL, r_y REAL, r_z REAL,
8
+ s_x REAL, s_y REAL, s_z REAL
9
+ );
10
+
11
+ INSERT INTO Entity VALUES
12
+ (1, null, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0),
13
+ (2, 1, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0),
14
+ (3, 1, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0),
15
+ (4, 2, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5);
16
+
17
+ -- Test case 1: Simple multiple CTEs in WITH RECURSIVE, second references first
18
+ -- This tests that entity_tree is in scope when building ancestor_walk
19
+ WITH RECURSIVE
20
+ entity_tree(id) AS (
21
+ SELECT id FROM Entity WHERE id = 1
22
+ UNION ALL
23
+ SELECT E.id FROM Entity E JOIN entity_tree T ON E.component_id = T.id
24
+ ),
25
+ ancestor_walk(entity_id, ancestor_id, depth) AS (
26
+ SELECT E.id, E.component_id, 0
27
+ FROM Entity E
28
+ WHERE E.id IN (SELECT id FROM entity_tree) AND E.component_id IS NOT NULL
29
+ UNION ALL
30
+ SELECT W.entity_id, P.component_id, W.depth + 1
31
+ FROM ancestor_walk W
32
+ JOIN Entity P ON W.ancestor_id = P.id
33
+ WHERE P.component_id IS NOT NULL
34
+ )
35
+ SELECT entity_id, ancestor_id, depth
36
+ FROM ancestor_walk
37
+ ORDER BY entity_id, depth DESC;
38
+ → [{"entity_id":2,"ancestor_id":1,"depth":0},{"entity_id":3,"ancestor_id":1,"depth":0},{"entity_id":4,"ancestor_id":1,"depth":1},{"entity_id":4,"ancestor_id":2,"depth":0}]
39
+
40
+ -- Test case 2: Full query from the bug report (with joins to get entity attributes)
41
+ WITH RECURSIVE
42
+ entity_tree(id) AS (
43
+ SELECT id FROM Entity WHERE id = 1
44
+ UNION ALL
45
+ SELECT E.id FROM Entity E JOIN entity_tree T ON E.component_id = T.id
46
+ ),
47
+ ancestor_walk(entity_id, ancestor_id, depth) AS (
48
+ SELECT E.id, E.component_id, 0
49
+ FROM Entity E
50
+ WHERE E.id IN (SELECT id FROM entity_tree) AND E.component_id IS NOT NULL
51
+ UNION ALL
52
+ SELECT W.entity_id, P.component_id, W.depth + 1
53
+ FROM ancestor_walk W
54
+ JOIN Entity P ON W.ancestor_id = P.id
55
+ WHERE P.component_id IS NOT NULL
56
+ )
57
+ SELECT
58
+ W.entity_id,
59
+ W.ancestor_id,
60
+ W.depth as ancestor_depth,
61
+ A.p_x, A.p_y, A.p_z,
62
+ A.r_x, A.r_y, A.r_z,
63
+ A.s_x, A.s_y, A.s_z
64
+ FROM ancestor_walk W
65
+ JOIN Entity A ON W.ancestor_id = A.id
66
+ ORDER BY W.entity_id, W.depth DESC;
67
+ → [{"entity_id":2,"ancestor_id":1,"ancestor_depth":0,"p_x":0.0,"p_y":0.0,"p_z":0.0,"r_x":0.0,"r_y":0.0,"r_z":0.0,"s_x":1.0,"s_y":1.0,"s_z":1.0},{"entity_id":3,"ancestor_id":1,"ancestor_depth":0,"p_x":0.0,"p_y":0.0,"p_z":0.0,"r_x":0.0,"r_y":0.0,"r_z":0.0,"s_x":1.0,"s_y":1.0,"s_z":1.0},{"entity_id":4,"ancestor_id":1,"ancestor_depth":1,"p_x":0.0,"p_y":0.0,"p_z":0.0,"r_x":0.0,"r_y":0.0,"r_z":0.0,"s_x":1.0,"s_y":1.0,"s_z":1.0},{"entity_id":4,"ancestor_id":2,"ancestor_depth":0,"p_x":1.0,"p_y":0.0,"p_z":0.0,"r_x":0.0,"r_y":0.0,"r_z":0.0,"s_x":1.0,"s_y":1.0,"s_z":1.0}]
68
+
69
+ -- Test case 3: Non-recursive CTE followed by recursive CTE referencing it
70
+ WITH RECURSIVE
71
+ filtered_entities(id) AS (
72
+ SELECT id FROM Entity WHERE p_x >= 0.0
73
+ ),
74
+ entity_tree(id) AS (
75
+ SELECT id FROM filtered_entities WHERE id = 1
76
+ UNION ALL
77
+ SELECT E.id FROM Entity E JOIN entity_tree T ON E.component_id = T.id
78
+ )
79
+ SELECT id FROM entity_tree ORDER BY id;
80
+ → [{"id":1},{"id":2},{"id":3},{"id":4}]
81
+
82
+ -- Test case 4: Three CTEs where third references first two
83
+ -- Note: cte3 uses UNION (not UNION ALL) to avoid being treated as recursive
84
+ WITH RECURSIVE
85
+ cte1(id) AS (
86
+ SELECT 1
87
+ UNION ALL
88
+ SELECT id + 1 FROM cte1 WHERE id < 3
89
+ ),
90
+ cte2(id) AS (
91
+ SELECT 10
92
+ UNION ALL
93
+ SELECT id + 1 FROM cte2 WHERE id < 12
94
+ ),
95
+ cte3(id) AS (
96
+ SELECT id FROM cte1
97
+ UNION
98
+ SELECT id FROM cte2
99
+ )
100
+ SELECT id FROM cte3 ORDER BY id;
101
+ → [{"id":1},{"id":2},{"id":3},{"id":10},{"id":11},{"id":12}]
102
+
103
+ DROP TABLE Entity;
104
+
@@ -0,0 +1,136 @@
1
+ -- 13.10-cte-qualified-name.sqllogic - a schema-qualified FROM name never binds a CTE
2
+ --
3
+ -- A common table expression lives in no schema, so writing the schema in front of a name
4
+ -- (`main.c`) can only mean the real schema object. `buildFrom` (planner/building/select.ts)
5
+ -- used to look its `cteNodes` map up on the BARE name and ignore `table.schema`, so
6
+ -- `with c as (…) select … from main.c` silently read the CTE — wrong rows, no error.
7
+ --
8
+ -- The write path was already correct (`resolveCteTarget` returns undefined when
9
+ -- `table.schema` is set), as are the lens compiler and the rename rewriter. This file pins
10
+ -- both halves: a qualifier always reaches the schema object, and a BARE name still shadows
11
+ -- to the CTE exactly as before.
12
+ --
13
+ -- See docs/vu-operators.md § Common Table Expressions and the CTE-name DML target.
14
+
15
+ -- `c` is a real table with 3 rows; `p` has 1 row, so a CTE `c` over `p` has 1 row —
16
+ -- the two disagree, so the wrong binding is always observable.
17
+ create table c (k integer primary key);
18
+ insert into c values (1), (2), (3);
19
+ create table p (id integer primary key);
20
+ insert into p values (10);
21
+ -- run
22
+
23
+ -- ===== Qualified name reads the real table =====
24
+
25
+ with c as (select id as k from p) select count(*) as n from main.c;
26
+ → [{"n":3}]
27
+
28
+ -- The values come from the real table too, not just the count.
29
+ with c as (select id as k from p) select k from main.c order by k;
30
+ → [{"k":1},{"k":2},{"k":3}]
31
+
32
+ -- ===== Bare name still reads the CTE (unchanged) =====
33
+
34
+ with c as (select id as k from p) select count(*) as n from c;
35
+ → [{"n":1}]
36
+
37
+ with c as (select id as k from p) select k from c order by k;
38
+ → [{"k":10}]
39
+
40
+ -- ===== Alias on the qualified name still works =====
41
+
42
+ with c as (select id as k from p) select count(*) as n from main.c as x;
43
+ → [{"n":3}]
44
+
45
+ with c as (select id as k from p) select x.k as k from main.c as x order by x.k;
46
+ → [{"k":1},{"k":2},{"k":3}]
47
+
48
+ -- ===== Both bindings in ONE statement =====
49
+ -- The join proves the two names resolve independently: 3 real rows × 1 CTE row.
50
+
51
+ with c as (select id as k from p)
52
+ select count(*) as n from main.c as real_c cross join c as cte_c;
53
+ → [{"n":3}]
54
+
55
+ with c as (select id as k from p)
56
+ select real_c.k as rk, cte_c.k as ck from main.c as real_c cross join c as cte_c order by rk;
57
+ → [{"rk":1,"ck":10},{"rk":2,"ck":10},{"rk":3,"ck":10}]
58
+
59
+ -- ===== Qualified name inside a subquery =====
60
+
61
+ with c as (select id as k from p)
62
+ select (select count(*) from main.c) as qualified, (select count(*) from c) as bare;
63
+ → [{"qualified":3,"bare":1}]
64
+
65
+ -- ===== Recursion is unaffected — the self-reference is BARE =====
66
+
67
+ with recursive r(n) as (
68
+ select 1
69
+ union all
70
+ select n + 1 from r where n < 3
71
+ )
72
+ select count(*) as n from r;
73
+ → [{"n":3}]
74
+
75
+ -- ...and a qualified reference to a recursive CTE's name is still a schema lookup, which
76
+ -- finds nothing.
77
+ with recursive r(n) as (
78
+ select 1
79
+ union all
80
+ select n + 1 from r where n < 3
81
+ )
82
+ select count(*) as n from main.r;
83
+ -- error: Table not found: main.r
84
+
85
+ -- ...and the same inside the recursive body: the working-table binding is reached by the
86
+ -- BARE self-reference only, so a qualified self-reference is an ordinary schema lookup.
87
+ with recursive r(n) as (
88
+ select 1
89
+ union all
90
+ select n + 1 from main.r where n < 3
91
+ )
92
+ select count(*) as n from r;
93
+ -- error: Table not found: main.r
94
+
95
+ -- ===== A qualified name reaches a VIEW too, not only a base table =====
96
+ -- The fall-through arm resolves view / maintained table / base table alike; the CTE used to
97
+ -- win over all three.
98
+
99
+ create view cv as select k from c;
100
+ -- run
101
+
102
+ with cv as (select id as k from p) select count(*) as n from main.cv;
103
+ → [{"n":3}]
104
+
105
+ with cv as (select id as k from p) select count(*) as n from cv;
106
+ → [{"n":1}]
107
+
108
+ drop view cv;
109
+ -- run
110
+
111
+ -- ===== No same-named schema object: ordinary table-not-found, not a silent CTE bind =====
112
+ -- The qualified miss reports `Table not found: <schema>.<name>` (resolveTableSchema's
113
+ -- explicit-schema arm in planner/building/schema-resolution.ts); the search-path wording
114
+ -- `not found in schema path: …` is the UNqualified miss.
115
+
116
+ with nope as (select id as k from p) select k from main.nope;
117
+ -- error: Table not found: main.nope
118
+
119
+ -- ===== Writes are unchanged — already correct before this fix =====
120
+
121
+ with c as (select id as k from p) insert into main.c values (99);
122
+
123
+ select k from c order by k;
124
+ → [{"k":1},{"k":2},{"k":3},{"k":99}]
125
+
126
+ -- No `with` clause here, so `c` is the plain real table — restore the 3-row state.
127
+ delete from c where k = 99;
128
+ -- run
129
+
130
+ select count(*) as n from c;
131
+ → [{"n":3}]
132
+
133
+ -- Cleanup
134
+ drop table p;
135
+ drop table c;
136
+ -- run