@quereus/quereus 0.7.2 → 0.7.4

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 (566) hide show
  1. package/package.json +3 -3
  2. package/dist/src/common/constants.js.map +0 -1
  3. package/dist/src/common/datatype.js.map +0 -1
  4. package/dist/src/common/errors.js.map +0 -1
  5. package/dist/src/common/json-types.js.map +0 -1
  6. package/dist/src/common/logger.js.map +0 -1
  7. package/dist/src/common/type-inference.js.map +0 -1
  8. package/dist/src/common/types.js.map +0 -1
  9. package/dist/src/core/database-options.js.map +0 -1
  10. package/dist/src/core/database.js.map +0 -1
  11. package/dist/src/core/param.js.map +0 -1
  12. package/dist/src/core/statement.js.map +0 -1
  13. package/dist/src/func/builtins/aggregate.js.map +0 -1
  14. package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
  15. package/dist/src/func/builtins/conversion.js.map +0 -1
  16. package/dist/src/func/builtins/datetime.js.map +0 -1
  17. package/dist/src/func/builtins/explain.js.map +0 -1
  18. package/dist/src/func/builtins/generation.js.map +0 -1
  19. package/dist/src/func/builtins/index.js.map +0 -1
  20. package/dist/src/func/builtins/json-helpers.js.map +0 -1
  21. package/dist/src/func/builtins/json-tvf.js.map +0 -1
  22. package/dist/src/func/builtins/json.js.map +0 -1
  23. package/dist/src/func/builtins/scalar.js.map +0 -1
  24. package/dist/src/func/builtins/schema.js.map +0 -1
  25. package/dist/src/func/builtins/string.js.map +0 -1
  26. package/dist/src/func/builtins/timespan.js.map +0 -1
  27. package/dist/src/func/context.js.map +0 -1
  28. package/dist/src/func/registration.js.map +0 -1
  29. package/dist/src/index.js.map +0 -1
  30. package/dist/src/parser/ast.js.map +0 -1
  31. package/dist/src/parser/index.js.map +0 -1
  32. package/dist/src/parser/lexer.js.map +0 -1
  33. package/dist/src/parser/parser.js.map +0 -1
  34. package/dist/src/parser/utils.js.map +0 -1
  35. package/dist/src/parser/visitor.js.map +0 -1
  36. package/dist/src/planner/analysis/binding-collector.js.map +0 -1
  37. package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
  38. package/dist/src/planner/analysis/const-pass.js.map +0 -1
  39. package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
  40. package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
  41. package/dist/src/planner/building/alter-table.js.map +0 -1
  42. package/dist/src/planner/building/block.js.map +0 -1
  43. package/dist/src/planner/building/constraint-builder.js.map +0 -1
  44. package/dist/src/planner/building/create-assertion.js.map +0 -1
  45. package/dist/src/planner/building/create-view.js.map +0 -1
  46. package/dist/src/planner/building/ddl.js.map +0 -1
  47. package/dist/src/planner/building/declare-schema.js.map +0 -1
  48. package/dist/src/planner/building/delete.js.map +0 -1
  49. package/dist/src/planner/building/drop-assertion.js.map +0 -1
  50. package/dist/src/planner/building/drop-table.js.map +0 -1
  51. package/dist/src/planner/building/drop-view.js.map +0 -1
  52. package/dist/src/planner/building/expression.js.map +0 -1
  53. package/dist/src/planner/building/function-call.js.map +0 -1
  54. package/dist/src/planner/building/insert.js.map +0 -1
  55. package/dist/src/planner/building/pragma.js.map +0 -1
  56. package/dist/src/planner/building/schema-resolution.js.map +0 -1
  57. package/dist/src/planner/building/select-aggregates.js.map +0 -1
  58. package/dist/src/planner/building/select-compound.js.map +0 -1
  59. package/dist/src/planner/building/select-context.js.map +0 -1
  60. package/dist/src/planner/building/select-modifiers.js.map +0 -1
  61. package/dist/src/planner/building/select-projections.js.map +0 -1
  62. package/dist/src/planner/building/select-window.js.map +0 -1
  63. package/dist/src/planner/building/select.js.map +0 -1
  64. package/dist/src/planner/building/table-function.js.map +0 -1
  65. package/dist/src/planner/building/table.js.map +0 -1
  66. package/dist/src/planner/building/transaction.js.map +0 -1
  67. package/dist/src/planner/building/update.js.map +0 -1
  68. package/dist/src/planner/building/with.js.map +0 -1
  69. package/dist/src/planner/cache/correlation-detector.js.map +0 -1
  70. package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
  71. package/dist/src/planner/cache/reference-graph.js.map +0 -1
  72. package/dist/src/planner/cost/index.js.map +0 -1
  73. package/dist/src/planner/debug/logger-utils.js.map +0 -1
  74. package/dist/src/planner/debug.js.map +0 -1
  75. package/dist/src/planner/framework/characteristics.js.map +0 -1
  76. package/dist/src/planner/framework/context.js.map +0 -1
  77. package/dist/src/planner/framework/pass.js.map +0 -1
  78. package/dist/src/planner/framework/physical-utils.js.map +0 -1
  79. package/dist/src/planner/framework/registry.js.map +0 -1
  80. package/dist/src/planner/framework/trace.js.map +0 -1
  81. package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
  82. package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
  83. package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
  84. package/dist/src/planner/nodes/array-index-node.js.map +0 -1
  85. package/dist/src/planner/nodes/block.js.map +0 -1
  86. package/dist/src/planner/nodes/cache-node.js.map +0 -1
  87. package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
  88. package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
  89. package/dist/src/planner/nodes/create-index-node.js.map +0 -1
  90. package/dist/src/planner/nodes/create-table-node.js.map +0 -1
  91. package/dist/src/planner/nodes/create-view-node.js.map +0 -1
  92. package/dist/src/planner/nodes/cte-node.js.map +0 -1
  93. package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
  94. package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
  95. package/dist/src/planner/nodes/delete-node.js.map +0 -1
  96. package/dist/src/planner/nodes/distinct-node.js.map +0 -1
  97. package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
  98. package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
  99. package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
  100. package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
  101. package/dist/src/planner/nodes/filter.js.map +0 -1
  102. package/dist/src/planner/nodes/function.js.map +0 -1
  103. package/dist/src/planner/nodes/insert-node.js.map +0 -1
  104. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
  105. package/dist/src/planner/nodes/join-node.js.map +0 -1
  106. package/dist/src/planner/nodes/limit-offset.js.map +0 -1
  107. package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
  108. package/dist/src/planner/nodes/plan-node.js.map +0 -1
  109. package/dist/src/planner/nodes/pragma.js.map +0 -1
  110. package/dist/src/planner/nodes/project-node.js.map +0 -1
  111. package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
  112. package/dist/src/planner/nodes/reference.js.map +0 -1
  113. package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
  114. package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
  115. package/dist/src/planner/nodes/returning-node.js.map +0 -1
  116. package/dist/src/planner/nodes/scalar.js.map +0 -1
  117. package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
  118. package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
  119. package/dist/src/planner/nodes/single-row.js.map +0 -1
  120. package/dist/src/planner/nodes/sink-node.js.map +0 -1
  121. package/dist/src/planner/nodes/sort.js.map +0 -1
  122. package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
  123. package/dist/src/planner/nodes/subquery.js.map +0 -1
  124. package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
  125. package/dist/src/planner/nodes/table-function-call.js.map +0 -1
  126. package/dist/src/planner/nodes/transaction-node.js.map +0 -1
  127. package/dist/src/planner/nodes/update-node.js.map +0 -1
  128. package/dist/src/planner/nodes/values-node.js.map +0 -1
  129. package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
  130. package/dist/src/planner/nodes/window-function.js.map +0 -1
  131. package/dist/src/planner/nodes/window-node.js.map +0 -1
  132. package/dist/src/planner/optimizer-tuning.js.map +0 -1
  133. package/dist/src/planner/optimizer.js.map +0 -1
  134. package/dist/src/planner/planning-context.js.map +0 -1
  135. package/dist/src/planner/resolve.js.map +0 -1
  136. package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
  137. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
  138. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
  139. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
  140. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
  141. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
  142. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
  143. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
  144. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
  145. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
  146. package/dist/src/planner/scopes/aliased.js.map +0 -1
  147. package/dist/src/planner/scopes/base.js.map +0 -1
  148. package/dist/src/planner/scopes/empty.js.map +0 -1
  149. package/dist/src/planner/scopes/global.js.map +0 -1
  150. package/dist/src/planner/scopes/multi.js.map +0 -1
  151. package/dist/src/planner/scopes/param.js.map +0 -1
  152. package/dist/src/planner/scopes/registered.js.map +0 -1
  153. package/dist/src/planner/scopes/scope.js.map +0 -1
  154. package/dist/src/planner/stats/basic-estimates.js.map +0 -1
  155. package/dist/src/planner/stats/index.js.map +0 -1
  156. package/dist/src/planner/type-utils.js.map +0 -1
  157. package/dist/src/planner/util/key-utils.js.map +0 -1
  158. package/dist/src/planner/validation/determinism-validator.js.map +0 -1
  159. package/dist/src/planner/validation/plan-validator.js.map +0 -1
  160. package/dist/src/runtime/async-util.js.map +0 -1
  161. package/dist/src/runtime/cache/shared-cache.js.map +0 -1
  162. package/dist/src/runtime/context-helpers.js.map +0 -1
  163. package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
  164. package/dist/src/runtime/emission-context.js.map +0 -1
  165. package/dist/src/runtime/emit/add-constraint.js.map +0 -1
  166. package/dist/src/runtime/emit/aggregate.js.map +0 -1
  167. package/dist/src/runtime/emit/array-index.js.map +0 -1
  168. package/dist/src/runtime/emit/between.js.map +0 -1
  169. package/dist/src/runtime/emit/binary.js.map +0 -1
  170. package/dist/src/runtime/emit/block.js.map +0 -1
  171. package/dist/src/runtime/emit/cache.js.map +0 -1
  172. package/dist/src/runtime/emit/case.js.map +0 -1
  173. package/dist/src/runtime/emit/cast.js.map +0 -1
  174. package/dist/src/runtime/emit/collate.js.map +0 -1
  175. package/dist/src/runtime/emit/column-reference.js.map +0 -1
  176. package/dist/src/runtime/emit/constraint-check.js.map +0 -1
  177. package/dist/src/runtime/emit/create-assertion.js.map +0 -1
  178. package/dist/src/runtime/emit/create-index.js.map +0 -1
  179. package/dist/src/runtime/emit/create-table.js.map +0 -1
  180. package/dist/src/runtime/emit/create-view.js.map +0 -1
  181. package/dist/src/runtime/emit/cte-reference.js.map +0 -1
  182. package/dist/src/runtime/emit/cte.js.map +0 -1
  183. package/dist/src/runtime/emit/delete.js.map +0 -1
  184. package/dist/src/runtime/emit/distinct.js.map +0 -1
  185. package/dist/src/runtime/emit/dml-executor.js.map +0 -1
  186. package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
  187. package/dist/src/runtime/emit/drop-table.js.map +0 -1
  188. package/dist/src/runtime/emit/drop-view.js.map +0 -1
  189. package/dist/src/runtime/emit/filter.js.map +0 -1
  190. package/dist/src/runtime/emit/insert.js.map +0 -1
  191. package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
  192. package/dist/src/runtime/emit/join.js.map +0 -1
  193. package/dist/src/runtime/emit/limit-offset.js.map +0 -1
  194. package/dist/src/runtime/emit/literal.js.map +0 -1
  195. package/dist/src/runtime/emit/parameter.js.map +0 -1
  196. package/dist/src/runtime/emit/pragma.js.map +0 -1
  197. package/dist/src/runtime/emit/project.js.map +0 -1
  198. package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
  199. package/dist/src/runtime/emit/remote-query.js.map +0 -1
  200. package/dist/src/runtime/emit/retrieve.js.map +0 -1
  201. package/dist/src/runtime/emit/returning.js.map +0 -1
  202. package/dist/src/runtime/emit/scalar-function.js.map +0 -1
  203. package/dist/src/runtime/emit/scan.js.map +0 -1
  204. package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
  205. package/dist/src/runtime/emit/sequencing.js.map +0 -1
  206. package/dist/src/runtime/emit/set-operation.js.map +0 -1
  207. package/dist/src/runtime/emit/sink.js.map +0 -1
  208. package/dist/src/runtime/emit/sort.js.map +0 -1
  209. package/dist/src/runtime/emit/subquery.js.map +0 -1
  210. package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
  211. package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
  212. package/dist/src/runtime/emit/transaction.js.map +0 -1
  213. package/dist/src/runtime/emit/unary.js.map +0 -1
  214. package/dist/src/runtime/emit/update.js.map +0 -1
  215. package/dist/src/runtime/emit/values.js.map +0 -1
  216. package/dist/src/runtime/emit/window-function.js.map +0 -1
  217. package/dist/src/runtime/emit/window.js.map +0 -1
  218. package/dist/src/runtime/emitters.js.map +0 -1
  219. package/dist/src/runtime/register.js.map +0 -1
  220. package/dist/src/runtime/scheduler.js.map +0 -1
  221. package/dist/src/runtime/types.js.map +0 -1
  222. package/dist/src/runtime/utils.js.map +0 -1
  223. package/dist/src/schema/assertion.js.map +0 -1
  224. package/dist/src/schema/catalog.js.map +0 -1
  225. package/dist/src/schema/change-events.js.map +0 -1
  226. package/dist/src/schema/column.js.map +0 -1
  227. package/dist/src/schema/declared-schema-manager.js.map +0 -1
  228. package/dist/src/schema/function.js.map +0 -1
  229. package/dist/src/schema/manager.js.map +0 -1
  230. package/dist/src/schema/schema-differ.js.map +0 -1
  231. package/dist/src/schema/schema-hasher.js.map +0 -1
  232. package/dist/src/schema/schema.js.map +0 -1
  233. package/dist/src/schema/table.js.map +0 -1
  234. package/dist/src/schema/view.js.map +0 -1
  235. package/dist/src/schema/window-function.js.map +0 -1
  236. package/dist/src/types/builtin-types.js.map +0 -1
  237. package/dist/src/types/index.js.map +0 -1
  238. package/dist/src/types/json-type.js.map +0 -1
  239. package/dist/src/types/logical-type.js.map +0 -1
  240. package/dist/src/types/plugin-interface.js.map +0 -1
  241. package/dist/src/types/registry.js.map +0 -1
  242. package/dist/src/types/temporal-types.js.map +0 -1
  243. package/dist/src/types/validation.js.map +0 -1
  244. package/dist/src/util/affinity.js.map +0 -1
  245. package/dist/src/util/ast-stringify.js.map +0 -1
  246. package/dist/src/util/cached.js.map +0 -1
  247. package/dist/src/util/coercion.js.map +0 -1
  248. package/dist/src/util/comparison.js.map +0 -1
  249. package/dist/src/util/environment.js.map +0 -1
  250. package/dist/src/util/hash.js.map +0 -1
  251. package/dist/src/util/latches.js.map +0 -1
  252. package/dist/src/util/mutation-statement.js.map +0 -1
  253. package/dist/src/util/patterns.js.map +0 -1
  254. package/dist/src/util/plan-formatter.js.map +0 -1
  255. package/dist/src/util/plugin-helper.js.map +0 -1
  256. package/dist/src/util/row-descriptor.js.map +0 -1
  257. package/dist/src/util/serialization.js.map +0 -1
  258. package/dist/src/util/sql-literal.js.map +0 -1
  259. package/dist/src/util/working-table-iterable.js.map +0 -1
  260. package/dist/src/vtab/best-access-plan.js.map +0 -1
  261. package/dist/src/vtab/connection.js.map +0 -1
  262. package/dist/src/vtab/filter-info.js.map +0 -1
  263. package/dist/src/vtab/index-info.js.map +0 -1
  264. package/dist/src/vtab/manifest.js.map +0 -1
  265. package/dist/src/vtab/memory/connection.js.map +0 -1
  266. package/dist/src/vtab/memory/index.js.map +0 -1
  267. package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
  268. package/dist/src/vtab/memory/layer/base.js.map +0 -1
  269. package/dist/src/vtab/memory/layer/connection.js.map +0 -1
  270. package/dist/src/vtab/memory/layer/interface.js.map +0 -1
  271. package/dist/src/vtab/memory/layer/manager.js.map +0 -1
  272. package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
  273. package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
  274. package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
  275. package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
  276. package/dist/src/vtab/memory/module.js.map +0 -1
  277. package/dist/src/vtab/memory/table.js.map +0 -1
  278. package/dist/src/vtab/memory/types.js.map +0 -1
  279. package/dist/src/vtab/memory/utils/logging.js.map +0 -1
  280. package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
  281. package/dist/src/vtab/module.js.map +0 -1
  282. package/dist/src/vtab/table.js.map +0 -1
  283. package/src/common/constants.ts +0 -60
  284. package/src/common/datatype.ts +0 -85
  285. package/src/common/errors.ts +0 -189
  286. package/src/common/json-types.ts +0 -16
  287. package/src/common/logger.ts +0 -97
  288. package/src/common/type-inference.ts +0 -39
  289. package/src/common/types.ts +0 -151
  290. package/src/core/database-options.ts +0 -258
  291. package/src/core/database.ts +0 -1461
  292. package/src/core/param.ts +0 -56
  293. package/src/core/statement.ts +0 -528
  294. package/src/func/builtins/aggregate.ts +0 -269
  295. package/src/func/builtins/builtin-window-functions.ts +0 -166
  296. package/src/func/builtins/conversion.ts +0 -226
  297. package/src/func/builtins/datetime.ts +0 -500
  298. package/src/func/builtins/explain.ts +0 -779
  299. package/src/func/builtins/generation.ts +0 -43
  300. package/src/func/builtins/index.ts +0 -167
  301. package/src/func/builtins/json-helpers.ts +0 -237
  302. package/src/func/builtins/json-tvf.ts +0 -224
  303. package/src/func/builtins/json.ts +0 -588
  304. package/src/func/builtins/scalar.ts +0 -423
  305. package/src/func/builtins/schema.ts +0 -213
  306. package/src/func/builtins/string.ts +0 -306
  307. package/src/func/builtins/timespan.ts +0 -179
  308. package/src/func/context.ts +0 -258
  309. package/src/func/registration.ts +0 -201
  310. package/src/index.ts +0 -172
  311. package/src/parser/ast.ts +0 -581
  312. package/src/parser/index.ts +0 -65
  313. package/src/parser/lexer.ts +0 -806
  314. package/src/parser/parser.ts +0 -3352
  315. package/src/parser/utils.ts +0 -10
  316. package/src/parser/visitor.ts +0 -188
  317. package/src/planner/analysis/README.md +0 -93
  318. package/src/planner/analysis/binding-collector.ts +0 -83
  319. package/src/planner/analysis/const-evaluator.ts +0 -63
  320. package/src/planner/analysis/const-pass.ts +0 -282
  321. package/src/planner/analysis/constraint-extractor.ts +0 -764
  322. package/src/planner/analysis/predicate-normalizer.ts +0 -237
  323. package/src/planner/building/alter-table.ts +0 -49
  324. package/src/planner/building/block.ts +0 -93
  325. package/src/planner/building/constraint-builder.ts +0 -178
  326. package/src/planner/building/create-assertion.ts +0 -7
  327. package/src/planner/building/create-view.ts +0 -29
  328. package/src/planner/building/ddl.ts +0 -24
  329. package/src/planner/building/declare-schema.ts +0 -22
  330. package/src/planner/building/delete.ts +0 -218
  331. package/src/planner/building/drop-assertion.ts +0 -11
  332. package/src/planner/building/drop-table.ts +0 -13
  333. package/src/planner/building/drop-view.ts +0 -19
  334. package/src/planner/building/expression.ts +0 -205
  335. package/src/planner/building/function-call.ts +0 -129
  336. package/src/planner/building/insert.ts +0 -435
  337. package/src/planner/building/pragma.ts +0 -34
  338. package/src/planner/building/schema-resolution.ts +0 -176
  339. package/src/planner/building/select-aggregates.ts +0 -318
  340. package/src/planner/building/select-compound.ts +0 -119
  341. package/src/planner/building/select-context.ts +0 -85
  342. package/src/planner/building/select-modifiers.ts +0 -236
  343. package/src/planner/building/select-projections.ts +0 -177
  344. package/src/planner/building/select-window.ts +0 -259
  345. package/src/planner/building/select.ts +0 -567
  346. package/src/planner/building/table-function.ts +0 -49
  347. package/src/planner/building/table.ts +0 -40
  348. package/src/planner/building/transaction.ts +0 -23
  349. package/src/planner/building/update.ts +0 -331
  350. package/src/planner/building/with.ts +0 -180
  351. package/src/planner/cache/correlation-detector.ts +0 -83
  352. package/src/planner/cache/materialization-advisory.ts +0 -265
  353. package/src/planner/cache/reference-graph.ts +0 -196
  354. package/src/planner/cost/index.ts +0 -169
  355. package/src/planner/debug/logger-utils.ts +0 -68
  356. package/src/planner/debug.ts +0 -480
  357. package/src/planner/framework/README.md +0 -132
  358. package/src/planner/framework/characteristics.ts +0 -503
  359. package/src/planner/framework/context.ts +0 -239
  360. package/src/planner/framework/pass.ts +0 -354
  361. package/src/planner/framework/physical-utils.ts +0 -210
  362. package/src/planner/framework/registry.ts +0 -261
  363. package/src/planner/framework/trace.ts +0 -259
  364. package/src/planner/nodes/add-constraint-node.ts +0 -62
  365. package/src/planner/nodes/aggregate-function.ts +0 -155
  366. package/src/planner/nodes/aggregate-node.ts +0 -267
  367. package/src/planner/nodes/array-index-node.ts +0 -50
  368. package/src/planner/nodes/block.ts +0 -80
  369. package/src/planner/nodes/cache-node.ts +0 -103
  370. package/src/planner/nodes/constraint-check-node.ts +0 -138
  371. package/src/planner/nodes/create-assertion-node.ts +0 -51
  372. package/src/planner/nodes/create-index-node.ts +0 -41
  373. package/src/planner/nodes/create-table-node.ts +0 -35
  374. package/src/planner/nodes/create-view-node.ts +0 -44
  375. package/src/planner/nodes/cte-node.ts +0 -168
  376. package/src/planner/nodes/cte-reference-node.ts +0 -125
  377. package/src/planner/nodes/declarative-schema.ts +0 -221
  378. package/src/planner/nodes/delete-node.ts +0 -102
  379. package/src/planner/nodes/distinct-node.ts +0 -107
  380. package/src/planner/nodes/dml-executor-node.ts +0 -104
  381. package/src/planner/nodes/drop-assertion-node.ts +0 -50
  382. package/src/planner/nodes/drop-table-node.ts +0 -36
  383. package/src/planner/nodes/drop-view-node.ts +0 -37
  384. package/src/planner/nodes/filter.ts +0 -144
  385. package/src/planner/nodes/function.ts +0 -98
  386. package/src/planner/nodes/insert-node.ts +0 -126
  387. package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
  388. package/src/planner/nodes/join-node.ts +0 -336
  389. package/src/planner/nodes/limit-offset.ts +0 -144
  390. package/src/planner/nodes/plan-node-type.ts +0 -95
  391. package/src/planner/nodes/plan-node.ts +0 -503
  392. package/src/planner/nodes/pragma.ts +0 -98
  393. package/src/planner/nodes/project-node.ts +0 -337
  394. package/src/planner/nodes/recursive-cte-node.ts +0 -158
  395. package/src/planner/nodes/reference.ts +0 -334
  396. package/src/planner/nodes/remote-query-node.ts +0 -73
  397. package/src/planner/nodes/retrieve-node.ts +0 -86
  398. package/src/planner/nodes/returning-node.ts +0 -269
  399. package/src/planner/nodes/scalar.ts +0 -772
  400. package/src/planner/nodes/sequencing-node.ts +0 -113
  401. package/src/planner/nodes/set-operation-node.ts +0 -87
  402. package/src/planner/nodes/single-row.ts +0 -85
  403. package/src/planner/nodes/sink-node.ts +0 -61
  404. package/src/planner/nodes/sort.ts +0 -166
  405. package/src/planner/nodes/stream-aggregate.ts +0 -293
  406. package/src/planner/nodes/subquery.ts +0 -268
  407. package/src/planner/nodes/table-access-nodes.ts +0 -323
  408. package/src/planner/nodes/table-function-call.ts +0 -134
  409. package/src/planner/nodes/transaction-node.ts +0 -55
  410. package/src/planner/nodes/update-node.ts +0 -138
  411. package/src/planner/nodes/values-node.ts +0 -244
  412. package/src/planner/nodes/view-reference-node.ts +0 -97
  413. package/src/planner/nodes/window-function.ts +0 -73
  414. package/src/planner/nodes/window-node.ts +0 -199
  415. package/src/planner/optimizer-tuning.ts +0 -105
  416. package/src/planner/optimizer.ts +0 -332
  417. package/src/planner/planning-context.ts +0 -190
  418. package/src/planner/resolve.ts +0 -101
  419. package/src/planner/rules/README.md +0 -96
  420. package/src/planner/rules/access/rule-select-access-path.ts +0 -399
  421. package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
  422. package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
  423. package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
  424. package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
  425. package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
  426. package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
  427. package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
  428. package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
  429. package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
  430. package/src/planner/scopes/aliased.ts +0 -50
  431. package/src/planner/scopes/base.ts +0 -10
  432. package/src/planner/scopes/empty.ts +0 -12
  433. package/src/planner/scopes/global.ts +0 -73
  434. package/src/planner/scopes/multi.ts +0 -40
  435. package/src/planner/scopes/param.ts +0 -95
  436. package/src/planner/scopes/registered.ts +0 -67
  437. package/src/planner/scopes/scope.ts +0 -16
  438. package/src/planner/stats/basic-estimates.ts +0 -107
  439. package/src/planner/stats/index.ts +0 -158
  440. package/src/planner/type-utils.ts +0 -87
  441. package/src/planner/util/key-utils.ts +0 -46
  442. package/src/planner/validation/determinism-validator.ts +0 -104
  443. package/src/planner/validation/plan-validator.ts +0 -335
  444. package/src/runtime/async-util.ts +0 -283
  445. package/src/runtime/cache/shared-cache.ts +0 -169
  446. package/src/runtime/context-helpers.ts +0 -191
  447. package/src/runtime/deferred-constraint-queue.ts +0 -196
  448. package/src/runtime/emission-context.ts +0 -319
  449. package/src/runtime/emit/add-constraint.ts +0 -78
  450. package/src/runtime/emit/aggregate.ts +0 -581
  451. package/src/runtime/emit/array-index.ts +0 -25
  452. package/src/runtime/emit/between.ts +0 -51
  453. package/src/runtime/emit/binary.ts +0 -357
  454. package/src/runtime/emit/block.ts +0 -23
  455. package/src/runtime/emit/cache.ts +0 -64
  456. package/src/runtime/emit/case.ts +0 -87
  457. package/src/runtime/emit/cast.ts +0 -151
  458. package/src/runtime/emit/collate.ts +0 -9
  459. package/src/runtime/emit/column-reference.ts +0 -17
  460. package/src/runtime/emit/constraint-check.ts +0 -290
  461. package/src/runtime/emit/create-assertion.ts +0 -82
  462. package/src/runtime/emit/create-index.ts +0 -15
  463. package/src/runtime/emit/create-table.ts +0 -15
  464. package/src/runtime/emit/create-view.ts +0 -52
  465. package/src/runtime/emit/cte-reference.ts +0 -38
  466. package/src/runtime/emit/cte.ts +0 -39
  467. package/src/runtime/emit/delete.ts +0 -24
  468. package/src/runtime/emit/distinct.ts +0 -40
  469. package/src/runtime/emit/dml-executor.ts +0 -198
  470. package/src/runtime/emit/drop-assertion.ts +0 -45
  471. package/src/runtime/emit/drop-table.ts +0 -27
  472. package/src/runtime/emit/drop-view.ts +0 -49
  473. package/src/runtime/emit/filter.ts +0 -30
  474. package/src/runtime/emit/insert.ts +0 -42
  475. package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
  476. package/src/runtime/emit/join.ts +0 -148
  477. package/src/runtime/emit/limit-offset.ts +0 -73
  478. package/src/runtime/emit/literal.ts +0 -17
  479. package/src/runtime/emit/parameter.ts +0 -59
  480. package/src/runtime/emit/pragma.ts +0 -56
  481. package/src/runtime/emit/project.ts +0 -46
  482. package/src/runtime/emit/recursive-cte.ts +0 -111
  483. package/src/runtime/emit/remote-query.ts +0 -47
  484. package/src/runtime/emit/retrieve.ts +0 -15
  485. package/src/runtime/emit/returning.ts +0 -41
  486. package/src/runtime/emit/scalar-function.ts +0 -69
  487. package/src/runtime/emit/scan.ts +0 -106
  488. package/src/runtime/emit/schema-declarative.ts +0 -215
  489. package/src/runtime/emit/sequencing.ts +0 -24
  490. package/src/runtime/emit/set-operation.ts +0 -141
  491. package/src/runtime/emit/sink.ts +0 -27
  492. package/src/runtime/emit/sort.ts +0 -75
  493. package/src/runtime/emit/subquery.ts +0 -203
  494. package/src/runtime/emit/table-valued-function.ts +0 -106
  495. package/src/runtime/emit/temporal-arithmetic.ts +0 -302
  496. package/src/runtime/emit/transaction.ts +0 -205
  497. package/src/runtime/emit/unary.ts +0 -101
  498. package/src/runtime/emit/update.ts +0 -66
  499. package/src/runtime/emit/values.ts +0 -66
  500. package/src/runtime/emit/window-function.ts +0 -42
  501. package/src/runtime/emit/window.ts +0 -458
  502. package/src/runtime/emitters.ts +0 -183
  503. package/src/runtime/register.ts +0 -150
  504. package/src/runtime/scheduler.ts +0 -488
  505. package/src/runtime/types.ts +0 -242
  506. package/src/runtime/utils.ts +0 -177
  507. package/src/schema/assertion.ts +0 -21
  508. package/src/schema/catalog.ts +0 -269
  509. package/src/schema/change-events.ts +0 -80
  510. package/src/schema/column.ts +0 -51
  511. package/src/schema/declared-schema-manager.ts +0 -82
  512. package/src/schema/function.ts +0 -188
  513. package/src/schema/manager.ts +0 -1034
  514. package/src/schema/schema-differ.ts +0 -214
  515. package/src/schema/schema-hasher.ts +0 -26
  516. package/src/schema/schema.ts +0 -222
  517. package/src/schema/table.ts +0 -409
  518. package/src/schema/view.ts +0 -19
  519. package/src/schema/window-function.ts +0 -56
  520. package/src/types/builtin-types.ts +0 -350
  521. package/src/types/index.ts +0 -17
  522. package/src/types/json-type.ts +0 -152
  523. package/src/types/logical-type.ts +0 -91
  524. package/src/types/plugin-interface.ts +0 -10
  525. package/src/types/registry.ts +0 -204
  526. package/src/types/temporal-types.ts +0 -290
  527. package/src/types/validation.ts +0 -120
  528. package/src/util/affinity.ts +0 -151
  529. package/src/util/ast-stringify.ts +0 -887
  530. package/src/util/cached.ts +0 -25
  531. package/src/util/coercion.ts +0 -113
  532. package/src/util/comparison.ts +0 -510
  533. package/src/util/environment.ts +0 -52
  534. package/src/util/hash.ts +0 -90
  535. package/src/util/latches.ts +0 -47
  536. package/src/util/mutation-statement.ts +0 -135
  537. package/src/util/patterns.ts +0 -56
  538. package/src/util/plan-formatter.ts +0 -48
  539. package/src/util/plugin-helper.ts +0 -110
  540. package/src/util/row-descriptor.ts +0 -105
  541. package/src/util/serialization.ts +0 -47
  542. package/src/util/sql-literal.ts +0 -22
  543. package/src/util/working-table-iterable.ts +0 -38
  544. package/src/vtab/best-access-plan.ts +0 -244
  545. package/src/vtab/connection.ts +0 -36
  546. package/src/vtab/filter-info.ts +0 -23
  547. package/src/vtab/index-info.ts +0 -84
  548. package/src/vtab/manifest.ts +0 -86
  549. package/src/vtab/memory/connection.ts +0 -73
  550. package/src/vtab/memory/index.ts +0 -191
  551. package/src/vtab/memory/layer/base-cursor.ts +0 -124
  552. package/src/vtab/memory/layer/base.ts +0 -275
  553. package/src/vtab/memory/layer/connection.ts +0 -203
  554. package/src/vtab/memory/layer/interface.ts +0 -47
  555. package/src/vtab/memory/layer/manager.ts +0 -909
  556. package/src/vtab/memory/layer/safe-iterate.ts +0 -49
  557. package/src/vtab/memory/layer/scan-plan.ts +0 -84
  558. package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
  559. package/src/vtab/memory/layer/transaction.ts +0 -229
  560. package/src/vtab/memory/module.ts +0 -667
  561. package/src/vtab/memory/table.ts +0 -251
  562. package/src/vtab/memory/types.ts +0 -23
  563. package/src/vtab/memory/utils/logging.ts +0 -36
  564. package/src/vtab/memory/utils/primary-key.ts +0 -163
  565. package/src/vtab/module.ts +0 -162
  566. package/src/vtab/table.ts +0 -177
