@quereus/quereus 0.7.2 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/package.json +3 -3
  2. package/dist/src/common/constants.js.map +0 -1
  3. package/dist/src/common/datatype.js.map +0 -1
  4. package/dist/src/common/errors.js.map +0 -1
  5. package/dist/src/common/json-types.js.map +0 -1
  6. package/dist/src/common/logger.js.map +0 -1
  7. package/dist/src/common/type-inference.js.map +0 -1
  8. package/dist/src/common/types.js.map +0 -1
  9. package/dist/src/core/database-options.js.map +0 -1
  10. package/dist/src/core/database.js.map +0 -1
  11. package/dist/src/core/param.js.map +0 -1
  12. package/dist/src/core/statement.js.map +0 -1
  13. package/dist/src/func/builtins/aggregate.js.map +0 -1
  14. package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
  15. package/dist/src/func/builtins/conversion.js.map +0 -1
  16. package/dist/src/func/builtins/datetime.js.map +0 -1
  17. package/dist/src/func/builtins/explain.js.map +0 -1
  18. package/dist/src/func/builtins/generation.js.map +0 -1
  19. package/dist/src/func/builtins/index.js.map +0 -1
  20. package/dist/src/func/builtins/json-helpers.js.map +0 -1
  21. package/dist/src/func/builtins/json-tvf.js.map +0 -1
  22. package/dist/src/func/builtins/json.js.map +0 -1
  23. package/dist/src/func/builtins/scalar.js.map +0 -1
  24. package/dist/src/func/builtins/schema.js.map +0 -1
  25. package/dist/src/func/builtins/string.js.map +0 -1
  26. package/dist/src/func/builtins/timespan.js.map +0 -1
  27. package/dist/src/func/context.js.map +0 -1
  28. package/dist/src/func/registration.js.map +0 -1
  29. package/dist/src/index.js.map +0 -1
  30. package/dist/src/parser/ast.js.map +0 -1
  31. package/dist/src/parser/index.js.map +0 -1
  32. package/dist/src/parser/lexer.js.map +0 -1
  33. package/dist/src/parser/parser.js.map +0 -1
  34. package/dist/src/parser/utils.js.map +0 -1
  35. package/dist/src/parser/visitor.js.map +0 -1
  36. package/dist/src/planner/analysis/binding-collector.js.map +0 -1
  37. package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
  38. package/dist/src/planner/analysis/const-pass.js.map +0 -1
  39. package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
  40. package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
  41. package/dist/src/planner/building/alter-table.js.map +0 -1
  42. package/dist/src/planner/building/block.js.map +0 -1
  43. package/dist/src/planner/building/constraint-builder.js.map +0 -1
  44. package/dist/src/planner/building/create-assertion.js.map +0 -1
  45. package/dist/src/planner/building/create-view.js.map +0 -1
  46. package/dist/src/planner/building/ddl.js.map +0 -1
  47. package/dist/src/planner/building/declare-schema.js.map +0 -1
  48. package/dist/src/planner/building/delete.js.map +0 -1
  49. package/dist/src/planner/building/drop-assertion.js.map +0 -1
  50. package/dist/src/planner/building/drop-table.js.map +0 -1
  51. package/dist/src/planner/building/drop-view.js.map +0 -1
  52. package/dist/src/planner/building/expression.js.map +0 -1
  53. package/dist/src/planner/building/function-call.js.map +0 -1
  54. package/dist/src/planner/building/insert.js.map +0 -1
  55. package/dist/src/planner/building/pragma.js.map +0 -1
  56. package/dist/src/planner/building/schema-resolution.js.map +0 -1
  57. package/dist/src/planner/building/select-aggregates.js.map +0 -1
  58. package/dist/src/planner/building/select-compound.js.map +0 -1
  59. package/dist/src/planner/building/select-context.js.map +0 -1
  60. package/dist/src/planner/building/select-modifiers.js.map +0 -1
  61. package/dist/src/planner/building/select-projections.js.map +0 -1
  62. package/dist/src/planner/building/select-window.js.map +0 -1
  63. package/dist/src/planner/building/select.js.map +0 -1
  64. package/dist/src/planner/building/table-function.js.map +0 -1
  65. package/dist/src/planner/building/table.js.map +0 -1
  66. package/dist/src/planner/building/transaction.js.map +0 -1
  67. package/dist/src/planner/building/update.js.map +0 -1
  68. package/dist/src/planner/building/with.js.map +0 -1
  69. package/dist/src/planner/cache/correlation-detector.js.map +0 -1
  70. package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
  71. package/dist/src/planner/cache/reference-graph.js.map +0 -1
  72. package/dist/src/planner/cost/index.js.map +0 -1
  73. package/dist/src/planner/debug/logger-utils.js.map +0 -1
  74. package/dist/src/planner/debug.js.map +0 -1
  75. package/dist/src/planner/framework/characteristics.js.map +0 -1
  76. package/dist/src/planner/framework/context.js.map +0 -1
  77. package/dist/src/planner/framework/pass.js.map +0 -1
  78. package/dist/src/planner/framework/physical-utils.js.map +0 -1
  79. package/dist/src/planner/framework/registry.js.map +0 -1
  80. package/dist/src/planner/framework/trace.js.map +0 -1
  81. package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
  82. package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
  83. package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
  84. package/dist/src/planner/nodes/array-index-node.js.map +0 -1
  85. package/dist/src/planner/nodes/block.js.map +0 -1
  86. package/dist/src/planner/nodes/cache-node.js.map +0 -1
  87. package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
  88. package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
  89. package/dist/src/planner/nodes/create-index-node.js.map +0 -1
  90. package/dist/src/planner/nodes/create-table-node.js.map +0 -1
  91. package/dist/src/planner/nodes/create-view-node.js.map +0 -1
  92. package/dist/src/planner/nodes/cte-node.js.map +0 -1
  93. package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
  94. package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
  95. package/dist/src/planner/nodes/delete-node.js.map +0 -1
  96. package/dist/src/planner/nodes/distinct-node.js.map +0 -1
  97. package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
  98. package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
  99. package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
  100. package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
  101. package/dist/src/planner/nodes/filter.js.map +0 -1
  102. package/dist/src/planner/nodes/function.js.map +0 -1
  103. package/dist/src/planner/nodes/insert-node.js.map +0 -1
  104. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
  105. package/dist/src/planner/nodes/join-node.js.map +0 -1
  106. package/dist/src/planner/nodes/limit-offset.js.map +0 -1
  107. package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
  108. package/dist/src/planner/nodes/plan-node.js.map +0 -1
  109. package/dist/src/planner/nodes/pragma.js.map +0 -1
  110. package/dist/src/planner/nodes/project-node.js.map +0 -1
  111. package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
  112. package/dist/src/planner/nodes/reference.js.map +0 -1
  113. package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
  114. package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
  115. package/dist/src/planner/nodes/returning-node.js.map +0 -1
  116. package/dist/src/planner/nodes/scalar.js.map +0 -1
  117. package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
  118. package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
  119. package/dist/src/planner/nodes/single-row.js.map +0 -1
  120. package/dist/src/planner/nodes/sink-node.js.map +0 -1
  121. package/dist/src/planner/nodes/sort.js.map +0 -1
  122. package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
  123. package/dist/src/planner/nodes/subquery.js.map +0 -1
  124. package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
  125. package/dist/src/planner/nodes/table-function-call.js.map +0 -1
  126. package/dist/src/planner/nodes/transaction-node.js.map +0 -1
  127. package/dist/src/planner/nodes/update-node.js.map +0 -1
  128. package/dist/src/planner/nodes/values-node.js.map +0 -1
  129. package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
  130. package/dist/src/planner/nodes/window-function.js.map +0 -1
  131. package/dist/src/planner/nodes/window-node.js.map +0 -1
  132. package/dist/src/planner/optimizer-tuning.js.map +0 -1
  133. package/dist/src/planner/optimizer.js.map +0 -1
  134. package/dist/src/planner/planning-context.js.map +0 -1
  135. package/dist/src/planner/resolve.js.map +0 -1
  136. package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
  137. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
  138. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
  139. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
  140. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
  141. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
  142. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
  143. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
  144. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
  145. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
  146. package/dist/src/planner/scopes/aliased.js.map +0 -1
  147. package/dist/src/planner/scopes/base.js.map +0 -1
  148. package/dist/src/planner/scopes/empty.js.map +0 -1
  149. package/dist/src/planner/scopes/global.js.map +0 -1
  150. package/dist/src/planner/scopes/multi.js.map +0 -1
  151. package/dist/src/planner/scopes/param.js.map +0 -1
  152. package/dist/src/planner/scopes/registered.js.map +0 -1
  153. package/dist/src/planner/scopes/scope.js.map +0 -1
  154. package/dist/src/planner/stats/basic-estimates.js.map +0 -1
  155. package/dist/src/planner/stats/index.js.map +0 -1
  156. package/dist/src/planner/type-utils.js.map +0 -1
  157. package/dist/src/planner/util/key-utils.js.map +0 -1
  158. package/dist/src/planner/validation/determinism-validator.js.map +0 -1
  159. package/dist/src/planner/validation/plan-validator.js.map +0 -1
  160. package/dist/src/runtime/async-util.js.map +0 -1
  161. package/dist/src/runtime/cache/shared-cache.js.map +0 -1
  162. package/dist/src/runtime/context-helpers.js.map +0 -1
  163. package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
  164. package/dist/src/runtime/emission-context.js.map +0 -1
  165. package/dist/src/runtime/emit/add-constraint.js.map +0 -1
  166. package/dist/src/runtime/emit/aggregate.js.map +0 -1
  167. package/dist/src/runtime/emit/array-index.js.map +0 -1
  168. package/dist/src/runtime/emit/between.js.map +0 -1
  169. package/dist/src/runtime/emit/binary.js.map +0 -1
  170. package/dist/src/runtime/emit/block.js.map +0 -1
  171. package/dist/src/runtime/emit/cache.js.map +0 -1
  172. package/dist/src/runtime/emit/case.js.map +0 -1
  173. package/dist/src/runtime/emit/cast.js.map +0 -1
  174. package/dist/src/runtime/emit/collate.js.map +0 -1
  175. package/dist/src/runtime/emit/column-reference.js.map +0 -1
  176. package/dist/src/runtime/emit/constraint-check.js.map +0 -1
  177. package/dist/src/runtime/emit/create-assertion.js.map +0 -1
  178. package/dist/src/runtime/emit/create-index.js.map +0 -1
  179. package/dist/src/runtime/emit/create-table.js.map +0 -1
  180. package/dist/src/runtime/emit/create-view.js.map +0 -1
  181. package/dist/src/runtime/emit/cte-reference.js.map +0 -1
  182. package/dist/src/runtime/emit/cte.js.map +0 -1
  183. package/dist/src/runtime/emit/delete.js.map +0 -1
  184. package/dist/src/runtime/emit/distinct.js.map +0 -1
  185. package/dist/src/runtime/emit/dml-executor.js.map +0 -1
  186. package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
  187. package/dist/src/runtime/emit/drop-table.js.map +0 -1
  188. package/dist/src/runtime/emit/drop-view.js.map +0 -1
  189. package/dist/src/runtime/emit/filter.js.map +0 -1
  190. package/dist/src/runtime/emit/insert.js.map +0 -1
  191. package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
  192. package/dist/src/runtime/emit/join.js.map +0 -1
  193. package/dist/src/runtime/emit/limit-offset.js.map +0 -1
  194. package/dist/src/runtime/emit/literal.js.map +0 -1
  195. package/dist/src/runtime/emit/parameter.js.map +0 -1
  196. package/dist/src/runtime/emit/pragma.js.map +0 -1
  197. package/dist/src/runtime/emit/project.js.map +0 -1
  198. package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
  199. package/dist/src/runtime/emit/remote-query.js.map +0 -1
  200. package/dist/src/runtime/emit/retrieve.js.map +0 -1
  201. package/dist/src/runtime/emit/returning.js.map +0 -1
  202. package/dist/src/runtime/emit/scalar-function.js.map +0 -1
  203. package/dist/src/runtime/emit/scan.js.map +0 -1
  204. package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
  205. package/dist/src/runtime/emit/sequencing.js.map +0 -1
  206. package/dist/src/runtime/emit/set-operation.js.map +0 -1
  207. package/dist/src/runtime/emit/sink.js.map +0 -1
  208. package/dist/src/runtime/emit/sort.js.map +0 -1
  209. package/dist/src/runtime/emit/subquery.js.map +0 -1
  210. package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
  211. package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
  212. package/dist/src/runtime/emit/transaction.js.map +0 -1
  213. package/dist/src/runtime/emit/unary.js.map +0 -1
  214. package/dist/src/runtime/emit/update.js.map +0 -1
  215. package/dist/src/runtime/emit/values.js.map +0 -1
  216. package/dist/src/runtime/emit/window-function.js.map +0 -1
  217. package/dist/src/runtime/emit/window.js.map +0 -1
  218. package/dist/src/runtime/emitters.js.map +0 -1
  219. package/dist/src/runtime/register.js.map +0 -1
  220. package/dist/src/runtime/scheduler.js.map +0 -1
  221. package/dist/src/runtime/types.js.map +0 -1
  222. package/dist/src/runtime/utils.js.map +0 -1
  223. package/dist/src/schema/assertion.js.map +0 -1
  224. package/dist/src/schema/catalog.js.map +0 -1
  225. package/dist/src/schema/change-events.js.map +0 -1
  226. package/dist/src/schema/column.js.map +0 -1
  227. package/dist/src/schema/declared-schema-manager.js.map +0 -1
  228. package/dist/src/schema/function.js.map +0 -1
  229. package/dist/src/schema/manager.js.map +0 -1
  230. package/dist/src/schema/schema-differ.js.map +0 -1
  231. package/dist/src/schema/schema-hasher.js.map +0 -1
  232. package/dist/src/schema/schema.js.map +0 -1
  233. package/dist/src/schema/table.js.map +0 -1
  234. package/dist/src/schema/view.js.map +0 -1
  235. package/dist/src/schema/window-function.js.map +0 -1
  236. package/dist/src/types/builtin-types.js.map +0 -1
  237. package/dist/src/types/index.js.map +0 -1
  238. package/dist/src/types/json-type.js.map +0 -1
  239. package/dist/src/types/logical-type.js.map +0 -1
  240. package/dist/src/types/plugin-interface.js.map +0 -1
  241. package/dist/src/types/registry.js.map +0 -1
  242. package/dist/src/types/temporal-types.js.map +0 -1
  243. package/dist/src/types/validation.js.map +0 -1
  244. package/dist/src/util/affinity.js.map +0 -1
  245. package/dist/src/util/ast-stringify.js.map +0 -1
  246. package/dist/src/util/cached.js.map +0 -1
  247. package/dist/src/util/coercion.js.map +0 -1
  248. package/dist/src/util/comparison.js.map +0 -1
  249. package/dist/src/util/environment.js.map +0 -1
  250. package/dist/src/util/hash.js.map +0 -1
  251. package/dist/src/util/latches.js.map +0 -1
  252. package/dist/src/util/mutation-statement.js.map +0 -1
  253. package/dist/src/util/patterns.js.map +0 -1
  254. package/dist/src/util/plan-formatter.js.map +0 -1
  255. package/dist/src/util/plugin-helper.js.map +0 -1
  256. package/dist/src/util/row-descriptor.js.map +0 -1
  257. package/dist/src/util/serialization.js.map +0 -1
  258. package/dist/src/util/sql-literal.js.map +0 -1
  259. package/dist/src/util/working-table-iterable.js.map +0 -1
  260. package/dist/src/vtab/best-access-plan.js.map +0 -1
  261. package/dist/src/vtab/connection.js.map +0 -1
  262. package/dist/src/vtab/filter-info.js.map +0 -1
  263. package/dist/src/vtab/index-info.js.map +0 -1
  264. package/dist/src/vtab/manifest.js.map +0 -1
  265. package/dist/src/vtab/memory/connection.js.map +0 -1
  266. package/dist/src/vtab/memory/index.js.map +0 -1
  267. package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
  268. package/dist/src/vtab/memory/layer/base.js.map +0 -1
  269. package/dist/src/vtab/memory/layer/connection.js.map +0 -1
  270. package/dist/src/vtab/memory/layer/interface.js.map +0 -1
  271. package/dist/src/vtab/memory/layer/manager.js.map +0 -1
  272. package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
  273. package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
  274. package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
  275. package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
  276. package/dist/src/vtab/memory/module.js.map +0 -1
  277. package/dist/src/vtab/memory/table.js.map +0 -1
  278. package/dist/src/vtab/memory/types.js.map +0 -1
  279. package/dist/src/vtab/memory/utils/logging.js.map +0 -1
  280. package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
  281. package/dist/src/vtab/module.js.map +0 -1
  282. package/dist/src/vtab/table.js.map +0 -1
  283. package/src/common/constants.ts +0 -60
  284. package/src/common/datatype.ts +0 -85
  285. package/src/common/errors.ts +0 -189
  286. package/src/common/json-types.ts +0 -16
  287. package/src/common/logger.ts +0 -97
  288. package/src/common/type-inference.ts +0 -39
  289. package/src/common/types.ts +0 -151
  290. package/src/core/database-options.ts +0 -258
  291. package/src/core/database.ts +0 -1461
  292. package/src/core/param.ts +0 -56
  293. package/src/core/statement.ts +0 -528
  294. package/src/func/builtins/aggregate.ts +0 -269
  295. package/src/func/builtins/builtin-window-functions.ts +0 -166
  296. package/src/func/builtins/conversion.ts +0 -226
  297. package/src/func/builtins/datetime.ts +0 -500
  298. package/src/func/builtins/explain.ts +0 -779
  299. package/src/func/builtins/generation.ts +0 -43
  300. package/src/func/builtins/index.ts +0 -167
  301. package/src/func/builtins/json-helpers.ts +0 -237
  302. package/src/func/builtins/json-tvf.ts +0 -224
  303. package/src/func/builtins/json.ts +0 -588
  304. package/src/func/builtins/scalar.ts +0 -423
  305. package/src/func/builtins/schema.ts +0 -213
  306. package/src/func/builtins/string.ts +0 -306
  307. package/src/func/builtins/timespan.ts +0 -179
  308. package/src/func/context.ts +0 -258
  309. package/src/func/registration.ts +0 -201
  310. package/src/index.ts +0 -172
  311. package/src/parser/ast.ts +0 -581
  312. package/src/parser/index.ts +0 -65
  313. package/src/parser/lexer.ts +0 -806
  314. package/src/parser/parser.ts +0 -3352
  315. package/src/parser/utils.ts +0 -10
  316. package/src/parser/visitor.ts +0 -188
  317. package/src/planner/analysis/README.md +0 -93
  318. package/src/planner/analysis/binding-collector.ts +0 -83
  319. package/src/planner/analysis/const-evaluator.ts +0 -63
  320. package/src/planner/analysis/const-pass.ts +0 -282
  321. package/src/planner/analysis/constraint-extractor.ts +0 -764
  322. package/src/planner/analysis/predicate-normalizer.ts +0 -237
  323. package/src/planner/building/alter-table.ts +0 -49
  324. package/src/planner/building/block.ts +0 -93
  325. package/src/planner/building/constraint-builder.ts +0 -178
  326. package/src/planner/building/create-assertion.ts +0 -7
  327. package/src/planner/building/create-view.ts +0 -29
  328. package/src/planner/building/ddl.ts +0 -24
  329. package/src/planner/building/declare-schema.ts +0 -22
  330. package/src/planner/building/delete.ts +0 -218
  331. package/src/planner/building/drop-assertion.ts +0 -11
  332. package/src/planner/building/drop-table.ts +0 -13
  333. package/src/planner/building/drop-view.ts +0 -19
  334. package/src/planner/building/expression.ts +0 -205
  335. package/src/planner/building/function-call.ts +0 -129
  336. package/src/planner/building/insert.ts +0 -435
  337. package/src/planner/building/pragma.ts +0 -34
  338. package/src/planner/building/schema-resolution.ts +0 -176
  339. package/src/planner/building/select-aggregates.ts +0 -318
  340. package/src/planner/building/select-compound.ts +0 -119
  341. package/src/planner/building/select-context.ts +0 -85
  342. package/src/planner/building/select-modifiers.ts +0 -236
  343. package/src/planner/building/select-projections.ts +0 -177
  344. package/src/planner/building/select-window.ts +0 -259
  345. package/src/planner/building/select.ts +0 -567
  346. package/src/planner/building/table-function.ts +0 -49
  347. package/src/planner/building/table.ts +0 -40
  348. package/src/planner/building/transaction.ts +0 -23
  349. package/src/planner/building/update.ts +0 -331
  350. package/src/planner/building/with.ts +0 -180
  351. package/src/planner/cache/correlation-detector.ts +0 -83
  352. package/src/planner/cache/materialization-advisory.ts +0 -265
  353. package/src/planner/cache/reference-graph.ts +0 -196
  354. package/src/planner/cost/index.ts +0 -169
  355. package/src/planner/debug/logger-utils.ts +0 -68
  356. package/src/planner/debug.ts +0 -480
  357. package/src/planner/framework/README.md +0 -132
  358. package/src/planner/framework/characteristics.ts +0 -503
  359. package/src/planner/framework/context.ts +0 -239
  360. package/src/planner/framework/pass.ts +0 -354
  361. package/src/planner/framework/physical-utils.ts +0 -210
  362. package/src/planner/framework/registry.ts +0 -261
  363. package/src/planner/framework/trace.ts +0 -259
  364. package/src/planner/nodes/add-constraint-node.ts +0 -62
  365. package/src/planner/nodes/aggregate-function.ts +0 -155
  366. package/src/planner/nodes/aggregate-node.ts +0 -267
  367. package/src/planner/nodes/array-index-node.ts +0 -50
  368. package/src/planner/nodes/block.ts +0 -80
  369. package/src/planner/nodes/cache-node.ts +0 -103
  370. package/src/planner/nodes/constraint-check-node.ts +0 -138
  371. package/src/planner/nodes/create-assertion-node.ts +0 -51
  372. package/src/planner/nodes/create-index-node.ts +0 -41
  373. package/src/planner/nodes/create-table-node.ts +0 -35
  374. package/src/planner/nodes/create-view-node.ts +0 -44
  375. package/src/planner/nodes/cte-node.ts +0 -168
  376. package/src/planner/nodes/cte-reference-node.ts +0 -125
  377. package/src/planner/nodes/declarative-schema.ts +0 -221
  378. package/src/planner/nodes/delete-node.ts +0 -102
  379. package/src/planner/nodes/distinct-node.ts +0 -107
  380. package/src/planner/nodes/dml-executor-node.ts +0 -104
  381. package/src/planner/nodes/drop-assertion-node.ts +0 -50
  382. package/src/planner/nodes/drop-table-node.ts +0 -36
  383. package/src/planner/nodes/drop-view-node.ts +0 -37
  384. package/src/planner/nodes/filter.ts +0 -144
  385. package/src/planner/nodes/function.ts +0 -98
  386. package/src/planner/nodes/insert-node.ts +0 -126
  387. package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
  388. package/src/planner/nodes/join-node.ts +0 -336
  389. package/src/planner/nodes/limit-offset.ts +0 -144
  390. package/src/planner/nodes/plan-node-type.ts +0 -95
  391. package/src/planner/nodes/plan-node.ts +0 -503
  392. package/src/planner/nodes/pragma.ts +0 -98
  393. package/src/planner/nodes/project-node.ts +0 -337
  394. package/src/planner/nodes/recursive-cte-node.ts +0 -158
  395. package/src/planner/nodes/reference.ts +0 -334
  396. package/src/planner/nodes/remote-query-node.ts +0 -73
  397. package/src/planner/nodes/retrieve-node.ts +0 -86
  398. package/src/planner/nodes/returning-node.ts +0 -269
  399. package/src/planner/nodes/scalar.ts +0 -772
  400. package/src/planner/nodes/sequencing-node.ts +0 -113
  401. package/src/planner/nodes/set-operation-node.ts +0 -87
  402. package/src/planner/nodes/single-row.ts +0 -85
  403. package/src/planner/nodes/sink-node.ts +0 -61
  404. package/src/planner/nodes/sort.ts +0 -166
  405. package/src/planner/nodes/stream-aggregate.ts +0 -293
  406. package/src/planner/nodes/subquery.ts +0 -268
  407. package/src/planner/nodes/table-access-nodes.ts +0 -323
  408. package/src/planner/nodes/table-function-call.ts +0 -134
  409. package/src/planner/nodes/transaction-node.ts +0 -55
  410. package/src/planner/nodes/update-node.ts +0 -138
  411. package/src/planner/nodes/values-node.ts +0 -244
  412. package/src/planner/nodes/view-reference-node.ts +0 -97
  413. package/src/planner/nodes/window-function.ts +0 -73
  414. package/src/planner/nodes/window-node.ts +0 -199
  415. package/src/planner/optimizer-tuning.ts +0 -105
  416. package/src/planner/optimizer.ts +0 -332
  417. package/src/planner/planning-context.ts +0 -190
  418. package/src/planner/resolve.ts +0 -101
  419. package/src/planner/rules/README.md +0 -96
  420. package/src/planner/rules/access/rule-select-access-path.ts +0 -399
  421. package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
  422. package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
  423. package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
  424. package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
  425. package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
  426. package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
  427. package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
  428. package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
  429. package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
  430. package/src/planner/scopes/aliased.ts +0 -50
  431. package/src/planner/scopes/base.ts +0 -10
  432. package/src/planner/scopes/empty.ts +0 -12
  433. package/src/planner/scopes/global.ts +0 -73
  434. package/src/planner/scopes/multi.ts +0 -40
  435. package/src/planner/scopes/param.ts +0 -95
  436. package/src/planner/scopes/registered.ts +0 -67
  437. package/src/planner/scopes/scope.ts +0 -16
  438. package/src/planner/stats/basic-estimates.ts +0 -107
  439. package/src/planner/stats/index.ts +0 -158
  440. package/src/planner/type-utils.ts +0 -87
  441. package/src/planner/util/key-utils.ts +0 -46
  442. package/src/planner/validation/determinism-validator.ts +0 -104
  443. package/src/planner/validation/plan-validator.ts +0 -335
  444. package/src/runtime/async-util.ts +0 -283
  445. package/src/runtime/cache/shared-cache.ts +0 -169
  446. package/src/runtime/context-helpers.ts +0 -191
  447. package/src/runtime/deferred-constraint-queue.ts +0 -196
  448. package/src/runtime/emission-context.ts +0 -319
  449. package/src/runtime/emit/add-constraint.ts +0 -78
  450. package/src/runtime/emit/aggregate.ts +0 -581
  451. package/src/runtime/emit/array-index.ts +0 -25
  452. package/src/runtime/emit/between.ts +0 -51
  453. package/src/runtime/emit/binary.ts +0 -357
  454. package/src/runtime/emit/block.ts +0 -23
  455. package/src/runtime/emit/cache.ts +0 -64
  456. package/src/runtime/emit/case.ts +0 -87
  457. package/src/runtime/emit/cast.ts +0 -151
  458. package/src/runtime/emit/collate.ts +0 -9
  459. package/src/runtime/emit/column-reference.ts +0 -17
  460. package/src/runtime/emit/constraint-check.ts +0 -290
  461. package/src/runtime/emit/create-assertion.ts +0 -82
  462. package/src/runtime/emit/create-index.ts +0 -15
  463. package/src/runtime/emit/create-table.ts +0 -15
  464. package/src/runtime/emit/create-view.ts +0 -52
  465. package/src/runtime/emit/cte-reference.ts +0 -38
  466. package/src/runtime/emit/cte.ts +0 -39
  467. package/src/runtime/emit/delete.ts +0 -24
  468. package/src/runtime/emit/distinct.ts +0 -40
  469. package/src/runtime/emit/dml-executor.ts +0 -198
  470. package/src/runtime/emit/drop-assertion.ts +0 -45
  471. package/src/runtime/emit/drop-table.ts +0 -27
  472. package/src/runtime/emit/drop-view.ts +0 -49
  473. package/src/runtime/emit/filter.ts +0 -30
  474. package/src/runtime/emit/insert.ts +0 -42
  475. package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
  476. package/src/runtime/emit/join.ts +0 -148
  477. package/src/runtime/emit/limit-offset.ts +0 -73
  478. package/src/runtime/emit/literal.ts +0 -17
  479. package/src/runtime/emit/parameter.ts +0 -59
  480. package/src/runtime/emit/pragma.ts +0 -56
  481. package/src/runtime/emit/project.ts +0 -46
  482. package/src/runtime/emit/recursive-cte.ts +0 -111
  483. package/src/runtime/emit/remote-query.ts +0 -47
  484. package/src/runtime/emit/retrieve.ts +0 -15
  485. package/src/runtime/emit/returning.ts +0 -41
  486. package/src/runtime/emit/scalar-function.ts +0 -69
  487. package/src/runtime/emit/scan.ts +0 -106
  488. package/src/runtime/emit/schema-declarative.ts +0 -215
  489. package/src/runtime/emit/sequencing.ts +0 -24
  490. package/src/runtime/emit/set-operation.ts +0 -141
  491. package/src/runtime/emit/sink.ts +0 -27
  492. package/src/runtime/emit/sort.ts +0 -75
  493. package/src/runtime/emit/subquery.ts +0 -203
  494. package/src/runtime/emit/table-valued-function.ts +0 -106
  495. package/src/runtime/emit/temporal-arithmetic.ts +0 -302
  496. package/src/runtime/emit/transaction.ts +0 -205
  497. package/src/runtime/emit/unary.ts +0 -101
  498. package/src/runtime/emit/update.ts +0 -66
  499. package/src/runtime/emit/values.ts +0 -66
  500. package/src/runtime/emit/window-function.ts +0 -42
  501. package/src/runtime/emit/window.ts +0 -458
  502. package/src/runtime/emitters.ts +0 -183
  503. package/src/runtime/register.ts +0 -150
  504. package/src/runtime/scheduler.ts +0 -488
  505. package/src/runtime/types.ts +0 -242
  506. package/src/runtime/utils.ts +0 -177
  507. package/src/schema/assertion.ts +0 -21
  508. package/src/schema/catalog.ts +0 -269
  509. package/src/schema/change-events.ts +0 -80
  510. package/src/schema/column.ts +0 -51
  511. package/src/schema/declared-schema-manager.ts +0 -82
  512. package/src/schema/function.ts +0 -188
  513. package/src/schema/manager.ts +0 -1034
  514. package/src/schema/schema-differ.ts +0 -214
  515. package/src/schema/schema-hasher.ts +0 -26
  516. package/src/schema/schema.ts +0 -222
  517. package/src/schema/table.ts +0 -409
  518. package/src/schema/view.ts +0 -19
  519. package/src/schema/window-function.ts +0 -56
  520. package/src/types/builtin-types.ts +0 -350
  521. package/src/types/index.ts +0 -17
  522. package/src/types/json-type.ts +0 -152
  523. package/src/types/logical-type.ts +0 -91
  524. package/src/types/plugin-interface.ts +0 -10
  525. package/src/types/registry.ts +0 -204
  526. package/src/types/temporal-types.ts +0 -290
  527. package/src/types/validation.ts +0 -120
  528. package/src/util/affinity.ts +0 -151
  529. package/src/util/ast-stringify.ts +0 -887
  530. package/src/util/cached.ts +0 -25
  531. package/src/util/coercion.ts +0 -113
  532. package/src/util/comparison.ts +0 -510
  533. package/src/util/environment.ts +0 -52
  534. package/src/util/hash.ts +0 -90
  535. package/src/util/latches.ts +0 -47
  536. package/src/util/mutation-statement.ts +0 -135
  537. package/src/util/patterns.ts +0 -56
  538. package/src/util/plan-formatter.ts +0 -48
  539. package/src/util/plugin-helper.ts +0 -110
  540. package/src/util/row-descriptor.ts +0 -105
  541. package/src/util/serialization.ts +0 -47
  542. package/src/util/sql-literal.ts +0 -22
  543. package/src/util/working-table-iterable.ts +0 -38
  544. package/src/vtab/best-access-plan.ts +0 -244
  545. package/src/vtab/connection.ts +0 -36
  546. package/src/vtab/filter-info.ts +0 -23
  547. package/src/vtab/index-info.ts +0 -84
  548. package/src/vtab/manifest.ts +0 -86
  549. package/src/vtab/memory/connection.ts +0 -73
  550. package/src/vtab/memory/index.ts +0 -191
  551. package/src/vtab/memory/layer/base-cursor.ts +0 -124
  552. package/src/vtab/memory/layer/base.ts +0 -275
  553. package/src/vtab/memory/layer/connection.ts +0 -203
  554. package/src/vtab/memory/layer/interface.ts +0 -47
  555. package/src/vtab/memory/layer/manager.ts +0 -909
  556. package/src/vtab/memory/layer/safe-iterate.ts +0 -49
  557. package/src/vtab/memory/layer/scan-plan.ts +0 -84
  558. package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
  559. package/src/vtab/memory/layer/transaction.ts +0 -229
  560. package/src/vtab/memory/module.ts +0 -667
  561. package/src/vtab/memory/table.ts +0 -251
  562. package/src/vtab/memory/types.ts +0 -23
  563. package/src/vtab/memory/utils/logging.ts +0 -36
  564. package/src/vtab/memory/utils/primary-key.ts +0 -163
  565. package/src/vtab/module.ts +0 -162
  566. package/src/vtab/table.ts +0 -177
