@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,382 @@
1
+ -- ALTER TABLE ALTER COLUMN: per-attribute changes
2
+ -- Covers SET/DROP NOT NULL, SET DATA TYPE, SET/DROP DEFAULT.
3
+
4
+ -- ===================================
5
+ -- 1. DROP NOT NULL (relax) then insert null
6
+ -- ===================================
7
+
8
+ create table t_notnull (id integer primary key, c integer not null);
9
+ insert into t_notnull values (1, 10);
10
+ alter table t_notnull alter column c drop not null;
11
+ insert into t_notnull values (2, null);
12
+
13
+ select * from t_notnull order by id;
14
+ → [{"id": 1, "c": 10}, {"id": 2, "c": null}]
15
+
16
+ drop table t_notnull;
17
+
18
+ -- ===================================
19
+ -- 2. SET NOT NULL (tighten) — fails on existing NULL
20
+ -- ===================================
21
+
22
+ create table t_tighten (id integer primary key, c integer null);
23
+ insert into t_tighten values (1, 10);
24
+ insert into t_tighten values (2, null);
25
+ -- run
26
+
27
+ alter table t_tighten alter column c set not null;
28
+ -- error: contains NULL values
29
+
30
+ drop table t_tighten;
31
+
32
+ -- ===================================
33
+ -- 3. SET NOT NULL succeeds when no NULLs present, rejects null insert
34
+ -- ===================================
35
+
36
+ create table t_ok (id integer primary key, c integer null);
37
+ insert into t_ok values (1, 10);
38
+ insert into t_ok values (2, 20);
39
+ alter table t_ok alter column c set not null;
40
+ -- run
41
+
42
+ insert into t_ok values (3, null);
43
+ -- error: NOT NULL
44
+
45
+ -- Confirm pre-existing rows unharmed
46
+ select * from t_ok order by id;
47
+ → [{"id": 1, "c": 10}, {"id": 2, "c": 20}]
48
+
49
+ drop table t_ok;
50
+
51
+ -- ===================================
52
+ -- 4. SET DEFAULT, then DROP DEFAULT
53
+ -- ===================================
54
+
55
+ create table t_def (id integer primary key, c integer null);
56
+ insert into t_def values (1, 10);
57
+ alter table t_def alter column c set default 99;
58
+ insert into t_def (id) values (2);
59
+
60
+ select * from t_def order by id;
61
+ → [{"id": 1, "c": 10}, {"id": 2, "c": 99}]
62
+
63
+ alter table t_def alter column c drop default;
64
+ insert into t_def (id) values (3);
65
+
66
+ select * from t_def where id = 3;
67
+ → [{"id": 3, "c": null}]
68
+
69
+ drop table t_def;
70
+
71
+ -- ===================================
72
+ -- 5. SET DATA TYPE — integer → real preserves numeric values
73
+ -- ===================================
74
+
75
+ create table t_type (id integer primary key, c integer null);
76
+ insert into t_type values (1, 10);
77
+ insert into t_type values (2, 20);
78
+ alter table t_type alter column c set data type real;
79
+
80
+ select * from t_type order by id;
81
+ → [{"id": 1, "c": 10}, {"id": 2, "c": 20}]
82
+
83
+ drop table t_type;
84
+
85
+ -- ===================================
86
+ -- 6. DROP NOT NULL on a PK column is permitted (key membership does not imply NOT NULL —
87
+ -- docs/schema.md § "Primary-key nullability") and is metadata-only: no row is rewritten,
88
+ -- so no key moves. SET DATA TYPE on a PK column is a DIFFERENT rule and still refused.
89
+ -- Full coverage in 43.3-nullable-primary-key § 9.
90
+ -- ===================================
91
+
92
+ create table t_pk (id integer primary key, c integer);
93
+ insert into t_pk values (1, 10);
94
+ -- run
95
+
96
+ alter table t_pk alter column id drop not null;
97
+ -- run
98
+
99
+ select name, "notnull", pk from table_info('t_pk') where name = 'id';
100
+ → [{"name":"id","notnull":0,"pk":1}]
101
+
102
+ -- The existing row is untouched and still addressable by key.
103
+ select id, c from t_pk;
104
+ → [{"id":1,"c":10}]
105
+
106
+ alter table t_pk alter column id set data type text;
107
+ -- error: Cannot SET DATA TYPE on PRIMARY KEY column
108
+
109
+ drop table t_pk;
110
+
111
+ -- ===================================
112
+ -- 7. SET DATA TYPE text -> integer converts existing rows in place
113
+ -- (values must be physically rewritten, not left as text, and a lookup on the
114
+ -- column must find rows by the new numeric value; the secondary-index variant is
115
+ -- 41.2.2-alter-column-retype-index-rebuild)
116
+ -- ===================================
117
+
118
+ create table t_conv (id integer primary key, v text);
119
+ insert into t_conv values (1, '10'), (2, '9');
120
+ alter table t_conv alter column v set data type integer;
121
+
122
+ select id, v, typeof(v) from t_conv order by id;
123
+ → [{"id": 1, "v": 10, "typeof(v)": "integer"}, {"id": 2, "v": 9, "typeof(v)": "integer"}]
124
+
125
+ select id from t_conv where v = 9;
126
+ → [{"id": 2}]
127
+
128
+ drop table t_conv;
129
+
130
+ -- ===================================
131
+ -- 8. SET NOT NULL backfills existing NULL rows from the column default
132
+ -- (no NULL may survive in the column after the ALTER succeeds)
133
+ -- ===================================
134
+
135
+ create table t_backfill (id integer primary key, v integer null default 7);
136
+ insert into t_backfill values (1, null), (2, null), (3, 5);
137
+ alter table t_backfill alter column v set not null;
138
+
139
+ select id, v from t_backfill order by id;
140
+ → [{"id": 1, "v": 7}, {"id": 2, "v": 7}, {"id": 3, "v": 5}]
141
+
142
+ select count(*) as n from t_backfill where v is null;
143
+ → [{"n": 0}]
144
+
145
+ drop table t_backfill;
146
+
147
+ -- ===================================
148
+ -- 9. SET DATA TYPE conversion failure leaves ALL rows untouched
149
+ -- (a row that converts must NOT be rewritten if a LATER row fails to
150
+ -- convert — the ALTER is all-or-nothing, not partial)
151
+ -- ===================================
152
+
153
+ create table t_partial (id integer primary key, v text);
154
+ insert into t_partial values (1, '10'), (2, 'abc');
155
+ -- run
156
+
157
+ alter table t_partial alter column v set data type integer;
158
+ -- error: Cannot convert value
159
+
160
+ -- Row 1 ('10') converted fine but row 2 ('abc') failed; neither may be
161
+ -- rewritten. Both stay as their original text values under the unchanged type.
162
+ select id, v, typeof(v) from t_partial order by id;
163
+ → [{"id": 1, "v": "10", "typeof(v)": "text"}, {"id": 2, "v": "abc", "typeof(v)": "text"}]
164
+
165
+ drop table t_partial;
166
+
167
+ -- ===================================
168
+ -- 10. SET DATA TYPE within one storage class still validates values
169
+ -- (text → date shares the TEXT storage class, but a value DATE cannot
170
+ -- parse must reject the ALTER, leaving type and value untouched — the
171
+ -- column must never declare DATE while holding 'hello')
172
+ -- ===================================
173
+
174
+ create table t_narrow (id integer primary key, v text);
175
+ insert into t_narrow values (1, 'hello');
176
+ -- run
177
+
178
+ alter table t_narrow alter column v set data type date;
179
+ -- error: Cannot convert value
180
+
181
+ select v, typeof(v) from t_narrow;
182
+ → [{"v": "hello", "typeof(v)": "text"}]
183
+
184
+ drop table t_narrow;
185
+
186
+ -- ===================================
187
+ -- 11. SET DATA TYPE within one storage class normalizes values
188
+ -- (an accepted retype rewrites each value to the new type's canonical
189
+ -- spelling — the state an INSERT would have produced. DATE compares
190
+ -- BINARY over the stored text, so without the rewrite the row would be
191
+ -- invisible to an equality lookup for the canonical date)
192
+ -- ===================================
193
+
194
+ create table t_norm (id integer primary key, v text);
195
+ insert into t_norm values (1, '2024-06-05T00:00:00Z');
196
+ alter table t_norm alter column v set data type date;
197
+
198
+ select id, v from t_norm;
199
+ → [{"id": 1, "v": "2024-06-05"}]
200
+
201
+ select id from t_norm where v = '2024-06-05';
202
+ → [{"id": 1}]
203
+
204
+ drop table t_norm;
205
+
206
+ -- ===================================
207
+ -- 12. text → timespan normalizes human-readable durations to ISO 8601
208
+ -- ===================================
209
+
210
+ create table t_span (id integer primary key, v text);
211
+ insert into t_span values (1, '1 hour');
212
+ alter table t_span alter column v set data type timespan;
213
+
214
+ select id, v from t_span;
215
+ → [{"id": 1, "v": "PT1H"}]
216
+
217
+ -- TIMESPAN compares by elapsed time, so any equal-elapsed spelling finds the row.
218
+ select id from t_span where v = 'PT60M';
219
+ → [{"id": 1}]
220
+
221
+ drop table t_span;
222
+
223
+ -- ===================================
224
+ -- 13. Temporal → temporal narrowing: values re-parse under the new type
225
+ -- (date → time converts as an INSERT would — a bare date carries an
226
+ -- implicit 00:00:00; time → date rejects, a bare time holds no date)
227
+ -- ===================================
228
+
229
+ create table t_temporal (id integer primary key, v text);
230
+ insert into t_temporal values (1, '2024-06-05');
231
+ alter table t_temporal alter column v set data type date;
232
+ alter table t_temporal alter column v set data type time;
233
+
234
+ select id, v from t_temporal;
235
+ → [{"id": 1, "v": "00:00:00"}]
236
+
237
+ drop table t_temporal;
238
+
239
+ create table t_time (id integer primary key, v text);
240
+ insert into t_time values (1, '14:30:00');
241
+ alter table t_time alter column v set data type time;
242
+ -- run
243
+
244
+ alter table t_time alter column v set data type date;
245
+ -- error: Cannot convert value
246
+
247
+ select v from t_time;
248
+ → [{"v": "14:30:00"}]
249
+
250
+ drop table t_time;
251
+
252
+ -- ===================================
253
+ -- 14. Alias retype (text → varchar(50)) stays schema-only
254
+ -- (inferType flattens both to the same TEXT type; no value is scanned
255
+ -- or rewritten, and declared lengths are not enforced)
256
+ -- ===================================
257
+
258
+ create table t_alias (id integer primary key, v text);
259
+ insert into t_alias values (1, 'a value much longer than any varchar(2) would allow');
260
+ alter table t_alias alter column v set data type varchar(2);
261
+
262
+ select id, v from t_alias;
263
+ → [{"id": 1, "v": "a value much longer than any varchar(2) would allow"}]
264
+
265
+ drop table t_alias;
266
+
267
+ -- ===================================
268
+ -- 15. Same-class retype inside a transaction: effective-row semantics
269
+ -- (a pending illegal value the transaction can SEE rejects; the
270
+ -- transaction's own pending rows are normalized along with the
271
+ -- committed ones. The deleted-row half — a value only in a row the
272
+ -- transaction DELETED does not block — is memory-only, in 41.2.1)
273
+ -- ===================================
274
+
275
+ create table t_tx (id integer primary key, v text);
276
+ insert into t_tx values (1, '2024-01-01');
277
+ begin;
278
+ insert into t_tx values (2, 'bogus');
279
+ -- run
280
+
281
+ alter table t_tx alter column v set data type date;
282
+ -- error: Cannot convert value
283
+
284
+ rollback;
285
+ begin;
286
+ insert into t_tx values (4, '2024-06-05T00:00:00Z');
287
+ alter table t_tx alter column v set data type date;
288
+
289
+ -- The pending insert is already normalized in-transaction.
290
+ select id, v from t_tx order by id;
291
+ → [{"id": 1, "v": "2024-01-01"}, {"id": 4, "v": "2024-06-05"}]
292
+
293
+ commit;
294
+
295
+ select id, v from t_tx order by id;
296
+ → [{"id": 1, "v": "2024-01-01"}, {"id": 4, "v": "2024-06-05"}]
297
+
298
+ select id from t_tx where v = '2024-06-05';
299
+ → [{"id": 4}]
300
+
301
+ drop table t_tx;
302
+
303
+ -- ===================================
304
+ -- 16. Structures keyed by the column follow the rewrite
305
+ -- (normalization moves each value, so every index over the column must be
306
+ -- rebuilt from the CONVERTED rows — otherwise an index-driven lookup still
307
+ -- probes the pre-retype spelling and misses, and UNIQUE keeps enforcing on
308
+ -- the old text)
309
+ -- ===================================
310
+
311
+ create table t_idx (id integer primary key, v text unique);
312
+ insert into t_idx values (1, '2024-06-05T00:00:00Z'), (2, '2024-01-02');
313
+ alter table t_idx alter column v set data type date;
314
+
315
+ select id, v from t_idx order by v;
316
+ → [{"id": 2, "v": "2024-01-02"}, {"id": 1, "v": "2024-06-05"}]
317
+
318
+ select id from t_idx where v = '2024-06-05';
319
+ → [{"id": 1}]
320
+
321
+ -- UNIQUE now enforces over the NORMALIZED value: another spelling of a
322
+ -- stored date is a duplicate.
323
+ insert into t_idx values (3, '2024-06-05T00:00:00Z');
324
+ -- error: UNIQUE constraint failed
325
+
326
+ -- ...and a genuinely new date is still accepted, findable by either spelling.
327
+ insert into t_idx values (4, '2024-07-04T00:00:00Z');
328
+ select id, v from t_idx where v = '2024-07-04';
329
+ → [{"id": 4, "v": "2024-07-04"}]
330
+
331
+ drop table t_idx;
332
+
333
+ -- 16b. …the same inside the DDL transaction, where the structure keyed by the column
334
+ -- is a SECONDARY INDEX, lives in 41.2.2-alter-column-retype-index-rebuild § 3.
335
+
336
+ -- 16c. …and the pending-row collision the normalization creates is judged over the
337
+ -- transaction's EFFECTIVE rows: the ALTER rejects and the transaction stays usable.
338
+ create table t_txdup (id integer primary key, v text unique);
339
+ insert into t_txdup values (1, '2024-06-05');
340
+ begin;
341
+ insert into t_txdup values (2, '2024-06-05T00:00:00Z');
342
+ -- run
343
+
344
+ alter table t_txdup alter column v set data type date;
345
+ -- error: UNIQUE constraint failed
346
+
347
+ -- the transaction survived: dropping the offending row lets the retry pass
348
+ delete from t_txdup where id = 2;
349
+ alter table t_txdup alter column v set data type date;
350
+ commit;
351
+
352
+ select id, v from t_txdup order by id;
353
+ → [{"id": 1, "v": "2024-06-05"}]
354
+
355
+ drop table t_txdup;
356
+
357
+ -- ===================================
358
+ -- 17. Writes AFTER the retype, in the same transaction, see the new type
359
+ -- (the rest of the transaction coerces and enforces under the retyped
360
+ -- column, so a non-canonical spelling normalizes on the way in and
361
+ -- duplicates the row it now equals)
362
+ -- ===================================
363
+
364
+ create table t_after (id integer primary key, v text unique);
365
+ insert into t_after values (1, '2024-01-01');
366
+ begin;
367
+ alter table t_after alter column v set data type date;
368
+ insert into t_after values (2, '2024-06-05T00:00:00Z');
369
+ -- run
370
+
371
+ select id, v from t_after order by id;
372
+ → [{"id": 1, "v": "2024-01-01"}, {"id": 2, "v": "2024-06-05"}]
373
+
374
+ insert into t_after values (3, '2024-06-05');
375
+ -- error: UNIQUE constraint failed
376
+
377
+ commit;
378
+
379
+ select id, v from t_after order by id;
380
+ → [{"id": 1, "v": "2024-01-01"}, {"id": 2, "v": "2024-06-05"}]
381
+
382
+ drop table t_after;
@@ -0,0 +1,32 @@
1
+ -- ALTER COLUMN SET DATA TYPE: a value only in a row the transaction has DELETED does
2
+ -- not block the retype. The convert pre-pass walks the transaction's EFFECTIVE rows
3
+ -- (committed rows overlaid with its own pending writes), so a deleted row's
4
+ -- unconvertible value is deliberately not counted against the ALTER.
5
+ --
6
+ -- MEMORY-ONLY (listed in MEMORY_ONLY_FILES): the store's throw-only convert pass scans
7
+ -- the store's OWN effective rows and ignores the wrapper-supplied effective stream (see
8
+ -- the NOTE in StoreModule.alterColumnSetDataType) — behind the isolation wrapper a
9
+ -- transaction's delete is an overlay tombstone the store cannot see, so the store leg
10
+ -- rejects on the deleted row's value where memory accepts. The known rollback corner
11
+ -- (rollback restores the row under the new type) is tracked as
12
+ -- bug-retype-of-deleted-row-leaves-wrong-typed-value.
13
+
14
+ create table t_del (id integer primary key, v text);
15
+ insert into t_del values (1, '2024-01-01'), (2, 'not-a-date');
16
+ -- run
17
+
18
+ begin;
19
+ -- run
20
+ delete from t_del where id = 2;
21
+ -- run
22
+
23
+ -- The only unconvertible value lives in a row this transaction deleted — accepted.
24
+ alter table t_del alter column v set data type date;
25
+ -- run
26
+ commit;
27
+ -- run
28
+
29
+ select id, v from t_del order by id;
30
+ → [{"id": 1, "v": "2024-01-01"}]
31
+
32
+ drop table t_del;
@@ -0,0 +1,77 @@
1
+ -- 41.2.2-alter-column-retype-index-rebuild.sqllogic
2
+ --
3
+ -- requires-capability: standalone-index-ddl
4
+ --
5
+ -- Carved out of 41.2-alter-column: 14 of that file's 17 scenarios (ADD/DROP NOT NULL,
6
+ -- DEFAULT, PK guards, backfill, the retype value rewrite itself, and the retype's
7
+ -- effect on an inline UNIQUE) need no index DDL. What needs a standalone
8
+ -- `create index` is the SECONDARY-index rebuild — the parent still proves the rewrite
9
+ -- and the UNIQUE re-enforcement through the auto-index, this file proves it for a
10
+ -- user-created index.
11
+ --
12
+ -- Subject: ALTER COLUMN SET DATA TYPE physically rewrites values, so every secondary
13
+ -- index over the column must be rebuilt from the CONVERTED rows — otherwise an
14
+ -- index-driven lookup still probes the pre-retype spelling and misses. Holds for
15
+ -- committed rows and for the transaction's own pending row.
16
+
17
+ -- ===================================
18
+ -- 1. text -> integer: the index finds rows by the new numeric value
19
+ -- ===================================
20
+
21
+ create table t_conv (id integer primary key, v text);
22
+ create index t_conv_v on t_conv (v);
23
+ insert into t_conv values (1, '10'), (2, '9');
24
+ alter table t_conv alter column v set data type integer;
25
+
26
+ select id from t_conv where v = 9;
27
+ → [{"id": 2}]
28
+
29
+ drop table t_conv;
30
+
31
+ -- ===================================
32
+ -- 2. text -> date: normalization moves each value, so the index is rebuilt from the
33
+ -- converted rows and both spellings resolve to the normalized one
34
+ -- ===================================
35
+
36
+ create table t_idx (id integer primary key, v text);
37
+ create index t_idx_v2 on t_idx (v);
38
+ insert into t_idx values (1, '2024-06-05T00:00:00Z'), (2, '2024-01-02');
39
+ alter table t_idx alter column v set data type date;
40
+
41
+ select id, v from t_idx order by v;
42
+ → [{"id": 2, "v": "2024-01-02"}, {"id": 1, "v": "2024-06-05"}]
43
+
44
+ select id from t_idx where v = '2024-06-05';
45
+ → [{"id": 1}]
46
+
47
+ -- a genuinely new date is findable by either spelling.
48
+ insert into t_idx values (4, '2024-07-04T00:00:00Z');
49
+ select id, v from t_idx where v = '2024-07-04';
50
+ → [{"id": 4, "v": "2024-07-04"}]
51
+
52
+ drop table t_idx;
53
+
54
+ -- ===================================
55
+ -- 3. …the same inside the DDL transaction: the transaction's own pending row is
56
+ -- converted AND re-indexed, before and after commit.
57
+ -- ===================================
58
+
59
+ create table t_idxtx (id integer primary key, v text);
60
+ create index t_idxtx_v on t_idxtx (v);
61
+ insert into t_idxtx values (1, '2024-01-02');
62
+ begin;
63
+ insert into t_idxtx values (2, '2024-06-05T00:00:00Z');
64
+ alter table t_idxtx alter column v set data type date;
65
+
66
+ select id from t_idxtx where v = '2024-06-05';
67
+ → [{"id": 2}]
68
+
69
+ commit;
70
+
71
+ select id from t_idxtx where v = '2024-06-05';
72
+ → [{"id": 2}]
73
+
74
+ select id, v from t_idxtx order by v;
75
+ → [{"id": 1, "v": "2024-01-02"}, {"id": 2, "v": "2024-06-05"}]
76
+
77
+ drop table t_idxtx;