@quereus/quereus 0.7.2 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/package.json +3 -3
  2. package/dist/src/common/constants.js.map +0 -1
  3. package/dist/src/common/datatype.js.map +0 -1
  4. package/dist/src/common/errors.js.map +0 -1
  5. package/dist/src/common/json-types.js.map +0 -1
  6. package/dist/src/common/logger.js.map +0 -1
  7. package/dist/src/common/type-inference.js.map +0 -1
  8. package/dist/src/common/types.js.map +0 -1
  9. package/dist/src/core/database-options.js.map +0 -1
  10. package/dist/src/core/database.js.map +0 -1
  11. package/dist/src/core/param.js.map +0 -1
  12. package/dist/src/core/statement.js.map +0 -1
  13. package/dist/src/func/builtins/aggregate.js.map +0 -1
  14. package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
  15. package/dist/src/func/builtins/conversion.js.map +0 -1
  16. package/dist/src/func/builtins/datetime.js.map +0 -1
  17. package/dist/src/func/builtins/explain.js.map +0 -1
  18. package/dist/src/func/builtins/generation.js.map +0 -1
  19. package/dist/src/func/builtins/index.js.map +0 -1
  20. package/dist/src/func/builtins/json-helpers.js.map +0 -1
  21. package/dist/src/func/builtins/json-tvf.js.map +0 -1
  22. package/dist/src/func/builtins/json.js.map +0 -1
  23. package/dist/src/func/builtins/scalar.js.map +0 -1
  24. package/dist/src/func/builtins/schema.js.map +0 -1
  25. package/dist/src/func/builtins/string.js.map +0 -1
  26. package/dist/src/func/builtins/timespan.js.map +0 -1
  27. package/dist/src/func/context.js.map +0 -1
  28. package/dist/src/func/registration.js.map +0 -1
  29. package/dist/src/index.js.map +0 -1
  30. package/dist/src/parser/ast.js.map +0 -1
  31. package/dist/src/parser/index.js.map +0 -1
  32. package/dist/src/parser/lexer.js.map +0 -1
  33. package/dist/src/parser/parser.js.map +0 -1
  34. package/dist/src/parser/utils.js.map +0 -1
  35. package/dist/src/parser/visitor.js.map +0 -1
  36. package/dist/src/planner/analysis/binding-collector.js.map +0 -1
  37. package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
  38. package/dist/src/planner/analysis/const-pass.js.map +0 -1
  39. package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
  40. package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
  41. package/dist/src/planner/building/alter-table.js.map +0 -1
  42. package/dist/src/planner/building/block.js.map +0 -1
  43. package/dist/src/planner/building/constraint-builder.js.map +0 -1
  44. package/dist/src/planner/building/create-assertion.js.map +0 -1
  45. package/dist/src/planner/building/create-view.js.map +0 -1
  46. package/dist/src/planner/building/ddl.js.map +0 -1
  47. package/dist/src/planner/building/declare-schema.js.map +0 -1
  48. package/dist/src/planner/building/delete.js.map +0 -1
  49. package/dist/src/planner/building/drop-assertion.js.map +0 -1
  50. package/dist/src/planner/building/drop-table.js.map +0 -1
  51. package/dist/src/planner/building/drop-view.js.map +0 -1
  52. package/dist/src/planner/building/expression.js.map +0 -1
  53. package/dist/src/planner/building/function-call.js.map +0 -1
  54. package/dist/src/planner/building/insert.js.map +0 -1
  55. package/dist/src/planner/building/pragma.js.map +0 -1
  56. package/dist/src/planner/building/schema-resolution.js.map +0 -1
  57. package/dist/src/planner/building/select-aggregates.js.map +0 -1
  58. package/dist/src/planner/building/select-compound.js.map +0 -1
  59. package/dist/src/planner/building/select-context.js.map +0 -1
  60. package/dist/src/planner/building/select-modifiers.js.map +0 -1
  61. package/dist/src/planner/building/select-projections.js.map +0 -1
  62. package/dist/src/planner/building/select-window.js.map +0 -1
  63. package/dist/src/planner/building/select.js.map +0 -1
  64. package/dist/src/planner/building/table-function.js.map +0 -1
  65. package/dist/src/planner/building/table.js.map +0 -1
  66. package/dist/src/planner/building/transaction.js.map +0 -1
  67. package/dist/src/planner/building/update.js.map +0 -1
  68. package/dist/src/planner/building/with.js.map +0 -1
  69. package/dist/src/planner/cache/correlation-detector.js.map +0 -1
  70. package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
  71. package/dist/src/planner/cache/reference-graph.js.map +0 -1
  72. package/dist/src/planner/cost/index.js.map +0 -1
  73. package/dist/src/planner/debug/logger-utils.js.map +0 -1
  74. package/dist/src/planner/debug.js.map +0 -1
  75. package/dist/src/planner/framework/characteristics.js.map +0 -1
  76. package/dist/src/planner/framework/context.js.map +0 -1
  77. package/dist/src/planner/framework/pass.js.map +0 -1
  78. package/dist/src/planner/framework/physical-utils.js.map +0 -1
  79. package/dist/src/planner/framework/registry.js.map +0 -1
  80. package/dist/src/planner/framework/trace.js.map +0 -1
  81. package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
  82. package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
  83. package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
  84. package/dist/src/planner/nodes/array-index-node.js.map +0 -1
  85. package/dist/src/planner/nodes/block.js.map +0 -1
  86. package/dist/src/planner/nodes/cache-node.js.map +0 -1
  87. package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
  88. package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
  89. package/dist/src/planner/nodes/create-index-node.js.map +0 -1
  90. package/dist/src/planner/nodes/create-table-node.js.map +0 -1
  91. package/dist/src/planner/nodes/create-view-node.js.map +0 -1
  92. package/dist/src/planner/nodes/cte-node.js.map +0 -1
  93. package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
  94. package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
  95. package/dist/src/planner/nodes/delete-node.js.map +0 -1
  96. package/dist/src/planner/nodes/distinct-node.js.map +0 -1
  97. package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
  98. package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
  99. package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
  100. package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
  101. package/dist/src/planner/nodes/filter.js.map +0 -1
  102. package/dist/src/planner/nodes/function.js.map +0 -1
  103. package/dist/src/planner/nodes/insert-node.js.map +0 -1
  104. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
  105. package/dist/src/planner/nodes/join-node.js.map +0 -1
  106. package/dist/src/planner/nodes/limit-offset.js.map +0 -1
  107. package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
  108. package/dist/src/planner/nodes/plan-node.js.map +0 -1
  109. package/dist/src/planner/nodes/pragma.js.map +0 -1
  110. package/dist/src/planner/nodes/project-node.js.map +0 -1
  111. package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
  112. package/dist/src/planner/nodes/reference.js.map +0 -1
  113. package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
  114. package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
  115. package/dist/src/planner/nodes/returning-node.js.map +0 -1
  116. package/dist/src/planner/nodes/scalar.js.map +0 -1
  117. package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
  118. package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
  119. package/dist/src/planner/nodes/single-row.js.map +0 -1
  120. package/dist/src/planner/nodes/sink-node.js.map +0 -1
  121. package/dist/src/planner/nodes/sort.js.map +0 -1
  122. package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
  123. package/dist/src/planner/nodes/subquery.js.map +0 -1
  124. package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
  125. package/dist/src/planner/nodes/table-function-call.js.map +0 -1
  126. package/dist/src/planner/nodes/transaction-node.js.map +0 -1
  127. package/dist/src/planner/nodes/update-node.js.map +0 -1
  128. package/dist/src/planner/nodes/values-node.js.map +0 -1
  129. package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
  130. package/dist/src/planner/nodes/window-function.js.map +0 -1
  131. package/dist/src/planner/nodes/window-node.js.map +0 -1
  132. package/dist/src/planner/optimizer-tuning.js.map +0 -1
  133. package/dist/src/planner/optimizer.js.map +0 -1
  134. package/dist/src/planner/planning-context.js.map +0 -1
  135. package/dist/src/planner/resolve.js.map +0 -1
  136. package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
  137. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
  138. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
  139. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
  140. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
  141. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
  142. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
  143. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
  144. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
  145. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
  146. package/dist/src/planner/scopes/aliased.js.map +0 -1
  147. package/dist/src/planner/scopes/base.js.map +0 -1
  148. package/dist/src/planner/scopes/empty.js.map +0 -1
  149. package/dist/src/planner/scopes/global.js.map +0 -1
  150. package/dist/src/planner/scopes/multi.js.map +0 -1
  151. package/dist/src/planner/scopes/param.js.map +0 -1
  152. package/dist/src/planner/scopes/registered.js.map +0 -1
  153. package/dist/src/planner/scopes/scope.js.map +0 -1
  154. package/dist/src/planner/stats/basic-estimates.js.map +0 -1
  155. package/dist/src/planner/stats/index.js.map +0 -1
  156. package/dist/src/planner/type-utils.js.map +0 -1
  157. package/dist/src/planner/util/key-utils.js.map +0 -1
  158. package/dist/src/planner/validation/determinism-validator.js.map +0 -1
  159. package/dist/src/planner/validation/plan-validator.js.map +0 -1
  160. package/dist/src/runtime/async-util.js.map +0 -1
  161. package/dist/src/runtime/cache/shared-cache.js.map +0 -1
  162. package/dist/src/runtime/context-helpers.js.map +0 -1
  163. package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
  164. package/dist/src/runtime/emission-context.js.map +0 -1
  165. package/dist/src/runtime/emit/add-constraint.js.map +0 -1
  166. package/dist/src/runtime/emit/aggregate.js.map +0 -1
  167. package/dist/src/runtime/emit/array-index.js.map +0 -1
  168. package/dist/src/runtime/emit/between.js.map +0 -1
  169. package/dist/src/runtime/emit/binary.js.map +0 -1
  170. package/dist/src/runtime/emit/block.js.map +0 -1
  171. package/dist/src/runtime/emit/cache.js.map +0 -1
  172. package/dist/src/runtime/emit/case.js.map +0 -1
  173. package/dist/src/runtime/emit/cast.js.map +0 -1
  174. package/dist/src/runtime/emit/collate.js.map +0 -1
  175. package/dist/src/runtime/emit/column-reference.js.map +0 -1
  176. package/dist/src/runtime/emit/constraint-check.js.map +0 -1
  177. package/dist/src/runtime/emit/create-assertion.js.map +0 -1
  178. package/dist/src/runtime/emit/create-index.js.map +0 -1
  179. package/dist/src/runtime/emit/create-table.js.map +0 -1
  180. package/dist/src/runtime/emit/create-view.js.map +0 -1
  181. package/dist/src/runtime/emit/cte-reference.js.map +0 -1
  182. package/dist/src/runtime/emit/cte.js.map +0 -1
  183. package/dist/src/runtime/emit/delete.js.map +0 -1
  184. package/dist/src/runtime/emit/distinct.js.map +0 -1
  185. package/dist/src/runtime/emit/dml-executor.js.map +0 -1
  186. package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
  187. package/dist/src/runtime/emit/drop-table.js.map +0 -1
  188. package/dist/src/runtime/emit/drop-view.js.map +0 -1
  189. package/dist/src/runtime/emit/filter.js.map +0 -1
  190. package/dist/src/runtime/emit/insert.js.map +0 -1
  191. package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
  192. package/dist/src/runtime/emit/join.js.map +0 -1
  193. package/dist/src/runtime/emit/limit-offset.js.map +0 -1
  194. package/dist/src/runtime/emit/literal.js.map +0 -1
  195. package/dist/src/runtime/emit/parameter.js.map +0 -1
  196. package/dist/src/runtime/emit/pragma.js.map +0 -1
  197. package/dist/src/runtime/emit/project.js.map +0 -1
  198. package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
  199. package/dist/src/runtime/emit/remote-query.js.map +0 -1
  200. package/dist/src/runtime/emit/retrieve.js.map +0 -1
  201. package/dist/src/runtime/emit/returning.js.map +0 -1
  202. package/dist/src/runtime/emit/scalar-function.js.map +0 -1
  203. package/dist/src/runtime/emit/scan.js.map +0 -1
  204. package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
  205. package/dist/src/runtime/emit/sequencing.js.map +0 -1
  206. package/dist/src/runtime/emit/set-operation.js.map +0 -1
  207. package/dist/src/runtime/emit/sink.js.map +0 -1
  208. package/dist/src/runtime/emit/sort.js.map +0 -1
  209. package/dist/src/runtime/emit/subquery.js.map +0 -1
  210. package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
  211. package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
  212. package/dist/src/runtime/emit/transaction.js.map +0 -1
  213. package/dist/src/runtime/emit/unary.js.map +0 -1
  214. package/dist/src/runtime/emit/update.js.map +0 -1
  215. package/dist/src/runtime/emit/values.js.map +0 -1
  216. package/dist/src/runtime/emit/window-function.js.map +0 -1
  217. package/dist/src/runtime/emit/window.js.map +0 -1
  218. package/dist/src/runtime/emitters.js.map +0 -1
  219. package/dist/src/runtime/register.js.map +0 -1
  220. package/dist/src/runtime/scheduler.js.map +0 -1
  221. package/dist/src/runtime/types.js.map +0 -1
  222. package/dist/src/runtime/utils.js.map +0 -1
  223. package/dist/src/schema/assertion.js.map +0 -1
  224. package/dist/src/schema/catalog.js.map +0 -1
  225. package/dist/src/schema/change-events.js.map +0 -1
  226. package/dist/src/schema/column.js.map +0 -1
  227. package/dist/src/schema/declared-schema-manager.js.map +0 -1
  228. package/dist/src/schema/function.js.map +0 -1
  229. package/dist/src/schema/manager.js.map +0 -1
  230. package/dist/src/schema/schema-differ.js.map +0 -1
  231. package/dist/src/schema/schema-hasher.js.map +0 -1
  232. package/dist/src/schema/schema.js.map +0 -1
  233. package/dist/src/schema/table.js.map +0 -1
  234. package/dist/src/schema/view.js.map +0 -1
  235. package/dist/src/schema/window-function.js.map +0 -1
  236. package/dist/src/types/builtin-types.js.map +0 -1
  237. package/dist/src/types/index.js.map +0 -1
  238. package/dist/src/types/json-type.js.map +0 -1
  239. package/dist/src/types/logical-type.js.map +0 -1
  240. package/dist/src/types/plugin-interface.js.map +0 -1
  241. package/dist/src/types/registry.js.map +0 -1
  242. package/dist/src/types/temporal-types.js.map +0 -1
  243. package/dist/src/types/validation.js.map +0 -1
  244. package/dist/src/util/affinity.js.map +0 -1
  245. package/dist/src/util/ast-stringify.js.map +0 -1
  246. package/dist/src/util/cached.js.map +0 -1
  247. package/dist/src/util/coercion.js.map +0 -1
  248. package/dist/src/util/comparison.js.map +0 -1
  249. package/dist/src/util/environment.js.map +0 -1
  250. package/dist/src/util/hash.js.map +0 -1
  251. package/dist/src/util/latches.js.map +0 -1
  252. package/dist/src/util/mutation-statement.js.map +0 -1
  253. package/dist/src/util/patterns.js.map +0 -1
  254. package/dist/src/util/plan-formatter.js.map +0 -1
  255. package/dist/src/util/plugin-helper.js.map +0 -1
  256. package/dist/src/util/row-descriptor.js.map +0 -1
  257. package/dist/src/util/serialization.js.map +0 -1
  258. package/dist/src/util/sql-literal.js.map +0 -1
  259. package/dist/src/util/working-table-iterable.js.map +0 -1
  260. package/dist/src/vtab/best-access-plan.js.map +0 -1
  261. package/dist/src/vtab/connection.js.map +0 -1
  262. package/dist/src/vtab/filter-info.js.map +0 -1
  263. package/dist/src/vtab/index-info.js.map +0 -1
  264. package/dist/src/vtab/manifest.js.map +0 -1
  265. package/dist/src/vtab/memory/connection.js.map +0 -1
  266. package/dist/src/vtab/memory/index.js.map +0 -1
  267. package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
  268. package/dist/src/vtab/memory/layer/base.js.map +0 -1
  269. package/dist/src/vtab/memory/layer/connection.js.map +0 -1
  270. package/dist/src/vtab/memory/layer/interface.js.map +0 -1
  271. package/dist/src/vtab/memory/layer/manager.js.map +0 -1
  272. package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
  273. package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
  274. package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
  275. package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
  276. package/dist/src/vtab/memory/module.js.map +0 -1
  277. package/dist/src/vtab/memory/table.js.map +0 -1
  278. package/dist/src/vtab/memory/types.js.map +0 -1
  279. package/dist/src/vtab/memory/utils/logging.js.map +0 -1
  280. package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
  281. package/dist/src/vtab/module.js.map +0 -1
  282. package/dist/src/vtab/table.js.map +0 -1
  283. package/src/common/constants.ts +0 -60
  284. package/src/common/datatype.ts +0 -85
  285. package/src/common/errors.ts +0 -189
  286. package/src/common/json-types.ts +0 -16
  287. package/src/common/logger.ts +0 -97
  288. package/src/common/type-inference.ts +0 -39
  289. package/src/common/types.ts +0 -151
  290. package/src/core/database-options.ts +0 -258
  291. package/src/core/database.ts +0 -1461
  292. package/src/core/param.ts +0 -56
  293. package/src/core/statement.ts +0 -528
  294. package/src/func/builtins/aggregate.ts +0 -269
  295. package/src/func/builtins/builtin-window-functions.ts +0 -166
  296. package/src/func/builtins/conversion.ts +0 -226
  297. package/src/func/builtins/datetime.ts +0 -500
  298. package/src/func/builtins/explain.ts +0 -779
  299. package/src/func/builtins/generation.ts +0 -43
  300. package/src/func/builtins/index.ts +0 -167
  301. package/src/func/builtins/json-helpers.ts +0 -237
  302. package/src/func/builtins/json-tvf.ts +0 -224
  303. package/src/func/builtins/json.ts +0 -588
  304. package/src/func/builtins/scalar.ts +0 -423
  305. package/src/func/builtins/schema.ts +0 -213
  306. package/src/func/builtins/string.ts +0 -306
  307. package/src/func/builtins/timespan.ts +0 -179
  308. package/src/func/context.ts +0 -258
  309. package/src/func/registration.ts +0 -201
  310. package/src/index.ts +0 -172
  311. package/src/parser/ast.ts +0 -581
  312. package/src/parser/index.ts +0 -65
  313. package/src/parser/lexer.ts +0 -806
  314. package/src/parser/parser.ts +0 -3352
  315. package/src/parser/utils.ts +0 -10
  316. package/src/parser/visitor.ts +0 -188
  317. package/src/planner/analysis/README.md +0 -93
  318. package/src/planner/analysis/binding-collector.ts +0 -83
  319. package/src/planner/analysis/const-evaluator.ts +0 -63
  320. package/src/planner/analysis/const-pass.ts +0 -282
  321. package/src/planner/analysis/constraint-extractor.ts +0 -764
  322. package/src/planner/analysis/predicate-normalizer.ts +0 -237
  323. package/src/planner/building/alter-table.ts +0 -49
  324. package/src/planner/building/block.ts +0 -93
  325. package/src/planner/building/constraint-builder.ts +0 -178
  326. package/src/planner/building/create-assertion.ts +0 -7
  327. package/src/planner/building/create-view.ts +0 -29
  328. package/src/planner/building/ddl.ts +0 -24
  329. package/src/planner/building/declare-schema.ts +0 -22
  330. package/src/planner/building/delete.ts +0 -218
  331. package/src/planner/building/drop-assertion.ts +0 -11
  332. package/src/planner/building/drop-table.ts +0 -13
  333. package/src/planner/building/drop-view.ts +0 -19
  334. package/src/planner/building/expression.ts +0 -205
  335. package/src/planner/building/function-call.ts +0 -129
  336. package/src/planner/building/insert.ts +0 -435
  337. package/src/planner/building/pragma.ts +0 -34
  338. package/src/planner/building/schema-resolution.ts +0 -176
  339. package/src/planner/building/select-aggregates.ts +0 -318
  340. package/src/planner/building/select-compound.ts +0 -119
  341. package/src/planner/building/select-context.ts +0 -85
  342. package/src/planner/building/select-modifiers.ts +0 -236
  343. package/src/planner/building/select-projections.ts +0 -177
  344. package/src/planner/building/select-window.ts +0 -259
  345. package/src/planner/building/select.ts +0 -567
  346. package/src/planner/building/table-function.ts +0 -49
  347. package/src/planner/building/table.ts +0 -40
  348. package/src/planner/building/transaction.ts +0 -23
  349. package/src/planner/building/update.ts +0 -331
  350. package/src/planner/building/with.ts +0 -180
  351. package/src/planner/cache/correlation-detector.ts +0 -83
  352. package/src/planner/cache/materialization-advisory.ts +0 -265
  353. package/src/planner/cache/reference-graph.ts +0 -196
  354. package/src/planner/cost/index.ts +0 -169
  355. package/src/planner/debug/logger-utils.ts +0 -68
  356. package/src/planner/debug.ts +0 -480
  357. package/src/planner/framework/README.md +0 -132
  358. package/src/planner/framework/characteristics.ts +0 -503
  359. package/src/planner/framework/context.ts +0 -239
  360. package/src/planner/framework/pass.ts +0 -354
  361. package/src/planner/framework/physical-utils.ts +0 -210
  362. package/src/planner/framework/registry.ts +0 -261
  363. package/src/planner/framework/trace.ts +0 -259
  364. package/src/planner/nodes/add-constraint-node.ts +0 -62
  365. package/src/planner/nodes/aggregate-function.ts +0 -155
  366. package/src/planner/nodes/aggregate-node.ts +0 -267
  367. package/src/planner/nodes/array-index-node.ts +0 -50
  368. package/src/planner/nodes/block.ts +0 -80
  369. package/src/planner/nodes/cache-node.ts +0 -103
  370. package/src/planner/nodes/constraint-check-node.ts +0 -138
  371. package/src/planner/nodes/create-assertion-node.ts +0 -51
  372. package/src/planner/nodes/create-index-node.ts +0 -41
  373. package/src/planner/nodes/create-table-node.ts +0 -35
  374. package/src/planner/nodes/create-view-node.ts +0 -44
  375. package/src/planner/nodes/cte-node.ts +0 -168
  376. package/src/planner/nodes/cte-reference-node.ts +0 -125
  377. package/src/planner/nodes/declarative-schema.ts +0 -221
  378. package/src/planner/nodes/delete-node.ts +0 -102
  379. package/src/planner/nodes/distinct-node.ts +0 -107
  380. package/src/planner/nodes/dml-executor-node.ts +0 -104
  381. package/src/planner/nodes/drop-assertion-node.ts +0 -50
  382. package/src/planner/nodes/drop-table-node.ts +0 -36
  383. package/src/planner/nodes/drop-view-node.ts +0 -37
  384. package/src/planner/nodes/filter.ts +0 -144
  385. package/src/planner/nodes/function.ts +0 -98
  386. package/src/planner/nodes/insert-node.ts +0 -126
  387. package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
  388. package/src/planner/nodes/join-node.ts +0 -336
  389. package/src/planner/nodes/limit-offset.ts +0 -144
  390. package/src/planner/nodes/plan-node-type.ts +0 -95
  391. package/src/planner/nodes/plan-node.ts +0 -503
  392. package/src/planner/nodes/pragma.ts +0 -98
  393. package/src/planner/nodes/project-node.ts +0 -337
  394. package/src/planner/nodes/recursive-cte-node.ts +0 -158
  395. package/src/planner/nodes/reference.ts +0 -334
  396. package/src/planner/nodes/remote-query-node.ts +0 -73
  397. package/src/planner/nodes/retrieve-node.ts +0 -86
  398. package/src/planner/nodes/returning-node.ts +0 -269
  399. package/src/planner/nodes/scalar.ts +0 -772
  400. package/src/planner/nodes/sequencing-node.ts +0 -113
  401. package/src/planner/nodes/set-operation-node.ts +0 -87
  402. package/src/planner/nodes/single-row.ts +0 -85
  403. package/src/planner/nodes/sink-node.ts +0 -61
  404. package/src/planner/nodes/sort.ts +0 -166
  405. package/src/planner/nodes/stream-aggregate.ts +0 -293
  406. package/src/planner/nodes/subquery.ts +0 -268
  407. package/src/planner/nodes/table-access-nodes.ts +0 -323
  408. package/src/planner/nodes/table-function-call.ts +0 -134
  409. package/src/planner/nodes/transaction-node.ts +0 -55
  410. package/src/planner/nodes/update-node.ts +0 -138
  411. package/src/planner/nodes/values-node.ts +0 -244
  412. package/src/planner/nodes/view-reference-node.ts +0 -97
  413. package/src/planner/nodes/window-function.ts +0 -73
  414. package/src/planner/nodes/window-node.ts +0 -199
  415. package/src/planner/optimizer-tuning.ts +0 -105
  416. package/src/planner/optimizer.ts +0 -332
  417. package/src/planner/planning-context.ts +0 -190
  418. package/src/planner/resolve.ts +0 -101
  419. package/src/planner/rules/README.md +0 -96
  420. package/src/planner/rules/access/rule-select-access-path.ts +0 -399
  421. package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
  422. package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
  423. package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
  424. package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
  425. package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
  426. package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
  427. package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
  428. package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
  429. package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
  430. package/src/planner/scopes/aliased.ts +0 -50
  431. package/src/planner/scopes/base.ts +0 -10
  432. package/src/planner/scopes/empty.ts +0 -12
  433. package/src/planner/scopes/global.ts +0 -73
  434. package/src/planner/scopes/multi.ts +0 -40
  435. package/src/planner/scopes/param.ts +0 -95
  436. package/src/planner/scopes/registered.ts +0 -67
  437. package/src/planner/scopes/scope.ts +0 -16
  438. package/src/planner/stats/basic-estimates.ts +0 -107
  439. package/src/planner/stats/index.ts +0 -158
  440. package/src/planner/type-utils.ts +0 -87
  441. package/src/planner/util/key-utils.ts +0 -46
  442. package/src/planner/validation/determinism-validator.ts +0 -104
  443. package/src/planner/validation/plan-validator.ts +0 -335
  444. package/src/runtime/async-util.ts +0 -283
  445. package/src/runtime/cache/shared-cache.ts +0 -169
  446. package/src/runtime/context-helpers.ts +0 -191
  447. package/src/runtime/deferred-constraint-queue.ts +0 -196
  448. package/src/runtime/emission-context.ts +0 -319
  449. package/src/runtime/emit/add-constraint.ts +0 -78
  450. package/src/runtime/emit/aggregate.ts +0 -581
  451. package/src/runtime/emit/array-index.ts +0 -25
  452. package/src/runtime/emit/between.ts +0 -51
  453. package/src/runtime/emit/binary.ts +0 -357
  454. package/src/runtime/emit/block.ts +0 -23
  455. package/src/runtime/emit/cache.ts +0 -64
  456. package/src/runtime/emit/case.ts +0 -87
  457. package/src/runtime/emit/cast.ts +0 -151
  458. package/src/runtime/emit/collate.ts +0 -9
  459. package/src/runtime/emit/column-reference.ts +0 -17
  460. package/src/runtime/emit/constraint-check.ts +0 -290
  461. package/src/runtime/emit/create-assertion.ts +0 -82
  462. package/src/runtime/emit/create-index.ts +0 -15
  463. package/src/runtime/emit/create-table.ts +0 -15
  464. package/src/runtime/emit/create-view.ts +0 -52
  465. package/src/runtime/emit/cte-reference.ts +0 -38
  466. package/src/runtime/emit/cte.ts +0 -39
  467. package/src/runtime/emit/delete.ts +0 -24
  468. package/src/runtime/emit/distinct.ts +0 -40
  469. package/src/runtime/emit/dml-executor.ts +0 -198
  470. package/src/runtime/emit/drop-assertion.ts +0 -45
  471. package/src/runtime/emit/drop-table.ts +0 -27
  472. package/src/runtime/emit/drop-view.ts +0 -49
  473. package/src/runtime/emit/filter.ts +0 -30
  474. package/src/runtime/emit/insert.ts +0 -42
  475. package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
  476. package/src/runtime/emit/join.ts +0 -148
  477. package/src/runtime/emit/limit-offset.ts +0 -73
  478. package/src/runtime/emit/literal.ts +0 -17
  479. package/src/runtime/emit/parameter.ts +0 -59
  480. package/src/runtime/emit/pragma.ts +0 -56
  481. package/src/runtime/emit/project.ts +0 -46
  482. package/src/runtime/emit/recursive-cte.ts +0 -111
  483. package/src/runtime/emit/remote-query.ts +0 -47
  484. package/src/runtime/emit/retrieve.ts +0 -15
  485. package/src/runtime/emit/returning.ts +0 -41
  486. package/src/runtime/emit/scalar-function.ts +0 -69
  487. package/src/runtime/emit/scan.ts +0 -106
  488. package/src/runtime/emit/schema-declarative.ts +0 -215
  489. package/src/runtime/emit/sequencing.ts +0 -24
  490. package/src/runtime/emit/set-operation.ts +0 -141
  491. package/src/runtime/emit/sink.ts +0 -27
  492. package/src/runtime/emit/sort.ts +0 -75
  493. package/src/runtime/emit/subquery.ts +0 -203
  494. package/src/runtime/emit/table-valued-function.ts +0 -106
  495. package/src/runtime/emit/temporal-arithmetic.ts +0 -302
  496. package/src/runtime/emit/transaction.ts +0 -205
  497. package/src/runtime/emit/unary.ts +0 -101
  498. package/src/runtime/emit/update.ts +0 -66
  499. package/src/runtime/emit/values.ts +0 -66
  500. package/src/runtime/emit/window-function.ts +0 -42
  501. package/src/runtime/emit/window.ts +0 -458
  502. package/src/runtime/emitters.ts +0 -183
  503. package/src/runtime/register.ts +0 -150
  504. package/src/runtime/scheduler.ts +0 -488
  505. package/src/runtime/types.ts +0 -242
  506. package/src/runtime/utils.ts +0 -177
  507. package/src/schema/assertion.ts +0 -21
  508. package/src/schema/catalog.ts +0 -269
  509. package/src/schema/change-events.ts +0 -80
  510. package/src/schema/column.ts +0 -51
  511. package/src/schema/declared-schema-manager.ts +0 -82
  512. package/src/schema/function.ts +0 -188
  513. package/src/schema/manager.ts +0 -1034
  514. package/src/schema/schema-differ.ts +0 -214
  515. package/src/schema/schema-hasher.ts +0 -26
  516. package/src/schema/schema.ts +0 -222
  517. package/src/schema/table.ts +0 -409
  518. package/src/schema/view.ts +0 -19
  519. package/src/schema/window-function.ts +0 -56
  520. package/src/types/builtin-types.ts +0 -350
  521. package/src/types/index.ts +0 -17
  522. package/src/types/json-type.ts +0 -152
  523. package/src/types/logical-type.ts +0 -91
  524. package/src/types/plugin-interface.ts +0 -10
  525. package/src/types/registry.ts +0 -204
  526. package/src/types/temporal-types.ts +0 -290
  527. package/src/types/validation.ts +0 -120
  528. package/src/util/affinity.ts +0 -151
  529. package/src/util/ast-stringify.ts +0 -887
  530. package/src/util/cached.ts +0 -25
  531. package/src/util/coercion.ts +0 -113
  532. package/src/util/comparison.ts +0 -510
  533. package/src/util/environment.ts +0 -52
  534. package/src/util/hash.ts +0 -90
  535. package/src/util/latches.ts +0 -47
  536. package/src/util/mutation-statement.ts +0 -135
  537. package/src/util/patterns.ts +0 -56
  538. package/src/util/plan-formatter.ts +0 -48
  539. package/src/util/plugin-helper.ts +0 -110
  540. package/src/util/row-descriptor.ts +0 -105
  541. package/src/util/serialization.ts +0 -47
  542. package/src/util/sql-literal.ts +0 -22
  543. package/src/util/working-table-iterable.ts +0 -38
  544. package/src/vtab/best-access-plan.ts +0 -244
  545. package/src/vtab/connection.ts +0 -36
  546. package/src/vtab/filter-info.ts +0 -23
  547. package/src/vtab/index-info.ts +0 -84
  548. package/src/vtab/manifest.ts +0 -86
  549. package/src/vtab/memory/connection.ts +0 -73
  550. package/src/vtab/memory/index.ts +0 -191
  551. package/src/vtab/memory/layer/base-cursor.ts +0 -124
  552. package/src/vtab/memory/layer/base.ts +0 -275
  553. package/src/vtab/memory/layer/connection.ts +0 -203
  554. package/src/vtab/memory/layer/interface.ts +0 -47
  555. package/src/vtab/memory/layer/manager.ts +0 -909
  556. package/src/vtab/memory/layer/safe-iterate.ts +0 -49
  557. package/src/vtab/memory/layer/scan-plan.ts +0 -84
  558. package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
  559. package/src/vtab/memory/layer/transaction.ts +0 -229
  560. package/src/vtab/memory/module.ts +0 -667
  561. package/src/vtab/memory/table.ts +0 -251
  562. package/src/vtab/memory/types.ts +0 -23
  563. package/src/vtab/memory/utils/logging.ts +0 -36
  564. package/src/vtab/memory/utils/primary-key.ts +0 -163
  565. package/src/vtab/module.ts +0 -162
  566. package/src/vtab/table.ts +0 -177