@@ -1,331 +0,0 @@
1
- import type * as AST from '../../parser/ast.js';
2
- import type { PlanningContext } from '../planning-context.js';
3
- import { UpdateNode, type UpdateAssignment } from '../nodes/update-node.js';
4
- import { DmlExecutorNode } from '../nodes/dml-executor-node.js';
5
- import { buildTableReference } from './table.js';
6
- import { buildExpression } from './expression.js';
7
- import { PlanNode, type RelationalPlanNode, type ScalarPlanNode, type Attribute, type RowDescriptor } from '../nodes/plan-node.js';
8
- import { FilterNode } from '../nodes/filter.js';
9
- import { QuereusError } from '../../common/errors.js';
10
- import { StatusCode } from '../../common/types.js';
11
- import { RegisteredScope } from '../scopes/registered.js';
12
- import { ColumnReferenceNode } from '../nodes/reference.js';
13
- import { SinkNode } from '../nodes/sink-node.js';
14
- import { ConstraintCheckNode } from '../nodes/constraint-check-node.js';
15
- import { RowOpFlag } from '../../schema/table.js';
16
- import { ReturningNode } from '../nodes/returning-node.js';
17
- import { buildOldNewRowDescriptors } from '../../util/row-descriptor.js';
18
- import { buildConstraintChecks } from './constraint-builder.js';
19
-
20
- export function buildUpdateStmt(
21
- ctx: PlanningContext,
22
- stmt: AST.UpdateStmt,
23
- ): PlanNode {
24
- const tableRetrieve = buildTableReference({ type: 'table', table: stmt.table }, ctx);
25
- const tableReference = tableRetrieve.tableRef; // Extract the actual TableReferenceNode
26
-
27
- // Process mutation context assignments if present
28
- const mutationContextValues = new Map<string, ScalarPlanNode>();
29
- const contextAttributes: Attribute[] = [];
30
-
31
- if (stmt.contextValues && tableReference.tableSchema.mutationContext) {
32
- // Create context attributes
33
- tableReference.tableSchema.mutationContext.forEach((contextVar) => {
34
- contextAttributes.push({
35
- id: PlanNode.nextAttrId(),
36
- name: contextVar.name,
37
- type: {
38
- typeClass: 'scalar' as const,
39
- logicalType: contextVar.logicalType,
40
- nullable: !contextVar.notNull,
41
- isReadOnly: true
42
- },
43
- sourceRelation: `context.${tableReference.tableSchema.name}`
44
- });
45
- });
46
-
47
- // Build context value expressions (evaluated in the base scope, before table scope)
48
- stmt.contextValues.forEach((assignment) => {
49
- const valueExpr = buildExpression(ctx, assignment.value) as ScalarPlanNode;
50
- mutationContextValues.set(assignment.name, valueExpr);
51
- });
52
- }
53
-
54
- // Plan the source of rows to update. This is typically the table itself, potentially filtered.
55
- let sourceNode: RelationalPlanNode = buildTableReference({ type: 'table', table: stmt.table }, ctx);
56
-
57
- // Create a new scope with the table columns registered for column resolution
58
- const tableScope = new RegisteredScope(ctx.scope);
59
- const sourceAttributes = sourceNode.getAttributes();
60
- sourceNode.getType().columns.forEach((c, i) => {
61
- const attr = sourceAttributes[i];
62
- tableScope.registerSymbol(c.name.toLowerCase(), (exp, s) =>
63
- new ColumnReferenceNode(s, exp as AST.ColumnExpr, c.type, attr.id, i));
64
- });
65
-
66
- // Create a new planning context with the updated scope for WHERE clause resolution
67
- const updateCtx = { ...ctx, scope: tableScope };
68
-
69
- // IMPORTANT: Build assignments FIRST to ensure parameter indices match SQL text order.
70
- // SQL: UPDATE t SET col = ?1 WHERE id = ?2
71
- // The SET clause parameters must be resolved before WHERE clause parameters.
72
- const assignments: UpdateAssignment[] = stmt.assignments.map(assign => {
73
- // TODO: Validate assign.column against tableReference.tableSchema
74
- const targetColumn: AST.ColumnExpr = { type: 'column', name: assign.column, table: stmt.table.name, schema: stmt.table.schema };
75
- return {
76
- targetColumn, // Keep as AST for now, emitter can resolve index
77
- value: buildExpression(updateCtx, assign.value),
78
- };
79
- });
80
-
81
- // Now build the WHERE filter (parameters here get indices after SET clause parameters)
82
- if (stmt.where) {
83
- const filterExpression = buildExpression(updateCtx, stmt.where);
84
- sourceNode = new FilterNode(updateCtx.scope, sourceNode, filterExpression);
85
- }
86
-
87
- // Create OLD/NEW attributes for UPDATE (used for both RETURNING and non-RETURNING paths)
88
- const oldAttributes = tableReference.tableSchema.columns.map((col) => ({
89
- id: PlanNode.nextAttrId(),
90
- name: col.name,
91
- type: {
92
- typeClass: 'scalar' as const,
93
- logicalType: col.logicalType,
94
- nullable: !col.notNull,
95
- isReadOnly: false
96
- },
97
- sourceRelation: `OLD.${tableReference.tableSchema.name}`
98
- }));
99
-
100
- const newAttributes = tableReference.tableSchema.columns.map((col) => ({
101
- id: PlanNode.nextAttrId(),
102
- name: col.name,
103
- type: {
104
- typeClass: 'scalar' as const,
105
- logicalType: col.logicalType,
106
- nullable: !col.notNull,
107
- isReadOnly: false
108
- },
109
- sourceRelation: `NEW.${tableReference.tableSchema.name}`
110
- }));
111
-
112
- const { oldRowDescriptor, newRowDescriptor, flatRowDescriptor } = buildOldNewRowDescriptors(oldAttributes, newAttributes);
113
-
114
- // Build context descriptor if we have context attributes
115
- const contextDescriptor: RowDescriptor = contextAttributes.length > 0 ? [] : undefined as any;
116
- if (contextDescriptor) {
117
- contextAttributes.forEach((attr, index) => {
118
- contextDescriptor[attr.id] = index;
119
- });
120
- }
121
-
122
- // Build constraint checks at plan time
123
- const constraintChecks = buildConstraintChecks(
124
- updateCtx,
125
- tableReference.tableSchema,
126
- RowOpFlag.UPDATE,
127
- oldAttributes,
128
- newAttributes,
129
- flatRowDescriptor,
130
- contextAttributes
131
- );
132
-
133
- if (stmt.returning && stmt.returning.length > 0) {
134
- // For RETURNING, create coordinated attribute IDs like we do for INSERT
135
- const returningScope = new RegisteredScope(updateCtx.scope);
136
-
137
- // Create consistent attribute IDs for all table columns (both NEW and OLD)
138
- const newColumnAttributeIds: number[] = [];
139
- const oldColumnAttributeIds: number[] = [];
140
- newAttributes.forEach((attr, columnIndex) => {
141
- newColumnAttributeIds[columnIndex] = attr.id;
142
- });
143
- oldAttributes.forEach((attr, columnIndex) => {
144
- oldColumnAttributeIds[columnIndex] = attr.id;
145
- });
146
-
147
- tableReference.tableSchema.columns.forEach((tableColumn, columnIndex) => {
148
- const newAttributeId = newAttributes[columnIndex].id;
149
- const oldAttributeId = oldAttributes[columnIndex].id;
150
-
151
- // Register the unqualified column name in the RETURNING scope (defaults to NEW values)
152
- returningScope.registerSymbol(tableColumn.name.toLowerCase(), (exp, s) => {
153
- return new ColumnReferenceNode(
154
- s,
155
- exp as AST.ColumnExpr,
156
- {
157
- typeClass: 'scalar',
158
- logicalType: tableColumn.logicalType,
159
- nullable: !tableColumn.notNull,
160
- isReadOnly: false
161
- },
162
- newAttributeId,
163
- columnIndex
164
- );
165
- });
166
-
167
- // Also register the table-qualified form (table.column) - defaults to NEW values
168
- const tblQualified = `${tableReference.tableSchema.name.toLowerCase()}.${tableColumn.name.toLowerCase()}`;
169
- returningScope.registerSymbol(tblQualified, (exp, s) =>
170
- new ColumnReferenceNode(
171
- s,
172
- exp as AST.ColumnExpr,
173
- {
174
- typeClass: 'scalar',
175
- logicalType: tableColumn.logicalType,
176
- nullable: !tableColumn.notNull,
177
- isReadOnly: false
178
- },
179
- newAttributeId,
180
- columnIndex
181
- )
182
- );
183
-
184
- // Register NEW.column for UPDATE RETURNING (updated values)
185
- returningScope.registerSymbol(`new.${tableColumn.name.toLowerCase()}`, (exp, s) =>
186
- new ColumnReferenceNode(
187
- s,
188
- exp as AST.ColumnExpr,
189
- {
190
- typeClass: 'scalar',
191
- logicalType: tableColumn.logicalType,
192
- nullable: !tableColumn.notNull,
193
- isReadOnly: false
194
- },
195
- newAttributeId,
196
- columnIndex
197
- )
198
- );
199
-
200
- // Register OLD.column for UPDATE RETURNING (original values)
201
- returningScope.registerSymbol(`old.${tableColumn.name.toLowerCase()}`, (exp, s) =>
202
- new ColumnReferenceNode(
203
- s,
204
- exp as AST.ColumnExpr,
205
- {
206
- typeClass: 'scalar',
207
- logicalType: tableColumn.logicalType,
208
- nullable: !tableColumn.notNull,
209
- isReadOnly: false
210
- },
211
- oldAttributeId,
212
- columnIndex
213
- )
214
- );
215
- });
216
-
217
- const returningProjections = stmt.returning.map(rc => {
218
- // TODO: Support RETURNING *
219
- if (rc.type === 'all') throw new QuereusError('RETURNING * not yet supported', StatusCode.UNSUPPORTED);
220
-
221
- // Infer alias from column name if not explicitly provided
222
- let alias = rc.alias;
223
- if (!alias && rc.expr.type === 'column') {
224
- // For qualified column references like NEW.id or OLD.id, normalize to lowercase
225
- if (rc.expr.table) {
226
- alias = `${rc.expr.table.toLowerCase()}.${rc.expr.name.toLowerCase()}`;
227
- } else {
228
- alias = rc.expr.name.toLowerCase();
229
- }
230
- }
231
-
232
- const columnIndex = tableReference.tableSchema.columns.findIndex(col => col.name.toLowerCase() === (rc.expr.type === 'column' ? rc.expr.name.toLowerCase() : ''));
233
- const projAttributeId = rc.expr.type === 'column' && columnIndex !== -1 ? newColumnAttributeIds[columnIndex] : undefined;
234
-
235
- return {
236
- node: buildExpression({ ...updateCtx, scope: returningScope }, rc.expr) as ScalarPlanNode,
237
- alias: alias,
238
- attributeId: projAttributeId
239
- };
240
- });
241
-
242
- // Create UpdateNode with both row descriptors for RETURNING coordination
243
- const updateNodeWithDescriptor = new UpdateNode(
244
- updateCtx.scope,
245
- tableReference,
246
- assignments,
247
- sourceNode,
248
- stmt.onConflict,
249
- oldRowDescriptor,
250
- newRowDescriptor,
251
- flatRowDescriptor,
252
- mutationContextValues.size > 0 ? mutationContextValues : undefined,
253
- contextAttributes.length > 0 ? contextAttributes : undefined,
254
- contextDescriptor
255
- );
256
-
257
- // For returning, we still need to execute the update before projecting
258
- // Always inject ConstraintCheckNode for UPDATE operations (provides required metadata)
259
- const constraintCheckNode = new ConstraintCheckNode(
260
- updateCtx.scope,
261
- updateNodeWithDescriptor,
262
- tableReference,
263
- RowOpFlag.UPDATE,
264
- oldRowDescriptor,
265
- newRowDescriptor,
266
- flatRowDescriptor,
267
- constraintChecks,
268
- mutationContextValues.size > 0 ? mutationContextValues : undefined,
269
- contextAttributes.length > 0 ? contextAttributes : undefined,
270
- contextDescriptor
271
- );
272
-
273
- const updateExecutorNode = new DmlExecutorNode(
274
- updateCtx.scope,
275
- constraintCheckNode,
276
- tableReference,
277
- 'update',
278
- undefined, // onConflict not used for UPDATE
279
- mutationContextValues.size > 0 ? mutationContextValues : undefined,
280
- contextAttributes.length > 0 ? contextAttributes : undefined,
281
- contextDescriptor
282
- );
283
-
284
- // Return the RETURNING results from the executed update
285
- return new ReturningNode(updateCtx.scope, updateExecutorNode, returningProjections);
286
- }
287
-
288
- // Step 1: Create UpdateNode that produces updated rows (but doesn't execute them)
289
- // Create newRowDescriptor and oldRowDescriptor for constraint checking with NEW/OLD references
290
- const updateNode = new UpdateNode(
291
- updateCtx.scope,
292
- tableReference,
293
- assignments,
294
- sourceNode,
295
- stmt.onConflict,
296
- oldRowDescriptor,
297
- newRowDescriptor,
298
- flatRowDescriptor,
299
- mutationContextValues.size > 0 ? mutationContextValues : undefined,
300
- contextAttributes.length > 0 ? contextAttributes : undefined,
301
- contextDescriptor
302
- );
303
-
304
- // Step 2: inject constraint checking AFTER update row generation
305
- const constraintCheckNode = new ConstraintCheckNode(
306
- updateCtx.scope,
307
- updateNode,
308
- tableReference,
309
- RowOpFlag.UPDATE,
310
- oldRowDescriptor,
311
- newRowDescriptor,
312
- flatRowDescriptor,
313
- constraintChecks,
314
- mutationContextValues.size > 0 ? mutationContextValues : undefined,
315
- contextAttributes.length > 0 ? contextAttributes : undefined,
316
- contextDescriptor
317
- );
318
-
319
- const updateExecutorNode = new DmlExecutorNode(
320
- updateCtx.scope,
321
- constraintCheckNode,
322
- tableReference,
323
- 'update',
324
- undefined, // onConflict not used for UPDATE
325
- mutationContextValues.size > 0 ? mutationContextValues : undefined,
326
- contextAttributes.length > 0 ? contextAttributes : undefined,
327
- contextDescriptor
328
- );
329
-
330
- return new SinkNode(updateCtx.scope, updateExecutorNode, 'update');
331
- }
@@ -1,180 +0,0 @@
1
- import type * as AST from '../../parser/ast.js';
2
- import type { PlanningContext } from '../planning-context.js';
3
- import { CTENode, type CTEPlanNode, type CTEScopeNode } from '../nodes/cte-node.js';
4
- import { RecursiveCTENode } from '../nodes/recursive-cte-node.js';
5
- import { InternalRecursiveCTERefNode } from '../nodes/internal-recursive-cte-ref-node.js';
6
- import { buildSelectStmt } from './select.js';
7
- import type { RelationalPlanNode } from '../nodes/plan-node.js';
8
- import { QuereusError } from '../../common/errors.js';
9
- import { StatusCode } from '../../common/types.js';
10
- import { RegisteredScope } from '../scopes/registered.js';
11
- import { ColumnReferenceNode } from '../nodes/reference.js';
12
-
13
- /**
14
- * Builds plan nodes for Common Table Expressions (CTEs) within a WITH clause.
15
- * Returns a map of CTE names to their corresponding CTENode instances.
16
- */
17
- export function buildWithClause(
18
- ctx: PlanningContext,
19
- withClause: AST.WithClause
20
- ): Map<string, CTEScopeNode> {
21
- const cteNodes = new Map<string, CTEScopeNode>();
22
-
23
- // Check for duplicate CTE names
24
- const cteNames = new Set<string>();
25
- for (const cte of withClause.ctes) {
26
- const cteName = cte.name.toLowerCase();
27
- if (cteNames.has(cteName)) {
28
- throw new QuereusError(
29
- `Duplicate CTE name '${cte.name}' in WITH clause`,
30
- StatusCode.ERROR
31
- );
32
- }
33
- cteNames.add(cteName);
34
- }
35
-
36
- // Build each CTE in order
37
- // Note: For recursive CTEs, we may need to handle forward references
38
- for (const cte of withClause.ctes) {
39
- const cteNode = buildCommonTableExpr(ctx, cte, withClause.recursive, cteNodes, withClause.options) as CTEScopeNode;
40
- cteNodes.set(cte.name.toLowerCase(), cteNode);
41
- }
42
-
43
- return cteNodes;
44
- }
45
-
46
- /**
47
- * Builds a plan node for a single Common Table Expression.
48
- */
49
- export function buildCommonTableExpr(
50
- ctx: PlanningContext,
51
- cte: AST.CommonTableExpr,
52
- isRecursive: boolean,
53
- existingCTEs: Map<string, CTEScopeNode>,
54
- options?: AST.WithClauseOptions
55
- ): CTEPlanNode {
56
- // Create a context that includes previously defined CTEs in scope
57
- // This allows later CTEs to reference earlier ones
58
- const cteContext = { ...ctx };
59
-
60
- // Add existing CTEs to the scope for forward references
61
- const cteScope = new RegisteredScope(ctx.scope);
62
- for (const [cteName, cteNode] of existingCTEs) {
63
- const attributes = cteNode.getAttributes();
64
- cteNode.getType().columns.forEach((col, i) => {
65
- const attr = attributes[i];
66
- // Register CTE columns with qualified names only to avoid conflicts with table columns
67
- const qualifiedColumnName = `${cteName}.${col.name.toLowerCase()}`;
68
- cteScope.registerSymbol(qualifiedColumnName, (exp, s) =>
69
- new ColumnReferenceNode(s, exp as AST.ColumnExpr, col.type, attr.id, i));
70
- });
71
- }
72
- cteContext.scope = cteScope;
73
-
74
- // Check if this is a recursive CTE with UNION structure
75
- if (isRecursive && cte.query.type === 'select' && cte.query.compound) {
76
- return buildRecursiveCTE(cteContext, cte, options);
77
- }
78
-
79
- // For non-recursive CTEs or recursive CTEs without UNION structure
80
- let query: RelationalPlanNode;
81
-
82
- if (cte.query.type === 'select') {
83
- query = buildSelectStmt(cteContext, cte.query) as RelationalPlanNode;
84
- } else {
85
- // CTE can also be INSERT, UPDATE, or DELETE statements
86
- throw new QuereusError(
87
- 'Non-SELECT CTEs are not yet supported',
88
- StatusCode.UNSUPPORTED
89
- );
90
- }
91
-
92
- // Determine materialization strategy
93
- let materializationHint = cte.materializationHint;
94
- if (!materializationHint) {
95
- // Default strategy: materialize if CTE is likely to be reused
96
- // For now, we'll default to not materialized for simplicity
97
- materializationHint = 'not_materialized';
98
- }
99
-
100
- return new CTENode(
101
- ctx.scope,
102
- cte.name,
103
- cte.columns,
104
- query,
105
- materializationHint,
106
- isRecursive
107
- );
108
- }
109
-
110
- /**
111
- * Builds a recursive CTE node from a CTE with UNION structure.
112
- */
113
- function buildRecursiveCTE(
114
- ctx: PlanningContext,
115
- cte: AST.CommonTableExpr,
116
- options?: AST.WithClauseOptions
117
- ): RecursiveCTENode {
118
- const selectStmt = cte.query as AST.SelectStmt;
119
-
120
- // Validate recursive CTE structure - check for compound operation
121
- if (!selectStmt.compound) {
122
- throw new QuereusError(
123
- `Recursive CTE '${cte.name}' must use UNION or UNION ALL`,
124
- StatusCode.ERROR
125
- );
126
- }
127
-
128
- // Extract base case (the main SELECT) and recursive case (the compound part)
129
- const baseCaseStmt: AST.SelectStmt = {
130
- ...selectStmt,
131
- compound: undefined
132
- };
133
-
134
- const recursiveCaseStmt = selectStmt.compound.select;
135
- const isUnionAll = selectStmt.compound.op === 'unionAll';
136
-
137
- // Build the base case query (without CTE self-reference)
138
- const baseCaseQuery = buildSelectStmt(ctx, baseCaseStmt) as RelationalPlanNode;
139
-
140
- // Determine materialization strategy (recursive CTEs should typically be materialized)
141
- const materializationHint = cte.materializationHint || 'materialized';
142
-
143
- // Create the final recursive CTE node first (so we have the tableDescriptor)
144
- const recursiveCTENode = new RecursiveCTENode(
145
- ctx.scope,
146
- cte.name,
147
- cte.columns,
148
- baseCaseQuery,
149
- baseCaseQuery, // Temporary - will be replaced with actual recursive case
150
- isUnionAll,
151
- materializationHint,
152
- options?.maxRecursion
153
- );
154
-
155
- // For the recursive case, we need to create a special context where the CTE name
156
- // references the working table (this will be handled at runtime)
157
- const recursiveContext = { ...ctx };
158
-
159
- // Create an internal recursive reference node that will look up the working table at runtime
160
- const internalRefNode = new InternalRecursiveCTERefNode(
161
- ctx.scope,
162
- cte.name,
163
- recursiveCTENode.getAttributes(),
164
- recursiveCTENode.getType(),
165
- recursiveCTENode.tableDescriptor
166
- );
167
-
168
- // Build the recursive case query with a simple replacement strategy
169
- // We'll replace CTE references with the internal recursive reference during the FROM clause processing
170
- const recursiveCteMap = new Map<string, CTEScopeNode>();
171
- recursiveCteMap.set(cte.name.toLowerCase(), internalRefNode);
172
-
173
- // Build the recursive case query
174
- const recursiveCaseQuery = buildSelectStmt(recursiveContext, recursiveCaseStmt, recursiveCteMap) as RelationalPlanNode;
175
-
176
- // Now update the recursive CTE node with the actual recursive case query
177
- recursiveCTENode.setRecursiveCaseQuery(recursiveCaseQuery);
178
-
179
- return recursiveCTENode;
180
- }
@@ -1,83 +0,0 @@
1
- /**
2
- * Utility to detect correlated subqueries
3
- * A subquery is correlated if it references columns from outer query scopes
4
- */
5
-
6
- import { isRelationalNode, type PlanNode, type RelationalPlanNode } from '../nodes/plan-node.js';
7
- import { PlanNodeType } from '../nodes/plan-node-type.js';
8
- import type { ColumnReferenceNode } from '../nodes/reference.js';
9
-
10
- /**
11
- * Detects if a subquery is correlated by checking if it references any attributes
12
- * that are not defined within its own scope.
13
- */
14
- export function isCorrelatedSubquery(subqueryNode: RelationalPlanNode): boolean {
15
- // Collect all attributes defined within the subquery
16
- const definedAttributes = new Set<number>();
17
- collectDefinedAttributes(subqueryNode, definedAttributes);
18
-
19
- // Check if any column references use attributes not defined within the subquery
20
- return hasExternalReferences(subqueryNode, definedAttributes);
21
- }
22
-
23
- /**
24
- * Recursively collect all attributes defined by relational nodes within a subtree
25
- */
26
- function collectDefinedAttributes(node: PlanNode, definedAttributes: Set<number>): void {
27
- // If this is a relational node, add its attributes
28
- const isRelational = isRelationalNode(node);
29
- if (isRelational) {
30
- const attributes = node.getAttributes();
31
- for (const attr of attributes) {
32
- definedAttributes.add(attr.id);
33
- }
34
- }
35
-
36
- // Recursively process all children
37
- const children = node.getChildren();
38
- for (const child of children) {
39
- collectDefinedAttributes(child, definedAttributes);
40
- }
41
-
42
- // Also process relational children if any
43
- if (isRelational) {
44
- const relations = node.getRelations();
45
- for (const relation of relations) {
46
- collectDefinedAttributes(relation, definedAttributes);
47
- }
48
- }
49
- }
50
-
51
- /**
52
- * Check if the subtree contains any column references to attributes not in the defined set
53
- */
54
- function hasExternalReferences(node: PlanNode, definedAttributes: Set<number>): boolean {
55
- // Check if this is a column reference
56
- if (node.nodeType === PlanNodeType.ColumnReference) {
57
- const colRef = node as ColumnReferenceNode;
58
- // If the referenced attribute is not defined within the subquery, it's an external reference
59
- if (!definedAttributes.has(colRef.attributeId)) {
60
- return true; // Found a correlated reference
61
- }
62
- }
63
-
64
- // Check all children
65
- const children = node.getChildren();
66
- for (const child of children) {
67
- if (hasExternalReferences(child, definedAttributes)) {
68
- return true;
69
- }
70
- }
71
-
72
- // Also check relational children if any
73
- if (isRelationalNode(node)) {
74
- const relations = node.getRelations();
75
- for (const relation of relations) {
76
- if (hasExternalReferences(relation, definedAttributes)) {
77
- return true;
78
- }
79
- }
80
- }
81
-
82
- return false;
83
- }