@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,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
- }