@@ -1,105 +0,0 @@
1
- /**
2
- * Optimizer tuning parameters - centralized configuration for magic numbers
3
- */
4
- export interface OptimizerTuning {
5
- /** Row estimation defaults */
6
- readonly defaultRowEstimate: number;
7
-
8
- /** Maximum optimization depth to prevent infinite recursion */
9
- readonly maxOptimizationDepth: number;
10
-
11
- /** Join optimization */
12
- readonly join: {
13
- /** Minimum left side rows to consider caching right side */
14
- readonly minLeftRowsForCaching: number;
15
- /** Maximum right side rows to cache */
16
- readonly maxRightRowsForCaching: number;
17
- /** Cache threshold multiplier (rightSize * multiplier) */
18
- readonly cacheThresholdMultiplier: number;
19
- /** Maximum cache threshold */
20
- readonly maxCacheThreshold: number;
21
- };
22
-
23
- /** CTE optimization */
24
- readonly cte: {
25
- /** Maximum CTE size to consider for caching */
26
- readonly maxSizeForCaching: number;
27
- /** Cache threshold multiplier for CTEs */
28
- readonly cacheThresholdMultiplier: number;
29
- /** Maximum cache threshold for CTEs */
30
- readonly maxCacheThreshold: number;
31
- };
32
-
33
- /** Recursive CTE configuration */
34
- readonly recursiveCte: {
35
- /** Maximum iterations before recursive CTE is terminated (0 = unlimited) */
36
- readonly maxIterations: number;
37
- /** Default cache threshold for CTE self-references */
38
- readonly defaultCacheThreshold: number;
39
- };
40
-
41
- /** Materialization advisory configuration */
42
- readonly cache: {
43
- /** Row threshold for switching from memory to spill strategy */
44
- readonly spillThreshold: number;
45
- /** Maximum memory buffer size for spill caches */
46
- readonly maxSpillBuffer: number;
47
- /** Whether spill caching is enabled */
48
- readonly spillEnabled: boolean;
49
- };
50
-
51
- /** Development and debugging options */
52
- readonly debug: {
53
- /** Whether to validate physical plans before emission */
54
- readonly validatePlan: boolean;
55
- };
56
-
57
- /** QuickPick join enumeration tuning */
58
- readonly quickpick?: {
59
- /** Maximum number of random greedy tours to evaluate */
60
- readonly maxTours: number;
61
- /** Time limit in milliseconds for enumeration (soft cap) */
62
- readonly timeLimitMs: number;
63
- /** Minimum estimated plan cost to trigger enumeration */
64
- readonly minTriggerCost: number;
65
- /** Enable/disable QuickPick globally */
66
- readonly enabled: boolean;
67
- };
68
- }
69
-
70
- /**
71
- * Default optimizer tuning parameters
72
- */
73
- export const DEFAULT_TUNING: OptimizerTuning = {
74
- defaultRowEstimate: 1000,
75
- maxOptimizationDepth: 50,
76
- join: {
77
- minLeftRowsForCaching: 1,
78
- maxRightRowsForCaching: 50000,
79
- cacheThresholdMultiplier: 2,
80
- maxCacheThreshold: 10000
81
- },
82
- cte: {
83
- maxSizeForCaching: 50000,
84
- cacheThresholdMultiplier: 2,
85
- maxCacheThreshold: 20000
86
- },
87
- recursiveCte: {
88
- maxIterations: 10000,
89
- defaultCacheThreshold: 10000
90
- },
91
- cache: {
92
- spillThreshold: 100000,
93
- maxSpillBuffer: 10000,
94
- spillEnabled: true
95
- },
96
- debug: {
97
- validatePlan: false // Default to disabled in production
98
- },
99
- quickpick: {
100
- maxTours: 100,
101
- timeLimitMs: 100,
102
- minTriggerCost: 0,
103
- enabled: true
104
- }
105
- };
@@ -1,332 +0,0 @@
1
- import { createLogger } from '../common/logger.js';
2
- import { PlanNode } from './nodes/plan-node.js';
3
- import { PlanNodeType } from './nodes/plan-node-type.js';
4
- import { OptimizerTuning, DEFAULT_TUNING } from './optimizer-tuning.js';
5
-
6
- // Re-export for convenience
7
- export { DEFAULT_TUNING };
8
-
9
- import { applyRules } from './framework/registry.js';
10
- import { tracePhaseStart, tracePhaseEnd, traceNodeStart, traceNodeEnd } from './framework/trace.js';
11
- import { defaultStatsProvider, type StatsProvider } from './stats/index.js';
12
- import { createOptContext, type OptContext } from './framework/context.js';
13
- import type { OptimizerDiagnostics } from './framework/context.js';
14
- import { PassManager, PassId } from './framework/pass.js';
15
- // Phase 2 rules
16
- import { ruleMaterializationAdvisory } from './rules/cache/rule-materialization-advisory.js';
17
- // Phase 1.5 rules
18
- import { ruleSelectAccessPath } from './rules/access/rule-select-access-path.js';
19
- import { ruleGrowRetrieve } from './rules/retrieve/rule-grow-retrieve.js';
20
- import { rulePredicatePushdown } from './rules/predicate/rule-predicate-pushdown.js';
21
- import { ruleJoinKeyInference } from './rules/join/rule-join-key-inference.js';
22
- import { ruleJoinGreedyCommute } from './rules/join/rule-join-greedy-commute.js';
23
- // Predicate pushdown rules
24
- // Core optimization rules
25
- import { ruleAggregateStreaming } from './rules/aggregate/rule-aggregate-streaming.js';
26
- import { ruleQuickPickJoinEnumeration } from './rules/join/rule-quickpick-enumeration.js';
27
- // Constraint rules removed - now handled in builders for correctness
28
- import { ruleCteOptimization } from './rules/cache/rule-cte-optimization.js';
29
- import { ruleMutatingSubqueryCache } from './rules/cache/rule-mutating-subquery-cache.js';
30
- // Phase 3 rules
31
- import { validatePhysicalTree } from './validation/plan-validator.js';
32
- import { Database } from '../core/database.js';
33
- import { performConstantFolding } from './analysis/const-pass.js';
34
- import { createRuntimeExpressionEvaluator } from './analysis/const-evaluator.js';
35
-
36
- const log = createLogger('optimizer');
37
-
38
- /**
39
- * The query optimizer transforms logical plan trees into physical plan trees
40
- */
41
- export class Optimizer {
42
- private readonly stats: StatsProvider;
43
- private readonly passManager: PassManager;
44
- private lastDiagnostics: OptimizerDiagnostics | null = null;
45
- public tuning: OptimizerTuning;
46
-
47
- constructor(
48
- tuning: OptimizerTuning = DEFAULT_TUNING,
49
- stats?: StatsProvider
50
- ) {
51
- this.stats = stats ?? defaultStatsProvider;
52
- this.passManager = new PassManager();
53
- this.tuning = tuning;
54
-
55
- // Register rules to their appropriate passes only (no legacy globals)
56
- this.registerRulesToPasses();
57
- }
58
-
59
- updateTuning(tuning: OptimizerTuning): void {
60
- this.tuning = tuning;
61
- }
62
-
63
- private static globalRulesRegistered = false;
64
-
65
- /**
66
- * Legacy method removed; keep empty to avoid duplicate registrations
67
- */
68
-
69
- /**
70
- * Register rules with their appropriate passes
71
- */
72
- private registerRulesToPasses(): void {
73
- // Structural pass rules (top-down) - for operations that need parent context
74
- // Register grow-retrieve for ALL relational node types
75
- // The rule itself will determine if growth is possible
76
- const relationalNodeTypes = [
77
- PlanNodeType.Filter,
78
- PlanNodeType.Project,
79
- PlanNodeType.Sort,
80
- PlanNodeType.LimitOffset,
81
- PlanNodeType.Aggregate,
82
- PlanNodeType.Distinct,
83
- PlanNodeType.Join,
84
- PlanNodeType.Window,
85
- // Add any other relational node types as needed
86
- ];
87
-
88
- for (const nodeType of relationalNodeTypes) {
89
- this.passManager.addRuleToPass(PassId.Structural, {
90
- id: `grow-retrieve-${nodeType}`,
91
- nodeType,
92
- phase: 'rewrite',
93
- fn: ruleGrowRetrieve,
94
- priority: 10
95
- });
96
- }
97
-
98
- // Join key inference (structural/characteristic)
99
- this.passManager.addRuleToPass(PassId.Structural, {
100
- id: 'join-key-inference',
101
- nodeType: PlanNodeType.Join,
102
- phase: 'rewrite',
103
- fn: ruleJoinKeyInference,
104
- priority: 15
105
- });
106
-
107
- // Greedy join commute: place smaller input on the left to improve nested-loop-like costs
108
- this.passManager.addRuleToPass(PassId.Structural, {
109
- id: 'join-greedy-commute',
110
- nodeType: PlanNodeType.Join,
111
- phase: 'rewrite',
112
- fn: ruleJoinGreedyCommute,
113
- priority: 16
114
- });
115
-
116
- this.passManager.addRuleToPass(PassId.Structural, {
117
- id: 'predicate-pushdown',
118
- nodeType: PlanNodeType.Filter,
119
- phase: 'rewrite',
120
- fn: rulePredicatePushdown,
121
- priority: 20
122
- });
123
-
124
- // Physical pass rules (bottom-up) - for logical to physical transformations
125
- this.passManager.addRuleToPass(PassId.Physical, {
126
- id: 'select-access-path',
127
- nodeType: PlanNodeType.Retrieve,
128
- phase: 'impl',
129
- fn: ruleSelectAccessPath,
130
- priority: 10
131
- });
132
-
133
- // QuickPick join enumeration (optional via tuning)
134
- this.passManager.addRuleToPass(PassId.Physical, {
135
- id: 'quickpick-join-enumeration',
136
- nodeType: PlanNodeType.Join,
137
- phase: 'impl',
138
- fn: ruleQuickPickJoinEnumeration,
139
- priority: 5
140
- });
141
-
142
- this.passManager.addRuleToPass(PassId.Physical, {
143
- id: 'aggregate-streaming',
144
- nodeType: PlanNodeType.Aggregate,
145
- phase: 'impl',
146
- fn: ruleAggregateStreaming,
147
- priority: 20
148
- });
149
-
150
- // Post-optimization pass rules (bottom-up) - for cleanup and caching
151
- this.passManager.addRuleToPass(PassId.PostOptimization, {
152
- id: 'mutating-subquery-cache',
153
- nodeType: PlanNodeType.Join,
154
- phase: 'rewrite',
155
- fn: ruleMutatingSubqueryCache,
156
- priority: 10
157
- });
158
-
159
- this.passManager.addRuleToPass(PassId.PostOptimization, {
160
- id: 'cte-optimization',
161
- nodeType: PlanNodeType.CTE,
162
- phase: 'rewrite',
163
- fn: ruleCteOptimization,
164
- priority: 20
165
- });
166
-
167
- // Register materialization advisory for multiple node types
168
- const nodeTypesForMaterialization = [
169
- PlanNodeType.Block,
170
- PlanNodeType.ScalarSubquery,
171
- PlanNodeType.Exists,
172
- PlanNodeType.In,
173
- PlanNodeType.Insert,
174
- PlanNodeType.Update,
175
- PlanNodeType.Delete,
176
- PlanNodeType.CTE,
177
- PlanNodeType.RecursiveCTE,
178
- PlanNodeType.Returning,
179
- PlanNodeType.ScalarFunctionCall,
180
- PlanNodeType.CaseExpr,
181
- ];
182
-
183
- for (const nodeType of nodeTypesForMaterialization) {
184
- this.passManager.addRuleToPass(PassId.PostOptimization, {
185
- id: `materialization-advisory-${nodeType}`,
186
- nodeType,
187
- phase: 'rewrite',
188
- fn: ruleMaterializationAdvisory,
189
- priority: 30
190
- });
191
- }
192
-
193
- log('Registered rules to optimization passes');
194
- }
195
-
196
- /**
197
- * Optimize a plan tree by applying transformation rules
198
- */
199
- optimize(plan: PlanNode, db: Database): PlanNode {
200
- log('Starting optimization of plan', plan.nodeType);
201
-
202
- // Create optimization context
203
- const context = createOptContext(this, this.stats, this.tuning, db);
204
-
205
- tracePhaseStart('optimization');
206
- try {
207
- // Execute all optimization passes
208
- const optimizedPlan = this.passManager.execute(plan, context);
209
-
210
- // Capture diagnostics snapshot for external consumers
211
- this.lastDiagnostics = { ...context.diagnostics };
212
-
213
- // Final validation (if enabled)
214
- if (this.tuning.debug.validatePlan) {
215
- log('Running plan validation');
216
- try {
217
- validatePhysicalTree(optimizedPlan);
218
- log('Plan validation passed');
219
- } catch (error) {
220
- log('Plan validation failed: %s', error);
221
- throw error;
222
- }
223
- }
224
-
225
- return optimizedPlan;
226
- } finally {
227
- tracePhaseEnd('optimization');
228
- }
229
- }
230
-
231
- /**
232
- * Run only non-physical passes to obtain a structurally rewritten logical plan
233
- * suitable for pre-physical analysis (e.g., row-specific classification).
234
- */
235
- optimizeForAnalysis(plan: PlanNode, db: Database): PlanNode {
236
- log('Starting pre-physical analysis optimization of plan', plan.nodeType);
237
-
238
- const context = createOptContext(this, this.stats, this.tuning, db);
239
- tracePhaseStart('pre-physical-analysis');
240
- try {
241
- // Execute only structural pass(es) and constant folding
242
- const folded = this.performConstantFolding(plan, context);
243
- const structuralOnly = this.passManager.executeUpTo(folded, context, PassId.Structural);
244
- this.lastDiagnostics = { ...context.diagnostics };
245
- return structuralOnly;
246
- } finally {
247
- tracePhaseEnd('pre-physical-analysis');
248
- }
249
- }
250
-
251
- /**
252
- * Perform single-pass constant folding over the entire plan tree
253
- */
254
- private performConstantFolding(plan: PlanNode, context: OptContext): PlanNode {
255
- // Create runtime expression evaluator
256
- const evaluator = createRuntimeExpressionEvaluator(context.db);
257
-
258
- // Perform single-pass constant folding
259
- const result = performConstantFolding(plan, evaluator);
260
-
261
- log('Constant folding completed');
262
- return result;
263
- }
264
-
265
- optimizeNode(node: PlanNode, context: OptContext): PlanNode {
266
- traceNodeStart(node);
267
-
268
- // Check if we've already optimized this exact node instance
269
- const cached = context.optimizedNodes.get(node.id);
270
- if (cached) {
271
- log('Reusing optimized version of shared node %s (%s)', node.id, node.nodeType);
272
- traceNodeEnd(node, cached);
273
- return cached;
274
- }
275
-
276
- // Note: We removed the broken `if (node.physical)` check here
277
- // The `physical` property is always truthy (it returns a PhysicalProperties object)
278
- // Physical vs logical distinction should be handled by the rules themselves
279
-
280
- // First optimize all children
281
- const optimizedNode = this.optimizeChildren(node, context);
282
-
283
- // Apply rules
284
- const rulesApplied = applyRules(optimizedNode, context);
285
-
286
- if (rulesApplied !== optimizedNode) {
287
- // Rules transformed the node
288
- log(`Rules applied to ${optimizedNode.nodeType}, transformed to ${rulesApplied.nodeType}`);
289
- traceNodeEnd(node, rulesApplied);
290
-
291
- // Cache the final result
292
- context.optimizedNodes.set(node.id, rulesApplied);
293
- return rulesApplied;
294
- }
295
-
296
- // No rule applied - assume node is physical
297
- traceNodeEnd(node, optimizedNode);
298
-
299
- // Cache the result even if no rules applied
300
- context.optimizedNodes.set(node.id, optimizedNode);
301
- return optimizedNode;
302
- }
303
-
304
- private optimizeChildren(node: PlanNode, context: OptContext): PlanNode {
305
- // Generic tree walk using withChildren
306
- const originalChildren = node.getChildren();
307
- const optimizedChildren = originalChildren.map(child => this.optimizeNode(child, context));
308
-
309
- // Check if any children changed
310
- const childrenChanged = optimizedChildren.some((child, i) => child !== originalChildren[i]);
311
-
312
- if (!childrenChanged) {
313
- return node; // No changes
314
- }
315
-
316
- // Use withChildren to create new node with optimized children
317
- // withChildren is a required contract - any errors should propagate
318
- return node.withChildren(optimizedChildren);
319
- }
320
-
321
- /**
322
- * Get the statistics provider
323
- */
324
- getStats(): StatsProvider {
325
- return this.stats;
326
- }
327
-
328
- /** Get diagnostics from the last optimization run */
329
- getLastDiagnostics(): OptimizerDiagnostics | null {
330
- return this.lastDiagnostics;
331
- }
332
- }
@@ -1,190 +0,0 @@
1
- import type { SqlParameters } from '../common/types.js';
2
- import type { Database } from '../core/database.js';
3
- import type { SchemaManager } from '../schema/manager.js';
4
- import type { Scope } from './scopes/scope.js';
5
- import type { PlanNode, ScalarPlanNode } from './nodes/plan-node.js';
6
- import type { CTEScopeNode } from './nodes/cte-node.js';
7
- import type { CTEReferenceNode } from './nodes/cte-reference-node.js';
8
-
9
- /**
10
- * Debug options for query planning and execution.
11
- */
12
- export interface DebugOptions {
13
- /** Enable runtime instruction tracing (logs inputs/outputs) */
14
- traceInstructions?: boolean;
15
- /** Enable detailed plan tree output */
16
- showPlan?: boolean;
17
- /** Enable instruction program output */
18
- showProgram?: boolean;
19
- /** Custom debug context for additional logging */
20
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
- debugContext?: Record<string, any>;
22
- }
23
-
24
- /**
25
- * Represents a dependency on a schema object that was resolved during planning.
26
- * Used for plan invalidation when schema changes.
27
- */
28
- export interface SchemaDependency {
29
- readonly type: 'table' | 'function' | 'vtab_module' | 'collation';
30
- readonly schemaName?: string; // undefined for functions, collations, and vtab modules
31
- readonly objectName: string;
32
- readonly objectVersion?: number; // For future versioning support
33
- }
34
-
35
- /**
36
- * Tracks schema dependencies during planning and provides invalidation callbacks.
37
- */
38
- export class BuildTimeDependencyTracker {
39
- private dependencies = new Set<string>();
40
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
- private resolvedObjects = new Map<string, WeakRef<any>>();
42
- private invalidationCallbacks = new Set<() => void>();
43
-
44
- /**
45
- * Records a dependency on a schema object and stores a weak reference to it.
46
- */
47
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- recordDependency(dep: SchemaDependency, object: any): void {
49
- const key = this.dependencyKey(dep);
50
- this.dependencies.add(key);
51
- this.resolvedObjects.set(key, new WeakRef(object));
52
- }
53
-
54
- /**
55
- * Adds a callback to be invoked when schema dependencies become invalid.
56
- */
57
- addInvalidationCallback(callback: () => void): () => void {
58
- this.invalidationCallbacks.add(callback);
59
- return () => this.invalidationCallbacks.delete(callback);
60
- }
61
-
62
- /**
63
- * Checks if all dependencies are still valid by verifying weak references.
64
- */
65
- checkIntegrity(): boolean {
66
- for (const [_key, weakRef] of this.resolvedObjects.entries()) {
67
- if (weakRef.deref() === undefined) {
68
- // Object was garbage collected, dependency is invalid
69
- return false;
70
- }
71
- }
72
- return true;
73
- }
74
-
75
- /**
76
- * Gets all tracked dependencies.
77
- */
78
- getDependencies(): SchemaDependency[] {
79
- return Array.from(this.dependencies).map(key => this.parseDependencyKey(key));
80
- }
81
-
82
- /**
83
- * Checks if any dependencies are tracked.
84
- */
85
- hasAnyDependencies(): boolean {
86
- return this.dependencies.size > 0;
87
- }
88
-
89
- /**
90
- * Notifies all invalidation callbacks.
91
- */
92
- notifyInvalidation(): void {
93
- for (const callback of this.invalidationCallbacks) {
94
- try {
95
- callback();
96
- } catch (error) {
97
- console.error('Error in schema invalidation callback:', error);
98
- }
99
- }
100
- }
101
-
102
- private dependencyKey(dep: SchemaDependency): string {
103
- const schema = dep.schemaName || '';
104
- const version = dep.objectVersion || 0;
105
- return `${dep.type}:${schema}:${dep.objectName}:${version}`;
106
- }
107
-
108
- private parseDependencyKey(key: string): SchemaDependency {
109
- const [type, schemaName, objectName, versionStr] = key.split(':');
110
- return {
111
- type: type as SchemaDependency['type'],
112
- schemaName: schemaName || undefined,
113
- objectName,
114
- objectVersion: parseInt(versionStr) || undefined
115
- };
116
- }
117
- }
118
-
119
- /**
120
- * Provides contextual information necessary during the query planning phase.
121
- * This object is passed to various planning functions to give them access to
122
- * the database schema, current symbol resolution scope, and other relevant details.
123
- */
124
- export interface PlanningContext {
125
- /**
126
- * The Database instance, providing access to the schema manager, function registry, etc.
127
- */
128
- readonly db: Database;
129
-
130
- /**
131
- * The SchemaManager instance, for direct access if needed (also available via db.schemaManager).
132
- */
133
- readonly schemaManager: SchemaManager; // Redundant if db is present, but can be convenient
134
-
135
- /**
136
- * The current Scope for symbol resolution (columns, parameters, CTEs).
137
- * Planning functions for nested structures (like subqueries) will typically create a new Scope
138
- * with the current scope as its parent and pass that down in a new PlanningContext.
139
- */
140
- readonly scope: Scope;
141
-
142
- /**
143
- * The current parameters for the statement, as discovered by references.
144
- */
145
- readonly parameters: SqlParameters;
146
-
147
- /**
148
- * Debug options controlling tracing and diagnostics output.
149
- */
150
- readonly debug?: DebugOptions;
151
-
152
- /**
153
- * Aggregates from the SELECT list (used when building HAVING expressions).
154
- * This allows buildExpression to recognize when an aggregate function in HAVING
155
- * refers to an already-computed aggregate from SELECT.
156
- */
157
- readonly aggregates?: Array<{
158
- expression: ScalarPlanNode;
159
- alias: string;
160
- columnIndex: number;
161
- attributeId: number;
162
- }>;
163
-
164
- /**
165
- * Active CTEs available in the current planning context.
166
- * This map contains all CTEs from the current WITH clause and any parent WITH clauses,
167
- * allowing subqueries in expressions to resolve CTE references correctly.
168
- */
169
- readonly cteNodes?: Map<string, CTEScopeNode>;
170
-
171
- /**
172
- * Schema dependency tracker for this planning session.
173
- */
174
- readonly schemaDependencies: BuildTimeDependencyTracker;
175
-
176
- /**
177
- * Schema object cache for resolved objects during planning.
178
- */
179
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
180
- readonly schemaCache: Map<string, any>;
181
-
182
- /**
183
- * Cache for CTE reference nodes to ensure consistent attribute IDs across multiple references
184
- * to the same CTE with the same alias. Key format: "cteName:alias"
185
- */
186
- cteReferenceCache?: Map<string, CTEReferenceNode>;
187
-
188
- /** maps a RelationalPlanNode to its column scope during building */
189
- readonly outputScopes: Map<PlanNode, Scope>;
190
- }