@quereus/quereus 0.7.3 → 0.7.5

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 (568) hide show
  1. package/dist/src/schema/manager.d.ts.map +1 -1
  2. package/dist/src/schema/manager.js +19 -18
  3. package/package.json +3 -3
  4. package/dist/src/common/constants.js.map +0 -1
  5. package/dist/src/common/datatype.js.map +0 -1
  6. package/dist/src/common/errors.js.map +0 -1
  7. package/dist/src/common/json-types.js.map +0 -1
  8. package/dist/src/common/logger.js.map +0 -1
  9. package/dist/src/common/type-inference.js.map +0 -1
  10. package/dist/src/common/types.js.map +0 -1
  11. package/dist/src/core/database-options.js.map +0 -1
  12. package/dist/src/core/database.js.map +0 -1
  13. package/dist/src/core/param.js.map +0 -1
  14. package/dist/src/core/statement.js.map +0 -1
  15. package/dist/src/func/builtins/aggregate.js.map +0 -1
  16. package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
  17. package/dist/src/func/builtins/conversion.js.map +0 -1
  18. package/dist/src/func/builtins/datetime.js.map +0 -1
  19. package/dist/src/func/builtins/explain.js.map +0 -1
  20. package/dist/src/func/builtins/generation.js.map +0 -1
  21. package/dist/src/func/builtins/index.js.map +0 -1
  22. package/dist/src/func/builtins/json-helpers.js.map +0 -1
  23. package/dist/src/func/builtins/json-tvf.js.map +0 -1
  24. package/dist/src/func/builtins/json.js.map +0 -1
  25. package/dist/src/func/builtins/scalar.js.map +0 -1
  26. package/dist/src/func/builtins/schema.js.map +0 -1
  27. package/dist/src/func/builtins/string.js.map +0 -1
  28. package/dist/src/func/builtins/timespan.js.map +0 -1
  29. package/dist/src/func/context.js.map +0 -1
  30. package/dist/src/func/registration.js.map +0 -1
  31. package/dist/src/index.js.map +0 -1
  32. package/dist/src/parser/ast.js.map +0 -1
  33. package/dist/src/parser/index.js.map +0 -1
  34. package/dist/src/parser/lexer.js.map +0 -1
  35. package/dist/src/parser/parser.js.map +0 -1
  36. package/dist/src/parser/utils.js.map +0 -1
  37. package/dist/src/parser/visitor.js.map +0 -1
  38. package/dist/src/planner/analysis/binding-collector.js.map +0 -1
  39. package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
  40. package/dist/src/planner/analysis/const-pass.js.map +0 -1
  41. package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
  42. package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
  43. package/dist/src/planner/building/alter-table.js.map +0 -1
  44. package/dist/src/planner/building/block.js.map +0 -1
  45. package/dist/src/planner/building/constraint-builder.js.map +0 -1
  46. package/dist/src/planner/building/create-assertion.js.map +0 -1
  47. package/dist/src/planner/building/create-view.js.map +0 -1
  48. package/dist/src/planner/building/ddl.js.map +0 -1
  49. package/dist/src/planner/building/declare-schema.js.map +0 -1
  50. package/dist/src/planner/building/delete.js.map +0 -1
  51. package/dist/src/planner/building/drop-assertion.js.map +0 -1
  52. package/dist/src/planner/building/drop-table.js.map +0 -1
  53. package/dist/src/planner/building/drop-view.js.map +0 -1
  54. package/dist/src/planner/building/expression.js.map +0 -1
  55. package/dist/src/planner/building/function-call.js.map +0 -1
  56. package/dist/src/planner/building/insert.js.map +0 -1
  57. package/dist/src/planner/building/pragma.js.map +0 -1
  58. package/dist/src/planner/building/schema-resolution.js.map +0 -1
  59. package/dist/src/planner/building/select-aggregates.js.map +0 -1
  60. package/dist/src/planner/building/select-compound.js.map +0 -1
  61. package/dist/src/planner/building/select-context.js.map +0 -1
  62. package/dist/src/planner/building/select-modifiers.js.map +0 -1
  63. package/dist/src/planner/building/select-projections.js.map +0 -1
  64. package/dist/src/planner/building/select-window.js.map +0 -1
  65. package/dist/src/planner/building/select.js.map +0 -1
  66. package/dist/src/planner/building/table-function.js.map +0 -1
  67. package/dist/src/planner/building/table.js.map +0 -1
  68. package/dist/src/planner/building/transaction.js.map +0 -1
  69. package/dist/src/planner/building/update.js.map +0 -1
  70. package/dist/src/planner/building/with.js.map +0 -1
  71. package/dist/src/planner/cache/correlation-detector.js.map +0 -1
  72. package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
  73. package/dist/src/planner/cache/reference-graph.js.map +0 -1
  74. package/dist/src/planner/cost/index.js.map +0 -1
  75. package/dist/src/planner/debug/logger-utils.js.map +0 -1
  76. package/dist/src/planner/debug.js.map +0 -1
  77. package/dist/src/planner/framework/characteristics.js.map +0 -1
  78. package/dist/src/planner/framework/context.js.map +0 -1
  79. package/dist/src/planner/framework/pass.js.map +0 -1
  80. package/dist/src/planner/framework/physical-utils.js.map +0 -1
  81. package/dist/src/planner/framework/registry.js.map +0 -1
  82. package/dist/src/planner/framework/trace.js.map +0 -1
  83. package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
  84. package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
  85. package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
  86. package/dist/src/planner/nodes/array-index-node.js.map +0 -1
  87. package/dist/src/planner/nodes/block.js.map +0 -1
  88. package/dist/src/planner/nodes/cache-node.js.map +0 -1
  89. package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
  90. package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
  91. package/dist/src/planner/nodes/create-index-node.js.map +0 -1
  92. package/dist/src/planner/nodes/create-table-node.js.map +0 -1
  93. package/dist/src/planner/nodes/create-view-node.js.map +0 -1
  94. package/dist/src/planner/nodes/cte-node.js.map +0 -1
  95. package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
  96. package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
  97. package/dist/src/planner/nodes/delete-node.js.map +0 -1
  98. package/dist/src/planner/nodes/distinct-node.js.map +0 -1
  99. package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
  100. package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
  101. package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
  102. package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
  103. package/dist/src/planner/nodes/filter.js.map +0 -1
  104. package/dist/src/planner/nodes/function.js.map +0 -1
  105. package/dist/src/planner/nodes/insert-node.js.map +0 -1
  106. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
  107. package/dist/src/planner/nodes/join-node.js.map +0 -1
  108. package/dist/src/planner/nodes/limit-offset.js.map +0 -1
  109. package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
  110. package/dist/src/planner/nodes/plan-node.js.map +0 -1
  111. package/dist/src/planner/nodes/pragma.js.map +0 -1
  112. package/dist/src/planner/nodes/project-node.js.map +0 -1
  113. package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
  114. package/dist/src/planner/nodes/reference.js.map +0 -1
  115. package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
  116. package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
  117. package/dist/src/planner/nodes/returning-node.js.map +0 -1
  118. package/dist/src/planner/nodes/scalar.js.map +0 -1
  119. package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
  120. package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
  121. package/dist/src/planner/nodes/single-row.js.map +0 -1
  122. package/dist/src/planner/nodes/sink-node.js.map +0 -1
  123. package/dist/src/planner/nodes/sort.js.map +0 -1
  124. package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
  125. package/dist/src/planner/nodes/subquery.js.map +0 -1
  126. package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
  127. package/dist/src/planner/nodes/table-function-call.js.map +0 -1
  128. package/dist/src/planner/nodes/transaction-node.js.map +0 -1
  129. package/dist/src/planner/nodes/update-node.js.map +0 -1
  130. package/dist/src/planner/nodes/values-node.js.map +0 -1
  131. package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
  132. package/dist/src/planner/nodes/window-function.js.map +0 -1
  133. package/dist/src/planner/nodes/window-node.js.map +0 -1
  134. package/dist/src/planner/optimizer-tuning.js.map +0 -1
  135. package/dist/src/planner/optimizer.js.map +0 -1
  136. package/dist/src/planner/planning-context.js.map +0 -1
  137. package/dist/src/planner/resolve.js.map +0 -1
  138. package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
  139. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
  140. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
  141. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
  142. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
  143. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
  144. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
  145. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
  146. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
  147. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
  148. package/dist/src/planner/scopes/aliased.js.map +0 -1
  149. package/dist/src/planner/scopes/base.js.map +0 -1
  150. package/dist/src/planner/scopes/empty.js.map +0 -1
  151. package/dist/src/planner/scopes/global.js.map +0 -1
  152. package/dist/src/planner/scopes/multi.js.map +0 -1
  153. package/dist/src/planner/scopes/param.js.map +0 -1
  154. package/dist/src/planner/scopes/registered.js.map +0 -1
  155. package/dist/src/planner/scopes/scope.js.map +0 -1
  156. package/dist/src/planner/stats/basic-estimates.js.map +0 -1
  157. package/dist/src/planner/stats/index.js.map +0 -1
  158. package/dist/src/planner/type-utils.js.map +0 -1
  159. package/dist/src/planner/util/key-utils.js.map +0 -1
  160. package/dist/src/planner/validation/determinism-validator.js.map +0 -1
  161. package/dist/src/planner/validation/plan-validator.js.map +0 -1
  162. package/dist/src/runtime/async-util.js.map +0 -1
  163. package/dist/src/runtime/cache/shared-cache.js.map +0 -1
  164. package/dist/src/runtime/context-helpers.js.map +0 -1
  165. package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
  166. package/dist/src/runtime/emission-context.js.map +0 -1
  167. package/dist/src/runtime/emit/add-constraint.js.map +0 -1
  168. package/dist/src/runtime/emit/aggregate.js.map +0 -1
  169. package/dist/src/runtime/emit/array-index.js.map +0 -1
  170. package/dist/src/runtime/emit/between.js.map +0 -1
  171. package/dist/src/runtime/emit/binary.js.map +0 -1
  172. package/dist/src/runtime/emit/block.js.map +0 -1
  173. package/dist/src/runtime/emit/cache.js.map +0 -1
  174. package/dist/src/runtime/emit/case.js.map +0 -1
  175. package/dist/src/runtime/emit/cast.js.map +0 -1
  176. package/dist/src/runtime/emit/collate.js.map +0 -1
  177. package/dist/src/runtime/emit/column-reference.js.map +0 -1
  178. package/dist/src/runtime/emit/constraint-check.js.map +0 -1
  179. package/dist/src/runtime/emit/create-assertion.js.map +0 -1
  180. package/dist/src/runtime/emit/create-index.js.map +0 -1
  181. package/dist/src/runtime/emit/create-table.js.map +0 -1
  182. package/dist/src/runtime/emit/create-view.js.map +0 -1
  183. package/dist/src/runtime/emit/cte-reference.js.map +0 -1
  184. package/dist/src/runtime/emit/cte.js.map +0 -1
  185. package/dist/src/runtime/emit/delete.js.map +0 -1
  186. package/dist/src/runtime/emit/distinct.js.map +0 -1
  187. package/dist/src/runtime/emit/dml-executor.js.map +0 -1
  188. package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
  189. package/dist/src/runtime/emit/drop-table.js.map +0 -1
  190. package/dist/src/runtime/emit/drop-view.js.map +0 -1
  191. package/dist/src/runtime/emit/filter.js.map +0 -1
  192. package/dist/src/runtime/emit/insert.js.map +0 -1
  193. package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
  194. package/dist/src/runtime/emit/join.js.map +0 -1
  195. package/dist/src/runtime/emit/limit-offset.js.map +0 -1
  196. package/dist/src/runtime/emit/literal.js.map +0 -1
  197. package/dist/src/runtime/emit/parameter.js.map +0 -1
  198. package/dist/src/runtime/emit/pragma.js.map +0 -1
  199. package/dist/src/runtime/emit/project.js.map +0 -1
  200. package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
  201. package/dist/src/runtime/emit/remote-query.js.map +0 -1
  202. package/dist/src/runtime/emit/retrieve.js.map +0 -1
  203. package/dist/src/runtime/emit/returning.js.map +0 -1
  204. package/dist/src/runtime/emit/scalar-function.js.map +0 -1
  205. package/dist/src/runtime/emit/scan.js.map +0 -1
  206. package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
  207. package/dist/src/runtime/emit/sequencing.js.map +0 -1
  208. package/dist/src/runtime/emit/set-operation.js.map +0 -1
  209. package/dist/src/runtime/emit/sink.js.map +0 -1
  210. package/dist/src/runtime/emit/sort.js.map +0 -1
  211. package/dist/src/runtime/emit/subquery.js.map +0 -1
  212. package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
  213. package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
  214. package/dist/src/runtime/emit/transaction.js.map +0 -1
  215. package/dist/src/runtime/emit/unary.js.map +0 -1
  216. package/dist/src/runtime/emit/update.js.map +0 -1
  217. package/dist/src/runtime/emit/values.js.map +0 -1
  218. package/dist/src/runtime/emit/window-function.js.map +0 -1
  219. package/dist/src/runtime/emit/window.js.map +0 -1
  220. package/dist/src/runtime/emitters.js.map +0 -1
  221. package/dist/src/runtime/register.js.map +0 -1
  222. package/dist/src/runtime/scheduler.js.map +0 -1
  223. package/dist/src/runtime/types.js.map +0 -1
  224. package/dist/src/runtime/utils.js.map +0 -1
  225. package/dist/src/schema/assertion.js.map +0 -1
  226. package/dist/src/schema/catalog.js.map +0 -1
  227. package/dist/src/schema/change-events.js.map +0 -1
  228. package/dist/src/schema/column.js.map +0 -1
  229. package/dist/src/schema/declared-schema-manager.js.map +0 -1
  230. package/dist/src/schema/function.js.map +0 -1
  231. package/dist/src/schema/manager.js.map +0 -1
  232. package/dist/src/schema/schema-differ.js.map +0 -1
  233. package/dist/src/schema/schema-hasher.js.map +0 -1
  234. package/dist/src/schema/schema.js.map +0 -1
  235. package/dist/src/schema/table.js.map +0 -1
  236. package/dist/src/schema/view.js.map +0 -1
  237. package/dist/src/schema/window-function.js.map +0 -1
  238. package/dist/src/types/builtin-types.js.map +0 -1
  239. package/dist/src/types/index.js.map +0 -1
  240. package/dist/src/types/json-type.js.map +0 -1
  241. package/dist/src/types/logical-type.js.map +0 -1
  242. package/dist/src/types/plugin-interface.js.map +0 -1
  243. package/dist/src/types/registry.js.map +0 -1
  244. package/dist/src/types/temporal-types.js.map +0 -1
  245. package/dist/src/types/validation.js.map +0 -1
  246. package/dist/src/util/affinity.js.map +0 -1
  247. package/dist/src/util/ast-stringify.js.map +0 -1
  248. package/dist/src/util/cached.js.map +0 -1
  249. package/dist/src/util/coercion.js.map +0 -1
  250. package/dist/src/util/comparison.js.map +0 -1
  251. package/dist/src/util/environment.js.map +0 -1
  252. package/dist/src/util/hash.js.map +0 -1
  253. package/dist/src/util/latches.js.map +0 -1
  254. package/dist/src/util/mutation-statement.js.map +0 -1
  255. package/dist/src/util/patterns.js.map +0 -1
  256. package/dist/src/util/plan-formatter.js.map +0 -1
  257. package/dist/src/util/plugin-helper.js.map +0 -1
  258. package/dist/src/util/row-descriptor.js.map +0 -1
  259. package/dist/src/util/serialization.js.map +0 -1
  260. package/dist/src/util/sql-literal.js.map +0 -1
  261. package/dist/src/util/working-table-iterable.js.map +0 -1
  262. package/dist/src/vtab/best-access-plan.js.map +0 -1
  263. package/dist/src/vtab/connection.js.map +0 -1
  264. package/dist/src/vtab/filter-info.js.map +0 -1
  265. package/dist/src/vtab/index-info.js.map +0 -1
  266. package/dist/src/vtab/manifest.js.map +0 -1
  267. package/dist/src/vtab/memory/connection.js.map +0 -1
  268. package/dist/src/vtab/memory/index.js.map +0 -1
  269. package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
  270. package/dist/src/vtab/memory/layer/base.js.map +0 -1
  271. package/dist/src/vtab/memory/layer/connection.js.map +0 -1
  272. package/dist/src/vtab/memory/layer/interface.js.map +0 -1
  273. package/dist/src/vtab/memory/layer/manager.js.map +0 -1
  274. package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
  275. package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
  276. package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
  277. package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
  278. package/dist/src/vtab/memory/module.js.map +0 -1
  279. package/dist/src/vtab/memory/table.js.map +0 -1
  280. package/dist/src/vtab/memory/types.js.map +0 -1
  281. package/dist/src/vtab/memory/utils/logging.js.map +0 -1
  282. package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
  283. package/dist/src/vtab/module.js.map +0 -1
  284. package/dist/src/vtab/table.js.map +0 -1
  285. package/src/common/constants.ts +0 -60
  286. package/src/common/datatype.ts +0 -85
  287. package/src/common/errors.ts +0 -189
  288. package/src/common/json-types.ts +0 -16
  289. package/src/common/logger.ts +0 -97
  290. package/src/common/type-inference.ts +0 -39
  291. package/src/common/types.ts +0 -151
  292. package/src/core/database-options.ts +0 -258
  293. package/src/core/database.ts +0 -1461
  294. package/src/core/param.ts +0 -56
  295. package/src/core/statement.ts +0 -528
  296. package/src/func/builtins/aggregate.ts +0 -269
  297. package/src/func/builtins/builtin-window-functions.ts +0 -166
  298. package/src/func/builtins/conversion.ts +0 -226
  299. package/src/func/builtins/datetime.ts +0 -500
  300. package/src/func/builtins/explain.ts +0 -779
  301. package/src/func/builtins/generation.ts +0 -43
  302. package/src/func/builtins/index.ts +0 -167
  303. package/src/func/builtins/json-helpers.ts +0 -237
  304. package/src/func/builtins/json-tvf.ts +0 -224
  305. package/src/func/builtins/json.ts +0 -588
  306. package/src/func/builtins/scalar.ts +0 -423
  307. package/src/func/builtins/schema.ts +0 -213
  308. package/src/func/builtins/string.ts +0 -306
  309. package/src/func/builtins/timespan.ts +0 -179
  310. package/src/func/context.ts +0 -258
  311. package/src/func/registration.ts +0 -201
  312. package/src/index.ts +0 -172
  313. package/src/parser/ast.ts +0 -581
  314. package/src/parser/index.ts +0 -65
  315. package/src/parser/lexer.ts +0 -806
  316. package/src/parser/parser.ts +0 -3352
  317. package/src/parser/utils.ts +0 -10
  318. package/src/parser/visitor.ts +0 -188
  319. package/src/planner/analysis/README.md +0 -93
  320. package/src/planner/analysis/binding-collector.ts +0 -83
  321. package/src/planner/analysis/const-evaluator.ts +0 -63
  322. package/src/planner/analysis/const-pass.ts +0 -282
  323. package/src/planner/analysis/constraint-extractor.ts +0 -764
  324. package/src/planner/analysis/predicate-normalizer.ts +0 -237
  325. package/src/planner/building/alter-table.ts +0 -49
  326. package/src/planner/building/block.ts +0 -93
  327. package/src/planner/building/constraint-builder.ts +0 -178
  328. package/src/planner/building/create-assertion.ts +0 -7
  329. package/src/planner/building/create-view.ts +0 -29
  330. package/src/planner/building/ddl.ts +0 -24
  331. package/src/planner/building/declare-schema.ts +0 -22
  332. package/src/planner/building/delete.ts +0 -218
  333. package/src/planner/building/drop-assertion.ts +0 -11
  334. package/src/planner/building/drop-table.ts +0 -13
  335. package/src/planner/building/drop-view.ts +0 -19
  336. package/src/planner/building/expression.ts +0 -205
  337. package/src/planner/building/function-call.ts +0 -129
  338. package/src/planner/building/insert.ts +0 -435
  339. package/src/planner/building/pragma.ts +0 -34
  340. package/src/planner/building/schema-resolution.ts +0 -176
  341. package/src/planner/building/select-aggregates.ts +0 -318
  342. package/src/planner/building/select-compound.ts +0 -119
  343. package/src/planner/building/select-context.ts +0 -85
  344. package/src/planner/building/select-modifiers.ts +0 -236
  345. package/src/planner/building/select-projections.ts +0 -177
  346. package/src/planner/building/select-window.ts +0 -259
  347. package/src/planner/building/select.ts +0 -567
  348. package/src/planner/building/table-function.ts +0 -49
  349. package/src/planner/building/table.ts +0 -40
  350. package/src/planner/building/transaction.ts +0 -23
  351. package/src/planner/building/update.ts +0 -331
  352. package/src/planner/building/with.ts +0 -180
  353. package/src/planner/cache/correlation-detector.ts +0 -83
  354. package/src/planner/cache/materialization-advisory.ts +0 -265
  355. package/src/planner/cache/reference-graph.ts +0 -196
  356. package/src/planner/cost/index.ts +0 -169
  357. package/src/planner/debug/logger-utils.ts +0 -68
  358. package/src/planner/debug.ts +0 -480
  359. package/src/planner/framework/README.md +0 -132
  360. package/src/planner/framework/characteristics.ts +0 -503
  361. package/src/planner/framework/context.ts +0 -239
  362. package/src/planner/framework/pass.ts +0 -354
  363. package/src/planner/framework/physical-utils.ts +0 -210
  364. package/src/planner/framework/registry.ts +0 -261
  365. package/src/planner/framework/trace.ts +0 -259
  366. package/src/planner/nodes/add-constraint-node.ts +0 -62
  367. package/src/planner/nodes/aggregate-function.ts +0 -155
  368. package/src/planner/nodes/aggregate-node.ts +0 -267
  369. package/src/planner/nodes/array-index-node.ts +0 -50
  370. package/src/planner/nodes/block.ts +0 -80
  371. package/src/planner/nodes/cache-node.ts +0 -103
  372. package/src/planner/nodes/constraint-check-node.ts +0 -138
  373. package/src/planner/nodes/create-assertion-node.ts +0 -51
  374. package/src/planner/nodes/create-index-node.ts +0 -41
  375. package/src/planner/nodes/create-table-node.ts +0 -35
  376. package/src/planner/nodes/create-view-node.ts +0 -44
  377. package/src/planner/nodes/cte-node.ts +0 -168
  378. package/src/planner/nodes/cte-reference-node.ts +0 -125
  379. package/src/planner/nodes/declarative-schema.ts +0 -221
  380. package/src/planner/nodes/delete-node.ts +0 -102
  381. package/src/planner/nodes/distinct-node.ts +0 -107
  382. package/src/planner/nodes/dml-executor-node.ts +0 -104
  383. package/src/planner/nodes/drop-assertion-node.ts +0 -50
  384. package/src/planner/nodes/drop-table-node.ts +0 -36
  385. package/src/planner/nodes/drop-view-node.ts +0 -37
  386. package/src/planner/nodes/filter.ts +0 -144
  387. package/src/planner/nodes/function.ts +0 -98
  388. package/src/planner/nodes/insert-node.ts +0 -126
  389. package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
  390. package/src/planner/nodes/join-node.ts +0 -336
  391. package/src/planner/nodes/limit-offset.ts +0 -144
  392. package/src/planner/nodes/plan-node-type.ts +0 -95
  393. package/src/planner/nodes/plan-node.ts +0 -503
  394. package/src/planner/nodes/pragma.ts +0 -98
  395. package/src/planner/nodes/project-node.ts +0 -337
  396. package/src/planner/nodes/recursive-cte-node.ts +0 -158
  397. package/src/planner/nodes/reference.ts +0 -334
  398. package/src/planner/nodes/remote-query-node.ts +0 -73
  399. package/src/planner/nodes/retrieve-node.ts +0 -86
  400. package/src/planner/nodes/returning-node.ts +0 -269
  401. package/src/planner/nodes/scalar.ts +0 -772
  402. package/src/planner/nodes/sequencing-node.ts +0 -113
  403. package/src/planner/nodes/set-operation-node.ts +0 -87
  404. package/src/planner/nodes/single-row.ts +0 -85
  405. package/src/planner/nodes/sink-node.ts +0 -61
  406. package/src/planner/nodes/sort.ts +0 -166
  407. package/src/planner/nodes/stream-aggregate.ts +0 -293
  408. package/src/planner/nodes/subquery.ts +0 -268
  409. package/src/planner/nodes/table-access-nodes.ts +0 -323
  410. package/src/planner/nodes/table-function-call.ts +0 -134
  411. package/src/planner/nodes/transaction-node.ts +0 -55
  412. package/src/planner/nodes/update-node.ts +0 -138
  413. package/src/planner/nodes/values-node.ts +0 -244
  414. package/src/planner/nodes/view-reference-node.ts +0 -97
  415. package/src/planner/nodes/window-function.ts +0 -73
  416. package/src/planner/nodes/window-node.ts +0 -199
  417. package/src/planner/optimizer-tuning.ts +0 -105
  418. package/src/planner/optimizer.ts +0 -332
  419. package/src/planner/planning-context.ts +0 -190
  420. package/src/planner/resolve.ts +0 -101
  421. package/src/planner/rules/README.md +0 -96
  422. package/src/planner/rules/access/rule-select-access-path.ts +0 -399
  423. package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
  424. package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
  425. package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
  426. package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
  427. package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
  428. package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
  429. package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
  430. package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
  431. package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
  432. package/src/planner/scopes/aliased.ts +0 -50
  433. package/src/planner/scopes/base.ts +0 -10
  434. package/src/planner/scopes/empty.ts +0 -12
  435. package/src/planner/scopes/global.ts +0 -73
  436. package/src/planner/scopes/multi.ts +0 -40
  437. package/src/planner/scopes/param.ts +0 -95
  438. package/src/planner/scopes/registered.ts +0 -67
  439. package/src/planner/scopes/scope.ts +0 -16
  440. package/src/planner/stats/basic-estimates.ts +0 -107
  441. package/src/planner/stats/index.ts +0 -158
  442. package/src/planner/type-utils.ts +0 -87
  443. package/src/planner/util/key-utils.ts +0 -46
  444. package/src/planner/validation/determinism-validator.ts +0 -104
  445. package/src/planner/validation/plan-validator.ts +0 -335
  446. package/src/runtime/async-util.ts +0 -283
  447. package/src/runtime/cache/shared-cache.ts +0 -169
  448. package/src/runtime/context-helpers.ts +0 -191
  449. package/src/runtime/deferred-constraint-queue.ts +0 -196
  450. package/src/runtime/emission-context.ts +0 -319
  451. package/src/runtime/emit/add-constraint.ts +0 -78
  452. package/src/runtime/emit/aggregate.ts +0 -581
  453. package/src/runtime/emit/array-index.ts +0 -25
  454. package/src/runtime/emit/between.ts +0 -51
  455. package/src/runtime/emit/binary.ts +0 -357
  456. package/src/runtime/emit/block.ts +0 -23
  457. package/src/runtime/emit/cache.ts +0 -64
  458. package/src/runtime/emit/case.ts +0 -87
  459. package/src/runtime/emit/cast.ts +0 -151
  460. package/src/runtime/emit/collate.ts +0 -9
  461. package/src/runtime/emit/column-reference.ts +0 -17
  462. package/src/runtime/emit/constraint-check.ts +0 -290
  463. package/src/runtime/emit/create-assertion.ts +0 -82
  464. package/src/runtime/emit/create-index.ts +0 -15
  465. package/src/runtime/emit/create-table.ts +0 -15
  466. package/src/runtime/emit/create-view.ts +0 -52
  467. package/src/runtime/emit/cte-reference.ts +0 -38
  468. package/src/runtime/emit/cte.ts +0 -39
  469. package/src/runtime/emit/delete.ts +0 -24
  470. package/src/runtime/emit/distinct.ts +0 -40
  471. package/src/runtime/emit/dml-executor.ts +0 -198
  472. package/src/runtime/emit/drop-assertion.ts +0 -45
  473. package/src/runtime/emit/drop-table.ts +0 -27
  474. package/src/runtime/emit/drop-view.ts +0 -49
  475. package/src/runtime/emit/filter.ts +0 -30
  476. package/src/runtime/emit/insert.ts +0 -42
  477. package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
  478. package/src/runtime/emit/join.ts +0 -148
  479. package/src/runtime/emit/limit-offset.ts +0 -73
  480. package/src/runtime/emit/literal.ts +0 -17
  481. package/src/runtime/emit/parameter.ts +0 -59
  482. package/src/runtime/emit/pragma.ts +0 -56
  483. package/src/runtime/emit/project.ts +0 -46
  484. package/src/runtime/emit/recursive-cte.ts +0 -111
  485. package/src/runtime/emit/remote-query.ts +0 -47
  486. package/src/runtime/emit/retrieve.ts +0 -15
  487. package/src/runtime/emit/returning.ts +0 -41
  488. package/src/runtime/emit/scalar-function.ts +0 -69
  489. package/src/runtime/emit/scan.ts +0 -106
  490. package/src/runtime/emit/schema-declarative.ts +0 -215
  491. package/src/runtime/emit/sequencing.ts +0 -24
  492. package/src/runtime/emit/set-operation.ts +0 -141
  493. package/src/runtime/emit/sink.ts +0 -27
  494. package/src/runtime/emit/sort.ts +0 -75
  495. package/src/runtime/emit/subquery.ts +0 -203
  496. package/src/runtime/emit/table-valued-function.ts +0 -106
  497. package/src/runtime/emit/temporal-arithmetic.ts +0 -302
  498. package/src/runtime/emit/transaction.ts +0 -205
  499. package/src/runtime/emit/unary.ts +0 -101
  500. package/src/runtime/emit/update.ts +0 -66
  501. package/src/runtime/emit/values.ts +0 -66
  502. package/src/runtime/emit/window-function.ts +0 -42
  503. package/src/runtime/emit/window.ts +0 -458
  504. package/src/runtime/emitters.ts +0 -183
  505. package/src/runtime/register.ts +0 -150
  506. package/src/runtime/scheduler.ts +0 -488
  507. package/src/runtime/types.ts +0 -242
  508. package/src/runtime/utils.ts +0 -177
  509. package/src/schema/assertion.ts +0 -21
  510. package/src/schema/catalog.ts +0 -269
  511. package/src/schema/change-events.ts +0 -80
  512. package/src/schema/column.ts +0 -51
  513. package/src/schema/declared-schema-manager.ts +0 -82
  514. package/src/schema/function.ts +0 -188
  515. package/src/schema/manager.ts +0 -1034
  516. package/src/schema/schema-differ.ts +0 -214
  517. package/src/schema/schema-hasher.ts +0 -26
  518. package/src/schema/schema.ts +0 -222
  519. package/src/schema/table.ts +0 -409
  520. package/src/schema/view.ts +0 -19
  521. package/src/schema/window-function.ts +0 -56
  522. package/src/types/builtin-types.ts +0 -350
  523. package/src/types/index.ts +0 -17
  524. package/src/types/json-type.ts +0 -152
  525. package/src/types/logical-type.ts +0 -91
  526. package/src/types/plugin-interface.ts +0 -10
  527. package/src/types/registry.ts +0 -204
  528. package/src/types/temporal-types.ts +0 -290
  529. package/src/types/validation.ts +0 -120
  530. package/src/util/affinity.ts +0 -151
  531. package/src/util/ast-stringify.ts +0 -887
  532. package/src/util/cached.ts +0 -25
  533. package/src/util/coercion.ts +0 -113
  534. package/src/util/comparison.ts +0 -510
  535. package/src/util/environment.ts +0 -52
  536. package/src/util/hash.ts +0 -90
  537. package/src/util/latches.ts +0 -47
  538. package/src/util/mutation-statement.ts +0 -135
  539. package/src/util/patterns.ts +0 -56
  540. package/src/util/plan-formatter.ts +0 -48
  541. package/src/util/plugin-helper.ts +0 -110
  542. package/src/util/row-descriptor.ts +0 -105
  543. package/src/util/serialization.ts +0 -47
  544. package/src/util/sql-literal.ts +0 -22
  545. package/src/util/working-table-iterable.ts +0 -38
  546. package/src/vtab/best-access-plan.ts +0 -244
  547. package/src/vtab/connection.ts +0 -36
  548. package/src/vtab/filter-info.ts +0 -23
  549. package/src/vtab/index-info.ts +0 -84
  550. package/src/vtab/manifest.ts +0 -86
  551. package/src/vtab/memory/connection.ts +0 -73
  552. package/src/vtab/memory/index.ts +0 -191
  553. package/src/vtab/memory/layer/base-cursor.ts +0 -124
  554. package/src/vtab/memory/layer/base.ts +0 -275
  555. package/src/vtab/memory/layer/connection.ts +0 -203
  556. package/src/vtab/memory/layer/interface.ts +0 -47
  557. package/src/vtab/memory/layer/manager.ts +0 -909
  558. package/src/vtab/memory/layer/safe-iterate.ts +0 -49
  559. package/src/vtab/memory/layer/scan-plan.ts +0 -84
  560. package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
  561. package/src/vtab/memory/layer/transaction.ts +0 -229
  562. package/src/vtab/memory/module.ts +0 -667
  563. package/src/vtab/memory/table.ts +0 -251
  564. package/src/vtab/memory/types.ts +0 -23
  565. package/src/vtab/memory/utils/logging.ts +0 -36
  566. package/src/vtab/memory/utils/primary-key.ts +0 -163
  567. package/src/vtab/module.ts +0 -162
  568. 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
- }