@quereus/quereus 4.4.0 → 4.4.1

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 (316) hide show
  1. package/README.md +5 -0
  2. package/dist/src/common/types.d.ts +9 -0
  3. package/dist/src/common/types.d.ts.map +1 -1
  4. package/dist/src/common/types.js.map +1 -1
  5. package/dist/src/core/database-events.d.ts +49 -0
  6. package/dist/src/core/database-events.d.ts.map +1 -1
  7. package/dist/src/core/database-events.js +148 -0
  8. package/dist/src/core/database-events.js.map +1 -1
  9. package/dist/src/core/database-materialized-views-plan-builders.d.ts +2 -1
  10. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
  11. package/dist/src/core/database-materialized-views-plan-builders.js +26 -5
  12. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
  13. package/dist/src/core/database-materialized-views-plans.d.ts +6 -3
  14. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
  15. package/dist/src/core/database-materialized-views.d.ts +3 -2
  16. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  17. package/dist/src/core/database-materialized-views.js +26 -5
  18. package/dist/src/core/database-materialized-views.js.map +1 -1
  19. package/dist/src/core/database.d.ts +5 -0
  20. package/dist/src/core/database.d.ts.map +1 -1
  21. package/dist/src/core/database.js +21 -1
  22. package/dist/src/core/database.js.map +1 -1
  23. package/dist/src/core/internal-statement-cache.d.ts +18 -0
  24. package/dist/src/core/internal-statement-cache.d.ts.map +1 -0
  25. package/dist/src/core/internal-statement-cache.js +211 -0
  26. package/dist/src/core/internal-statement-cache.js.map +1 -0
  27. package/dist/src/func/builtins/aggregate.d.ts +13 -12
  28. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  29. package/dist/src/func/builtins/aggregate.js +45 -67
  30. package/dist/src/func/builtins/aggregate.js.map +1 -1
  31. package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
  32. package/dist/src/func/builtins/builtin-window-functions.js +63 -48
  33. package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
  34. package/dist/src/func/registration.d.ts +14 -1
  35. package/dist/src/func/registration.d.ts.map +1 -1
  36. package/dist/src/func/registration.js +25 -0
  37. package/dist/src/func/registration.js.map +1 -1
  38. package/dist/src/index.d.ts +8 -8
  39. package/dist/src/index.d.ts.map +1 -1
  40. package/dist/src/index.js +12 -11
  41. package/dist/src/index.js.map +1 -1
  42. package/dist/src/parser/parser.d.ts +6 -0
  43. package/dist/src/parser/parser.d.ts.map +1 -1
  44. package/dist/src/parser/parser.js +45 -34
  45. package/dist/src/parser/parser.js.map +1 -1
  46. package/dist/src/planner/analysis/comparison-collation.d.ts +2 -0
  47. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
  48. package/dist/src/planner/analysis/comparison-collation.js +1 -1
  49. package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
  50. package/dist/src/planner/analysis/expression-fingerprint.d.ts.map +1 -1
  51. package/dist/src/planner/analysis/expression-fingerprint.js +29 -0
  52. package/dist/src/planner/analysis/expression-fingerprint.js.map +1 -1
  53. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +6 -0
  54. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  55. package/dist/src/planner/analysis/query-rewrite-matcher.js +11 -2
  56. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  57. package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -1
  58. package/dist/src/planner/analysis/sat-checker.js +43 -4
  59. package/dist/src/planner/analysis/sat-checker.js.map +1 -1
  60. package/dist/src/planner/building/delete.d.ts.map +1 -1
  61. package/dist/src/planner/building/delete.js +10 -3
  62. package/dist/src/planner/building/delete.js.map +1 -1
  63. package/dist/src/planner/building/expression.d.ts.map +1 -1
  64. package/dist/src/planner/building/expression.js +87 -6
  65. package/dist/src/planner/building/expression.js.map +1 -1
  66. package/dist/src/planner/building/foreign-key-builder.d.ts +44 -1
  67. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  68. package/dist/src/planner/building/foreign-key-builder.js +54 -0
  69. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  70. package/dist/src/planner/building/insert.d.ts.map +1 -1
  71. package/dist/src/planner/building/insert.js +9 -12
  72. package/dist/src/planner/building/insert.js.map +1 -1
  73. package/dist/src/planner/building/update.d.ts.map +1 -1
  74. package/dist/src/planner/building/update.js +13 -4
  75. package/dist/src/planner/building/update.js.map +1 -1
  76. package/dist/src/planner/framework/pass.js +3 -3
  77. package/dist/src/planner/nodes/dml-executor-node.d.ts +0 -9
  78. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  79. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  80. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  81. package/dist/src/planner/nodes/scalar.js +26 -3
  82. package/dist/src/planner/nodes/scalar.js.map +1 -1
  83. package/dist/src/planner/optimizer.d.ts.map +1 -1
  84. package/dist/src/planner/optimizer.js +5 -12
  85. package/dist/src/planner/optimizer.js.map +1 -1
  86. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  87. package/dist/src/planner/rules/access/rule-select-access-path.js +43 -18
  88. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  89. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -1
  90. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +23 -4
  91. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  92. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts +10 -8
  93. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts.map +1 -1
  94. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js +10 -8
  95. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js.map +1 -1
  96. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +8 -1
  97. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
  98. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js +4 -0
  99. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js.map +1 -1
  100. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  101. package/dist/src/runtime/deferred-constraint-queue.js +10 -0
  102. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  103. package/dist/src/runtime/emit/aggregate-setup.d.ts +49 -0
  104. package/dist/src/runtime/emit/aggregate-setup.d.ts.map +1 -0
  105. package/dist/src/runtime/emit/aggregate-setup.js +99 -0
  106. package/dist/src/runtime/emit/aggregate-setup.js.map +1 -0
  107. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  108. package/dist/src/runtime/emit/aggregate.js +4 -69
  109. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  110. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  111. package/dist/src/runtime/emit/alter-table.js +348 -165
  112. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  113. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  114. package/dist/src/runtime/emit/asof-scan.js +6 -0
  115. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  116. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  117. package/dist/src/runtime/emit/between.js +32 -3
  118. package/dist/src/runtime/emit/between.js.map +1 -1
  119. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  120. package/dist/src/runtime/emit/binary.js +22 -2
  121. package/dist/src/runtime/emit/binary.js.map +1 -1
  122. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  123. package/dist/src/runtime/emit/bloom-join.js +24 -3
  124. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  125. package/dist/src/runtime/emit/cast.d.ts.map +1 -1
  126. package/dist/src/runtime/emit/cast.js +10 -23
  127. package/dist/src/runtime/emit/cast.js.map +1 -1
  128. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  129. package/dist/src/runtime/emit/constraint-check.js +41 -44
  130. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  131. package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
  132. package/dist/src/runtime/emit/create-view.js +6 -0
  133. package/dist/src/runtime/emit/create-view.js.map +1 -1
  134. package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
  135. package/dist/src/runtime/emit/distinct.js +6 -3
  136. package/dist/src/runtime/emit/distinct.js.map +1 -1
  137. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  138. package/dist/src/runtime/emit/dml-executor.js +182 -81
  139. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  140. package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
  141. package/dist/src/runtime/emit/hash-aggregate.js +16 -65
  142. package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
  143. package/dist/src/runtime/emit/insert.d.ts.map +1 -1
  144. package/dist/src/runtime/emit/insert.js +18 -7
  145. package/dist/src/runtime/emit/insert.js.map +1 -1
  146. package/dist/src/runtime/emit/join.js +5 -0
  147. package/dist/src/runtime/emit/join.js.map +1 -1
  148. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +14 -1
  149. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  150. package/dist/src/runtime/emit/materialized-view-helpers.js +33 -3
  151. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  152. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
  153. package/dist/src/runtime/emit/materialized-view.js +47 -6
  154. package/dist/src/runtime/emit/materialized-view.js.map +1 -1
  155. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  156. package/dist/src/runtime/emit/merge-join.js +18 -8
  157. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  158. package/dist/src/runtime/emit/set-object-tags.d.ts +8 -0
  159. package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -1
  160. package/dist/src/runtime/emit/set-object-tags.js +8 -0
  161. package/dist/src/runtime/emit/set-object-tags.js.map +1 -1
  162. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  163. package/dist/src/runtime/emit/set-operation.js +7 -4
  164. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  165. package/dist/src/runtime/emit/sort.d.ts.map +1 -1
  166. package/dist/src/runtime/emit/sort.js +5 -2
  167. package/dist/src/runtime/emit/sort.js.map +1 -1
  168. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  169. package/dist/src/runtime/emit/subquery.js +113 -13
  170. package/dist/src/runtime/emit/subquery.js.map +1 -1
  171. package/dist/src/runtime/emit/temporal-arithmetic.d.ts +7 -0
  172. package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -1
  173. package/dist/src/runtime/emit/temporal-arithmetic.js +15 -7
  174. package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -1
  175. package/dist/src/runtime/emit/update.d.ts.map +1 -1
  176. package/dist/src/runtime/emit/update.js +44 -3
  177. package/dist/src/runtime/emit/update.js.map +1 -1
  178. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  179. package/dist/src/runtime/emit/window.js +72 -55
  180. package/dist/src/runtime/emit/window.js.map +1 -1
  181. package/dist/src/runtime/foreign-key-actions.d.ts +36 -1
  182. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  183. package/dist/src/runtime/foreign-key-actions.js +238 -116
  184. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  185. package/dist/src/runtime/parallel-driver.d.ts +6 -1
  186. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  187. package/dist/src/runtime/parallel-driver.js +7 -1
  188. package/dist/src/runtime/parallel-driver.js.map +1 -1
  189. package/dist/src/runtime/types.d.ts +18 -0
  190. package/dist/src/runtime/types.d.ts.map +1 -1
  191. package/dist/src/runtime/types.js.map +1 -1
  192. package/dist/src/schema/catalog-persistability.d.ts +58 -0
  193. package/dist/src/schema/catalog-persistability.d.ts.map +1 -0
  194. package/dist/src/schema/catalog-persistability.js +87 -0
  195. package/dist/src/schema/catalog-persistability.js.map +1 -0
  196. package/dist/src/schema/catalog.d.ts +17 -1
  197. package/dist/src/schema/catalog.d.ts.map +1 -1
  198. package/dist/src/schema/catalog.js +25 -3
  199. package/dist/src/schema/catalog.js.map +1 -1
  200. package/dist/src/schema/constraint-builder.d.ts +20 -22
  201. package/dist/src/schema/constraint-builder.d.ts.map +1 -1
  202. package/dist/src/schema/constraint-builder.js +43 -36
  203. package/dist/src/schema/constraint-builder.js.map +1 -1
  204. package/dist/src/schema/ddl-generator.d.ts +23 -0
  205. package/dist/src/schema/ddl-generator.d.ts.map +1 -1
  206. package/dist/src/schema/ddl-generator.js +27 -0
  207. package/dist/src/schema/ddl-generator.js.map +1 -1
  208. package/dist/src/schema/function.d.ts +30 -1
  209. package/dist/src/schema/function.d.ts.map +1 -1
  210. package/dist/src/schema/function.js.map +1 -1
  211. package/dist/src/schema/manager.d.ts +28 -0
  212. package/dist/src/schema/manager.d.ts.map +1 -1
  213. package/dist/src/schema/manager.js +82 -14
  214. package/dist/src/schema/manager.js.map +1 -1
  215. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  216. package/dist/src/schema/schema-differ.js +51 -12
  217. package/dist/src/schema/schema-differ.js.map +1 -1
  218. package/dist/src/schema/unique-enforcement.d.ts +31 -0
  219. package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
  220. package/dist/src/schema/unique-enforcement.js +37 -1
  221. package/dist/src/schema/unique-enforcement.js.map +1 -1
  222. package/dist/src/schema/window-function.d.ts +30 -10
  223. package/dist/src/schema/window-function.d.ts.map +1 -1
  224. package/dist/src/schema/window-function.js +20 -16
  225. package/dist/src/schema/window-function.js.map +1 -1
  226. package/dist/src/types/cast-semantics.d.ts +43 -0
  227. package/dist/src/types/cast-semantics.d.ts.map +1 -0
  228. package/dist/src/types/cast-semantics.js +59 -0
  229. package/dist/src/types/cast-semantics.js.map +1 -0
  230. package/dist/src/types/index.d.ts +1 -1
  231. package/dist/src/types/index.d.ts.map +1 -1
  232. package/dist/src/types/index.js +1 -1
  233. package/dist/src/types/index.js.map +1 -1
  234. package/dist/src/types/json-type.d.ts.map +1 -1
  235. package/dist/src/types/json-type.js +31 -10
  236. package/dist/src/types/json-type.js.map +1 -1
  237. package/dist/src/types/logical-type.d.ts +22 -0
  238. package/dist/src/types/logical-type.d.ts.map +1 -1
  239. package/dist/src/types/logical-type.js.map +1 -1
  240. package/dist/src/types/temporal-types.d.ts.map +1 -1
  241. package/dist/src/types/temporal-types.js +33 -11
  242. package/dist/src/types/temporal-types.js.map +1 -1
  243. package/dist/src/types/validation.d.ts +39 -1
  244. package/dist/src/types/validation.d.ts.map +1 -1
  245. package/dist/src/types/validation.js +60 -0
  246. package/dist/src/types/validation.js.map +1 -1
  247. package/dist/src/util/ast-spine-clone.d.ts +23 -0
  248. package/dist/src/util/ast-spine-clone.d.ts.map +1 -0
  249. package/dist/src/util/ast-spine-clone.js +41 -0
  250. package/dist/src/util/ast-spine-clone.js.map +1 -0
  251. package/dist/src/util/coercion.d.ts +13 -0
  252. package/dist/src/util/coercion.d.ts.map +1 -1
  253. package/dist/src/util/coercion.js +10 -1
  254. package/dist/src/util/coercion.js.map +1 -1
  255. package/dist/src/util/comparison.d.ts +89 -0
  256. package/dist/src/util/comparison.d.ts.map +1 -1
  257. package/dist/src/util/comparison.js +156 -27
  258. package/dist/src/util/comparison.js.map +1 -1
  259. package/dist/src/vtab/manifest.d.ts +7 -0
  260. package/dist/src/vtab/manifest.d.ts.map +1 -1
  261. package/dist/src/vtab/memory/connection.d.ts +14 -1
  262. package/dist/src/vtab/memory/connection.d.ts.map +1 -1
  263. package/dist/src/vtab/memory/connection.js +20 -2
  264. package/dist/src/vtab/memory/connection.js.map +1 -1
  265. package/dist/src/vtab/memory/layer/base.d.ts +6 -1
  266. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  267. package/dist/src/vtab/memory/layer/base.js +14 -5
  268. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  269. package/dist/src/vtab/memory/layer/connection.d.ts +17 -0
  270. package/dist/src/vtab/memory/layer/connection.d.ts.map +1 -1
  271. package/dist/src/vtab/memory/layer/connection.js +26 -0
  272. package/dist/src/vtab/memory/layer/connection.js.map +1 -1
  273. package/dist/src/vtab/memory/layer/manager.d.ts +96 -13
  274. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  275. package/dist/src/vtab/memory/layer/manager.js +595 -119
  276. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  277. package/dist/src/vtab/memory/layer/plan-filter.d.ts +41 -20
  278. package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
  279. package/dist/src/vtab/memory/layer/plan-filter.js +57 -27
  280. package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
  281. package/dist/src/vtab/memory/layer/row-convert.d.ts +21 -0
  282. package/dist/src/vtab/memory/layer/row-convert.d.ts.map +1 -0
  283. package/dist/src/vtab/memory/layer/row-convert.js +30 -0
  284. package/dist/src/vtab/memory/layer/row-convert.js.map +1 -0
  285. package/dist/src/vtab/memory/layer/scan-layer.d.ts +6 -3
  286. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  287. package/dist/src/vtab/memory/layer/scan-layer.js +48 -34
  288. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  289. package/dist/src/vtab/memory/layer/transaction.d.ts +127 -13
  290. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  291. package/dist/src/vtab/memory/layer/transaction.js +214 -65
  292. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  293. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  294. package/dist/src/vtab/memory/module.js +9 -2
  295. package/dist/src/vtab/memory/module.js.map +1 -1
  296. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  297. package/dist/src/vtab/memory/table.js +3 -2
  298. package/dist/src/vtab/memory/table.js.map +1 -1
  299. package/dist/src/vtab/memory/types.d.ts +27 -1
  300. package/dist/src/vtab/memory/types.d.ts.map +1 -1
  301. package/dist/src/vtab/memory/types.js +16 -1
  302. package/dist/src/vtab/memory/types.js.map +1 -1
  303. package/dist/src/vtab/memory/utils/primary-key.d.ts +9 -0
  304. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  305. package/dist/src/vtab/memory/utils/primary-key.js +11 -0
  306. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  307. package/dist/src/vtab/module.d.ts +63 -0
  308. package/dist/src/vtab/module.d.ts.map +1 -1
  309. package/dist/src/vtab/table.d.ts +24 -6
  310. package/dist/src/vtab/table.d.ts.map +1 -1
  311. package/dist/src/vtab/table.js.map +1 -1
  312. package/package.json +3 -3
  313. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts +0 -26
  314. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts.map +0 -1
  315. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js +0 -66
  316. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js.map +0 -1
