@quereus/quereus 0.7.2 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/package.json +3 -3
  2. package/dist/src/common/constants.js.map +0 -1
  3. package/dist/src/common/datatype.js.map +0 -1
  4. package/dist/src/common/errors.js.map +0 -1
  5. package/dist/src/common/json-types.js.map +0 -1
  6. package/dist/src/common/logger.js.map +0 -1
  7. package/dist/src/common/type-inference.js.map +0 -1
  8. package/dist/src/common/types.js.map +0 -1
  9. package/dist/src/core/database-options.js.map +0 -1
  10. package/dist/src/core/database.js.map +0 -1
  11. package/dist/src/core/param.js.map +0 -1
  12. package/dist/src/core/statement.js.map +0 -1
  13. package/dist/src/func/builtins/aggregate.js.map +0 -1
  14. package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
  15. package/dist/src/func/builtins/conversion.js.map +0 -1
  16. package/dist/src/func/builtins/datetime.js.map +0 -1
  17. package/dist/src/func/builtins/explain.js.map +0 -1
  18. package/dist/src/func/builtins/generation.js.map +0 -1
  19. package/dist/src/func/builtins/index.js.map +0 -1
  20. package/dist/src/func/builtins/json-helpers.js.map +0 -1
  21. package/dist/src/func/builtins/json-tvf.js.map +0 -1
  22. package/dist/src/func/builtins/json.js.map +0 -1
  23. package/dist/src/func/builtins/scalar.js.map +0 -1
  24. package/dist/src/func/builtins/schema.js.map +0 -1
  25. package/dist/src/func/builtins/string.js.map +0 -1
  26. package/dist/src/func/builtins/timespan.js.map +0 -1
  27. package/dist/src/func/context.js.map +0 -1
  28. package/dist/src/func/registration.js.map +0 -1
  29. package/dist/src/index.js.map +0 -1
  30. package/dist/src/parser/ast.js.map +0 -1
  31. package/dist/src/parser/index.js.map +0 -1
  32. package/dist/src/parser/lexer.js.map +0 -1
  33. package/dist/src/parser/parser.js.map +0 -1
  34. package/dist/src/parser/utils.js.map +0 -1
  35. package/dist/src/parser/visitor.js.map +0 -1
  36. package/dist/src/planner/analysis/binding-collector.js.map +0 -1
  37. package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
  38. package/dist/src/planner/analysis/const-pass.js.map +0 -1
  39. package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
  40. package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
  41. package/dist/src/planner/building/alter-table.js.map +0 -1
  42. package/dist/src/planner/building/block.js.map +0 -1
  43. package/dist/src/planner/building/constraint-builder.js.map +0 -1
  44. package/dist/src/planner/building/create-assertion.js.map +0 -1
  45. package/dist/src/planner/building/create-view.js.map +0 -1
  46. package/dist/src/planner/building/ddl.js.map +0 -1
  47. package/dist/src/planner/building/declare-schema.js.map +0 -1
  48. package/dist/src/planner/building/delete.js.map +0 -1
  49. package/dist/src/planner/building/drop-assertion.js.map +0 -1
  50. package/dist/src/planner/building/drop-table.js.map +0 -1
  51. package/dist/src/planner/building/drop-view.js.map +0 -1
  52. package/dist/src/planner/building/expression.js.map +0 -1
  53. package/dist/src/planner/building/function-call.js.map +0 -1
  54. package/dist/src/planner/building/insert.js.map +0 -1
  55. package/dist/src/planner/building/pragma.js.map +0 -1
  56. package/dist/src/planner/building/schema-resolution.js.map +0 -1
  57. package/dist/src/planner/building/select-aggregates.js.map +0 -1
  58. package/dist/src/planner/building/select-compound.js.map +0 -1
  59. package/dist/src/planner/building/select-context.js.map +0 -1
  60. package/dist/src/planner/building/select-modifiers.js.map +0 -1
  61. package/dist/src/planner/building/select-projections.js.map +0 -1
  62. package/dist/src/planner/building/select-window.js.map +0 -1
  63. package/dist/src/planner/building/select.js.map +0 -1
  64. package/dist/src/planner/building/table-function.js.map +0 -1
  65. package/dist/src/planner/building/table.js.map +0 -1
  66. package/dist/src/planner/building/transaction.js.map +0 -1
  67. package/dist/src/planner/building/update.js.map +0 -1
  68. package/dist/src/planner/building/with.js.map +0 -1
  69. package/dist/src/planner/cache/correlation-detector.js.map +0 -1
  70. package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
  71. package/dist/src/planner/cache/reference-graph.js.map +0 -1
  72. package/dist/src/planner/cost/index.js.map +0 -1
  73. package/dist/src/planner/debug/logger-utils.js.map +0 -1
  74. package/dist/src/planner/debug.js.map +0 -1
  75. package/dist/src/planner/framework/characteristics.js.map +0 -1
  76. package/dist/src/planner/framework/context.js.map +0 -1
  77. package/dist/src/planner/framework/pass.js.map +0 -1
  78. package/dist/src/planner/framework/physical-utils.js.map +0 -1
  79. package/dist/src/planner/framework/registry.js.map +0 -1
  80. package/dist/src/planner/framework/trace.js.map +0 -1
  81. package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
  82. package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
  83. package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
  84. package/dist/src/planner/nodes/array-index-node.js.map +0 -1
  85. package/dist/src/planner/nodes/block.js.map +0 -1
  86. package/dist/src/planner/nodes/cache-node.js.map +0 -1
  87. package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
  88. package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
  89. package/dist/src/planner/nodes/create-index-node.js.map +0 -1
  90. package/dist/src/planner/nodes/create-table-node.js.map +0 -1
  91. package/dist/src/planner/nodes/create-view-node.js.map +0 -1
  92. package/dist/src/planner/nodes/cte-node.js.map +0 -1
  93. package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
  94. package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
  95. package/dist/src/planner/nodes/delete-node.js.map +0 -1
  96. package/dist/src/planner/nodes/distinct-node.js.map +0 -1
  97. package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
  98. package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
  99. package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
  100. package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
  101. package/dist/src/planner/nodes/filter.js.map +0 -1
  102. package/dist/src/planner/nodes/function.js.map +0 -1
  103. package/dist/src/planner/nodes/insert-node.js.map +0 -1
  104. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
  105. package/dist/src/planner/nodes/join-node.js.map +0 -1
  106. package/dist/src/planner/nodes/limit-offset.js.map +0 -1
  107. package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
  108. package/dist/src/planner/nodes/plan-node.js.map +0 -1
  109. package/dist/src/planner/nodes/pragma.js.map +0 -1
  110. package/dist/src/planner/nodes/project-node.js.map +0 -1
  111. package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
  112. package/dist/src/planner/nodes/reference.js.map +0 -1
  113. package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
  114. package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
  115. package/dist/src/planner/nodes/returning-node.js.map +0 -1
  116. package/dist/src/planner/nodes/scalar.js.map +0 -1
  117. package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
  118. package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
  119. package/dist/src/planner/nodes/single-row.js.map +0 -1
  120. package/dist/src/planner/nodes/sink-node.js.map +0 -1
  121. package/dist/src/planner/nodes/sort.js.map +0 -1
  122. package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
  123. package/dist/src/planner/nodes/subquery.js.map +0 -1
  124. package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
  125. package/dist/src/planner/nodes/table-function-call.js.map +0 -1
  126. package/dist/src/planner/nodes/transaction-node.js.map +0 -1
  127. package/dist/src/planner/nodes/update-node.js.map +0 -1
  128. package/dist/src/planner/nodes/values-node.js.map +0 -1
  129. package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
  130. package/dist/src/planner/nodes/window-function.js.map +0 -1
  131. package/dist/src/planner/nodes/window-node.js.map +0 -1
  132. package/dist/src/planner/optimizer-tuning.js.map +0 -1
  133. package/dist/src/planner/optimizer.js.map +0 -1
  134. package/dist/src/planner/planning-context.js.map +0 -1
  135. package/dist/src/planner/resolve.js.map +0 -1
  136. package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
  137. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
  138. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
  139. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
  140. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
  141. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
  142. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
  143. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
  144. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
  145. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
  146. package/dist/src/planner/scopes/aliased.js.map +0 -1
  147. package/dist/src/planner/scopes/base.js.map +0 -1
  148. package/dist/src/planner/scopes/empty.js.map +0 -1
  149. package/dist/src/planner/scopes/global.js.map +0 -1
  150. package/dist/src/planner/scopes/multi.js.map +0 -1
  151. package/dist/src/planner/scopes/param.js.map +0 -1
  152. package/dist/src/planner/scopes/registered.js.map +0 -1
  153. package/dist/src/planner/scopes/scope.js.map +0 -1
  154. package/dist/src/planner/stats/basic-estimates.js.map +0 -1
  155. package/dist/src/planner/stats/index.js.map +0 -1
  156. package/dist/src/planner/type-utils.js.map +0 -1
  157. package/dist/src/planner/util/key-utils.js.map +0 -1
  158. package/dist/src/planner/validation/determinism-validator.js.map +0 -1
  159. package/dist/src/planner/validation/plan-validator.js.map +0 -1
  160. package/dist/src/runtime/async-util.js.map +0 -1
  161. package/dist/src/runtime/cache/shared-cache.js.map +0 -1
  162. package/dist/src/runtime/context-helpers.js.map +0 -1
  163. package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
  164. package/dist/src/runtime/emission-context.js.map +0 -1
  165. package/dist/src/runtime/emit/add-constraint.js.map +0 -1
  166. package/dist/src/runtime/emit/aggregate.js.map +0 -1
  167. package/dist/src/runtime/emit/array-index.js.map +0 -1
  168. package/dist/src/runtime/emit/between.js.map +0 -1
  169. package/dist/src/runtime/emit/binary.js.map +0 -1
  170. package/dist/src/runtime/emit/block.js.map +0 -1
  171. package/dist/src/runtime/emit/cache.js.map +0 -1
  172. package/dist/src/runtime/emit/case.js.map +0 -1
  173. package/dist/src/runtime/emit/cast.js.map +0 -1
  174. package/dist/src/runtime/emit/collate.js.map +0 -1
  175. package/dist/src/runtime/emit/column-reference.js.map +0 -1
  176. package/dist/src/runtime/emit/constraint-check.js.map +0 -1
  177. package/dist/src/runtime/emit/create-assertion.js.map +0 -1
  178. package/dist/src/runtime/emit/create-index.js.map +0 -1
  179. package/dist/src/runtime/emit/create-table.js.map +0 -1
  180. package/dist/src/runtime/emit/create-view.js.map +0 -1
  181. package/dist/src/runtime/emit/cte-reference.js.map +0 -1
  182. package/dist/src/runtime/emit/cte.js.map +0 -1
  183. package/dist/src/runtime/emit/delete.js.map +0 -1
  184. package/dist/src/runtime/emit/distinct.js.map +0 -1
  185. package/dist/src/runtime/emit/dml-executor.js.map +0 -1
  186. package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
  187. package/dist/src/runtime/emit/drop-table.js.map +0 -1
  188. package/dist/src/runtime/emit/drop-view.js.map +0 -1
  189. package/dist/src/runtime/emit/filter.js.map +0 -1
  190. package/dist/src/runtime/emit/insert.js.map +0 -1
  191. package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
  192. package/dist/src/runtime/emit/join.js.map +0 -1
  193. package/dist/src/runtime/emit/limit-offset.js.map +0 -1
  194. package/dist/src/runtime/emit/literal.js.map +0 -1
  195. package/dist/src/runtime/emit/parameter.js.map +0 -1
  196. package/dist/src/runtime/emit/pragma.js.map +0 -1
  197. package/dist/src/runtime/emit/project.js.map +0 -1
  198. package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
  199. package/dist/src/runtime/emit/remote-query.js.map +0 -1
  200. package/dist/src/runtime/emit/retrieve.js.map +0 -1
  201. package/dist/src/runtime/emit/returning.js.map +0 -1
  202. package/dist/src/runtime/emit/scalar-function.js.map +0 -1
  203. package/dist/src/runtime/emit/scan.js.map +0 -1
  204. package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
  205. package/dist/src/runtime/emit/sequencing.js.map +0 -1
  206. package/dist/src/runtime/emit/set-operation.js.map +0 -1
  207. package/dist/src/runtime/emit/sink.js.map +0 -1
  208. package/dist/src/runtime/emit/sort.js.map +0 -1
  209. package/dist/src/runtime/emit/subquery.js.map +0 -1
  210. package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
  211. package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
  212. package/dist/src/runtime/emit/transaction.js.map +0 -1
  213. package/dist/src/runtime/emit/unary.js.map +0 -1
  214. package/dist/src/runtime/emit/update.js.map +0 -1
  215. package/dist/src/runtime/emit/values.js.map +0 -1
  216. package/dist/src/runtime/emit/window-function.js.map +0 -1
  217. package/dist/src/runtime/emit/window.js.map +0 -1
  218. package/dist/src/runtime/emitters.js.map +0 -1
  219. package/dist/src/runtime/register.js.map +0 -1
  220. package/dist/src/runtime/scheduler.js.map +0 -1
  221. package/dist/src/runtime/types.js.map +0 -1
  222. package/dist/src/runtime/utils.js.map +0 -1
  223. package/dist/src/schema/assertion.js.map +0 -1
  224. package/dist/src/schema/catalog.js.map +0 -1
  225. package/dist/src/schema/change-events.js.map +0 -1
  226. package/dist/src/schema/column.js.map +0 -1
  227. package/dist/src/schema/declared-schema-manager.js.map +0 -1
  228. package/dist/src/schema/function.js.map +0 -1
  229. package/dist/src/schema/manager.js.map +0 -1
  230. package/dist/src/schema/schema-differ.js.map +0 -1
  231. package/dist/src/schema/schema-hasher.js.map +0 -1
  232. package/dist/src/schema/schema.js.map +0 -1
  233. package/dist/src/schema/table.js.map +0 -1
  234. package/dist/src/schema/view.js.map +0 -1
  235. package/dist/src/schema/window-function.js.map +0 -1
  236. package/dist/src/types/builtin-types.js.map +0 -1
  237. package/dist/src/types/index.js.map +0 -1
  238. package/dist/src/types/json-type.js.map +0 -1
  239. package/dist/src/types/logical-type.js.map +0 -1
  240. package/dist/src/types/plugin-interface.js.map +0 -1
  241. package/dist/src/types/registry.js.map +0 -1
  242. package/dist/src/types/temporal-types.js.map +0 -1
  243. package/dist/src/types/validation.js.map +0 -1
  244. package/dist/src/util/affinity.js.map +0 -1
  245. package/dist/src/util/ast-stringify.js.map +0 -1
  246. package/dist/src/util/cached.js.map +0 -1
  247. package/dist/src/util/coercion.js.map +0 -1
  248. package/dist/src/util/comparison.js.map +0 -1
  249. package/dist/src/util/environment.js.map +0 -1
  250. package/dist/src/util/hash.js.map +0 -1
  251. package/dist/src/util/latches.js.map +0 -1
  252. package/dist/src/util/mutation-statement.js.map +0 -1
  253. package/dist/src/util/patterns.js.map +0 -1
  254. package/dist/src/util/plan-formatter.js.map +0 -1
  255. package/dist/src/util/plugin-helper.js.map +0 -1
  256. package/dist/src/util/row-descriptor.js.map +0 -1
  257. package/dist/src/util/serialization.js.map +0 -1
  258. package/dist/src/util/sql-literal.js.map +0 -1
  259. package/dist/src/util/working-table-iterable.js.map +0 -1
  260. package/dist/src/vtab/best-access-plan.js.map +0 -1
  261. package/dist/src/vtab/connection.js.map +0 -1
  262. package/dist/src/vtab/filter-info.js.map +0 -1
  263. package/dist/src/vtab/index-info.js.map +0 -1
  264. package/dist/src/vtab/manifest.js.map +0 -1
  265. package/dist/src/vtab/memory/connection.js.map +0 -1
  266. package/dist/src/vtab/memory/index.js.map +0 -1
  267. package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
  268. package/dist/src/vtab/memory/layer/base.js.map +0 -1
  269. package/dist/src/vtab/memory/layer/connection.js.map +0 -1
  270. package/dist/src/vtab/memory/layer/interface.js.map +0 -1
  271. package/dist/src/vtab/memory/layer/manager.js.map +0 -1
  272. package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
  273. package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
  274. package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
  275. package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
  276. package/dist/src/vtab/memory/module.js.map +0 -1
  277. package/dist/src/vtab/memory/table.js.map +0 -1
  278. package/dist/src/vtab/memory/types.js.map +0 -1
  279. package/dist/src/vtab/memory/utils/logging.js.map +0 -1
  280. package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
  281. package/dist/src/vtab/module.js.map +0 -1
  282. package/dist/src/vtab/table.js.map +0 -1
  283. package/src/common/constants.ts +0 -60
  284. package/src/common/datatype.ts +0 -85
  285. package/src/common/errors.ts +0 -189
  286. package/src/common/json-types.ts +0 -16
  287. package/src/common/logger.ts +0 -97
  288. package/src/common/type-inference.ts +0 -39
  289. package/src/common/types.ts +0 -151
  290. package/src/core/database-options.ts +0 -258
  291. package/src/core/database.ts +0 -1461
  292. package/src/core/param.ts +0 -56
  293. package/src/core/statement.ts +0 -528
  294. package/src/func/builtins/aggregate.ts +0 -269
  295. package/src/func/builtins/builtin-window-functions.ts +0 -166
  296. package/src/func/builtins/conversion.ts +0 -226
  297. package/src/func/builtins/datetime.ts +0 -500
  298. package/src/func/builtins/explain.ts +0 -779
  299. package/src/func/builtins/generation.ts +0 -43
  300. package/src/func/builtins/index.ts +0 -167
  301. package/src/func/builtins/json-helpers.ts +0 -237
  302. package/src/func/builtins/json-tvf.ts +0 -224
  303. package/src/func/builtins/json.ts +0 -588
  304. package/src/func/builtins/scalar.ts +0 -423
  305. package/src/func/builtins/schema.ts +0 -213
  306. package/src/func/builtins/string.ts +0 -306
  307. package/src/func/builtins/timespan.ts +0 -179
  308. package/src/func/context.ts +0 -258
  309. package/src/func/registration.ts +0 -201
  310. package/src/index.ts +0 -172
  311. package/src/parser/ast.ts +0 -581
  312. package/src/parser/index.ts +0 -65
  313. package/src/parser/lexer.ts +0 -806
  314. package/src/parser/parser.ts +0 -3352
  315. package/src/parser/utils.ts +0 -10
  316. package/src/parser/visitor.ts +0 -188
  317. package/src/planner/analysis/README.md +0 -93
  318. package/src/planner/analysis/binding-collector.ts +0 -83
  319. package/src/planner/analysis/const-evaluator.ts +0 -63
  320. package/src/planner/analysis/const-pass.ts +0 -282
  321. package/src/planner/analysis/constraint-extractor.ts +0 -764
  322. package/src/planner/analysis/predicate-normalizer.ts +0 -237
  323. package/src/planner/building/alter-table.ts +0 -49
  324. package/src/planner/building/block.ts +0 -93
  325. package/src/planner/building/constraint-builder.ts +0 -178
  326. package/src/planner/building/create-assertion.ts +0 -7
  327. package/src/planner/building/create-view.ts +0 -29
  328. package/src/planner/building/ddl.ts +0 -24
  329. package/src/planner/building/declare-schema.ts +0 -22
  330. package/src/planner/building/delete.ts +0 -218
  331. package/src/planner/building/drop-assertion.ts +0 -11
  332. package/src/planner/building/drop-table.ts +0 -13
  333. package/src/planner/building/drop-view.ts +0 -19
  334. package/src/planner/building/expression.ts +0 -205
  335. package/src/planner/building/function-call.ts +0 -129
  336. package/src/planner/building/insert.ts +0 -435
  337. package/src/planner/building/pragma.ts +0 -34
  338. package/src/planner/building/schema-resolution.ts +0 -176
  339. package/src/planner/building/select-aggregates.ts +0 -318
  340. package/src/planner/building/select-compound.ts +0 -119
  341. package/src/planner/building/select-context.ts +0 -85
  342. package/src/planner/building/select-modifiers.ts +0 -236
  343. package/src/planner/building/select-projections.ts +0 -177
  344. package/src/planner/building/select-window.ts +0 -259
  345. package/src/planner/building/select.ts +0 -567
  346. package/src/planner/building/table-function.ts +0 -49
  347. package/src/planner/building/table.ts +0 -40
  348. package/src/planner/building/transaction.ts +0 -23
  349. package/src/planner/building/update.ts +0 -331
  350. package/src/planner/building/with.ts +0 -180
  351. package/src/planner/cache/correlation-detector.ts +0 -83
  352. package/src/planner/cache/materialization-advisory.ts +0 -265
  353. package/src/planner/cache/reference-graph.ts +0 -196
  354. package/src/planner/cost/index.ts +0 -169
  355. package/src/planner/debug/logger-utils.ts +0 -68
  356. package/src/planner/debug.ts +0 -480
  357. package/src/planner/framework/README.md +0 -132
  358. package/src/planner/framework/characteristics.ts +0 -503
  359. package/src/planner/framework/context.ts +0 -239
  360. package/src/planner/framework/pass.ts +0 -354
  361. package/src/planner/framework/physical-utils.ts +0 -210
  362. package/src/planner/framework/registry.ts +0 -261
  363. package/src/planner/framework/trace.ts +0 -259
  364. package/src/planner/nodes/add-constraint-node.ts +0 -62
  365. package/src/planner/nodes/aggregate-function.ts +0 -155
  366. package/src/planner/nodes/aggregate-node.ts +0 -267
  367. package/src/planner/nodes/array-index-node.ts +0 -50
  368. package/src/planner/nodes/block.ts +0 -80
  369. package/src/planner/nodes/cache-node.ts +0 -103
  370. package/src/planner/nodes/constraint-check-node.ts +0 -138
  371. package/src/planner/nodes/create-assertion-node.ts +0 -51
  372. package/src/planner/nodes/create-index-node.ts +0 -41
  373. package/src/planner/nodes/create-table-node.ts +0 -35
  374. package/src/planner/nodes/create-view-node.ts +0 -44
  375. package/src/planner/nodes/cte-node.ts +0 -168
  376. package/src/planner/nodes/cte-reference-node.ts +0 -125
  377. package/src/planner/nodes/declarative-schema.ts +0 -221
  378. package/src/planner/nodes/delete-node.ts +0 -102
  379. package/src/planner/nodes/distinct-node.ts +0 -107
  380. package/src/planner/nodes/dml-executor-node.ts +0 -104
  381. package/src/planner/nodes/drop-assertion-node.ts +0 -50
  382. package/src/planner/nodes/drop-table-node.ts +0 -36
  383. package/src/planner/nodes/drop-view-node.ts +0 -37
  384. package/src/planner/nodes/filter.ts +0 -144
  385. package/src/planner/nodes/function.ts +0 -98
  386. package/src/planner/nodes/insert-node.ts +0 -126
  387. package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
  388. package/src/planner/nodes/join-node.ts +0 -336
  389. package/src/planner/nodes/limit-offset.ts +0 -144
  390. package/src/planner/nodes/plan-node-type.ts +0 -95
  391. package/src/planner/nodes/plan-node.ts +0 -503
  392. package/src/planner/nodes/pragma.ts +0 -98
  393. package/src/planner/nodes/project-node.ts +0 -337
  394. package/src/planner/nodes/recursive-cte-node.ts +0 -158
  395. package/src/planner/nodes/reference.ts +0 -334
  396. package/src/planner/nodes/remote-query-node.ts +0 -73
  397. package/src/planner/nodes/retrieve-node.ts +0 -86
  398. package/src/planner/nodes/returning-node.ts +0 -269
  399. package/src/planner/nodes/scalar.ts +0 -772
  400. package/src/planner/nodes/sequencing-node.ts +0 -113
  401. package/src/planner/nodes/set-operation-node.ts +0 -87
  402. package/src/planner/nodes/single-row.ts +0 -85
  403. package/src/planner/nodes/sink-node.ts +0 -61
  404. package/src/planner/nodes/sort.ts +0 -166
  405. package/src/planner/nodes/stream-aggregate.ts +0 -293
  406. package/src/planner/nodes/subquery.ts +0 -268
  407. package/src/planner/nodes/table-access-nodes.ts +0 -323
  408. package/src/planner/nodes/table-function-call.ts +0 -134
  409. package/src/planner/nodes/transaction-node.ts +0 -55
  410. package/src/planner/nodes/update-node.ts +0 -138
  411. package/src/planner/nodes/values-node.ts +0 -244
  412. package/src/planner/nodes/view-reference-node.ts +0 -97
  413. package/src/planner/nodes/window-function.ts +0 -73
  414. package/src/planner/nodes/window-node.ts +0 -199
  415. package/src/planner/optimizer-tuning.ts +0 -105
  416. package/src/planner/optimizer.ts +0 -332
  417. package/src/planner/planning-context.ts +0 -190
  418. package/src/planner/resolve.ts +0 -101
  419. package/src/planner/rules/README.md +0 -96
  420. package/src/planner/rules/access/rule-select-access-path.ts +0 -399
  421. package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
  422. package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
  423. package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
  424. package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
  425. package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
  426. package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
  427. package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
  428. package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
  429. package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
  430. package/src/planner/scopes/aliased.ts +0 -50
  431. package/src/planner/scopes/base.ts +0 -10
  432. package/src/planner/scopes/empty.ts +0 -12
  433. package/src/planner/scopes/global.ts +0 -73
  434. package/src/planner/scopes/multi.ts +0 -40
  435. package/src/planner/scopes/param.ts +0 -95
  436. package/src/planner/scopes/registered.ts +0 -67
  437. package/src/planner/scopes/scope.ts +0 -16
  438. package/src/planner/stats/basic-estimates.ts +0 -107
  439. package/src/planner/stats/index.ts +0 -158
  440. package/src/planner/type-utils.ts +0 -87
  441. package/src/planner/util/key-utils.ts +0 -46
  442. package/src/planner/validation/determinism-validator.ts +0 -104
  443. package/src/planner/validation/plan-validator.ts +0 -335
  444. package/src/runtime/async-util.ts +0 -283
  445. package/src/runtime/cache/shared-cache.ts +0 -169
  446. package/src/runtime/context-helpers.ts +0 -191
  447. package/src/runtime/deferred-constraint-queue.ts +0 -196
  448. package/src/runtime/emission-context.ts +0 -319
  449. package/src/runtime/emit/add-constraint.ts +0 -78
  450. package/src/runtime/emit/aggregate.ts +0 -581
  451. package/src/runtime/emit/array-index.ts +0 -25
  452. package/src/runtime/emit/between.ts +0 -51
  453. package/src/runtime/emit/binary.ts +0 -357
  454. package/src/runtime/emit/block.ts +0 -23
  455. package/src/runtime/emit/cache.ts +0 -64
  456. package/src/runtime/emit/case.ts +0 -87
  457. package/src/runtime/emit/cast.ts +0 -151
  458. package/src/runtime/emit/collate.ts +0 -9
  459. package/src/runtime/emit/column-reference.ts +0 -17
  460. package/src/runtime/emit/constraint-check.ts +0 -290
  461. package/src/runtime/emit/create-assertion.ts +0 -82
  462. package/src/runtime/emit/create-index.ts +0 -15
  463. package/src/runtime/emit/create-table.ts +0 -15
  464. package/src/runtime/emit/create-view.ts +0 -52
  465. package/src/runtime/emit/cte-reference.ts +0 -38
  466. package/src/runtime/emit/cte.ts +0 -39
  467. package/src/runtime/emit/delete.ts +0 -24
  468. package/src/runtime/emit/distinct.ts +0 -40
  469. package/src/runtime/emit/dml-executor.ts +0 -198
  470. package/src/runtime/emit/drop-assertion.ts +0 -45
  471. package/src/runtime/emit/drop-table.ts +0 -27
  472. package/src/runtime/emit/drop-view.ts +0 -49
  473. package/src/runtime/emit/filter.ts +0 -30
  474. package/src/runtime/emit/insert.ts +0 -42
  475. package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
  476. package/src/runtime/emit/join.ts +0 -148
  477. package/src/runtime/emit/limit-offset.ts +0 -73
  478. package/src/runtime/emit/literal.ts +0 -17
  479. package/src/runtime/emit/parameter.ts +0 -59
  480. package/src/runtime/emit/pragma.ts +0 -56
  481. package/src/runtime/emit/project.ts +0 -46
  482. package/src/runtime/emit/recursive-cte.ts +0 -111
  483. package/src/runtime/emit/remote-query.ts +0 -47
  484. package/src/runtime/emit/retrieve.ts +0 -15
  485. package/src/runtime/emit/returning.ts +0 -41
  486. package/src/runtime/emit/scalar-function.ts +0 -69
  487. package/src/runtime/emit/scan.ts +0 -106
  488. package/src/runtime/emit/schema-declarative.ts +0 -215
  489. package/src/runtime/emit/sequencing.ts +0 -24
  490. package/src/runtime/emit/set-operation.ts +0 -141
  491. package/src/runtime/emit/sink.ts +0 -27
  492. package/src/runtime/emit/sort.ts +0 -75
  493. package/src/runtime/emit/subquery.ts +0 -203
  494. package/src/runtime/emit/table-valued-function.ts +0 -106
  495. package/src/runtime/emit/temporal-arithmetic.ts +0 -302
  496. package/src/runtime/emit/transaction.ts +0 -205
  497. package/src/runtime/emit/unary.ts +0 -101
  498. package/src/runtime/emit/update.ts +0 -66
  499. package/src/runtime/emit/values.ts +0 -66
  500. package/src/runtime/emit/window-function.ts +0 -42
  501. package/src/runtime/emit/window.ts +0 -458
  502. package/src/runtime/emitters.ts +0 -183
  503. package/src/runtime/register.ts +0 -150
  504. package/src/runtime/scheduler.ts +0 -488
  505. package/src/runtime/types.ts +0 -242
  506. package/src/runtime/utils.ts +0 -177
  507. package/src/schema/assertion.ts +0 -21
  508. package/src/schema/catalog.ts +0 -269
  509. package/src/schema/change-events.ts +0 -80
  510. package/src/schema/column.ts +0 -51
  511. package/src/schema/declared-schema-manager.ts +0 -82
  512. package/src/schema/function.ts +0 -188
  513. package/src/schema/manager.ts +0 -1034
  514. package/src/schema/schema-differ.ts +0 -214
  515. package/src/schema/schema-hasher.ts +0 -26
  516. package/src/schema/schema.ts +0 -222
  517. package/src/schema/table.ts +0 -409
  518. package/src/schema/view.ts +0 -19
  519. package/src/schema/window-function.ts +0 -56
  520. package/src/types/builtin-types.ts +0 -350
  521. package/src/types/index.ts +0 -17
  522. package/src/types/json-type.ts +0 -152
  523. package/src/types/logical-type.ts +0 -91
  524. package/src/types/plugin-interface.ts +0 -10
  525. package/src/types/registry.ts +0 -204
  526. package/src/types/temporal-types.ts +0 -290
  527. package/src/types/validation.ts +0 -120
  528. package/src/util/affinity.ts +0 -151
  529. package/src/util/ast-stringify.ts +0 -887
  530. package/src/util/cached.ts +0 -25
  531. package/src/util/coercion.ts +0 -113
  532. package/src/util/comparison.ts +0 -510
  533. package/src/util/environment.ts +0 -52
  534. package/src/util/hash.ts +0 -90
  535. package/src/util/latches.ts +0 -47
  536. package/src/util/mutation-statement.ts +0 -135
  537. package/src/util/patterns.ts +0 -56
  538. package/src/util/plan-formatter.ts +0 -48
  539. package/src/util/plugin-helper.ts +0 -110
  540. package/src/util/row-descriptor.ts +0 -105
  541. package/src/util/serialization.ts +0 -47
  542. package/src/util/sql-literal.ts +0 -22
  543. package/src/util/working-table-iterable.ts +0 -38
  544. package/src/vtab/best-access-plan.ts +0 -244
  545. package/src/vtab/connection.ts +0 -36
  546. package/src/vtab/filter-info.ts +0 -23
  547. package/src/vtab/index-info.ts +0 -84
  548. package/src/vtab/manifest.ts +0 -86
  549. package/src/vtab/memory/connection.ts +0 -73
  550. package/src/vtab/memory/index.ts +0 -191
  551. package/src/vtab/memory/layer/base-cursor.ts +0 -124
  552. package/src/vtab/memory/layer/base.ts +0 -275
  553. package/src/vtab/memory/layer/connection.ts +0 -203
  554. package/src/vtab/memory/layer/interface.ts +0 -47
  555. package/src/vtab/memory/layer/manager.ts +0 -909
  556. package/src/vtab/memory/layer/safe-iterate.ts +0 -49
  557. package/src/vtab/memory/layer/scan-plan.ts +0 -84
  558. package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
  559. package/src/vtab/memory/layer/transaction.ts +0 -229
  560. package/src/vtab/memory/module.ts +0 -667
  561. package/src/vtab/memory/table.ts +0 -251
  562. package/src/vtab/memory/types.ts +0 -23
  563. package/src/vtab/memory/utils/logging.ts +0 -36
  564. package/src/vtab/memory/utils/primary-key.ts +0 -163
  565. package/src/vtab/module.ts +0 -162
  566. package/src/vtab/table.ts +0 -177
