@quereus/quereus 0.7.3 → 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,239 +0,0 @@
1
- /**
2
- * Optimizer context that wraps Optimizer with StatsProvider and other utilities
3
- * Provides unified interface for optimization rules
4
- */
5
-
6
- import type { Optimizer } from '../optimizer.js';
7
- import type { StatsProvider } from '../stats/index.js';
8
- import type { OptimizerTuning } from '../optimizer-tuning.js';
9
- import { createLogger } from '../../common/logger.js';
10
- import { StatusCode } from '../../common/types.js';
11
- import { quereusError } from '../../common/errors.js';
12
- import { Database } from '../../core/database.js';
13
- import type { PlanNode } from '../nodes/plan-node.js';
14
-
15
- const log = createLogger('optimizer:framework:context');
16
-
17
- /**
18
- * Context object passed to optimization rules
19
- * Contains all the utilities and data sources rules need
20
- */
21
- export interface OptContext {
22
- /** The optimizer instance */
23
- readonly optimizer: Optimizer;
24
-
25
- /** Statistics provider for cardinality and selectivity estimates */
26
- readonly stats: StatsProvider;
27
-
28
- /** Optimizer tuning parameters */
29
- readonly tuning: OptimizerTuning;
30
-
31
- /** Current optimization phase */
32
- readonly phase: 'rewrite' | 'impl';
33
-
34
- /** Rule application depth (for detecting infinite recursion) */
35
- readonly depth: number;
36
-
37
- /** Additional context data that rules can use */
38
- readonly context: Map<string, unknown>;
39
-
40
- /** Diagnostics bag that rules can populate (emitted after optimization) */
41
- readonly diagnostics: OptimizerDiagnostics;
42
-
43
- /** Database instance */
44
- readonly db: Database;
45
-
46
- /** Context-scoped visited rules tracking (nodeId → ruleIds) */
47
- readonly visitedRules: Map<string, Set<string>>;
48
-
49
- /** Cache of already-optimized nodes within this context (nodeId → optimized result) */
50
- readonly optimizedNodes: Map<string, PlanNode>;
51
- }
52
-
53
- /** Optimizer diagnostics structure */
54
- export interface OptimizerDiagnostics {
55
- // QuickPick join enumeration
56
- quickpick?: {
57
- tours?: number;
58
- bestCost?: number;
59
- };
60
- // Extensible for future diagnostics
61
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
- [key: string]: any;
63
- }
64
-
65
- /**
66
- * Implementation of optimization context
67
- */
68
- export class OptimizationContext implements OptContext {
69
- readonly context = new Map<string, unknown>();
70
- readonly visitedRules = new Map<string, Set<string>>();
71
- readonly optimizedNodes = new Map<string, PlanNode>();
72
- readonly diagnostics = {} as OptimizerDiagnostics;
73
-
74
- constructor(
75
- public readonly optimizer: Optimizer,
76
- public readonly stats: StatsProvider,
77
- public readonly tuning: OptimizerTuning,
78
- public readonly phase: 'rewrite' | 'impl' = 'rewrite',
79
- public readonly db: Database,
80
- public readonly depth: number = 0,
81
- ) {
82
- log('Created optimization context (phase: %s, depth: %d)', phase, depth);
83
- }
84
-
85
- /**
86
- * Create a new context for a different phase
87
- */
88
- withPhase(phase: 'rewrite' | 'impl'): OptimizationContext {
89
- const newContext = new OptimizationContext(
90
- this.optimizer,
91
- this.stats,
92
- this.tuning,
93
- phase,
94
- this.db,
95
- this.depth,
96
- );
97
-
98
- // Copy visited tracking state
99
- this.copyTrackingState(newContext);
100
- return newContext;
101
- }
102
-
103
- /**
104
- * Create a new context with incremented depth
105
- */
106
- withIncrementedDepth(): OptimizationContext {
107
- if (this.depth >= this.tuning.maxOptimizationDepth) {
108
- quereusError(`Maximum optimization depth exceeded: ${this.depth}`, StatusCode.ERROR);
109
- }
110
-
111
- const newContext = new OptimizationContext(
112
- this.optimizer,
113
- this.stats,
114
- this.tuning,
115
- this.phase,
116
- this.db,
117
- this.depth + 1,
118
- );
119
-
120
- // Copy visited tracking state
121
- this.copyTrackingState(newContext);
122
- return newContext;
123
- }
124
-
125
- /**
126
- * Create a new context with additional context data
127
- */
128
- withContext(key: string, value: unknown): OptimizationContext {
129
- const newContext = new OptimizationContext(
130
- this.optimizer,
131
- this.stats,
132
- this.tuning,
133
- this.phase,
134
- this.db,
135
- this.depth,
136
- );
137
-
138
- // Copy existing context
139
- for (const [k, v] of this.context) {
140
- newContext.context.set(k, v);
141
- }
142
-
143
- // Add new context
144
- newContext.context.set(key, value);
145
-
146
- // Copy visited tracking state
147
- this.copyTrackingState(newContext);
148
- return newContext;
149
- }
150
-
151
- /**
152
- * Copy visited tracking state to another context
153
- */
154
- private copyTrackingState(target: OptimizationContext): void {
155
- // Copy visitedRules
156
- for (const [nodeId, ruleIds] of this.visitedRules) {
157
- target.visitedRules.set(nodeId, new Set(ruleIds));
158
- }
159
-
160
- // Copy optimizedNodes
161
- for (const [nodeId, node] of this.optimizedNodes) {
162
- target.optimizedNodes.set(nodeId, node);
163
- }
164
- }
165
-
166
- /**
167
- * Get context value
168
- */
169
- getContext<T>(key: string): T | undefined {
170
- return this.context.get(key) as T | undefined;
171
- }
172
-
173
- /**
174
- * Check if context has a key
175
- */
176
- hasContext(key: string): boolean {
177
- return this.context.has(key);
178
- }
179
-
180
- /**
181
- * Set context value (mutates current context)
182
- */
183
- setContext(key: string, value: unknown): void {
184
- this.context.set(key, value);
185
- }
186
-
187
- /**
188
- * Remove context value (mutates current context)
189
- */
190
- deleteContext(key: string): boolean {
191
- return this.context.delete(key);
192
- }
193
-
194
- /**
195
- * Clear all context data (mutates current context)
196
- */
197
- clearContext(): void {
198
- this.context.clear();
199
- }
200
-
201
- /**
202
- * Get a snapshot of all context data
203
- */
204
- getContextSnapshot(): Record<string, unknown> {
205
- const snapshot: Record<string, unknown> = {};
206
- for (const [key, value] of this.context) {
207
- snapshot[key] = value;
208
- }
209
- return snapshot;
210
- }
211
- }
212
-
213
- /**
214
- * Factory function to create optimization context
215
- */
216
- export function createOptContext(
217
- optimizer: Optimizer,
218
- stats: StatsProvider,
219
- tuning: OptimizerTuning,
220
- db: Database,
221
- phase: 'rewrite' | 'impl' = 'rewrite',
222
- ): OptContext {
223
- return new OptimizationContext(optimizer, stats, tuning, phase, db);
224
- }
225
-
226
- /**
227
- * Type guard to check if an object is an OptContext
228
- */
229
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
230
- export function isOptContext(obj: any): obj is OptContext {
231
- return obj &&
232
- typeof obj === 'object' &&
233
- 'optimizer' in obj &&
234
- 'stats' in obj &&
235
- 'tuning' in obj &&
236
- 'phase' in obj &&
237
- 'depth' in obj &&
238
- 'context' in obj;
239
- }
@@ -1,354 +0,0 @@
1
- /**
2
- * Optimization pass framework for multi-pass query optimization
3
- *
4
- * This framework enables rules to run in separate tree traversals,
5
- * allowing for proper sequencing of transformations that require
6
- * different traversal orders or multiple passes over the tree.
7
- */
8
-
9
- import type { PlanNode } from '../nodes/plan-node.js';
10
- import type { OptContext } from './context.js';
11
- import type { RuleHandle } from './registry.js';
12
- import { createLogger } from '../../common/logger.js';
13
- import { performConstantFolding } from '../analysis/const-pass.js';
14
- import { createRuntimeExpressionEvaluator } from '../analysis/const-evaluator.js';
15
-
16
- const log = createLogger('optimizer:framework:pass');
17
-
18
- /**
19
- * Traversal order for optimization passes
20
- */
21
- export enum TraversalOrder {
22
- /** Process children before parents */
23
- BottomUp = 'bottom-up',
24
- /** Process parents before children */
25
- TopDown = 'top-down',
26
- }
27
-
28
- /**
29
- * Definition of an optimization pass
30
- */
31
- export interface OptimizationPass {
32
- /** Unique identifier for this pass */
33
- id: string;
34
-
35
- /** Human-readable name for logging */
36
- name: string;
37
-
38
- /** Description of what this pass does */
39
- description: string;
40
-
41
- /** Traversal order for this pass */
42
- traversalOrder: TraversalOrder;
43
-
44
- /** Rules that belong to this pass (will be populated by registration) */
45
- rules: RuleHandle[];
46
-
47
- /** Optional custom execution logic (default uses standard rule application) */
48
- execute?: (plan: PlanNode, context: OptContext) => PlanNode;
49
-
50
- /** Whether this pass is enabled (default: true) */
51
- enabled?: boolean;
52
-
53
- /** Order in which passes execute (lower numbers first) */
54
- order: number;
55
- }
56
-
57
- /**
58
- * Standard optimization passes
59
- */
60
- export enum PassId {
61
- /** Pre-optimization constant folding */
62
- ConstantFolding = 'constant-folding',
63
-
64
- /** Structural transformations (pushdown, pullup, boundary sliding) */
65
- Structural = 'structural',
66
-
67
- /** Physical operator selection and implementation */
68
- Physical = 'physical',
69
-
70
- /** Post-optimization cleanup and caching */
71
- PostOptimization = 'post-opt',
72
-
73
- /** Final validation */
74
- Validation = 'validation',
75
- }
76
-
77
- /**
78
- * Create a standard optimization pass
79
- */
80
- export function createPass(
81
- id: string,
82
- name: string,
83
- description: string,
84
- order: number,
85
- traversalOrder: TraversalOrder = TraversalOrder.BottomUp
86
- ): OptimizationPass {
87
- return {
88
- id,
89
- name,
90
- description,
91
- traversalOrder,
92
- rules: [],
93
- enabled: true,
94
- order
95
- };
96
- }
97
-
98
- /**
99
- * Create constant folding pass with custom execution
100
- */
101
- function createConstantFoldingPass(): OptimizationPass {
102
- return {
103
- id: PassId.ConstantFolding,
104
- name: 'Constant Folding',
105
- description: 'Pre-evaluate constant expressions and fold them into the plan',
106
- traversalOrder: TraversalOrder.BottomUp,
107
- rules: [],
108
- enabled: true,
109
- order: 0,
110
- execute: (plan: PlanNode, context: OptContext) => {
111
- // Custom execution for constant folding
112
- const evaluator = createRuntimeExpressionEvaluator(context.db);
113
- const result = performConstantFolding(plan, evaluator);
114
- log('Constant folding completed');
115
- return result;
116
- }
117
- };
118
- }
119
-
120
- /**
121
- * Standard pass definitions
122
- */
123
- export const STANDARD_PASSES: OptimizationPass[] = [
124
- createConstantFoldingPass(),
125
-
126
- createPass(
127
- PassId.Structural,
128
- 'Structural Transformations',
129
- 'Restructure the plan tree for optimal execution boundaries',
130
- 10,
131
- TraversalOrder.TopDown
132
- ),
133
-
134
- createPass(
135
- PassId.Physical,
136
- 'Physical Selection',
137
- 'Convert logical operators to physical implementations',
138
- 20,
139
- TraversalOrder.BottomUp
140
- ),
141
-
142
- createPass(
143
- PassId.PostOptimization,
144
- 'Post-Optimization',
145
- 'Final cleanup, materialization decisions, and caching',
146
- 30,
147
- TraversalOrder.BottomUp
148
- ),
149
-
150
- createPass(
151
- PassId.Validation,
152
- 'Validation',
153
- 'Validate the correctness of the optimized plan',
154
- 40,
155
- TraversalOrder.BottomUp
156
- ),
157
- ];
158
-
159
- /**
160
- * Pass manager for coordinating multi-pass optimization
161
- */
162
- export class PassManager {
163
- private passes: Map<string, OptimizationPass> = new Map();
164
- private sortedPasses: OptimizationPass[] = [];
165
-
166
- constructor() {
167
- // Register standard passes
168
- for (const pass of STANDARD_PASSES) {
169
- this.registerPass(pass);
170
- }
171
- }
172
-
173
- /**
174
- * Register an optimization pass
175
- */
176
- registerPass(pass: OptimizationPass): void {
177
- if (this.passes.has(pass.id)) {
178
- log('Warning: Overwriting existing pass %s', pass.id);
179
- }
180
-
181
- this.passes.set(pass.id, pass);
182
- this.updateSortedPasses();
183
-
184
- log('Registered pass %s (order: %d, traversal: %s)',
185
- pass.id, pass.order, pass.traversalOrder);
186
- }
187
-
188
- /**
189
- * Get a pass by ID
190
- */
191
- getPass(id: string): OptimizationPass | undefined {
192
- return this.passes.get(id);
193
- }
194
-
195
- /**
196
- * Add a rule to a specific pass
197
- */
198
- addRuleToPass(passId: string, rule: RuleHandle): void {
199
- const pass = this.passes.get(passId);
200
- if (!pass) {
201
- throw new Error(`Unknown pass: ${passId}`);
202
- }
203
-
204
- // Avoid duplicate registrations by rule ID within a pass
205
- if (pass.rules.some(r => r.id === rule.id)) {
206
- log('Skipping duplicate rule %s for pass %s', rule.id, passId);
207
- return;
208
- }
209
-
210
- pass.rules.push(rule);
211
- log('Added rule %s to pass %s', rule.id, passId);
212
- }
213
-
214
- /**
215
- * Get all passes in execution order
216
- */
217
- getPasses(): readonly OptimizationPass[] {
218
- return this.sortedPasses;
219
- }
220
-
221
- /**
222
- * Update sorted pass list after changes
223
- */
224
- private updateSortedPasses(): void {
225
- this.sortedPasses = Array.from(this.passes.values())
226
- .filter(pass => pass.enabled !== false)
227
- .sort((a, b) => a.order - b.order);
228
- }
229
-
230
- /**
231
- * Execute all passes on a plan
232
- */
233
- execute(plan: PlanNode, context: OptContext): PlanNode {
234
- return this.executeUpTo(plan, context);
235
- }
236
-
237
- /**
238
- * Execute passes up to and including the specified pass id
239
- */
240
- executeUpTo(plan: PlanNode, context: OptContext, upToPassId?: string): PlanNode {
241
- let currentPlan = plan;
242
- for (const pass of this.sortedPasses) {
243
- log('Starting pass: %s', pass.name);
244
-
245
- if (pass.execute) {
246
- // Custom execution logic
247
- currentPlan = pass.execute(currentPlan, context);
248
- } else {
249
- // Standard rule-based execution
250
- currentPlan = this.executeStandardPass(currentPlan, context, pass);
251
- }
252
-
253
- log('Completed pass: %s', pass.name);
254
- if (upToPassId && pass.id === upToPassId) break;
255
- }
256
- return currentPlan;
257
- }
258
-
259
- /**
260
- * Execute a standard rule-based pass
261
- */
262
- private executeStandardPass(
263
- plan: PlanNode,
264
- context: OptContext,
265
- pass: OptimizationPass
266
- ): PlanNode {
267
- // This will be implemented to traverse the tree in the specified order
268
- // and apply the pass's rules at each node
269
-
270
- if (pass.traversalOrder === TraversalOrder.TopDown) {
271
- return this.traverseTopDown(plan, context, pass);
272
- } else {
273
- return this.traverseBottomUp(plan, context, pass);
274
- }
275
- }
276
-
277
- /**
278
- * Top-down traversal with rule application
279
- */
280
- private traverseTopDown(
281
- node: PlanNode,
282
- context: OptContext,
283
- pass: OptimizationPass
284
- ): PlanNode {
285
- // Apply rules to this node first
286
- let currentNode = this.applyPassRules(node, context, pass);
287
-
288
- // Then traverse children
289
- const children = currentNode.getChildren();
290
- if (children.length > 0) {
291
- const newChildren = children.map(child =>
292
- this.traverseTopDown(child, context, pass)
293
- );
294
-
295
- // Only create new node if children changed
296
- const childrenChanged = children.some((child, i) => child !== newChildren[i]);
297
- if (childrenChanged) {
298
- currentNode = currentNode.withChildren(newChildren);
299
- }
300
- }
301
-
302
- return currentNode;
303
- }
304
-
305
- /**
306
- * Bottom-up traversal with rule application
307
- */
308
- private traverseBottomUp(
309
- node: PlanNode,
310
- context: OptContext,
311
- pass: OptimizationPass
312
- ): PlanNode {
313
- // Traverse children first
314
- const children = node.getChildren();
315
- let currentNode = node;
316
-
317
- if (children.length > 0) {
318
- const newChildren = children.map(child =>
319
- this.traverseBottomUp(child, context, pass)
320
- );
321
-
322
- // Only create new node if children changed
323
- const childrenChanged = children.some((child, i) => child !== newChildren[i]);
324
- if (childrenChanged) {
325
- currentNode = currentNode.withChildren(newChildren);
326
- }
327
- }
328
-
329
- // Then apply rules to this node
330
- return this.applyPassRules(currentNode, context, pass);
331
- }
332
-
333
- /**
334
- * Apply all rules in a pass to a node
335
- */
336
- private applyPassRules(
337
- node: PlanNode,
338
- context: OptContext,
339
- pass: OptimizationPass
340
- ): PlanNode {
341
- let currentNode = node;
342
- // Apply rules against the current node type only
343
- for (const rule of pass.rules) {
344
- if (rule.nodeType !== currentNode.nodeType) continue;
345
- const result = rule.fn(currentNode, context);
346
- if (result && result !== currentNode) {
347
- log('Rule %s transformed node in pass %s', rule.id, pass.id);
348
- currentNode = result;
349
- }
350
- }
351
-
352
- return currentNode;
353
- }
354
- }