@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,106 +0,0 @@
1
- import type { Instruction, InstructionRun, RuntimeContext } from '../types.js';
2
- import { emitPlanNode, createValidatedInstruction } from '../emitters.js';
3
- import { QuereusError } from '../../common/errors.js';
4
- import { StatusCode, type SqlValue, type Row } from '../../common/types.js';
5
- import type { FunctionSchema, IntegratedTableValuedFunc, TableValuedFunc } from '../../schema/function.js';
6
- import { isTableValuedFunctionSchema } from '../../schema/function.js';
7
- import type { EmissionContext } from '../emission-context.js';
8
- import type { TableFunctionCallNode } from '../../planner/nodes/table-function-call.js';
9
- import { buildRowDescriptor } from '../../util/row-descriptor.js';
10
- import { withRowContextGenerator } from '../context-helpers.js';
11
-
12
- export function emitTableValuedFunctionCall(plan: TableFunctionCallNode, ctx: EmissionContext): Instruction {
13
- const functionName = plan.functionName.toLowerCase();
14
- const numArgs = plan.operands.length;
15
-
16
- // Create row descriptor for function output attributes
17
- const rowDescriptor = buildRowDescriptor(plan.getAttributes());
18
-
19
- // Look up the function during emission and record the dependency
20
- // First try exact argument count, then try variable argument function
21
- let functionSchema = ctx.findFunction(functionName, numArgs);
22
- if (!functionSchema) {
23
- functionSchema = ctx.findFunction(functionName, -1); // Try variable argument function
24
- }
25
- if (!functionSchema) {
26
- throw new QuereusError(`Unknown function: ${functionName}/${numArgs}`, StatusCode.ERROR);
27
- }
28
- if (!isTableValuedFunctionSchema(functionSchema)) {
29
- throw new QuereusError(`Function ${functionName}/${numArgs} is not a table-valued function`, StatusCode.ERROR);
30
- }
31
-
32
- // Capture the function key for runtime retrieval (use the actual function's numArgs)
33
- const functionKey = `function:${functionName}/${functionSchema.numArgs}`;
34
-
35
- async function* runIntegrated(innerCtx: RuntimeContext, ...args: Array<SqlValue>): AsyncIterable<Row> {
36
- // Use the captured function schema instead of doing a fresh lookup
37
- const capturedFunction = ctx.getCapturedSchemaObject<FunctionSchema>(functionKey);
38
- if (!capturedFunction) {
39
- throw new QuereusError(`Function ${functionName}/${numArgs} was not captured during emission`, StatusCode.INTERNAL);
40
- }
41
-
42
- if (!isTableValuedFunctionSchema(capturedFunction)) {
43
- throw new QuereusError(`Function ${functionName}/${numArgs} is not a table-valued function at runtime`, StatusCode.INTERNAL);
44
- }
45
-
46
- try {
47
- // Check if this is a database-aware function
48
- const result = (capturedFunction.implementation as IntegratedTableValuedFunc)!(innerCtx.db, ...args);
49
-
50
- // Handle both direct AsyncIterable and Promise<AsyncIterable>
51
- const iterable = result instanceof Promise ? await result : result;
52
-
53
- yield* withRowContextGenerator(innerCtx, rowDescriptor, iterable, async function* (row) {
54
- yield row;
55
- });
56
- } catch (error: any) {
57
- throw new QuereusError(`Table-valued function ${functionName} failed: ${error.message}`, StatusCode.ERROR, error);
58
- }
59
- }
60
-
61
- async function* run(innerCtx: RuntimeContext, ...args: Array<SqlValue>): AsyncIterable<Row> {
62
- // Use the captured function schema instead of doing a fresh lookup
63
- const capturedFunction = ctx.getCapturedSchemaObject<FunctionSchema>(functionKey);
64
- if (!capturedFunction) {
65
- throw new QuereusError(`Function ${functionName}/${functionSchema!.numArgs} was not captured during emission`, StatusCode.INTERNAL);
66
- }
67
-
68
- if (!isTableValuedFunctionSchema(capturedFunction)) {
69
- throw new QuereusError(`Function ${functionName}/${numArgs} is not a table-valued function at runtime`, StatusCode.INTERNAL);
70
- }
71
-
72
- // Validate argument count for variable argument functions
73
- if (capturedFunction.numArgs === -1) {
74
- // Special validation for known variable argument functions
75
- if (functionName === 'json_each' || functionName === 'json_tree') {
76
- if (args.length < 1 || args.length > 2) {
77
- throw new QuereusError(`${functionName} requires 1 or 2 arguments (jsonSource, [rootPath])`, StatusCode.ERROR);
78
- }
79
- }
80
- }
81
-
82
- try {
83
- // Check if this is a database-aware function
84
- const result = (capturedFunction.implementation as TableValuedFunc)!(...args);
85
-
86
- // Handle both direct AsyncIterable and Promise<AsyncIterable>
87
- const iterable = result instanceof Promise ? await result : result;
88
-
89
- yield* withRowContextGenerator(innerCtx, rowDescriptor, iterable, async function* (row) {
90
- yield row;
91
- });
92
- } catch (error: any) {
93
- throw new QuereusError(`Table-valued function ${functionName} failed: ${error.message}`, StatusCode.ERROR, error);
94
- }
95
- }
96
-
97
- const operandExprs = plan.operands.map(operand => emitPlanNode(operand, ctx));
98
- const runFunction = functionSchema.isIntegrated ? runIntegrated : run;
99
-
100
- return createValidatedInstruction(
101
- [...operandExprs],
102
- runFunction as InstructionRun,
103
- ctx,
104
- `TVF:${plan.functionName}(${plan.operands.length})`
105
- );
106
- }
@@ -1,302 +0,0 @@
1
- import { StatusCode } from "../../common/types.js";
2
- import { QuereusError } from "../../common/errors.js";
3
- import type { SqlValue } from "../../common/types.js";
4
- import type { Instruction, InstructionRun, RuntimeContext } from "../types.js";
5
- import type { BinaryOpNode } from "../../planner/nodes/scalar.js";
6
- import { emitPlanNode } from "../emitters.js";
7
- import type { EmissionContext } from "../emission-context.js";
8
- import { Temporal } from 'temporal-polyfill';
9
- import { TIMESPAN_TYPE } from "../../types/temporal-types.js";
10
-
11
- /**
12
- * Check if a value is a date string (YYYY-MM-DD format)
13
- */
14
- function isDateValue(v: SqlValue): boolean {
15
- if (typeof v !== 'string') return false;
16
- // Simple check for ISO 8601 date format
17
- return /^\d{4}-\d{2}-\d{2}$/.test(v);
18
- }
19
-
20
- /**
21
- * Check if a value is a time string (HH:MM:SS format)
22
- */
23
- function isTimeValue(v: SqlValue): boolean {
24
- if (typeof v !== 'string') return false;
25
- // Simple check for ISO 8601 time format
26
- return /^\d{2}:\d{2}:\d{2}/.test(v);
27
- }
28
-
29
- /**
30
- * Check if a value is a datetime string (ISO 8601 format)
31
- */
32
- function isDateTimeValue(v: SqlValue): boolean {
33
- if (typeof v !== 'string') return false;
34
- // Check for ISO 8601 datetime format (with T separator)
35
- return v.includes('T') && /^\d{4}-\d{2}-\d{2}T/.test(v);
36
- }
37
-
38
- /**
39
- * Check if a value is a timespan/duration string (ISO 8601 duration format)
40
- */
41
- function isTimespanValue(v: SqlValue): boolean {
42
- if (typeof v !== 'string') return false;
43
- // ISO 8601 duration starts with P (or -P for negative)
44
- return v.startsWith('P') || v.startsWith('-P');
45
- }
46
-
47
- /**
48
- * Try to perform temporal arithmetic on two values.
49
- * Returns the result if successful, or undefined if the values are not temporal types.
50
- * Throws QuereusError if the operation is invalid.
51
- */
52
- export function tryTemporalArithmetic(operator: string, v1: SqlValue, v2: SqlValue): SqlValue | undefined {
53
- if (v1 === null || v2 === null) return null;
54
-
55
- // Detect types at runtime
56
- const isV1Date = isDateValue(v1);
57
- const isV1Time = isTimeValue(v1);
58
- const isV1DateTime = isDateTimeValue(v1);
59
- const isV1Timespan = isTimespanValue(v1);
60
-
61
- const isV2Date = isDateValue(v2);
62
- const isV2Time = isTimeValue(v2);
63
- const isV2DateTime = isDateTimeValue(v2);
64
- const isV2Timespan = isTimespanValue(v2);
65
-
66
- // If neither operand is temporal, return undefined to signal non-temporal operation
67
- const isV1Temporal = isV1Date || isV1Time || isV1DateTime || isV1Timespan;
68
- const isV2Temporal = isV2Date || isV2Time || isV2DateTime || isV2Timespan;
69
- if (!isV1Temporal && !isV2Temporal) {
70
- return undefined;
71
- }
72
-
73
- try {
74
-
75
- // DATE/DATETIME - DATE/DATETIME → TIMESPAN
76
- if (operator === '-' &&
77
- (isV1Date || isV1DateTime) &&
78
- (isV2Date || isV2DateTime)) {
79
-
80
- // Parse both values as dates
81
- const date1 = isV1DateTime
82
- ? Temporal.PlainDateTime.from(v1 as string).toPlainDate()
83
- : Temporal.PlainDate.from(v1 as string);
84
- const date2 = isV2DateTime
85
- ? Temporal.PlainDateTime.from(v2 as string).toPlainDate()
86
- : Temporal.PlainDate.from(v2 as string);
87
-
88
- const duration = date1.since(date2);
89
- return duration.toString();
90
- }
91
-
92
- // TIME - TIME → TIMESPAN
93
- if (operator === '-' && isV1Time && isV2Time) {
94
- const time1 = Temporal.PlainTime.from(v1 as string);
95
- const time2 = Temporal.PlainTime.from(v2 as string);
96
- const duration = time1.since(time2);
97
- return duration.toString();
98
- }
99
-
100
- // DATE + TIMESPAN → DATE
101
- if (operator === '+' && isV1Date && isV2Timespan) {
102
- const date = Temporal.PlainDate.from(v1 as string);
103
- const duration = Temporal.Duration.from(v2 as string);
104
- const result = date.add(duration);
105
- return result.toString();
106
- }
107
-
108
- // TIMESPAN + DATE → DATE (commutative)
109
- if (operator === '+' && isV1Timespan && isV2Date) {
110
- const duration = Temporal.Duration.from(v1 as string);
111
- const date = Temporal.PlainDate.from(v2 as string);
112
- const result = date.add(duration);
113
- return result.toString();
114
- }
115
-
116
- // DATE - TIMESPAN → DATE
117
- if (operator === '-' && isV1Date && isV2Timespan) {
118
- const date = Temporal.PlainDate.from(v1 as string);
119
- const duration = Temporal.Duration.from(v2 as string);
120
- const result = date.subtract(duration);
121
- return result.toString();
122
- }
123
-
124
- // DATETIME + TIMESPAN → DATETIME
125
- if (operator === '+' && isV1DateTime && isV2Timespan) {
126
- const dt = Temporal.PlainDateTime.from(v1 as string);
127
- const duration = Temporal.Duration.from(v2 as string);
128
- const result = dt.add(duration);
129
- return result.toString();
130
- }
131
-
132
- // TIMESPAN + DATETIME → DATETIME (commutative)
133
- if (operator === '+' && isV1Timespan && isV2DateTime) {
134
- const duration = Temporal.Duration.from(v1 as string);
135
- const dt = Temporal.PlainDateTime.from(v2 as string);
136
- const result = dt.add(duration);
137
- return result.toString();
138
- }
139
-
140
- // DATETIME - TIMESPAN → DATETIME
141
- if (operator === '-' && isV1DateTime && isV2Timespan) {
142
- const dt = Temporal.PlainDateTime.from(v1 as string);
143
- const duration = Temporal.Duration.from(v2 as string);
144
- const result = dt.subtract(duration);
145
- return result.toString();
146
- }
147
-
148
- // TIME + TIMESPAN → TIME
149
- if (operator === '+' && isV1Time && isV2Timespan) {
150
- const time = Temporal.PlainTime.from(v1 as string);
151
- const duration = Temporal.Duration.from(v2 as string);
152
- const result = time.add(duration);
153
- return result.toString();
154
- }
155
-
156
- // TIMESPAN + TIME → TIME (commutative)
157
- if (operator === '+' && isV1Timespan && isV2Time) {
158
- const duration = Temporal.Duration.from(v1 as string);
159
- const time = Temporal.PlainTime.from(v2 as string);
160
- const result = time.add(duration);
161
- return result.toString();
162
- }
163
-
164
- // TIME - TIMESPAN → TIME
165
- if (operator === '-' && isV1Time && isV2Timespan) {
166
- const time = Temporal.PlainTime.from(v1 as string);
167
- const duration = Temporal.Duration.from(v2 as string);
168
- const result = time.subtract(duration);
169
- return result.toString();
170
- }
171
-
172
- // TIMESPAN + TIMESPAN → TIMESPAN
173
- if (operator === '+' && isV1Timespan && isV2Timespan) {
174
- const d1 = Temporal.Duration.from(v1 as string);
175
- const d2 = Temporal.Duration.from(v2 as string);
176
- const result = d1.add(d2);
177
- return result.toString();
178
- }
179
-
180
- // TIMESPAN - TIMESPAN → TIMESPAN
181
- if (operator === '-' && isV1Timespan && isV2Timespan) {
182
- const d1 = Temporal.Duration.from(v1 as string);
183
- const d2 = Temporal.Duration.from(v2 as string);
184
- const result = d1.subtract(d2);
185
- return result.toString();
186
- }
187
-
188
- // TIMESPAN * NUMBER → TIMESPAN
189
- if (operator === '*' && isV1Timespan && typeof v2 === 'number') {
190
- const duration = Temporal.Duration.from(v1 as string);
191
- // Convert to seconds, multiply, convert back
192
- const totalSeconds = duration.total({ unit: 'seconds' });
193
- const newDuration = Temporal.Duration.from({ seconds: totalSeconds * v2 });
194
- return newDuration.toString();
195
- }
196
-
197
- // NUMBER * TIMESPAN → TIMESPAN (commutative)
198
- if (operator === '*' && typeof v1 === 'number' && isV2Timespan) {
199
- const duration = Temporal.Duration.from(v2 as string);
200
- const totalSeconds = duration.total({ unit: 'seconds' });
201
- const newDuration = Temporal.Duration.from({ seconds: totalSeconds * v1 });
202
- return newDuration.toString();
203
- }
204
-
205
- // TIMESPAN / NUMBER → TIMESPAN
206
- if (operator === '/' && isV1Timespan && typeof v2 === 'number') {
207
- if (v2 === 0) return null;
208
- const duration = Temporal.Duration.from(v1 as string);
209
- const totalSeconds = duration.total({ unit: 'seconds' });
210
- const newDuration = Temporal.Duration.from({ seconds: totalSeconds / v2 });
211
- return newDuration.toString();
212
- }
213
-
214
- // TIMESPAN / TIMESPAN → NUMBER (ratio)
215
- if (operator === '/' && isV1Timespan && isV2Timespan) {
216
- const d1 = Temporal.Duration.from(v1 as string);
217
- const d2 = Temporal.Duration.from(v2 as string);
218
- const total1 = d1.total({ unit: 'seconds' });
219
- const total2 = d2.total({ unit: 'seconds' });
220
- if (total2 === 0) return null;
221
- return total1 / total2;
222
- }
223
-
224
- // If we get here, the operation is not supported
225
- throw new QuereusError(
226
- `Unsupported temporal operation`,
227
- StatusCode.UNSUPPORTED
228
- );
229
- } catch (e) {
230
- // Invalid temporal operation - return null
231
- if (e instanceof QuereusError) throw e;
232
- return null;
233
- }
234
- }
235
-
236
- /**
237
- * Emit temporal arithmetic operations
238
- * Handles operations between temporal types (DATE, TIME, DATETIME, TIMESPAN)
239
- */
240
- export function emitTemporalArithmetic(plan: BinaryOpNode, ctx: EmissionContext): Instruction {
241
- const operator = plan.expression.operator;
242
-
243
- function run(ctx: RuntimeContext, v1: SqlValue, v2: SqlValue): SqlValue {
244
- return tryTemporalArithmetic(operator, v1, v2) ?? null;
245
- }
246
-
247
- const leftExpr = emitPlanNode(plan.left, ctx);
248
- const rightExpr = emitPlanNode(plan.right, ctx);
249
-
250
- return {
251
- params: [leftExpr, rightExpr],
252
- run: run as InstructionRun,
253
- note: `${operator}(temporal)`
254
- };
255
- }
256
-
257
- /**
258
- * Attempts to perform temporal comparison. Returns undefined if not a temporal comparison.
259
- * This allows the caller to fall back to standard comparison logic.
260
- *
261
- * Temporal types that need special comparison logic (beyond lexicographic string comparison):
262
- * - TIMESPAN: Durations need to be compared semantically, not lexicographically
263
- * (e.g., "PT30M" > "PT1H" lexicographically, but 30 minutes < 1 hour semantically)
264
- *
265
- * Note: DATE, TIME, and DATETIME use ISO 8601 format which compares correctly lexicographically,
266
- * so they don't need special handling here.
267
- *
268
- * @param operator The comparison operator (=, !=, <, <=, >, >=)
269
- * @param v1 First value
270
- * @param v2 Second value
271
- * @returns Comparison result (boolean) if temporal comparison, undefined otherwise
272
- */
273
- export function tryTemporalComparison(operator: string, v1: SqlValue, v2: SqlValue): SqlValue | undefined {
274
- // Check if both values are timespans
275
- // Timespans are the only temporal type that needs special comparison logic
276
- // because ISO 8601 duration strings don't compare correctly lexicographically
277
- if (!isTimespanValue(v1) || !isTimespanValue(v2)) {
278
- return undefined;
279
- }
280
-
281
- // Use the TIMESPAN_TYPE's compare function
282
- const cmp = TIMESPAN_TYPE.compare!(v1, v2);
283
-
284
- switch (operator) {
285
- case '=':
286
- case '==':
287
- return cmp === 0;
288
- case '!=':
289
- case '<>':
290
- return cmp !== 0;
291
- case '<':
292
- return cmp < 0;
293
- case '<=':
294
- return cmp <= 0;
295
- case '>':
296
- return cmp > 0;
297
- case '>=':
298
- return cmp >= 0;
299
- default:
300
- return undefined;
301
- }
302
- }
@@ -1,205 +0,0 @@
1
- import type { EmissionContext } from '../emission-context.js';
2
- import type { TransactionNode } from '../../planner/nodes/transaction-node.js';
3
- import type { Instruction, RuntimeContext, InstructionRun } from '../types.js';
4
- import type { SqlValue } from '../../common/types.js';
5
- import { createLogger } from '../../common/logger.js';
6
- import { quereusError } from '../../common/errors.js';
7
- import { StatusCode } from '../../common/types.js';
8
-
9
- const log = createLogger('runtime:emit:transaction');
10
-
11
- // Simple hash function to convert savepoint names to indices
12
- function hashSavepointName(name: string): number {
13
- let hash = 0;
14
- for (let i = 0; i < name.length; i++) {
15
- const char = name.charCodeAt(i);
16
- hash = ((hash << 5) - hash) + char;
17
- hash = hash & hash; // Convert to 32-bit integer
18
- }
19
- return Math.abs(hash);
20
- }
21
-
22
- export function emitTransaction(plan: TransactionNode, _ctx: EmissionContext): Instruction {
23
- // Select the operation function at emit time
24
- let run: (ctx: RuntimeContext) => Promise<SqlValue | undefined>;
25
- let note: string;
26
-
27
- switch (plan.operation) {
28
- case 'begin': {
29
- run = async (rctx: RuntimeContext) => {
30
- const connections = rctx.db.getAllConnections();
31
- log(`BEGIN: Found ${connections.length} active connections`);
32
-
33
- for (const connection of connections) {
34
- try {
35
- await connection.begin();
36
- log(`BEGIN: Successfully called on connection ${connection.connectionId}`);
37
- } catch (error) {
38
- log(`BEGIN: Error on connection ${connection.connectionId}: %O`, error);
39
- throw error;
40
- }
41
- }
42
- // Reflect explicit transaction state in Database
43
- rctx.db.markExplicitTransactionStart();
44
- // Reset any prior change tracking at the start of an explicit transaction
45
- rctx.db._clearChangeLog();
46
- return null;
47
- };
48
- note = 'BEGIN';
49
- break;
50
- }
51
- case 'commit': {
52
- run = async (rctx: RuntimeContext) => {
53
- // Snapshot connections before evaluating deferred constraints
54
- // (constraint evaluation may open additional connections that shouldn't be committed)
55
- const connectionsToCommit = rctx.db.getAllConnections();
56
- log(`COMMIT: Found ${connectionsToCommit.length} active connections`);
57
-
58
- try {
59
- // Evaluate global assertions and deferred row-level constraints BEFORE committing connections.
60
- await rctx.db.runGlobalAssertions();
61
- await rctx.db.runDeferredRowConstraints();
62
-
63
- // Mark coordinated commit to relax layer validation for sibling layers
64
- rctx.db._beginCoordinatedCommit();
65
- try {
66
- // Commit sequentially to avoid race conditions with layer promotion
67
- for (const connection of connectionsToCommit) {
68
- try {
69
- await connection.commit();
70
- log(`COMMIT: Successfully called on connection ${connection.connectionId}`);
71
- } catch (error) {
72
- log(`COMMIT: Error on connection ${connection.connectionId}: %O`, error);
73
- throw error;
74
- }
75
- }
76
- } finally {
77
- rctx.db._endCoordinatedCommit();
78
- }
79
- } catch (e) {
80
- // If assertions fail (or a commit throws), rollback all connections
81
- await Promise.allSettled(rctx.db.getAllConnections().map(c => c.rollback()));
82
- throw e;
83
- } finally {
84
- // Always mark end of explicit transaction and clear change tracking
85
- rctx.db.markExplicitTransactionEnd();
86
- rctx.db._clearChangeLog();
87
- }
88
- return null;
89
- };
90
- note = 'COMMIT';
91
- break;
92
- }
93
-
94
- case 'rollback': {
95
- if (plan.savepoint) {
96
- const savepointIndex = hashSavepointName(plan.savepoint); // Convert name to index
97
- run = async (rctx: RuntimeContext) => {
98
- const connections = rctx.db.getAllConnections();
99
- log(`ROLLBACK TO SAVEPOINT ${savepointIndex}: Found ${connections.length} active connections`);
100
-
101
- for (const connection of connections) {
102
- try {
103
- await connection.rollbackToSavepoint(savepointIndex);
104
- log(`ROLLBACK TO SAVEPOINT ${savepointIndex}: Successfully called on connection ${connection.connectionId}`);
105
- } catch (error) {
106
- log(`ROLLBACK TO SAVEPOINT ${savepointIndex}: Error on connection ${connection.connectionId}: %O`, error);
107
- throw error;
108
- }
109
- }
110
- // Discard top change layer
111
- rctx.db._rollbackSavepointLayer();
112
- return null;
113
- };
114
- note = `ROLLBACK TO SAVEPOINT ${plan.savepoint}`;
115
- } else {
116
- run = async (rctx: RuntimeContext) => {
117
- const connections = rctx.db.getAllConnections();
118
- log(`ROLLBACK: Found ${connections.length} active connections`);
119
-
120
- for (const connection of connections) {
121
- try {
122
- await connection.rollback();
123
- log(`ROLLBACK: Successfully called on connection ${connection.connectionId}`);
124
- } catch (error) {
125
- log(`ROLLBACK: Error on connection ${connection.connectionId}: %O`, error);
126
- throw error;
127
- }
128
- }
129
- // Reflect explicit transaction end and clear change tracking
130
- rctx.db.markExplicitTransactionEnd();
131
- rctx.db._clearChangeLog();
132
- return null;
133
- };
134
- note = 'ROLLBACK';
135
- }
136
- break;
137
- }
138
-
139
- case 'savepoint': {
140
- if (!plan.savepoint) {
141
- quereusError('Savepoint name is required for SAVEPOINT operation', StatusCode.MISUSE);
142
- }
143
- const savepointIndex = hashSavepointName(plan.savepoint); // Convert name to index
144
- run = async (rctx: RuntimeContext) => {
145
- const connections = rctx.db.getAllConnections();
146
- log(`SAVEPOINT ${savepointIndex}: Found ${connections.length} active connections`);
147
-
148
- for (const connection of connections) {
149
- try {
150
- await connection.createSavepoint(savepointIndex);
151
- log(`SAVEPOINT ${savepointIndex}: Successfully called on connection ${connection.connectionId}`);
152
- } catch (error) {
153
- log(`SAVEPOINT ${savepointIndex}: Error on connection ${connection.connectionId}: %O`, error);
154
- throw error;
155
- }
156
- }
157
- // Mark database as in explicit transaction (savepoints require explicit transaction context)
158
- rctx.db.markExplicitTransactionStart();
159
- // Track change layer
160
- rctx.db._beginSavepointLayer();
161
- return null;
162
- };
163
- note = `SAVEPOINT ${plan.savepoint}`;
164
- break;
165
- }
166
-
167
- case 'release': {
168
- if (!plan.savepoint) {
169
- quereusError('Savepoint name is required for RELEASE operation', StatusCode.MISUSE);
170
- }
171
- const releaseSavepointIndex = hashSavepointName(plan.savepoint); // Convert name to index
172
- run = async (rctx: RuntimeContext) => {
173
- const connections = rctx.db.getAllConnections();
174
- log(`RELEASE SAVEPOINT ${releaseSavepointIndex}: Found ${connections.length} active connections`);
175
-
176
- for (const connection of connections) {
177
- try {
178
- await connection.releaseSavepoint(releaseSavepointIndex);
179
- log(`RELEASE SAVEPOINT ${releaseSavepointIndex}: Successfully called on connection ${connection.connectionId}`);
180
- } catch (error) {
181
- log(`RELEASE SAVEPOINT ${releaseSavepointIndex}: Error on connection ${connection.connectionId}: %O`, error);
182
- throw error;
183
- }
184
- }
185
- // Merge top change layer into below
186
- rctx.db._releaseSavepointLayer();
187
- return null;
188
- };
189
- note = `RELEASE SAVEPOINT ${plan.savepoint}`;
190
- break;
191
- }
192
-
193
- default:
194
- quereusError(
195
- `Unsupported transaction operation: ${plan.operation}`,
196
- StatusCode.UNSUPPORTED
197
- );
198
- }
199
-
200
- return {
201
- params: [],
202
- run: run as InstructionRun,
203
- note
204
- };
205
- }