@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,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
- );