@@ -881,7 +881,6 @@ export class Parser {
881
881
  else if (this.checkIdentifierLike([]) &&
882
882
  !this.checkNext(1, TokenType.LPAREN) &&
883
883
  !this.checkNext(1, TokenType.DOT) &&
884
- !this.checkNext(1, TokenType.COMMA) &&
885
884
  !this.isEndOfClause()) {
886
885
  const aliasToken = this.advance();
887
886
  alias = this.getIdentifierValue(aliasToken);
@@ -987,24 +986,23 @@ export class Parser {
987
986
  }
988
987
  alias = this.getIdentifierValue(this.advance());
989
988
  }
990
- else if (this.checkIdentifierLike([]) &&
991
- !this.checkNext(1, TokenType.DOT) &&
992
- !this.checkNext(1, TokenType.COMMA) &&
993
- !this.isJoinToken() &&
994
- !this.isEndOfClause()) {
995
- alias = this.getIdentifierValue(this.advance());
996
- }
997
- else if (requireAlias) {
998
- // A subquery write target's alias is mandatory and user-meaningful — never a
999
- // generated default (the `where`/`set` reference it). Reject the bare form.
1000
- throw this.error(this.peek(), "a subquery UPDATE/DELETE write target requires an alias, e.g. (select …) as v");
1001
- }
1002
989
  else {
1003
- // Generate a default alias if none provided. Keep separate prefixes
1004
- // for read-only vs mutating bodies so generated aliases stay
1005
- // distinguishable when surfacing in diagnostics.
1006
- const isMutating = subquery.type === 'insert' || subquery.type === 'update' || subquery.type === 'delete';
1007
- alias = `${isMutating ? 'mutating_subquery' : 'subquery'}_${startToken.startOffset}`;
990
+ const aliasToken = this.matchBareSourceAlias();
991
+ if (aliasToken) {
992
+ alias = this.getIdentifierValue(aliasToken);
993
+ }
994
+ else if (requireAlias) {
995
+ // A subquery write target's alias is mandatory and user-meaningful — never a
996
+ // generated default (the `where`/`set` reference it). Reject the bare form.
997
+ throw this.error(this.peek(), "a subquery UPDATE/DELETE write target requires an alias, e.g. (select …) as v");
998
+ }
999
+ else {
1000
+ // Generate a default alias if none provided. Keep separate prefixes
1001
+ // for read-only vs mutating bodies so generated aliases stay
1002
+ // distinguishable when surfacing in diagnostics.
1003
+ const isMutating = subquery.type === 'insert' || subquery.type === 'update' || subquery.type === 'delete';
1004
+ alias = `${isMutating ? 'mutating_subquery' : 'subquery'}_${startToken.startOffset}`;
1005
+ }
1008
1006
  }
1009
1007
  // Parse optional column list after alias: AS alias(col1, col2, ...)
1010
1008
  if (this.match(TokenType.LPAREN)) {
@@ -1074,14 +1072,12 @@ export class Parser {
1074
1072
  alias = this.getIdentifierValue(aliasToken);
1075
1073
  endToken = aliasToken;
1076
1074
  }
1077
- else if (this.checkIdentifierLike([]) &&
1078
- !this.checkNext(1, TokenType.DOT) &&
1079
- !this.checkNext(1, TokenType.COMMA) &&
1080
- !this.isJoinToken() &&
1081
- !this.isEndOfClause()) {
1082
- const aliasToken = this.advance();
1083
- alias = this.getIdentifierValue(aliasToken);
1084
- endToken = aliasToken;
1075
+ else {
1076
+ const aliasToken = this.matchBareSourceAlias();
1077
+ if (aliasToken) {
1078
+ alias = this.getIdentifierValue(aliasToken);
1079
+ endToken = aliasToken;
1080
+ }
1085
1081
  }
1086
1082
  return {
1087
1083
  type: 'table',
@@ -1129,14 +1125,12 @@ export class Parser {
1129
1125
  alias = this.getIdentifierValue(aliasToken);
1130
1126
  endToken = aliasToken;
1131
1127
  }
1132
- else if (this.checkIdentifierLike([]) &&
1133
- !this.checkNext(1, TokenType.DOT) &&
1134
- !this.checkNext(1, TokenType.COMMA) &&
1135
- !this.isJoinToken() &&
1136
- !this.isEndOfClause()) {
1137
- const aliasToken = this.advance();
1138
- alias = this.getIdentifierValue(aliasToken);
1139
- endToken = aliasToken;
1128
+ else {
1129
+ const aliasToken = this.matchBareSourceAlias();
1130
+ if (aliasToken) {
1131
+ alias = this.getIdentifierValue(aliasToken);
1132
+ endToken = aliasToken;
1133
+ }
1140
1134
  }
1141
1135
  // Optional column list after alias: alias(col1, col2, ...)
1142
1136
  if (alias && this.match(TokenType.LPAREN)) {
@@ -2116,6 +2110,20 @@ export class Parser {
2116
2110
  this.check(TokenType.FULL) ||
2117
2111
  this.check(TokenType.CROSS);
2118
2112
  }
2113
+ /**
2114
+ * Consumes and returns an implicit (no-`as`) alias for a FROM-clause source,
2115
+ * or undefined when the cursor isn't sitting on one. A trailing comma is fine —
2116
+ * it only ends the source list item (`from t a, u b`).
2117
+ */
2118
+ matchBareSourceAlias() {
2119
+ if (!this.checkIdentifierLike([]) ||
2120
+ this.checkNext(1, TokenType.DOT) ||
2121
+ this.isJoinToken() ||
2122
+ this.isEndOfClause()) {
2123
+ return undefined;
2124
+ }
2125
+ return this.advance();
2126
+ }
2119
2127
  /**
2120
2128
  * True when the current token starts a `QueryExpr` (SELECT, VALUES, WITH,
2121
2129
  * INSERT, UPDATE, DELETE). Used by callers that have already consumed an
@@ -2129,6 +2137,9 @@ export class Parser {
2129
2137
  || this.check(TokenType.UPDATE)
2130
2138
  || this.check(TokenType.DELETE);
2131
2139
  }
2140
+ // NOTE: this is also the stop set for bare (no-`as`) aliases. Any new clause keyword
2141
+ // that can follow a select item or table source must be added here, or it will be
2142
+ // swallowed as an alias — unless it lexes to its own TokenType, which keeps it safe.
2132
2143
  isEndOfClause() {
2133
2144
  const token = this.peek().type;
2134
2145
  return token === TokenType.FROM ||