@@ -1,779 +0,0 @@
1
- import type { Row } from "../../common/types.js";
2
- import type { SqlValue } from "../../common/types.js";
3
- import { createIntegratedTableValuedFunction } from "../registration.js";
4
- import { INTEGER_TYPE, REAL_TYPE, TEXT_TYPE } from "../../types/builtin-types.js";
5
- import { QuereusError } from "../../common/errors.js";
6
- import { StatusCode } from "../../common/types.js";
7
- import type { Database } from "../../core/database.js";
8
- import { safeJsonStringify } from "../../util/serialization.js";
9
- import { CollectingInstructionTracer, InstructionTraceEvent } from "../../runtime/types.js";
10
- import { PlanNode, RelationalPlanNode } from "../../planner/nodes/plan-node.js";
11
- import { EmissionContext } from "../../runtime/emission-context.js";
12
- import { emitPlanNode } from "../../runtime/emitters.js";
13
- import { Scheduler } from "../../runtime/scheduler.js";
14
- import { analyzeRowSpecific } from "../../planner/analysis/constraint-extractor.js";
15
- import { Parser } from "../../parser/parser.js";
16
- import * as AST from "../../parser/ast.js";
17
- import { GlobalScope } from "../../planner/scopes/global.js";
18
- import { ParameterScope } from "../../planner/scopes/param.js";
19
- import type { PlanningContext } from "../../planner/planning-context.js";
20
- import { BuildTimeDependencyTracker } from "../../planner/planning-context.js";
21
- import { buildBlock } from "../../planner/building/block.js";
22
-
23
- // Helper function to safely get function name from nodes that have it
24
- function getFunctionName(node: PlanNode): string | null {
25
- // Check for nodes that have functionName property
26
- if ('functionName' in node && typeof (node as any).functionName === 'string') {
27
- return (node as any).functionName;
28
- }
29
- return null;
30
- }
31
-
32
- // Helper function to safely get alias from nodes that have it
33
- function getAlias(node: PlanNode): string | null {
34
- // Check for nodes that have alias property
35
- if ('alias' in node && typeof (node as any).alias === 'string') {
36
- return (node as any).alias;
37
- }
38
- return null;
39
- }
40
-
41
- // Helper function to safely get table name or related identifier
42
- function getObjectName(node: PlanNode): string | null {
43
- // Check for function name first (table functions, scalar functions, etc.)
44
- const functionName = getFunctionName(node);
45
- if (functionName) {
46
- return functionName;
47
- }
48
-
49
- // Check for table schema in table reference nodes
50
- if ('tableSchema' in node) {
51
- const tableSchema = (node as any).tableSchema;
52
- if (tableSchema && typeof tableSchema.name === 'string') {
53
- return tableSchema.schemaName ? `${tableSchema.schemaName}.${tableSchema.name}` : tableSchema.name;
54
- }
55
- }
56
-
57
- // Check for CTE name
58
- if ('cteName' in node && typeof (node as any).cteName === 'string') {
59
- return (node as any).cteName;
60
- }
61
-
62
- // Check for view schema in view reference nodes
63
- if ('viewSchema' in node) {
64
- const viewSchema = (node as any).viewSchema;
65
- if (viewSchema && typeof viewSchema.name === 'string') {
66
- return viewSchema.schemaName ? `${viewSchema.schemaName}.${viewSchema.name}` : viewSchema.name;
67
- }
68
- }
69
-
70
- return null;
71
- }
72
-
73
- // Query plan explanation function (table-valued function)
74
- export const queryPlanFunc = createIntegratedTableValuedFunction(
75
- {
76
- name: 'query_plan',
77
- numArgs: 1,
78
- deterministic: true,
79
- returnType: {
80
- typeClass: 'relation',
81
- isReadOnly: true,
82
- isSet: false,
83
- columns: [
84
- { name: 'id', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true },
85
- { name: 'parent_id', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: true, isReadOnly: true }, generated: true },
86
- { name: 'subquery_level', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true },
87
- { name: 'node_type', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
88
- { name: 'op', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
89
- { name: 'detail', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
90
- { name: 'object_name', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true },
91
- { name: 'alias', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true },
92
- { name: 'properties', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true },
93
- { name: 'physical', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true },
94
- { name: 'est_cost', type: { typeClass: 'scalar', logicalType: REAL_TYPE, nullable: true, isReadOnly: true }, generated: true },
95
- { name: 'est_rows', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: true, isReadOnly: true }, generated: true }
96
- ],
97
- keys: [],
98
- rowConstraints: []
99
- }
100
- },
101
- async function* (db: Database, sql: SqlValue): AsyncIterable<Row> {
102
- if (typeof sql !== 'string') {
103
- throw new QuereusError('query_plan() requires a SQL string argument', StatusCode.ERROR);
104
- }
105
-
106
- try {
107
- // Parse and plan the SQL to get the actual plan tree
108
- const plan = db.getPlan(sql);
109
-
110
- // Traverse the plan tree and yield information about each node
111
- let nodeId = 1;
112
- const nodeStack: Array<{ node: PlanNode; parentId: number | null; level: number }> = [
113
- { node: plan, parentId: null, level: 0 }
114
- ];
115
-
116
- while (nodeStack.length > 0) {
117
- const { node, parentId, level } = nodeStack.pop()!;
118
- const currentId = nodeId++;
119
-
120
- // Get node type
121
- const nodeType = node.nodeType || 'UNKNOWN';
122
-
123
- // Determine operation type and details
124
- let op = 'UNKNOWN';
125
- let detail = 'Unknown operation';
126
- let objectName: string | null = null;
127
- let alias: string | null = null;
128
- const estCost = node.estimatedCost || 1.0;
129
- const estRows = (node as RelationalPlanNode).estimatedRows || 10;
130
-
131
- // Use node's toString() method for detail if available
132
- if (typeof node.toString === 'function') {
133
- detail = node.toString();
134
- }
135
-
136
- if (node.nodeType) {
137
- op = node.nodeType.replace(/Node$/, '').toUpperCase();
138
-
139
- // Extract object name and alias using helper functions
140
- objectName = getObjectName(node);
141
- alias = getAlias(node);
142
- }
143
-
144
- // Get logical properties using the correct method name
145
- let properties: string | null = null;
146
- const logicalAttributes = node.getLogicalAttributes();
147
- if (logicalAttributes && Object.keys(logicalAttributes).length > 0) {
148
- // Attach minimal QuickPick diagnostics from optimizer if available
149
- const diag = db.optimizer.getLastDiagnostics?.();
150
- if (diag?.quickpick) {
151
- (logicalAttributes as any).quickpick = diag.quickpick;
152
- }
153
- properties = safeJsonStringify(logicalAttributes);
154
- }
155
-
156
- // Get physical properties (if available)
157
- let physical: string | null = null;
158
- if (node.physical) {
159
- physical = safeJsonStringify(node.physical);
160
- }
161
-
162
- yield [
163
- currentId, // id
164
- parentId, // parent_id
165
- level, // subquery_level
166
- nodeType, // node_type
167
- op, // op
168
- detail, // detail
169
- objectName, // object_name
170
- alias, // alias
171
- properties, // properties
172
- physical, // physical
173
- estCost, // est_cost
174
- estRows // est_rows
175
- ];
176
-
177
- // Add children to stack (in reverse order so they're processed in correct order)
178
- // getChildren() is guaranteed to exist on all PlanNode instances
179
- const children = node.getChildren();
180
- for (let i = children.length - 1; i >= 0; i--) {
181
- nodeStack.push({ node: children[i], parentId: currentId, level });
182
- }
183
- }
184
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
185
- } catch (error: any) {
186
- // If planning fails, yield an error row
187
- yield [1, null, 0, 'ERROR', 'ERROR', `Failed to plan SQL: ${error.message}`, null, null, null, null, null, null];
188
- }
189
- }
190
- );
191
-
192
- // Scheduler program explanation function (table-valued function)
193
- export const schedulerProgramFunc = createIntegratedTableValuedFunction(
194
- {
195
- name: 'scheduler_program',
196
- numArgs: 1,
197
- deterministic: true,
198
- returnType: {
199
- typeClass: 'relation',
200
- isReadOnly: true,
201
- isSet: false,
202
- columns: [
203
- { name: 'addr', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true },
204
- { name: 'dependencies', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true }, // JSON array of dependency IDs
205
- { name: 'description', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
206
- { name: 'estimated_cost', type: { typeClass: 'scalar', logicalType: REAL_TYPE, nullable: true, isReadOnly: true }, generated: true },
207
- { name: 'is_subprogram', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true }, // 0/1 boolean
208
- { name: 'parent_addr', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: true, isReadOnly: true }, generated: true }
209
- ],
210
- keys: [],
211
- rowConstraints: []
212
- }
213
- },
214
- async function* (db: Database, sql: SqlValue): AsyncIterable<Row> {
215
- if (typeof sql !== 'string') {
216
- throw new QuereusError('scheduler_program() requires a SQL string argument', StatusCode.ERROR);
217
- }
218
-
219
- try {
220
- // Parse and plan the SQL to get the actual plan tree
221
- const plan = db.getPlan(sql);
222
-
223
- // Emit the plan to get the instruction tree
224
- const emissionContext = new EmissionContext(db);
225
- const rootInstruction = emitPlanNode(plan, emissionContext);
226
-
227
- // Create a scheduler to get the instruction sequence
228
- const scheduler = new Scheduler(rootInstruction);
229
-
230
- // Yield information about each instruction
231
- for (let i = 0; i < scheduler.instructions.length; i++) {
232
- const instruction = scheduler.instructions[i];
233
- const dependencies = instruction.params.map((_, idx) => idx).filter(idx => idx < i);
234
-
235
- yield [
236
- i, // addr
237
- JSON.stringify(dependencies), // dependencies
238
- instruction.note || `INSTRUCTION_${i}`, // instruction_id
239
- null, // estimated_cost (not available in current implementation)
240
- 0, // is_subprogram (main program)
241
- null // parent_addr (main program)
242
- ];
243
-
244
- // If this instruction has sub-programs, yield those too
245
- if (instruction.programs) {
246
- for (let progIdx = 0; progIdx < instruction.programs.length; progIdx++) {
247
- const subProgram = instruction.programs[progIdx];
248
- for (let subI = 0; subI < subProgram.instructions.length; subI++) {
249
- const subInstruction = subProgram.instructions[subI];
250
- const subDependencies = subInstruction.params.map((_, idx) => idx).filter(idx => idx < subI);
251
-
252
- yield [
253
- scheduler.instructions.length + progIdx * 1000 + subI, // addr (offset for sub-programs)
254
- JSON.stringify(subDependencies), // dependencies
255
- subInstruction.note || `SUB_INSTRUCTION_${progIdx}_${subI}`, // instruction_id
256
- null, // estimated_cost
257
- 1, // is_subprogram
258
- i // parent_addr
259
- ];
260
- }
261
- }
262
- }
263
- }
264
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
265
- } catch (error: any) {
266
- // If compilation fails, yield an error instruction
267
- yield [0, 'ERROR', '[]', `Failed to compile SQL: ${error.message}`, null, 0, null];
268
- }
269
- }
270
- );
271
-
272
- // Stack trace function for debugging execution
273
- export const stackTraceFunc = createIntegratedTableValuedFunction(
274
- {
275
- name: 'stack_trace',
276
- numArgs: 1,
277
- deterministic: true,
278
- returnType: {
279
- typeClass: 'relation',
280
- isReadOnly: true,
281
- isSet: false,
282
- columns: [
283
- { name: 'frame_id', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true },
284
- { name: 'depth', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true },
285
- { name: 'location', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
286
- { name: 'plan_node_type', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
287
- { name: 'operation', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
288
- { name: 'table_or_function', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true },
289
- { name: 'is_virtual', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true } // 0/1 boolean
290
- ],
291
- keys: [],
292
- rowConstraints: []
293
- }
294
- },
295
- async function* (db: Database, sql: SqlValue): AsyncIterable<Row> {
296
- if (typeof sql !== 'string') {
297
- throw new QuereusError('stack_trace() requires a SQL string argument', StatusCode.ERROR);
298
- }
299
-
300
- try {
301
- // Parse and plan the SQL to capture the call stack
302
- const plan = db.getPlan(sql);
303
-
304
- // Simulate a call stack based on the plan structure
305
- let frameId = 0;
306
- const stack: Array<{ name: string; location: string; vars: any }> = [];
307
-
308
- // Add main execution frame
309
- stack.push({
310
- name: 'main',
311
- location: 'database.ts:exec',
312
- vars: { sql, autocommit: db.getAutocommit() }
313
- });
314
-
315
- // Add planning frames
316
- stack.push({
317
- name: 'buildPlan',
318
- location: 'database.ts:_buildPlan',
319
- vars: { planType: plan.nodeType }
320
- });
321
-
322
- // Add frames based on plan node types
323
- const addPlanFrames = (node: PlanNode, depth: number = 0) => {
324
- if (!node || depth > 10) return; // Prevent infinite recursion
325
-
326
- switch (node.nodeType) {
327
- case 'Block':
328
- stack.push({
329
- name: 'buildBlock',
330
- location: 'building/block.ts:buildBlock',
331
- vars: { statementCount: ('statements' in node) ? (node as any).statements?.length || 0 : 0 }
332
- });
333
- break;
334
- case 'Filter':
335
- stack.push({
336
- name: 'buildFilter',
337
- location: 'building/select.ts:buildSelectStmt',
338
- vars: { condition: ('condition' in node) ? (node as any).condition?.toString() || 'unknown' : 'unknown' }
339
- });
340
- break;
341
- case 'Project':
342
- stack.push({
343
- name: 'buildProject',
344
- location: 'building/select.ts:buildSelectStmt',
345
- vars: { projectionCount: ('projections' in node) ? (node as any).projections?.length || 0 : 0 }
346
- });
347
- break;
348
- }
349
-
350
- // Recursively add frames for children
351
- // getChildren() is guaranteed to exist on all PlanNode instances
352
- const children = node.getChildren();
353
- children.forEach((child: PlanNode) => addPlanFrames(child, depth + 1));
354
- };
355
-
356
- addPlanFrames(plan);
357
-
358
- // Yield stack frames (reverse order - deepest first)
359
- for (let i = stack.length - 1; i >= 0; i--) {
360
- const frame = stack[i];
361
- yield [
362
- frameId++, // frame_id
363
- i, // depth
364
- frame.location, // location
365
- frame.name, // plan_node_type
366
- frame.name, // operation
367
- null, // table_or_function
368
- 0 // is_virtual
369
- ];
370
- }
371
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
372
- } catch (error: any) {
373
- // If analysis fails, yield an error frame
374
- yield [0, 0, 'error', 'stack_trace', JSON.stringify({ error: error.message })];
375
- }
376
- }
377
- );
378
-
379
- // Execution trace function for performance analysis
380
- export const executionTraceFunc = createIntegratedTableValuedFunction(
381
- {
382
- name: 'execution_trace',
383
- numArgs: 1,
384
- deterministic: false, // Execution traces are not deterministic
385
- returnType: {
386
- typeClass: 'relation',
387
- isReadOnly: true,
388
- isSet: false,
389
- columns: [
390
- { name: 'instruction_index', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true },
391
- { name: 'operation', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true },
392
- { name: 'dependencies', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true }, // JSON array of instruction indices this depends on
393
- { name: 'input_values', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true }, // JSON
394
- { name: 'output_value', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true }, // JSON
395
- { name: 'duration_ms', type: { typeClass: 'scalar', logicalType: REAL_TYPE, nullable: true, isReadOnly: true }, generated: true },
396
- { name: 'sub_programs', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true }, // JSON
397
- { name: 'error_message', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true },
398
- { name: 'timestamp_ms', type: { typeClass: 'scalar', logicalType: REAL_TYPE, nullable: false, isReadOnly: true }, generated: true }
399
- ],
400
- keys: [],
401
- rowConstraints: []
402
- }
403
- },
404
- async function* (db: Database, sql: SqlValue): AsyncIterable<Row> {
405
- if (typeof sql !== 'string') {
406
- throw new QuereusError('execution_trace() requires a SQL string argument', StatusCode.ERROR);
407
- }
408
-
409
- try {
410
- // First, get the scheduler program to understand instruction dependencies
411
- const instructionDependencies = new Map<number, number[]>();
412
- const instructionOperations = new Map<number, string>();
413
-
414
- try {
415
- // Get scheduler program information
416
- for await (const row of db.eval('SELECT * FROM scheduler_program(?)', [sql])) {
417
- const addr = row.addr as number;
418
- const dependencies = JSON.parse((row.dependencies as string) || '[]') as number[];
419
- const description = row.description as string;
420
-
421
- instructionDependencies.set(addr, dependencies);
422
- instructionOperations.set(addr, description);
423
- }
424
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
425
- } catch (schedulerError: any) {
426
- console.warn('Could not get scheduler program info:', schedulerError.message);
427
- }
428
-
429
- // Import the CollectingInstructionTracer
430
- const tracer = new CollectingInstructionTracer();
431
-
432
- // Parse the query and execute with tracing
433
- let stmt: any;
434
- try {
435
- stmt = db.prepare(sql);
436
-
437
- // Execute the query with tracing to collect actual instruction events
438
- const results: any[] = [];
439
- for await (const row of stmt.iterateRowsWithTrace(undefined, tracer)) {
440
- results.push(row); // We don't yield the results, just the trace events
441
- }
442
-
443
- await stmt.finalize();
444
- } catch (executionError: unknown) {
445
- // If execution fails, we might still have some trace events
446
- console.warn('Query execution failed during tracing:', executionError instanceof Error ? executionError.message : String(executionError));
447
- }
448
-
449
- // Get the collected trace events
450
- const traceEvents = tracer.getTraceEvents();
451
-
452
- // Group events by instruction index and consolidate into single rows
453
- const eventsByInstruction = new Map<number, InstructionTraceEvent[]>();
454
- for (const event of traceEvents) {
455
- const instructionIndex = event.instructionIndex;
456
- if (!eventsByInstruction.has(instructionIndex)) {
457
- eventsByInstruction.set(instructionIndex, []);
458
- }
459
- eventsByInstruction.get(instructionIndex)!.push(event);
460
- }
461
-
462
- // Get sub-program information for enhanced context
463
- const subPrograms = tracer.getSubPrograms ? tracer.getSubPrograms() : new Map();
464
-
465
- // Create one row per instruction execution
466
- for (const [instructionIndex, events] of eventsByInstruction.entries()) {
467
- const inputEvent = events.find(e => e.type === 'input');
468
- const outputEvent = events.find(e => e.type === 'output');
469
- const errorEvent = events.find(e => e.type === 'error');
470
-
471
- // Use operation name from scheduler program, fallback to event note
472
- const operationName = instructionOperations.get(instructionIndex) || inputEvent?.note || 'Unknown';
473
- const dependencies = instructionDependencies.get(instructionIndex) || [];
474
-
475
- // Calculate duration between input and output
476
- let duration: number | null = null;
477
- if (inputEvent && outputEvent) {
478
- duration = outputEvent.timestamp - inputEvent.timestamp;
479
- }
480
-
481
- // Build enhanced sub-program information
482
- let subProgramsInfo: any = null;
483
- if (inputEvent?.subPrograms && inputEvent.subPrograms.length > 0) {
484
- // Enhance sub-program info with details from the tracer
485
- subProgramsInfo = inputEvent.subPrograms.map(sp => {
486
- const subProgramDetail = subPrograms.get(sp.programIndex);
487
- const baseInfo = {
488
- programIndex: sp.programIndex,
489
- instructionCount: sp.instructionCount,
490
- rootNote: sp.rootNote
491
- };
492
-
493
- if (subProgramDetail) {
494
- // Add instruction details from the sub-program
495
- const instructions = subProgramDetail.scheduler.instructions.map((instr: any, idx: number) => ({
496
- index: idx,
497
- operation: instr.note || `instruction_${idx}`,
498
- dependencies: instr.params.map((_: any, paramIdx: number) => paramIdx).filter((paramIdx: number) => paramIdx < idx)
499
- }));
500
- return { ...baseInfo, instructions };
501
- }
502
-
503
- return baseInfo;
504
- });
505
- }
506
-
507
- const timestamp = inputEvent?.timestamp || outputEvent?.timestamp || Date.now();
508
-
509
- yield [
510
- instructionIndex, // instruction_index
511
- operationName, // operation
512
- safeJsonStringify(dependencies), // dependencies
513
- inputEvent?.args ? safeJsonStringify(inputEvent.args) : null, // input_values
514
- outputEvent?.result !== undefined ? safeJsonStringify(outputEvent.result) : null, // output_value
515
- duration, // duration_ms
516
- subProgramsInfo ? safeJsonStringify(subProgramsInfo) : null, // sub_programs
517
- errorEvent?.error || null, // error_message
518
- timestamp // timestamp_ms
519
- ];
520
- }
521
-
522
- // If no trace events were captured, yield a summary row
523
- if (eventsByInstruction.size === 0) {
524
- yield [
525
- 0, // instruction_index
526
- 'NO_TRACE_DATA', // operation
527
- safeJsonStringify([]), // dependencies
528
- null, // input_values
529
- safeJsonStringify('No instruction-level trace events captured'), // output_value
530
- null, // duration_ms
531
- null, // sub_programs
532
- null, // error_message
533
- Date.now() // timestamp_ms
534
- ];
535
- }
536
-
537
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
538
- } catch (error: any) {
539
- // If tracing setup fails, yield an error event
540
- yield [
541
- 0, // instruction_index
542
- 'TRACE_SETUP', // operation
543
- safeJsonStringify([]), // dependencies
544
- null, // input_values
545
- null, // output_value
546
- null, // duration_ms
547
- null, // sub_programs
548
- `Failed to setup execution trace: ${error.message}`, // error_message
549
- Date.now() // timestamp_ms
550
- ];
551
- }
552
- }
553
- );
554
-
555
- // Row-level execution trace function for detailed data flow analysis
556
- export const rowTraceFunc = createIntegratedTableValuedFunction(
557
- {
558
- name: 'row_trace',
559
- numArgs: 1,
560
- deterministic: false, // Row traces are not deterministic
561
- returnType: {
562
- typeClass: 'relation',
563
- isReadOnly: true,
564
- isSet: false,
565
- columns: [
566
- { name: 'instruction_index', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true },
567
- { name: 'operation', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true },
568
- { name: 'row_index', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true },
569
- { name: 'row_data', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true }, // JSON array of row values
570
- { name: 'timestamp_ms', type: { typeClass: 'scalar', logicalType: REAL_TYPE, nullable: false, isReadOnly: true }, generated: true },
571
- { name: 'row_count', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: true, isReadOnly: true }, generated: true } // Total rows for this instruction (filled in last row)
572
- ],
573
- keys: [],
574
- rowConstraints: []
575
- }
576
- },
577
- async function* (db: Database, sql: SqlValue): AsyncIterable<Row> {
578
- if (typeof sql !== 'string') {
579
- throw new QuereusError('row_trace() requires a SQL string argument', StatusCode.ERROR);
580
- }
581
-
582
- try {
583
- // Import the CollectingInstructionTracer
584
- const tracer = new CollectingInstructionTracer();
585
-
586
- // Parse the query and execute with tracing
587
- let stmt: any;
588
- try {
589
- stmt = db.prepare(sql);
590
-
591
- // Execute the query with tracing to collect row-level events
592
- const results: any[] = [];
593
- for await (const row of stmt.iterateRowsWithTrace(undefined, tracer)) {
594
- results.push(row); // We don't yield the results, just the trace events
595
- }
596
-
597
- await stmt.finalize();
598
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
599
- } catch (executionError: any) {
600
- // If execution fails, we might still have some trace events
601
- console.warn('Query execution failed during row tracing:', executionError.message);
602
- }
603
-
604
- // Get the collected trace events and filter for row events
605
- const traceEvents = tracer.getTraceEvents();
606
- const rowEvents = traceEvents.filter(event => event.type === 'row');
607
-
608
- // Group row events by instruction index to calculate row counts
609
- const rowsByInstruction = new Map<number, typeof rowEvents>();
610
- for (const event of rowEvents) {
611
- const instructionIndex = event.instructionIndex;
612
- if (!rowsByInstruction.has(instructionIndex)) {
613
- rowsByInstruction.set(instructionIndex, []);
614
- }
615
- rowsByInstruction.get(instructionIndex)!.push(event);
616
- }
617
-
618
- // Yield detailed information for each row
619
- for (const [instructionIndex, instructionRowEvents] of rowsByInstruction.entries()) {
620
- const totalRows = instructionRowEvents.length;
621
-
622
- for (let i = 0; i < instructionRowEvents.length; i++) {
623
- const event = instructionRowEvents[i];
624
- const isLastRow = i === instructionRowEvents.length - 1;
625
-
626
- yield [
627
- instructionIndex, // instruction_index
628
- event.note || 'Unknown', // operation
629
- event.rowIndex ?? i, // row_index
630
- safeJsonStringify(event.row), // row_data
631
- event.timestamp, // timestamp_ms
632
- isLastRow ? totalRows : null // row_count (only on last row)
633
- ];
634
- }
635
- }
636
-
637
- // If no row events were captured, yield a summary row
638
- if (rowEvents.length === 0) {
639
- yield [
640
- 0, // instruction_index
641
- 'NO_ROW_DATA', // operation
642
- 0, // row_index
643
- safeJsonStringify('No row-level trace events captured'), // row_data
644
- Date.now(), // timestamp_ms
645
- 0 // row_count
646
- ];
647
- }
648
-
649
- } catch (error: unknown) {
650
- // If tracing setup fails, yield an error event
651
- yield [
652
- 0, // instruction_index
653
- 'ROW_TRACE_SETUP', // operation
654
- 0, // row_index
655
- safeJsonStringify(`Failed to setup row trace: ${error instanceof Error ? error.message : String(error)}`), // row_data
656
- Date.now(), // timestamp_ms
657
- null // row_count
658
- ];
659
- }
660
- }
661
- );
662
-
663
- // Schema size function (table-valued function)
664
- export const schemaSizeFunc = createIntegratedTableValuedFunction(
665
- {
666
- name: 'schema_size',
667
- numArgs: 0,
668
- deterministic: false, // Schema can change
669
- returnType: {
670
- typeClass: 'relation',
671
- isReadOnly: true,
672
- isSet: false,
673
- columns: [
674
- { name: 'object_type', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
675
- { name: 'object_name', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
676
- { name: 'estimated_rows', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: true, isReadOnly: true }, generated: true },
677
- { name: 'estimated_size_kb', type: { typeClass: 'scalar', logicalType: REAL_TYPE, nullable: true, isReadOnly: true }, generated: true },
678
- { name: 'column_count', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true },
679
- { name: 'index_count', type: { typeClass: 'scalar', logicalType: INTEGER_TYPE, nullable: false, isReadOnly: true }, generated: true }
680
- ],
681
- keys: [],
682
- rowConstraints: []
683
- }
684
- },
685
- async function* (_db: Database, _sql: SqlValue): AsyncIterable<Row> {
686
- // TODO: Implementation of schemaSizeFunc
687
- }
688
- );
689
-
690
- // Explain assertion analysis and prepared parameterization (pre-physical)
691
- export const explainAssertionFunc = createIntegratedTableValuedFunction(
692
- {
693
- name: 'explain_assertion',
694
- numArgs: 1,
695
- deterministic: true,
696
- returnType: {
697
- typeClass: 'relation',
698
- isReadOnly: true,
699
- isSet: false,
700
- columns: [
701
- { name: 'assertion', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
702
- { name: 'relation_key', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
703
- { name: 'base', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
704
- { name: 'classification', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true },
705
- { name: 'prepared_pk_params', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: true, isReadOnly: true }, generated: true }, // JSON array of param names or NULL
706
- { name: 'violation_sql', type: { typeClass: 'scalar', logicalType: TEXT_TYPE, nullable: false, isReadOnly: true }, generated: true }
707
- ],
708
- keys: [],
709
- rowConstraints: []
710
- }
711
- },
712
- async function* (db: Database, assertionName: SqlValue): AsyncIterable<Row> {
713
- if (typeof assertionName !== 'string') {
714
- throw new QuereusError('explain_assertion(name) requires an assertion name', StatusCode.ERROR);
715
- }
716
-
717
- // Find assertion across all schemas
718
- const all = db.schemaManager.getAllAssertions();
719
- const assertion = all.find(a => a.name.toLowerCase() === assertionName.toLowerCase());
720
- if (!assertion) {
721
- throw new QuereusError(`Assertion not found: ${assertionName}`, StatusCode.NOTFOUND);
722
- }
723
-
724
- const sql = assertion.violationSql;
725
-
726
- // Build pre-physical plan for analysis
727
- let ast: AST.Statement;
728
- try {
729
- const parser = new Parser();
730
- ast = parser.parse(sql) as AST.Statement;
731
- } catch (e) {
732
- throw new QuereusError(`Failed to parse assertion SQL: ${(e as Error).message}`, StatusCode.ERROR, e as Error);
733
- }
734
-
735
- const globalScope = new GlobalScope(db.schemaManager);
736
- const parameterScope = new ParameterScope(globalScope);
737
- const ctx: PlanningContext = {
738
- db,
739
- schemaManager: db.schemaManager,
740
- parameters: {},
741
- scope: parameterScope,
742
- cteNodes: new Map(),
743
- schemaDependencies: new BuildTimeDependencyTracker(),
744
- schemaCache: new Map(),
745
- cteReferenceCache: new Map(),
746
- outputScopes: new Map()
747
- };
748
-
749
- const plan = buildBlock(ctx, [ast]);
750
- const analyzed = db.optimizer.optimizeForAnalysis(plan, db) as unknown as RelationalPlanNode;
751
-
752
- // Classify row/global per relationKey
753
- const classifications = analyzeRowSpecific(analyzed);
754
-
755
- for (const [relationKey, cls] of classifications) {
756
- const base = `${relationKey.split('#')[0]}`;
757
- let prepared: string | null = null;
758
- if (cls === 'row' && base) {
759
- // Prepared parameters are PK-based: ["pk0", "pk1", ...]
760
- const [schemaName, tableName] = base.split('.');
761
- const table = db._findTable(tableName, schemaName);
762
- if (table) {
763
- const pkCount = table.primaryKeyDefinition.length;
764
- const names = Array.from({ length: pkCount }, (_, i) => `pk${i}`);
765
- prepared = JSON.stringify(names);
766
- }
767
- }
768
-
769
- yield [
770
- assertion.name,
771
- relationKey,
772
- base,
773
- cls,
774
- prepared,
775
- sql
776
- ];
777
- }
778
- }
779
- );