@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,480 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import type { PlanNode } from './nodes/plan-node.js';
3
- import { safeJsonStringify } from '../util/serialization.js';
4
- import { astToString } from '../util/ast-stringify.js';
5
- import type { Instruction, InstructionTracer } from '../runtime/types.js';
6
- import type * as AST from '../parser/ast.js';
7
- import { quereusError } from '../common/errors.js';
8
- import { StatusCode } from '../common/types.js';
9
-
10
- /**
11
- * Detailed information about a PlanNode for debugging purposes.
12
- */
13
- export interface PlanNodeDebugInfo {
14
- id: string;
15
- nodeType: string;
16
- type: any; // The result of getType()
17
- estimatedCost: number;
18
- estimatedRows?: number;
19
- totalCost: number;
20
- children: PlanNodeDebugInfo[];
21
- relations: PlanNodeDebugInfo[];
22
- properties: Record<string, any>; // Node-specific properties
23
- }
24
-
25
- /**
26
- * Information about an instruction in the execution program.
27
- */
28
- export interface InstructionDebugInfo {
29
- index: number;
30
- note?: string;
31
- paramCount: number;
32
- paramIndices: number[];
33
- destination: number | null;
34
- subPrograms?: SubProgramDebugInfo[];
35
- }
36
-
37
- /**
38
- * Information about a sub-program for debugging purposes.
39
- */
40
- export interface SubProgramDebugInfo {
41
- programIndex: number;
42
- instructionCount: number;
43
- rootNote?: string;
44
- instructions: InstructionDebugInfo[];
45
- }
46
-
47
- /**
48
- * Checks if a value is an AST node
49
- */
50
- function isAstNode(value: any): value is AST.AstNode {
51
- return value && typeof value === 'object' && 'type' in value && typeof value.type === 'string';
52
- }
53
-
54
- /**
55
- * Recursively processes a value, converting AST nodes to SQL strings
56
- */
57
- function processValue(value: any): any {
58
- if (value === null || value === undefined) {
59
- return value;
60
- }
61
-
62
- // If it's an AST node, convert to SQL string
63
- if (isAstNode(value)) {
64
- try {
65
- return astToString(value);
66
- } catch {
67
- return `[AST:${value.type}]`; // Fallback if stringify fails
68
- }
69
- }
70
-
71
- // If it's an array, process each element
72
- if (Array.isArray(value)) {
73
- return value.map(processValue);
74
- }
75
-
76
- // If it's an object, process each property
77
- if (typeof value === 'object') {
78
- // Skip circular references and complex objects
79
- if (value.constructor !== Object && value.constructor !== Array) {
80
- return '[COMPLEX_OBJECT]';
81
- }
82
-
83
- const processed: Record<string, any> = {};
84
- for (const [key, val] of Object.entries(value)) {
85
- try {
86
- processed[key] = processValue(val);
87
- } catch {
88
- processed[key] = '[UNPROCESSABLE]';
89
- }
90
- }
91
- return processed;
92
- }
93
-
94
- // For primitives, return as-is
95
- return value;
96
- }
97
-
98
- /**
99
- * Serializes a PlanNode tree to a detailed JSON representation using the existing visit pattern.
100
- */
101
- export function serializePlanTree(rootNode: PlanNode): string {
102
- const nodeMap = new Map<PlanNode, PlanNodeDebugInfo>();
103
-
104
- // First pass: collect all nodes using the visit pattern
105
- rootNode.visit((node) => {
106
- if (!nodeMap.has(node)) {
107
- // Get node-specific properties by examining the node object
108
- const properties: Record<string, any> = {};
109
-
110
- // Extract interesting properties from the node (excluding functions and circular refs)
111
- for (const [key, value] of Object.entries(node)) {
112
- if (key === 'scope' || key === 'id' || key === 'nodeType' || key === 'estimatedCost') {
113
- continue; // Skip these as they're handled separately
114
- }
115
-
116
- if (typeof value === 'function') {
117
- continue; // Skip functions
118
- }
119
-
120
- if (value && typeof value === 'object' && 'nodeType' in value) {
121
- // This is likely another PlanNode, skip to avoid duplication
122
- continue;
123
- }
124
-
125
- try {
126
- // Process the property value, converting AST nodes to SQL strings
127
- properties[key] = processValue(value);
128
- } catch {
129
- properties[key] = '[UNSERIALIZABLE]';
130
- }
131
- }
132
-
133
- nodeMap.set(node, {
134
- id: node.id,
135
- nodeType: node.nodeType,
136
- type: node.getType(),
137
- estimatedCost: node.estimatedCost,
138
- estimatedRows: (node as any).estimatedRows,
139
- totalCost: node.getTotalCost(),
140
- children: [], // Will be filled in second pass
141
- relations: [], // Will be filled in second pass
142
- properties
143
- });
144
- }
145
- });
146
-
147
- // Second pass: establish relationships
148
- for (const [node, info] of nodeMap) {
149
- info.children = node.getChildren()
150
- .map(child => nodeMap.get(child))
151
- .filter(Boolean) as PlanNodeDebugInfo[];
152
-
153
- info.relations = node.getRelations()
154
- .map(relation => nodeMap.get(relation))
155
- .filter(Boolean) as PlanNodeDebugInfo[];
156
- }
157
-
158
- const rootInfo = nodeMap.get(rootNode);
159
- if (!rootInfo) {
160
- quereusError('Root node not found in serialization map', StatusCode.INTERNAL);
161
- }
162
-
163
- return safeJsonStringify(rootInfo, 2);
164
- }
165
-
166
- /**
167
- * Generates a human-readable program listing of instructions.
168
- */
169
- export function generateInstructionProgram(
170
- instructions: readonly Instruction[],
171
- destinations: readonly (number | null)[]
172
- ): string {
173
- const lines: string[] = [];
174
- lines.push('=== INSTRUCTION PROGRAM ===');
175
- lines.push('');
176
-
177
- const subProgramMap = new Map<number, { scheduler: any; parentIndex: number }>();
178
- let nextSubProgramId = 0;
179
-
180
- for (let i = 0; i < instructions.length; i++) {
181
- const instruction = instructions[i];
182
- const dest = destinations[i];
183
- const note = instruction.note ? ` ; ${instruction.note}` : '';
184
- const destStr = dest !== null ? ` -> [${dest}]` : ' -> [RESULT]';
185
-
186
- let subProgramInfo = '';
187
- if (instruction.programs && instruction.programs.length > 0) {
188
- const programIds: number[] = [];
189
- for (const program of instruction.programs) {
190
- const programId = nextSubProgramId++;
191
- subProgramMap.set(programId, { scheduler: program, parentIndex: i });
192
- programIds.push(programId);
193
- }
194
- subProgramInfo = ` SUB-PROGRAMS: [${programIds.join(', ')}]`;
195
- }
196
-
197
- lines.push(`[${i.toString().padStart(3)}] PARAMS: [${instruction.params.map((_, idx) =>
198
- instructions.findIndex(inst => inst === instruction.params[idx])
199
- ).join(', ')}]${destStr}${note}${subProgramInfo}`);
200
- }
201
-
202
- // Add sub-program listings
203
- if (subProgramMap.size > 0) {
204
- lines.push('');
205
- lines.push('=== SUB-PROGRAMS ===');
206
-
207
- for (const [programId, { scheduler, parentIndex }] of subProgramMap) {
208
- lines.push('');
209
- lines.push(`--- SUB-PROGRAM ${programId} (called by instruction ${parentIndex}) ---`);
210
- const subProgram = generateInstructionProgram(scheduler.instructions, scheduler.destinations);
211
- // Remove the header and footer from sub-program and indent
212
- const subLines = subProgram.split('\n').slice(2, -2);
213
- for (const line of subLines) {
214
- if (line.trim()) {
215
- lines.push(` ${line}`);
216
- }
217
- }
218
- }
219
- }
220
-
221
- lines.push('');
222
- lines.push('=== END PROGRAM ===');
223
- return lines.join('\n');
224
- }
225
-
226
- /**
227
- * Extracts detailed information about the instruction program structure.
228
- */
229
- export function getInstructionDebugInfo(
230
- instructions: readonly Instruction[],
231
- destinations: readonly (number | null)[]
232
- ): InstructionDebugInfo[] {
233
- let nextSubProgramId = 0;
234
-
235
- return instructions.map((instruction, index) => {
236
- let subPrograms: SubProgramDebugInfo[] | undefined;
237
-
238
- if (instruction.programs && instruction.programs.length > 0) {
239
- subPrograms = instruction.programs.map(scheduler => {
240
- const programId = nextSubProgramId++;
241
- const subInstructions = getInstructionDebugInfo(scheduler.instructions, scheduler.destinations);
242
-
243
- return {
244
- programIndex: programId,
245
- instructionCount: scheduler.instructions.length,
246
- rootNote: scheduler.instructions[scheduler.instructions.length - 1]?.note,
247
- instructions: subInstructions
248
- };
249
- });
250
- }
251
-
252
- return {
253
- index,
254
- note: instruction.note,
255
- paramCount: instruction.params.length,
256
- paramIndices: instruction.params.map(param =>
257
- instructions.findIndex(inst => inst === param)
258
- ),
259
- destination: destinations[index],
260
- subPrograms
261
- };
262
- });
263
- }
264
-
265
- /**
266
- * Generates a comprehensive trace report that includes sub-program execution details.
267
- */
268
- export function generateTraceReport(
269
- tracer: InstructionTracer
270
- ): string {
271
- const events = tracer.getTraceEvents?.() || [];
272
- const subPrograms = tracer.getSubPrograms?.() || new Map();
273
-
274
- const lines: string[] = [];
275
- lines.push('=== EXECUTION TRACE ===');
276
- lines.push('');
277
-
278
- for (const event of events) {
279
- const timestamp = new Date(event.timestamp).toISOString();
280
- const typeStr = event.type.toUpperCase().padEnd(6);
281
- const note = event.note ? ` (${event.note})` : '';
282
-
283
- lines.push(`[${event.instructionIndex.toString().padStart(3)}] ${typeStr} ${timestamp}${note}`);
284
-
285
- if (event.type === 'input' && event.subPrograms) {
286
- for (const subProgram of event.subPrograms) {
287
- lines.push(` └─ SUB-PROGRAM ${subProgram.programIndex}: ${subProgram.instructionCount} instructions${subProgram.rootNote ? ` (${subProgram.rootNote})` : ''}`);
288
- }
289
- }
290
-
291
- if (event.type === 'error') {
292
- lines.push(` ERROR: ${event.error}`);
293
- }
294
- }
295
-
296
- if (subPrograms.size > 0) {
297
- lines.push('');
298
- lines.push('=== SUB-PROGRAM DETAILS ===');
299
-
300
- for (const [programId, { scheduler, parentInstructionIndex }] of subPrograms) {
301
- lines.push('');
302
- lines.push(`--- SUB-PROGRAM ${programId} (parent instruction: ${parentInstructionIndex}) ---`);
303
- const programListing = generateInstructionProgram(scheduler.instructions, scheduler.destinations);
304
- // Remove header/footer and indent
305
- const programLines = programListing.split('\n').slice(2, -2);
306
- for (const line of programLines) {
307
- if (line.trim()) {
308
- lines.push(` ${line}`);
309
- }
310
- }
311
- }
312
- }
313
-
314
- lines.push('');
315
- lines.push('=== END TRACE ===');
316
- return lines.join('\n');
317
- }
318
-
319
- /**
320
- * Options for plan formatting
321
- */
322
- export interface PlanDisplayOptions {
323
- /** Show concise plan by default (true) or full details (false) */
324
- concise?: boolean;
325
- /** Node IDs to expand with full details (only applies when concise=true) */
326
- expandNodes?: string[];
327
- /** Maximum depth to display (default: no limit) */
328
- maxDepth?: number;
329
- /** Show physical properties if available */
330
- showPhysical?: boolean;
331
- }
332
-
333
- /**
334
- * Creates a concise, tree-like representation of the plan
335
- */
336
- export function formatPlanTree(rootNode: PlanNode, options: PlanDisplayOptions = {}): string {
337
- const { concise = true, expandNodes = [], maxDepth, showPhysical = true } = options;
338
- const lines: string[] = [];
339
- const nodesSeen = new Set<PlanNode>();
340
-
341
- function formatNode(node: PlanNode, depth: number, isLast: boolean, prefix: string): void {
342
- if (maxDepth !== undefined && depth > maxDepth) {
343
- return;
344
- }
345
-
346
- // Avoid infinite recursion for circular references
347
- if (nodesSeen.has(node)) {
348
- lines.push(`${prefix}├─ [CIRCULAR: ${node.nodeType}#${node.id}]`);
349
- return;
350
- }
351
- nodesSeen.add(node);
352
-
353
- // Determine if this node should be expanded
354
- const shouldExpand = !concise || expandNodes.includes(node.id);
355
-
356
- // Node header with connection lines
357
- const connector = isLast ? '└─ ' : '├─ ';
358
- const nodeType = node.nodeType;
359
- const nodeId = `#${node.id}`;
360
- const description = node.toString();
361
-
362
- // Build the header line
363
- let headerLine = `${prefix}${connector}${nodeType}${nodeId}`;
364
- if (description && description !== nodeType) {
365
- headerLine += `: ${description}`;
366
- }
367
-
368
- // Add cost information if available
369
- const cost = node.estimatedCost;
370
- const totalCost = node.getTotalCost();
371
- if (cost > 0 || totalCost > 0) {
372
- headerLine += ` [cost: ${cost}, total: ${totalCost}]`;
373
- }
374
-
375
- // Add physical properties if requested and available
376
- if (showPhysical && (node as any).physical) {
377
- const physical = (node as any).physical;
378
- const physicalInfo = [];
379
- if (physical.estimatedRows !== undefined) {
380
- physicalInfo.push(`rows: ${physical.estimatedRows}`);
381
- }
382
- if (physical.ordering && physical.ordering.length > 0) {
383
- physicalInfo.push(`ordered: ${physical.ordering.map((o: any) => `${o.attributeId}:${o.direction}`).join(',')}`);
384
- }
385
- if (physical.readonly !== undefined) {
386
- physicalInfo.push(`readonly: ${physical.readonly}`);
387
- }
388
- if (physicalInfo.length > 0) {
389
- headerLine += ` {${physicalInfo.join(', ')}}`;
390
- }
391
- }
392
-
393
- lines.push(headerLine);
394
-
395
- // Add expanded details if requested
396
- if (shouldExpand) {
397
- const logical = node.getLogicalAttributes();
398
- if (logical && Object.keys(logical).length > 0) {
399
- const logicalLines = JSON.stringify(logical, null, 2).split('\n');
400
- const extendedPrefix = prefix + (isLast ? ' ' : '│ ');
401
- lines.push(`${extendedPrefix}┌─ Logical Attributes:`);
402
- for (let i = 0; i < logicalLines.length; i++) {
403
- const line = logicalLines[i];
404
- const isLastLogicalLine = i === logicalLines.length - 1;
405
- const logicalConnector = isLastLogicalLine ? '└─ ' : '│ ';
406
- lines.push(`${extendedPrefix}${logicalConnector}${line}`);
407
- }
408
- }
409
- }
410
-
411
- // Process children
412
- const children = node.getChildren();
413
- const relations = node.getRelations();
414
- const allChildren = [...children, ...relations];
415
-
416
- // Filter out duplicates (in case a child is both a child and relation)
417
- const uniqueChildren = Array.from(new Set(allChildren));
418
-
419
- for (let i = 0; i < uniqueChildren.length; i++) {
420
- const child = uniqueChildren[i];
421
- const isLastChild = i === uniqueChildren.length - 1;
422
- const childPrefix = prefix + (isLast ? ' ' : '│ ');
423
- formatNode(child, depth + 1, isLastChild, childPrefix);
424
- }
425
-
426
- nodesSeen.delete(node);
427
- }
428
-
429
- lines.push('Query Plan:');
430
- formatNode(rootNode, 0, true, '');
431
-
432
- // Add help text
433
- if (concise && expandNodes.length === 0) {
434
- lines.push('');
435
- lines.push('Tip: Use --expand-nodes node1,node2,... to see detailed properties for specific nodes');
436
- }
437
-
438
- return lines.join('\n');
439
- }
440
-
441
- /**
442
- * Generates a compact plan summary showing just the execution path
443
- */
444
- export function formatPlanSummary(rootNode: PlanNode): string {
445
- const path: string[] = [];
446
- const visited = new Set<PlanNode>();
447
-
448
- function collectPath(node: PlanNode): void {
449
- if (visited.has(node)) return;
450
- visited.add(node);
451
-
452
- const description = node.toString();
453
- const nodeInfo = description && description !== node.nodeType
454
- ? `${node.nodeType}(${description})`
455
- : node.nodeType;
456
-
457
- path.push(nodeInfo);
458
-
459
- // Follow the main execution path (first child for most nodes)
460
- const children = node.getChildren();
461
- if (children.length > 0) {
462
- collectPath(children[0]);
463
- }
464
- }
465
-
466
- collectPath(rootNode);
467
- return `Execution Path: ${path.join(' → ')}`;
468
- }
469
-
470
- /**
471
- * Enhanced plan serialization with formatting options
472
- */
473
- export function serializePlanTreeWithOptions(rootNode: PlanNode, options: PlanDisplayOptions = {}): string {
474
- if (options.concise !== false) {
475
- return formatPlanTree(rootNode, options);
476
- } else {
477
- // Use the existing detailed serialization
478
- return serializePlanTree(rootNode);
479
- }
480
- }
@@ -1,132 +0,0 @@
1
- # Titan Optimizer Framework (Phase 1)
2
-
3
- This directory contains the core framework components for the Titan optimizer Phase 1 implementation.
4
-
5
- ## Components
6
-
7
- ### Registry (`registry.ts`)
8
- - **RuleHandle**: Structured rule registration with ID, node type, phase, and priority
9
- - **Loop Detection**: Prevents infinite rule application using visited rule tracking
10
- - **Priority Ordering**: Rules execute in priority order (lower numbers first)
11
- - **Comprehensive Tracing**: Detailed logging and trace hooks for debugging
12
-
13
- ### Trace Framework (`trace.ts`)
14
- - **TraceHook Interface**: Extensible hooks for rule and node processing events
15
- - **DebugTraceHook**: Logs all optimizer activity to debug channels
16
- - **PerformanceTraceHook**: Measures and logs rule execution times
17
- - **CompositeTraceHook**: Combines multiple trace hooks
18
- - **Environment Integration**: Automatically enables tracing based on DEBUG environment
19
-
20
- ### Context (`context.ts`)
21
- - **OptContext**: Unified interface combining optimizer, stats provider, and tuning
22
- - **Depth Tracking**: Prevents infinite recursion in optimization rules
23
- - **Phase Management**: Supports 'rewrite' (logical→logical) and 'impl' (logical→physical) phases
24
- - **Context Data**: Key-value store for rule communication and state
25
-
26
- ### Physical Utilities (`physical-utils.ts`)
27
- - **Property Inference**: Utilities for combining and propagating physical properties
28
- - **Ordering Operations**: Functions for merging and inferring result orderings
29
- - **Unique Key Handling**: Logic for combining unique keys across joins and projections
30
- - **Cost Estimation**: Helpers for consistent cost model application
31
-
32
- ## Architecture Integration
33
-
34
- ### Rule Registration
35
- ```typescript
36
- import { registerRule, createRule } from '../framework/registry.js';
37
-
38
- registerRule(createRule(
39
- 'Aggregate→StreamAggregate',
40
- PlanNodeType.Aggregate,
41
- 'impl',
42
- ruleAggregateStreaming,
43
- 10 // priority
44
- ));
45
- ```
46
-
47
- ### Rule Implementation
48
- ```typescript
49
- import type { RuleFn } from '../framework/registry.js';
50
-
51
- const ruleAggregateStreaming: RuleFn = (node, optimizer) => {
52
- if (!(node instanceof AggregateNode)) return null;
53
-
54
- const context = optimizer.getContext();
55
- const stats = optimizer.getStats();
56
-
57
- // Rule logic here...
58
- return transformedNode;
59
- };
60
- ```
61
-
62
- ### Tracing Integration
63
- Tracing is automatically enabled based on environment variables:
64
- - `DEBUG=quereus:optimizer*` - enables debug tracing
65
- - `QUEREUS_OPTIMIZER_PERF=true` - enables performance tracing
66
-
67
- ### Statistics Provider
68
- ```typescript
69
- // Use built-in providers
70
- import { defaultStatsProvider, vtabStatsProvider } from '../stats/index.js';
71
-
72
- // Or create custom provider
73
- const customStats = createStatsProvider(
74
- new Map([['users', 50000]]), // table row counts
75
- new Map([['users:BinaryOp', 0.1]]) // predicate selectivity
76
- );
77
- ```
78
-
79
- ## Phase 1 Status
80
-
81
- ✅ **Implemented Components:**
82
- - Rule registration and management framework
83
- - Comprehensive trace framework with multiple hook types
84
- - Optimizer context with statistics provider integration
85
- - Physical property utilities
86
- - Golden plan test harness
87
- - Environment-based configuration
88
-
89
- ✅ **Integration Complete:**
90
- - Optimizer updated to use new framework
91
- - Emitter metadata support added
92
- - Trace hooks integrated into rule application
93
- - Statistics provider abstraction ready
94
-
95
- 🔄 **Next Steps (Phase 2):**
96
- - Advanced optimization rules implementation
97
- - Seek/range scan access path selection
98
- - Materialization advisory framework
99
- - Plan validation pass
100
-
101
- ## Usage Examples
102
-
103
- ### Enabling Tracing
104
- ```bash
105
- # Enable all optimizer tracing
106
- DEBUG=quereus:optimizer* yarn test
107
-
108
- # Enable performance measurement
109
- QUEREUS_OPTIMIZER_PERF=true DEBUG=quereus:optimizer* yarn test
110
-
111
- # Trace specific rule categories
112
- DEBUG=quereus:optimizer:rule:* yarn test
113
- ```
114
-
115
- ### Running Golden Plan Tests
116
- ```bash
117
- # Run all golden plan tests
118
- yarn test:plans
119
-
120
- # Update golden files when plans change
121
- UPDATE_PLANS=true yarn test:plans
122
- ```
123
-
124
- ### Custom Statistics Provider
125
- ```typescript
126
- const optimizer = new Optimizer(
127
- DEFAULT_TUNING,
128
- new VTabStatsProvider() // Uses VTab module statistics when available
129
- );
130
- ```
131
-
132
- This framework provides the foundation for sophisticated query optimization while maintaining clear separation of concerns and comprehensive debugging capabilities.