@quereus/quereus 0.7.3 → 0.7.5

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