@@ -1,95 +0,0 @@
1
- export enum PlanNodeType {
2
- // Logical Nodes (from builder)
3
- Block = 'Block',
4
- TableReference = 'TableReference',
5
- Retrieve = 'Retrieve',
6
- CTEReference = 'CTEReference',
7
- TableSeek = 'TableSeek',
8
- Filter = 'Filter',
9
- Project = 'Project',
10
- Distinct = 'Distinct',
11
- Aggregate = 'Aggregate',
12
- Window = 'Window',
13
- Sort = 'Sort',
14
- LimitOffset = 'LimitOffset',
15
- Join = 'Join',
16
- SetOperation = 'SetOperation',
17
- CTE = 'CTE',
18
- RecursiveCTE = 'RecursiveCTE',
19
- InternalRecursiveCTERef = 'InternalRecursiveCTERef',
20
- In = 'In',
21
- Exists = 'Exists',
22
- Sequencing = 'Sequencing',
23
-
24
- // DML/DDL Nodes
25
- Insert = 'Insert',
26
- Update = 'Update',
27
- UpdateExecutor = 'UpdateExecutor',
28
- Delete = 'Delete',
29
- ConstraintCheck = 'ConstraintCheck',
30
- CreateTable = 'CreateTable',
31
- DropTable = 'DropTable',
32
- CreateIndex = 'CreateIndex',
33
- DropIndex = 'DropIndex',
34
- CreateView = 'CreateView',
35
- DropView = 'DropView',
36
- CreateAssertion = 'CreateAssertion',
37
- DropAssertion = 'DropAssertion',
38
- AlterTable = 'AlterTable',
39
- AddConstraint = 'AddConstraint',
40
-
41
- // Physical Nodes (from optimizer)
42
- SeqScan = 'SeqScan', // Physical sequential scan
43
- IndexScan = 'IndexScan', // Physical index scan
44
- IndexSeek = 'IndexSeek', // Physical index seek
45
- RemoteQuery = 'RemoteQuery', // Physical remote query execution
46
- StreamAggregate = 'StreamAggregate', // Physical ordered aggregate
47
- HashAggregate = 'HashAggregate', // Physical hash aggregate
48
- NestedLoopJoin = 'NestedLoopJoin',
49
- HashJoin = 'HashJoin',
50
- MergeJoin = 'MergeJoin',
51
- Materialize = 'Materialize', // Materialize intermediate results
52
-
53
- // Scalar expression nodes
54
- Literal = 'Literal',
55
- ColumnReference = 'ColumnReference',
56
- ParameterReference = 'ParameterReference',
57
- ArrayIndex = 'ArrayIndex',
58
- UnaryOp = 'UnaryOp',
59
- BinaryOp = 'BinaryOp',
60
- CaseExpr = 'CaseExpr',
61
- Cast = 'Cast',
62
- Collate = 'Collate',
63
- ScalarFunctionCall = 'ScalarFunctionCall',
64
- WindowFunctionCall = 'WindowFunctionCall',
65
- Between = 'Between',
66
- IsNull = 'IsNull',
67
- IsNotNull = 'IsNotNull',
68
- Like = 'Like',
69
- ScalarSubquery = 'ScalarSubquery',
70
- TableFunctionReference = 'TableFunctionReference',
71
-
72
- // Special relational nodes
73
- Values = 'Values',
74
- TableLiteral = "TableLiteral",
75
- SingleRow = 'SingleRow', // For SELECT without FROM
76
- TableFunctionCall = 'TableFunctionCall',
77
-
78
- // Transaction control
79
- Transaction = 'Transaction',
80
- Savepoint = 'Savepoint',
81
-
82
- // Utility
83
- Pragma = 'Pragma',
84
- DeclareSchema = 'DeclareSchema',
85
- DiffSchema = 'DiffSchema',
86
- ApplySchema = 'ApplySchema',
87
- ExplainSchema = 'ExplainSchema',
88
-
89
- // Query execution
90
- Cache = 'Cache',
91
- Sink = 'Sink',
92
-
93
- // RETURNING support
94
- Returning = 'Returning',
95
- }
@@ -1,503 +0,0 @@
1
- import { PlanNodeType } from './plan-node-type.js';
2
- import type { Scope } from '../scopes/scope.js';
3
- import type { BaseType, RelationType, ScalarType } from '../../common/datatype.js';
4
- import type { Expression } from '../../parser/ast.js';
5
- import type { OutputValue, Row } from '../../common/types.js';
6
- import { quereusError } from '../../common/errors.js';
7
-
8
- /**
9
- * Physical properties that execution nodes can provide or require
10
- */
11
- export interface PhysicalProperties {
12
- /** Ordering of rows. Each element is a column index, negative for DESC */
13
- ordering?: { column: number; desc: boolean }[];
14
-
15
- /** Estimated number of rows this node will produce */
16
- estimatedRows?: number;
17
-
18
- /**
19
- * Column sets that are guaranteed unique in the output.
20
- * Unlike logical keys which are schema-defined, these are derived from
21
- * the operation (e.g., DISTINCT creates a unique key on all columns)
22
- */
23
- uniqueKeys?: number[][];
24
-
25
- /**
26
- * Whether this node is read-only (does not mutate external state).
27
- * false = has side effects, true = pure/read-only
28
- */
29
- readonly?: boolean;
30
-
31
- /**
32
- * Whether this node is deterministic - same inputs always produce same outputs.
33
- * Non-deterministic examples: random(), now(), sequence generators
34
- */
35
- deterministic?: boolean;
36
-
37
- /**
38
- * Whether this node is idempotent - calling twice in same transaction
39
- * leaves state as if called once. Only meaningful for non-readonly nodes.
40
- * Examples: INSERT with IGNORE, UPDATE with same values
41
- */
42
- idempotent?: boolean;
43
-
44
- /**
45
- * Whether this node directly produces a constant result (deterministic, readonly, and no dependencies).
46
- * If this is true, the node should implement getValue() to return the constant value.
47
- */
48
- constant?: boolean;
49
- }
50
-
51
- // Derived properties (computed, not stored):
52
- // functional = deterministic && readonly (safe for constant folding)
53
- // sideEffects = !readonly (mutates external state)
54
-
55
- /**
56
- * Default physical properties for plan nodes
57
- */
58
- export const DEFAULT_PHYSICAL: PhysicalProperties = {
59
- deterministic: true,
60
- readonly: true,
61
- idempotent: true, // Default true for readonly nodes
62
- constant: false,
63
- } as const;
64
-
65
- /**
66
- * Represents a column with a unique identifier that persists across plan transformations
67
- */
68
- export interface Attribute {
69
- /** Globally unique identifier for this column */
70
- id: number;
71
- /** Human-readable name (may not be unique) */
72
- name: string;
73
- /** Data type information */
74
- type: ScalarType;
75
- /** Source relation that originally produced this column */
76
- sourceRelation?: string;
77
- /** Relation name for qualified access (e.g. table name or alias) */
78
- relationName?: string;
79
- }
80
-
81
- /**
82
- * Row descriptor that maps attribute IDs to column indices in a row array
83
- */
84
- export type RowDescriptor = number[]; // attributeId → columnIndex
85
-
86
- /**
87
- * Function that returns a row when called
88
- */
89
- export type RowGetter = () => Row;
90
-
91
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
92
- export type TableDescriptor = {
93
- // Just using the object's identity for now
94
- };
95
-
96
- export type TableGetter = () => AsyncIterable<Row>;
97
-
98
- /**
99
- * Base class for all nodes in the logical query plan.
100
- * PlanNodes are immutable once constructed.
101
- */
102
- export abstract class PlanNode {
103
- private static nextId = 0;
104
- private static nextAttributeId = 0;
105
-
106
- readonly id: string;
107
- abstract readonly nodeType: PlanNodeType;
108
-
109
- /** Present if the node is a physical plan node */
110
- private _physical?: PhysicalProperties;
111
-
112
- constructor(
113
- /** The scope in which this node is planned. */
114
- public readonly scope: Scope,
115
- /** Estimated cost to execute this node itself (excluding its children). */
116
- public readonly estimatedCost = 0.01
117
-
118
- ) {
119
- this.id = `${PlanNode.nextId++}`;
120
- }
121
-
122
- abstract getType(): BaseType;
123
- abstract getChildren(): readonly PlanNode[];
124
-
125
- /**
126
- * Default implementation of getRelations() that filters getChildren()
127
- * Can be overridden for performance if needed
128
- */
129
- getRelations(): readonly RelationalPlanNode[] {
130
- return this.getChildren()
131
- .filter(isRelationalNode);
132
- }
133
-
134
- /**
135
- * Return this node with its children replaced by newChildren.
136
- * MUST keep attribute IDs stable unless the concrete node deliberately produces new columns.
137
- *
138
- * Implementations must:
139
- * 1. Verify arity (throw if length mismatch)
140
- * 2. Return `this` if nothing changed
141
- * 3. Otherwise construct a new instance copying all immutable properties
142
- */
143
- abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
144
-
145
- /**
146
- * Compute physical property overrides for this node
147
- * Called by the optimizer when converting logical to physical nodes.
148
- * @param children Physical properties of optimized children
149
- */
150
- computePhysical?(children: readonly PhysicalProperties[]): Partial<PhysicalProperties>;
151
-
152
- /**
153
- * Get the attributes (columns) produced by this relational node
154
- */
155
- getAttributes?(): readonly Attribute[];
156
-
157
- /**
158
- * Get map of attribute ID to producing scalar expression (for constant folding)
159
- * Only relational nodes that synthesize columns from expressions need implement this
160
- */
161
- getProducingExprs?(): Map<number, ScalarPlanNode>;
162
-
163
- getTotalCost(): number {
164
- return (this.estimatedCost + this.getChildren().reduce((acc, child) => acc + child.getTotalCost(), 0))
165
- * (this.getRelations().reduce((acc, relation) => acc + relation.getTotalCost(), 0) || 1);
166
- }
167
-
168
- visit(visitor: PlanNodeVisitor): void {
169
- visitor(this);
170
- this.getChildren().forEach(child => child.visit(visitor));
171
- this.getRelations().forEach(relation => relation.visit(visitor));
172
- }
173
-
174
- toString(): string {
175
- return `${this.nodeType} [${this.id}]`;
176
- }
177
-
178
- /**
179
- * Get logical properties for this node.
180
- * Override to provide node-specific logical information.
181
- */
182
- getLogicalAttributes(): Record<string, unknown> {
183
- return {};
184
- }
185
-
186
- /** Infer and cache the physical properties of this node */
187
- get physical(): PhysicalProperties {
188
- if (!this._physical) {
189
- const childrenPhysical = this.getChildren().map(child => child.physical);
190
-
191
- // Get the node-specific overrides
192
- const propsOverride = this.computePhysical?.(childrenPhysical);
193
-
194
- // Derive defaults from children if there are any, else leaf defaults
195
- const defaults = childrenPhysical.length
196
- ? {
197
- deterministic: childrenPhysical.every(child => child.deterministic),
198
- idempotent: childrenPhysical.every(child => child.idempotent),
199
- readonly: childrenPhysical.every(child => child.readonly),
200
- // constant: DON'T INHERIT - only ValueNodes can be directly constant
201
- }
202
- : DEFAULT_PHYSICAL;
203
-
204
- this._physical = { ...defaults, ...propsOverride };
205
- }
206
- return this._physical;
207
- }
208
-
209
- /** Helper to generate unique attribute IDs */
210
- public static nextAttrId(): number {
211
- return PlanNode.nextAttributeId++;
212
- }
213
-
214
- /**
215
- * Check if a node is functional (pure and deterministic), safe for constant folding
216
- */
217
- public static isFunctional(physical: PhysicalProperties): boolean {
218
- return (physical.deterministic !== false) && (physical.readonly !== false);
219
- }
220
-
221
- /**
222
- * Check if a node has side effects (mutates external state)
223
- */
224
- public static hasSideEffects(physical: PhysicalProperties): boolean {
225
- return physical.readonly === false;
226
- }
227
- }
228
-
229
- export type PlanNodeVisitor = (node: PlanNode) => void;
230
-
231
- /**
232
- * Base class for PlanNodes that do not produce a relational or scalar output,
233
- * typically used for DDL or other side-effecting operations.
234
- */
235
- export abstract class VoidNode extends PlanNode {
236
- getType(): BaseType {
237
- // Indicates a non-relational, non-scalar result, e.g., status object or no output.
238
- return { typeClass: 'void' };
239
- }
240
-
241
- getChildren(): readonly PlanNode[] {
242
- return []; // No direct child plan nodes in the execution sense
243
- }
244
-
245
- withChildren(newChildren: readonly PlanNode[]): PlanNode {
246
- if (newChildren.length !== 0) {
247
- quereusError(`${this.nodeType} expects 0 children, got ${newChildren.length}`);
248
- }
249
- return this; // No children, so no change
250
- }
251
-
252
- getRelations(): readonly RelationalPlanNode[] {
253
- return []; // Does not operate on input relations
254
- }
255
- }
256
-
257
- /**
258
- * Base interface for PlanNodes that produce a relation (a set of rows).
259
- * Note: this is an interface that concrete RelationalNode classes will implement.
260
- */
261
- export interface RelationalPlanNode extends PlanNode {
262
- /** Estimated number of rows this node will output. */
263
- readonly estimatedRows?: number;
264
-
265
- getType(): RelationType;
266
-
267
- /**
268
- * Get the attributes (columns) produced by this relational node
269
- * Each attribute has a unique ID that persists across plan transformations
270
- */
271
- getAttributes(): readonly Attribute[];
272
- }
273
-
274
- /**
275
- * Characteristically check if a node is relational (can be cached)
276
- */
277
- export function isRelationalNode(node: PlanNode): node is RelationalPlanNode {
278
- return node.getType().typeClass === 'relation';
279
- }
280
-
281
- /**
282
- * Base interface for PlanNodes that produce a scalar value (Expression Nodes).
283
- * Note: this is an interface that concrete ScalarNode classes will implement.
284
- */
285
- export interface ScalarPlanNode extends PlanNode {
286
- readonly expression: Expression;
287
- getType(): ScalarType;
288
- }
289
-
290
- /**
291
- * Characteristically check if a node is a scalar node
292
- */
293
- export function isScalarNode(node: PlanNode): node is ScalarPlanNode {
294
- return node.getType().typeClass === 'scalar';
295
- }
296
-
297
- // --- Arity-based Base Abstractions (Interfaces, to be implemented by concrete node classes) ---
298
-
299
- /** A relational plan node that has no relational inputs (a leaf in the relational algebra tree).
300
- * Will not have scalar inputs either - this is either TableDee or TableDum, projection can be used to compute columns
301
- */
302
- export interface ZeroAryRelationalNode extends RelationalPlanNode {
303
- // No specific 'inputs' property at this base level, concrete nodes will define sources.
304
- getRelations(): readonly [];
305
- }
306
-
307
- /** A relational plan node that operates on a single relational input. */
308
- export interface UnaryRelationalNode extends RelationalPlanNode {
309
- readonly source: RelationalPlanNode;
310
- getRelations(): readonly [RelationalPlanNode];
311
- }
312
-
313
- /** A relational plan node that operates on two relational inputs. */
314
- export interface BinaryRelationalNode extends RelationalPlanNode {
315
- readonly left: RelationalPlanNode;
316
- readonly right: RelationalPlanNode;
317
- getRelations(): readonly [RelationalPlanNode, RelationalPlanNode];
318
- }
319
-
320
- /** A scalar plan node that has no scalar inputs (a leaf in an expression tree).
321
- * May have relational input(s) e.g. EXISTS, IN, etc.
322
- */
323
- export interface ZeroAryScalarNode extends ScalarPlanNode {
324
- // No specific 'operands' property at this base level.
325
- getChildren(): readonly [];
326
- }
327
-
328
- /** A scalar plan node that operates on a single scalar input. */
329
- export interface UnaryScalarNode extends ScalarPlanNode {
330
- readonly operand: ScalarPlanNode;
331
- getChildren(): readonly [ScalarPlanNode];
332
- }
333
-
334
- /** A scalar plan node that operates on two scalar inputs. */
335
- export interface BinaryScalarNode extends ScalarPlanNode {
336
- readonly left: ScalarPlanNode;
337
- readonly right: ScalarPlanNode;
338
- getChildren(): readonly [ScalarPlanNode, ScalarPlanNode];
339
- }
340
-
341
- /** A scalar plan node that operates on three scalar inputs. */
342
- export interface TernaryScalarNode extends ScalarPlanNode {
343
- getChildren(): readonly [ScalarPlanNode, ScalarPlanNode, ScalarPlanNode];
344
- }
345
-
346
- /** A scalar plan node that operates on N scalar inputs. */
347
- export interface NaryScalarNode extends ScalarPlanNode {
348
- readonly operands: ReadonlyArray<ScalarPlanNode>;
349
- getChildren(): readonly ScalarPlanNode[];
350
- }
351
-
352
- // --- Concrete Arity-Based Base Classes ---
353
-
354
- /**
355
- * Base class for relational nodes with no relational inputs (leaf nodes)
356
- */
357
- export abstract class ZeroAryRelationalBase extends PlanNode implements ZeroAryRelationalNode {
358
- abstract getType(): RelationType;
359
- abstract getAttributes(): readonly Attribute[];
360
-
361
- getChildren(): readonly PlanNode[] {
362
- return [];
363
- }
364
-
365
- getRelations(): readonly [] {
366
- return [];
367
- }
368
-
369
- withChildren(newChildren: readonly PlanNode[]): PlanNode {
370
- if (newChildren.length !== 0) {
371
- quereusError(`${this.nodeType} expects 0 children, got ${newChildren.length}`);
372
- }
373
- return this;
374
- }
375
- }
376
-
377
- /**
378
- * Base class for relational nodes with one relational input
379
- */
380
- export abstract class UnaryRelationalBase extends PlanNode implements UnaryRelationalNode {
381
- abstract readonly source: RelationalPlanNode;
382
- abstract getType(): RelationType;
383
- abstract getAttributes(): readonly Attribute[];
384
-
385
- getChildren(): readonly PlanNode[] {
386
- return [this.source];
387
- }
388
-
389
- getRelations(): readonly [RelationalPlanNode] {
390
- return [this.source];
391
- }
392
-
393
- abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
394
- }
395
-
396
- /**
397
- * Base class for relational nodes with two relational inputs
398
- */
399
- export abstract class BinaryRelationalBase extends PlanNode implements BinaryRelationalNode {
400
- abstract readonly left: RelationalPlanNode;
401
- abstract readonly right: RelationalPlanNode;
402
- abstract getType(): RelationType;
403
- abstract getAttributes(): readonly Attribute[];
404
-
405
- getChildren(): readonly PlanNode[] {
406
- return [this.left, this.right];
407
- }
408
-
409
- getRelations(): readonly [RelationalPlanNode, RelationalPlanNode] {
410
- return [this.left, this.right];
411
- }
412
-
413
- abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
414
- }
415
-
416
- /**
417
- * Base class for scalar nodes with no scalar inputs (leaf expressions)
418
- */
419
- export abstract class ZeroAryScalarBase extends PlanNode implements ZeroAryScalarNode {
420
- abstract readonly expression: Expression;
421
- abstract getType(): ScalarType;
422
-
423
- getChildren(): readonly [] {
424
- return [];
425
- }
426
-
427
- withChildren(newChildren: readonly PlanNode[]): PlanNode {
428
- if (newChildren.length !== 0) {
429
- quereusError(`${this.nodeType} expects 0 children, got ${newChildren.length}`);
430
- }
431
- return this;
432
- }
433
- }
434
-
435
- /**
436
- * Base class for scalar nodes with one scalar input
437
- */
438
- export abstract class UnaryScalarBase extends PlanNode implements UnaryScalarNode {
439
- abstract readonly operand: ScalarPlanNode;
440
- abstract readonly expression: Expression;
441
- abstract getType(): ScalarType;
442
-
443
- getChildren(): readonly [ScalarPlanNode] {
444
- return [this.operand];
445
- }
446
-
447
- abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
448
- }
449
-
450
- /**
451
- * Base class for scalar nodes with two scalar inputs
452
- */
453
- export abstract class BinaryScalarBase extends PlanNode implements BinaryScalarNode {
454
- abstract readonly left: ScalarPlanNode;
455
- abstract readonly right: ScalarPlanNode;
456
- abstract readonly expression: Expression;
457
- abstract getType(): ScalarType;
458
-
459
- getChildren(): readonly [ScalarPlanNode, ScalarPlanNode] {
460
- return [this.left, this.right];
461
- }
462
-
463
- abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
464
- }
465
-
466
- /**
467
- * Base class for scalar nodes with three scalar inputs
468
- */
469
- export abstract class TernaryScalarBase extends PlanNode implements TernaryScalarNode {
470
- abstract readonly expression: Expression;
471
- abstract getType(): ScalarType;
472
- abstract getChildren(): readonly [ScalarPlanNode, ScalarPlanNode, ScalarPlanNode];
473
-
474
- withChildren(newChildren: readonly PlanNode[]): PlanNode {
475
- if (newChildren.length !== 3) {
476
- quereusError(`${this.nodeType} expects 3 children, got ${newChildren.length}`);
477
- }
478
- return this;
479
- }
480
- }
481
-
482
- /**
483
- * Base class for scalar nodes with N scalar inputs
484
- */
485
- export abstract class NaryScalarBase extends PlanNode implements NaryScalarNode {
486
- abstract readonly operands: ReadonlyArray<ScalarPlanNode>;
487
- abstract readonly expression: Expression;
488
- abstract getType(): ScalarType;
489
-
490
- getChildren(): readonly ScalarPlanNode[] {
491
- return this.operands;
492
- }
493
-
494
- abstract withChildren(newChildren: readonly PlanNode[]): PlanNode;
495
- }
496
-
497
- /**
498
- * A node that directly produces a constant result (deterministic, readonly, and no dependencies).
499
- * If the node is constant (literal value), it should implement getValue() to return the constant value.
500
- */
501
- export interface ConstantNode extends PlanNode {
502
- getValue(): OutputValue;
503
- }
@@ -1,98 +0,0 @@
1
- import type { SqlValue } from '../../common/types.js';
2
- import * as AST from '../../parser/ast.js';
3
- import { Attribute, type RelationalPlanNode } from './plan-node.js';
4
- import { PlanNodeType } from './plan-node-type.js';
5
- import { expressionToString } from '../../util/ast-stringify.js';
6
- import { PlanNode } from './plan-node.js';
7
- import { RelationType } from '../../common/datatype.js';
8
- import { Scope } from '../scopes/scope.js';
9
- import { TEXT_TYPE } from '../../types/builtin-types.js';
10
-
11
- export class PragmaPlanNode extends PlanNode implements RelationalPlanNode {
12
- override readonly nodeType = PlanNodeType.Pragma;
13
-
14
- constructor(
15
- scope: Scope,
16
- public readonly pragmaName: string,
17
- public readonly statementAst: AST.PragmaStmt,
18
- public readonly value?: SqlValue
19
- ) {
20
- super(scope, 1); // PRAGMA operations have low cost
21
- }
22
-
23
- getType(): RelationType {
24
- return {
25
- typeClass: 'relation',
26
- isReadOnly: true,
27
- isSet: true,
28
- columns: [
29
- {
30
- name: "name",
31
- type: {
32
- typeClass: 'scalar',
33
- logicalType: TEXT_TYPE,
34
- nullable: false,
35
- isReadOnly: true,
36
- },
37
- generated: true,
38
- },
39
- {
40
- name: "value",
41
- type: {
42
- typeClass: 'scalar',
43
- logicalType: TEXT_TYPE,
44
- nullable: false,
45
- },
46
- generated: true,
47
- },
48
- ],
49
- keys: [[]],
50
- rowConstraints: [],
51
- };
52
- }
53
-
54
- get estimatedRows(): number | undefined {
55
- return 1;
56
- }
57
-
58
- getAttributes(): Attribute[] {
59
- return this.getType().columns.map((column) => (
60
- {
61
- id: PlanNode.nextAttrId(),
62
- name: column.name, // Use the deduplicated name
63
- type: column.type,
64
- sourceRelation: `${this.nodeType}:${this.id}`
65
- } satisfies Attribute
66
- ));
67
- }
68
-
69
- getChildren(): PlanNode[] {
70
- return [];
71
- }
72
-
73
- withChildren(_newChildren: readonly PlanNode[]): PlanNode {
74
- return new PragmaPlanNode(this.scope, this.pragmaName, this.statementAst, this.value);
75
- }
76
-
77
- override toString(): string {
78
- if (this.value !== undefined) {
79
- return `PRAGMA ${this.pragmaName} = ${this.value}`;
80
- }
81
- return `PRAGMA ${this.pragmaName}`;
82
- }
83
-
84
- override getLogicalAttributes(): Record<string, unknown> {
85
- const props: Record<string, unknown> = {
86
- type: 'pragma',
87
- name: this.statementAst.name,
88
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
89
- statement: expressionToString(this.statementAst as any)
90
- };
91
-
92
- if (this.value !== undefined) {
93
- props.value = this.value;
94
- }
95
-
96
- return props;
97
- }
98
- }