@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
package/src/core/param.ts DELETED
@@ -1,56 +0,0 @@
1
- import type { ScalarType } from '../common/datatype.js';
2
- import { type SqlParameters, type SqlValue } from '../common/types.js';
3
- import { inferLogicalTypeFromValue } from '../common/type-inference.js';
4
-
5
- /**
6
- * Generate type hints for parameters based on their JavaScript values.
7
- * This is used during planning to assign strong types to parameters.
8
- *
9
- * Type inference rules:
10
- * - null → NULL
11
- * - number (integer) → INTEGER
12
- * - number (float) → REAL
13
- * - bigint → INTEGER
14
- * - boolean → BOOLEAN
15
- * - string → TEXT
16
- * - Uint8Array → BLOB
17
- *
18
- * @param params The parameter values (positional array or named object)
19
- * @returns Map of parameter keys to their inferred ScalarTypes
20
- */
21
- export function getParameterTypes(params: SqlParameters | undefined): Map<string | number, ScalarType> | undefined {
22
- let results: Map<string | number, ScalarType> | undefined;
23
- if (params) {
24
- results = new Map<string | number, ScalarType>();
25
- if (Array.isArray(params)) {
26
- params.forEach((paramValue, index) => {
27
- // ParameterScope resolves '?' to 1-based indices internally when it sees the AST node.
28
- // The hints should be keyed by these 1-based indices for anonymous params.
29
- results!.set(index + 1, getParameterScalarType(paramValue));
30
- });
31
- } else {
32
- Object.entries(params).forEach(([key, value]) => {
33
- // For named params like ':name', ParameterScope expects 'name' as key for hints.
34
- results!.set(key.startsWith(':') ? key.substring(1) : key, getParameterScalarType(value));
35
- });
36
- }
37
- }
38
- return results;
39
- }
40
-
41
- /**
42
- * Infer the ScalarType for a parameter value based on its JavaScript type.
43
- *
44
- * @param value The parameter value
45
- * @returns The inferred ScalarType
46
- */
47
- function getParameterScalarType(value: SqlValue): ScalarType {
48
- const logicalType = inferLogicalTypeFromValue(value);
49
-
50
- return {
51
- typeClass: 'scalar',
52
- logicalType,
53
- nullable: value === null,
54
- isReadOnly: true,
55
- };
56
- }
@@ -1,528 +0,0 @@
1
- import { createLogger } from '../common/logger.js';
2
- import { type SqlValue, StatusCode, type Row, type SqlParameters, type DeepReadonly } from '../common/types.js';
3
- import { MisuseError, QuereusError } from '../common/errors.js';
4
- import type { Database } from './database.js';
5
- import { isRelationType, type ColumnDef, type ScalarType } from '../common/datatype.js';
6
- import { Parser, ParseError } from '../parser/parser.js';
7
- import type { Statement as ASTStatement } from '../parser/ast.js';
8
- import type { BlockNode } from '../planner/nodes/block.js';
9
- import { emitPlanNode } from '../runtime/emitters.js';
10
- import { Scheduler } from '../runtime/scheduler.js';
11
- import type { RuntimeContext } from '../runtime/types.js';
12
- import { Cached } from '../util/cached.js';
13
- import { isAsyncIterable } from '../runtime/utils.js';
14
- import { generateInstructionProgram, serializePlanTree } from '../planner/debug.js';
15
- import { EmissionContext } from '../runtime/emission-context.js';
16
- import type { SchemaDependency } from '../planner/planning-context.js';
17
- import { getParameterTypes } from './param.js';
18
- import { getPhysicalType, physicalTypeName } from '../types/logical-type.js';
19
-
20
- const log = createLogger('core:statement');
21
- const errorLog = log.extend('error');
22
- const warnLog = log.extend('warn');
23
-
24
- /**
25
- * Represents a prepared SQL statement.
26
- */
27
- export class Statement {
28
- public readonly db: Database;
29
- public readonly originalSql: string;
30
- public readonly astBatch: ASTStatement[];
31
- private astBatchIndex: number = -1;
32
- private finalized = false;
33
- private busy = false;
34
- private boundArgs: Record<number | string, SqlValue> = {};
35
- private plan: BlockNode | null = null;
36
- private emissionContext: EmissionContext | null = null;
37
- private needsCompile = true;
38
- private columnDefCache = new Cached<DeepReadonly<ColumnDef>[]>(() => this.getColumnDefs());
39
- private schemaChangeUnsubscriber: (() => void) | null = null;
40
- /** Parameter types established at prepare time (either explicit or inferred from initial values) */
41
- private parameterTypes: Map<string | number, ScalarType> | undefined = undefined;
42
-
43
- /**
44
- * @internal - Use db.prepare().
45
- * The `sqlOrAstBatch` can be a single SQL string (parsed internally) or a pre-parsed batch.
46
- * `initialAstIndex` is for internal use when db.prepare might create one Statement per AST in a batch.
47
- * `paramsOrTypes` can be initial parameter values (to infer types) or explicit types.
48
- */
49
- constructor(
50
- db: Database,
51
- sqlOrAstBatch: string | ASTStatement[],
52
- initialAstIndex: number = 0,
53
- paramsOrTypes?: SqlParameters | SqlValue[] | Map<string | number, ScalarType>
54
- ) {
55
- this.db = db;
56
- if (typeof sqlOrAstBatch === 'string') {
57
- this.originalSql = sqlOrAstBatch;
58
- const parser = new Parser();
59
- try {
60
- this.astBatch = parser.parseAll(this.originalSql);
61
- } catch (e) {
62
- if (e instanceof ParseError) throw new QuereusError(`Parse error: ${e.message}`, StatusCode.ERROR, e);
63
- throw e;
64
- }
65
- } else {
66
- this.astBatch = sqlOrAstBatch;
67
- // Try to reconstruct originalSql if possible, or set a generic name
68
- this.originalSql = this.astBatch.map(s => s.toString()).join('; '); // TODO: replace with better AST stringification
69
- }
70
-
71
- // Handle explicit parameter types or initial values
72
- if (paramsOrTypes instanceof Map) {
73
- // Explicit parameter types provided
74
- this.parameterTypes = paramsOrTypes;
75
- } else if (paramsOrTypes !== undefined) {
76
- // Initial parameter values - infer types and bind them
77
- this.parameterTypes = getParameterTypes(paramsOrTypes);
78
- // Also bind the initial values
79
- if (Array.isArray(paramsOrTypes)) {
80
- paramsOrTypes.forEach((value, index) => {
81
- this.boundArgs[index + 1] = value;
82
- });
83
- } else {
84
- Object.assign(this.boundArgs, paramsOrTypes);
85
- }
86
- }
87
-
88
- if (this.astBatch.length === 0 && initialAstIndex === 0) {
89
- // No statements to run, effectively. nextStatement will return false.
90
- this.astBatchIndex = -1;
91
- this.needsCompile = false;
92
- } else if (initialAstIndex >= 0 && initialAstIndex < this.astBatch.length) {
93
- this.astBatchIndex = initialAstIndex;
94
- this.needsCompile = true; // Start by needing to compile the first indicated statement
95
- } else {
96
- throw new MisuseError("Initial AST index out of bounds for provided batch.");
97
- }
98
- }
99
-
100
- /** Advances to the next statement in the batch. Returns false if no more statements. */
101
- public nextStatement(): boolean {
102
- this.validateStatement("advance from");
103
- if (this.busy) throw new MisuseError("Statement busy, reset or complete current iteration first.");
104
- if (this.astBatchIndex < this.astBatch.length - 1) {
105
- this.astBatchIndex++;
106
- this.plan = null;
107
- this.emissionContext = null;
108
- this.needsCompile = true;
109
- this.columnDefCache.clear();
110
- this.parameterTypes = undefined;
111
- return true;
112
- } else {
113
- return false;
114
- }
115
- }
116
-
117
- /** Returns the SQL fragment for the current statement, if available. */
118
- public getBlockSql(): string {
119
- if (this.astBatchIndex < 0 || this.astBatchIndex >= this.astBatch.length) {
120
- return "";
121
- }
122
- return this.getAstStatement().toString(); // TODO: replace with better AST stringification
123
- }
124
-
125
- /** @internal Plans the current AST statement */
126
- public compile(): BlockNode {
127
- if (this.plan && !this.needsCompile) return this.plan;
128
-
129
- this.validateStatement("compile/plan");
130
- this.columnDefCache.clear();
131
-
132
- log("Planning current statement (new runtime): %s", this.getBlockSql().substring(0, 100));
133
- let plan: BlockNode | undefined;
134
- try {
135
- const currentAst = this.getAstStatement();
136
-
137
- // On first compilation, establish the parameter types
138
- // Use explicit types if provided, otherwise infer from bound args
139
- if (this.parameterTypes === undefined) {
140
- // Infer types from current bound args
141
- this.parameterTypes = getParameterTypes(this.boundArgs);
142
- }
143
-
144
- // Pass parameter types directly to planning
145
- const planResult = this.db._buildPlan([currentAst], this.parameterTypes);
146
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
147
- const dependencies = (planResult as any).schemaDependencies; // Extract dependencies from planning context
148
- plan = this.db.optimizer.optimize(planResult, this.db) as BlockNode;
149
-
150
- // Set up schema change invalidation if we have dependencies
151
- if (dependencies && dependencies.hasAnyDependencies()) {
152
- // Remove any existing listener
153
- if (this.schemaChangeUnsubscriber) {
154
- this.schemaChangeUnsubscriber();
155
- }
156
-
157
- // Add new listener for schema changes that affect our dependencies
158
- this.schemaChangeUnsubscriber = this.db.schemaManager.getChangeNotifier().addListener(event => {
159
- // Map event type to dependency type
160
- let dependencyType: string;
161
- if (event.type.startsWith('table_')) {
162
- dependencyType = 'table';
163
- } else if (event.type.startsWith('function_')) {
164
- dependencyType = 'function';
165
- } else if (event.type.startsWith('module_')) {
166
- dependencyType = 'vtab_module';
167
- } else if (event.type.startsWith('collation_')) {
168
- dependencyType = 'collation';
169
- } else {
170
- return; // Unknown event type
171
- }
172
-
173
- // Check if this change affects any of our dependencies
174
- const planDependencies = dependencies.getDependencies();
175
- const affectedDependency = planDependencies.find((dep: SchemaDependency) =>
176
- dep.type === dependencyType &&
177
- dep.objectName === event.objectName &&
178
- (!dep.schemaName || dep.schemaName === event.schemaName)
179
- );
180
-
181
- if (affectedDependency) {
182
- log('Schema change invalidated plan for statement: %s %s', event.type, event.objectName);
183
- this.needsCompile = true;
184
- this.plan = null;
185
- this.emissionContext = null;
186
- this.columnDefCache.clear();
187
- }
188
- });
189
- }
190
-
191
- this.needsCompile = false;
192
- log("Planning complete for current statement.");
193
- } catch (e) {
194
- errorLog("Planning failed for current statement: %O", e);
195
- if (e instanceof QuereusError) throw e;
196
- if (e instanceof Error) throw new QuereusError(`Planning error: ${e.message}`, StatusCode.INTERNAL, e);
197
- throw new QuereusError("Unknown planning error", StatusCode.INTERNAL);
198
- }
199
- if (!plan) throw new QuereusError("Planning resulted in no plan for current statement", StatusCode.INTERNAL);
200
- this.plan = plan;
201
- return plan;
202
- }
203
-
204
- /** @internal Gets or creates the emission context for this statement */
205
- private getEmissionContext(): EmissionContext {
206
- if (!this.emissionContext) {
207
- this.emissionContext = new EmissionContext(this.db);
208
- }
209
- return this.emissionContext;
210
- }
211
-
212
- /**
213
- * Binds a user-provided argument value to a declared parameter name/index for the current statement.
214
- */
215
- bind(key: number | string, value: SqlValue): this {
216
- this.validateStatement("bind argument for");
217
- if (this.busy) throw new MisuseError("Statement busy, reset first");
218
- if (typeof key === 'number') {
219
- if (key < 1) throw new RangeError(`Argument index ${key} out of range (must be >= 1)`);
220
- this.boundArgs[key] = value;
221
- } else if (typeof key === 'string') {
222
- this.boundArgs[key] = value;
223
- } else {
224
- throw new MisuseError("Invalid argument key type");
225
- }
226
- return this;
227
- }
228
-
229
- /**
230
- * Binds all user-provided argument values for the current statement.
231
- */
232
- bindAll(args: SqlParameters | SqlValue[]): this {
233
- this.validateStatement("bind all parameters for");
234
- if (this.busy) throw new MisuseError("Statement busy, reset first");
235
- this.boundArgs = {};
236
- if (Array.isArray(args)) {
237
- // Convert array to object with 1-based keys to match parameter indexing
238
- const convertedArgs: Record<string, SqlValue> = {};
239
- args.forEach((value, index) => {
240
- convertedArgs[String(index + 1)] = value; // 1-based indexing
241
- });
242
- Object.assign(this.boundArgs, convertedArgs);
243
- } else if (typeof args === 'object' && args !== null) {
244
- Object.assign(this.boundArgs, args);
245
- } else {
246
- throw new MisuseError("Invalid parameters type for bindAll. Use array or object.");
247
- }
248
- return this;
249
- }
250
-
251
- /** Checks if the current statement, when executed, is expected to produce rows. */
252
- public isQuery(): boolean {
253
- this.validateStatement("check if query");
254
- const blockPlan = this.compile();
255
- if (!blockPlan || blockPlan.statements.length === 0) return false;
256
- const lastStatementInBlock = blockPlan.statements[blockPlan.statements.length - 1];
257
- const relationType = lastStatementInBlock.getType();
258
- return isRelationType(relationType);
259
- }
260
-
261
- async *iterateRows(params?: SqlParameters | SqlValue[]): AsyncIterable<Row> {
262
- this.validateStatement("iterate rows for");
263
- if (this.busy) throw new MisuseError("Statement busy, another iteration may be in progress or reset needed.");
264
-
265
- if (params) this.bindAll(params);
266
-
267
- // Validate parameter types before execution
268
- this.validateParameterTypes();
269
-
270
- this.busy = true;
271
- try {
272
- const blockPlanNode = this.compile();
273
- if (!blockPlanNode.statements.length) return;
274
-
275
- const emissionContext = this.getEmissionContext();
276
- const rootInstruction = emitPlanNode(blockPlanNode, emissionContext);
277
- const scheduler = new Scheduler(rootInstruction);
278
- const runtimeCtx: RuntimeContext = {
279
- db: this.db,
280
- stmt: this,
281
- params: this.boundArgs,
282
- context: new Map(),
283
- tableContexts: new Map(),
284
- tracer: this.db.getInstructionTracer(),
285
- enableMetrics: Boolean(this.db.getOption('runtime_metrics')),
286
- };
287
-
288
- const results = await scheduler.run(runtimeCtx);
289
- if (results) {
290
- if (Array.isArray(results) && results.length) {
291
- const lastStatementOutput = results[results.length - 1];
292
- if (isAsyncIterable(lastStatementOutput)) {
293
- yield* lastStatementOutput as AsyncIterable<Row>;
294
- }
295
- } else if (isAsyncIterable(results)) {
296
- yield* results as AsyncIterable<Row>;
297
- }
298
- }
299
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
300
- } catch (e: any) {
301
- errorLog('Runtime execution failed in iterateRows for current statement: %O', e);
302
- if (e instanceof QuereusError) throw e;
303
- throw new QuereusError(`Execution error: ${e.message}`, StatusCode.ERROR, e);
304
- } finally {
305
- this.busy = false;
306
- }
307
- }
308
-
309
- getColumnNames(): string[] {
310
- this.validateStatement("get column names for");
311
- return this.columnDefCache.value.map(col => col.name);
312
- }
313
-
314
- /**
315
- * Resets the prepared statement to its initial state, ready to be re-executed.
316
- */
317
- async reset(): Promise<void> {
318
- this.validateStatement("reset");
319
- if (this.busy) {
320
- warnLog("Statement reset while busy. Iteration may not have completed.");
321
- }
322
- this.busy = false;
323
- }
324
-
325
- /**
326
- * Clears all bound parameter values.
327
- * Note: This does NOT trigger recompilation - parameter types are preserved.
328
- */
329
- clearBindings(): this {
330
- this.validateStatement("clear bindings for");
331
- if (this.busy) throw new MisuseError("Statement busy, reset first");
332
- this.boundArgs = {};
333
- // Don't set needsCompile - parameter types are preserved
334
- return this;
335
- }
336
-
337
- /**
338
- * Finalizes the statement, releasing associated resources.
339
- */
340
- async finalize(): Promise<void> {
341
- if (this.finalized) return;
342
- this.finalized = true;
343
- this.busy = false;
344
- this.boundArgs = {};
345
- this.plan = null;
346
- this.emissionContext = null;
347
- this.columnDefCache.clear();
348
- this.astBatchIndex = -1;
349
-
350
- // Clean up schema change listener
351
- if (this.schemaChangeUnsubscriber) {
352
- this.schemaChangeUnsubscriber();
353
- this.schemaChangeUnsubscriber = null;
354
- }
355
-
356
- this.db._statementFinalized(this);
357
- }
358
-
359
- /**
360
- * Executes the prepared statement with the given parameters until completion.
361
- */
362
- async run(params?: SqlParameters | SqlValue[]): Promise<void> {
363
- this.validateStatement("run");
364
- for await (const _ of this.iterateRows(params)) { /* Consume */ }
365
- }
366
-
367
- /**
368
- * Executes the prepared statement, binds parameters, and retrieves the first result row.
369
- */
370
- async get(params?: SqlParameters | SqlValue[]): Promise<Record<string, SqlValue> | undefined> {
371
- this.validateStatement("get first row for");
372
- const names = this.getColumnNames();
373
- for await (const rowArray of this.iterateRows(params)) {
374
- const rowObject = rowArray.reduce((obj, val, idx) => {
375
- obj[names[idx] || `col_${idx}`] = val;
376
- return obj;
377
- }, {} as Record<string, SqlValue>);
378
- return rowObject;
379
- }
380
- return undefined;
381
- }
382
-
383
- /**
384
- * Executes the prepared statement, binds parameters, and retrieves all result rows.
385
- */
386
- async *all(params?: SqlParameters | SqlValue[]): AsyncIterable<Record<string, SqlValue>> {
387
- this.validateStatement("get all rows for");
388
- const names = this.getColumnNames();
389
- for await (const rowArray of this.iterateRows(params)) {
390
- const rowObject = rowArray.reduce((obj, val, idx) => {
391
- obj[names[idx] || `col_${idx}`] = val;
392
- return obj;
393
- }, {} as Record<string, SqlValue>);
394
- yield rowObject;
395
- }
396
- }
397
-
398
- /**
399
- * Gets the parameters required by the current statement.
400
- */
401
- getParameters(): SqlParameters {
402
- this.validateStatement("get parameters for");
403
- const blockPlan = this.compile();
404
- return { ...blockPlan.parameters };
405
- }
406
-
407
- /**
408
- * Gets the data type of a column in the current row.
409
- */
410
- getColumnType(index: number): Readonly<ScalarType> {
411
- this.validateStatement("get column type for");
412
- const columnDefs = this.columnDefCache.value;
413
- if (index < 0 || index >= columnDefs.length) {
414
- throw new RangeError(`Column index ${index} out of range.`);
415
- }
416
- return columnDefs[index].type;
417
- }
418
-
419
- /**
420
- * Gets the name of a column by its index.
421
- */
422
- getColumnName(index: number): string {
423
- this.validateStatement("get column name for");
424
- const names = this.getColumnNames();
425
- if (index < 0 || index >= names.length) {
426
- throw new RangeError(`Column index ${index} out of range (0-${names.length - 1})`);
427
- }
428
- return names[index];
429
- }
430
-
431
- getColumnDefs(): DeepReadonly<ColumnDef>[] {
432
- if (!this.plan) {
433
- if (this.astBatchIndex >= 0 && this.astBatchIndex < this.astBatch.length && this.needsCompile) {
434
- try { this.compile(); } catch { /*ignore compile error for _getColumnDefs, return empty */ }
435
- }
436
- if (!this.plan) return [];
437
- }
438
- const lastStatementPlanInBlock = this.plan.statements[this.plan.statements.length - 1];
439
- if (lastStatementPlanInBlock) {
440
- const relationType = lastStatementPlanInBlock.getType();
441
- if (isRelationType(relationType) && relationType.columns) {
442
- return [...relationType.columns];
443
- }
444
- }
445
- return [];
446
- }
447
-
448
- private validateStatement(operation: string): void {
449
- if (this.finalized) throw new MisuseError("Statement finalized");
450
- if (this.astBatchIndex < 0 || this.astBatchIndex >= this.astBatch.length) {
451
- throw new MisuseError(`No current statement selected to ${operation}. Call nextStatement() first or ensure SQL was not empty.`);
452
- }
453
- }
454
-
455
- private getAstStatement(): ASTStatement {
456
- this.validateStatement("get AST for");
457
- return this.astBatch[this.astBatchIndex];
458
- }
459
-
460
- /**
461
- * Validates that bound parameters match the expected types from compilation.
462
- * Validates that the JavaScript value is compatible with the physical type of the declared logical type.
463
- * @throws QuereusError if parameter types don't match
464
- */
465
- private validateParameterTypes(): void {
466
- if (!this.parameterTypes) return; // No parameter types established yet
467
-
468
- for (const [key, expectedType] of this.parameterTypes.entries()) {
469
- const value = this.boundArgs[key];
470
-
471
- // Allow undefined/missing parameters (they'll be caught at runtime if required)
472
- if (value === undefined) continue;
473
-
474
- // NULL is compatible with any nullable type
475
- if (value === null) {
476
- if (!expectedType.nullable) {
477
- throw new QuereusError(
478
- `Parameter type mismatch for ${typeof key === 'number' ? `?${key}` : `:${key}`}: ` +
479
- `expected non-nullable ${expectedType.logicalType.name}, got NULL`,
480
- StatusCode.MISMATCH
481
- );
482
- }
483
- continue;
484
- }
485
-
486
- // Get the physical type of the declared logical type
487
- const expectedPhysicalType = expectedType.logicalType.physicalType;
488
-
489
- // Get the physical type directly from the JavaScript value
490
- const actualPhysicalType = getPhysicalType(value);
491
-
492
- // Check if physical types are compatible
493
- if (actualPhysicalType !== expectedPhysicalType) {
494
- throw new QuereusError(
495
- `Parameter type mismatch for ${typeof key === 'number' ? `?${key}` : `:${key}`}: ` +
496
- `expected ${expectedType.logicalType.name} (physical: ${physicalTypeName(expectedPhysicalType)}), ` +
497
- `got value with physical type ${physicalTypeName(actualPhysicalType)}`,
498
- StatusCode.MISMATCH
499
- );
500
- }
501
- }
502
- }
503
-
504
- /**
505
- * Gets a detailed JSON representation of the query plan for debugging.
506
- * @returns JSON string containing the detailed plan tree.
507
- */
508
- getDebugPlan(): string {
509
- this.validateStatement("get debug plan for");
510
- const plan = this.compile();
511
- return serializePlanTree(plan);
512
- }
513
-
514
- /**
515
- * Gets a human-readable instruction program for debugging.
516
- * @returns String representation of the instruction program.
517
- */
518
- getDebugProgram(): string {
519
- this.validateStatement("get debug program for");
520
- const plan = this.compile();
521
- const emissionContext = this.getEmissionContext();
522
- const rootInstruction = emitPlanNode(plan, emissionContext);
523
- const scheduler = new Scheduler(rootInstruction);
524
-
525
- return generateInstructionProgram(scheduler.instructions, scheduler.destinations);
526
- }
527
- }
528
-