@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,162 +0,0 @@
1
- /**
2
- * Rule: Aggregate Streaming
3
- *
4
- * Required Characteristics:
5
- * - Node must support aggregation operations (AggregationCapable interface)
6
- * - Node must be relational (produces rows)
7
- * - Node must be read-only (no side effects for streaming)
8
- *
9
- * Applied When:
10
- * - Logical aggregate node needs physical streaming implementation
11
- * - Source data can be processed incrementally
12
- *
13
- * Benefits: Enables streaming aggregation with proper grouping order, memory efficient processing
14
- */
15
-
16
- import { createLogger } from '../../../common/logger.js';
17
- import type { PlanNode, ScalarPlanNode, Attribute } from '../../nodes/plan-node.js';
18
- import type { OptContext } from '../../framework/context.js';
19
- import { StreamAggregateNode } from '../../nodes/stream-aggregate.js';
20
- import { SortNode } from '../../nodes/sort.js';
21
- import {
22
- PlanNodeCharacteristics,
23
- CapabilityDetectors,
24
- type AggregationCapable
25
- } from '../../framework/characteristics.js';
26
-
27
- const log = createLogger('optimizer:rule:aggregate-streaming');
28
-
29
- export function ruleAggregateStreaming(node: PlanNode, _context: OptContext): PlanNode | null {
30
- // Guard: node must support aggregation operations
31
- if (!CapabilityDetectors.isAggregating(node)) {
32
- return null;
33
- }
34
-
35
- log('Applying aggregate streaming rule to node %s', node.id);
36
-
37
- // Get aggregation characteristics
38
- const aggregateNode = node as AggregationCapable;
39
- const groupingKeys = aggregateNode.getGroupingKeys();
40
- const aggregateExpressions = aggregateNode.getAggregateExpressions();
41
-
42
- // Check if we can stream the aggregation over the source
43
- const source = aggregateNode.getSource();
44
-
45
- // Check if streaming aggregation is beneficial
46
- if (!aggregateNode.canStreamAggregate()) {
47
- log('Node cannot use streaming aggregation, skipping');
48
- return null;
49
- }
50
-
51
- if (groupingKeys.length > 0) {
52
- // Need to ensure ordering for streaming aggregate
53
- // Check if source already provides the required ordering
54
- const sourceOrdering = PlanNodeCharacteristics.getOrdering(source);
55
- const needsSort = !isOrderedForGrouping(sourceOrdering, groupingKeys);
56
-
57
- let sortedSource = source;
58
- if (needsSort) {
59
- // Insert sort to ensure proper grouping order
60
- const sortKeys = groupingKeys.map(expr => ({
61
- expression: expr,
62
- direction: 'asc' as const,
63
- nulls: undefined
64
- }));
65
-
66
- sortedSource = new SortNode(node.scope, source, sortKeys);
67
- log('Inserted sort for grouping keys');
68
- } else {
69
- log('Source already provides required ordering for streaming');
70
- }
71
-
72
- // Create combined attributes preserving attribute IDs
73
- const finalAttrs = combineAttributes(node.getAttributes(), source.getAttributes());
74
-
75
- // Convert aggregate expressions to match StreamAggregateNode interface
76
- const streamAggregates = aggregateExpressions.map(agg => ({
77
- expression: agg.expr,
78
- alias: agg.alias
79
- }));
80
-
81
- const result = new StreamAggregateNode(
82
- node.scope,
83
- sortedSource,
84
- groupingKeys,
85
- streamAggregates,
86
- undefined, // estimatedCostOverride
87
- finalAttrs
88
- );
89
-
90
- log('Transformed aggregation to StreamAggregateNode with %s', needsSort ? 'sort' : 'existing order');
91
- return result;
92
- } else {
93
- // No GROUP BY - can stream aggregate without sorting
94
- const finalAttrs = combineAttributes(node.getAttributes(), source.getAttributes());
95
-
96
- // Convert aggregate expressions to match StreamAggregateNode interface
97
- const streamAggregates = aggregateExpressions.map(agg => ({
98
- expression: agg.expr,
99
- alias: agg.alias
100
- }));
101
-
102
- const result = new StreamAggregateNode(
103
- node.scope,
104
- source,
105
- groupingKeys,
106
- streamAggregates,
107
- undefined, // estimatedCostOverride
108
- finalAttrs
109
- );
110
-
111
- log('Transformed aggregation to StreamAggregateNode without sort');
112
- return result;
113
- }
114
- }
115
-
116
- /**
117
- * Check if source ordering matches grouping requirements for streaming
118
- */
119
- function isOrderedForGrouping(
120
- _ordering: { column: number; desc: boolean }[] | undefined,
121
- _groupingKeys: readonly ScalarPlanNode[]
122
- ): boolean {
123
- // TODO: Implement proper ordering analysis
124
- // For now, conservatively return false to always sort
125
- // This should check if the ordering covers all grouping keys in order
126
- return false;
127
- }
128
-
129
- /**
130
- * Combine attributes from aggregate and source, avoiding duplicates by name
131
- * This preserves attribute IDs while ensuring unique column names
132
- */
133
- function combineAttributes(aggregateAttrs: readonly Attribute[], sourceAttrs: readonly Attribute[]): Attribute[] {
134
- const seenNames = new Set<string>();
135
- const combinedAttrs: Attribute[] = [];
136
-
137
- // Add aggregate attributes first (GROUP BY + aggregates)
138
- for (const attr of aggregateAttrs) {
139
- combinedAttrs.push(attr);
140
- seenNames.add(attr.name);
141
- }
142
-
143
- // Add source attributes that aren't already present by name
144
- for (const attr of sourceAttrs) {
145
- if (!seenNames.has(attr.name)) {
146
- combinedAttrs.push(attr);
147
- seenNames.add(attr.name);
148
- }
149
- }
150
-
151
- // Final deduplication pass
152
- const uniqueByName = new Set<string>();
153
- const deduped: any[] = [];
154
- for (const attr of combinedAttrs) {
155
- if (!uniqueByName.has(attr.name)) {
156
- deduped.push(attr);
157
- uniqueByName.add(attr.name);
158
- }
159
- }
160
-
161
- return deduped;
162
- }
@@ -1,79 +0,0 @@
1
- /**
2
- * Rule: CTE Optimization
3
- *
4
- * Required Characteristics:
5
- * - Node must support CTE operations (CTECapable interface)
6
- * - Node must be relational (produces rows)
7
- * - Source must be cacheable for materialization
8
- *
9
- * Applied When:
10
- * - CTE would benefit from materialization/caching based on cost analysis
11
- *
12
- * Benefits: Reduces redundant computation for repeated CTE access
13
- */
14
-
15
- import { createLogger } from '../../../common/logger.js';
16
- import type { PlanNode } from '../../nodes/plan-node.js';
17
- import type { OptContext } from '../../framework/context.js';
18
- import { CTENode } from '../../nodes/cte-node.js';
19
- import { CacheNode } from '../../nodes/cache-node.js';
20
- import { CapabilityDetectors, CachingAnalysis, PlanNodeCharacteristics, type CTECapable } from '../../framework/characteristics.js';
21
-
22
- const log = createLogger('optimizer:rule:cte-optimization');
23
-
24
- export function ruleCteOptimization(node: PlanNode, context: OptContext): PlanNode | null {
25
- // Guard: node must support CTE operations
26
- if (!CapabilityDetectors.isCTE(node)) {
27
- return null;
28
- }
29
-
30
- // Get CTE characteristics
31
- const cteNode = node as CTECapable;
32
- log('Optimizing CTE %s', cteNode.cteName);
33
-
34
- // Source is already optimized by framework
35
- const source = cteNode.getCTESource();
36
-
37
- // Heuristics for when to cache CTEs:
38
- // 1. CTE has materialization hint
39
- // 2. CTE is estimated to be reasonably sized
40
- // 3. CTE is not already cached
41
- const sourceSize = PlanNodeCharacteristics.estimatesRows(source);
42
- const isAlreadyCached = CapabilityDetectors.isCached(source) && source.isCached();
43
- const shouldCache = (
44
- cteNode.materializationHint === 'materialized' ||
45
- (sourceSize > 0 && sourceSize < context.tuning.cte.maxSizeForCaching)
46
- ) && !isAlreadyCached;
47
-
48
- if (shouldCache) {
49
- log('Adding cache to CTE %s (estimated rows: %d)', cteNode.cteName, sourceSize);
50
-
51
- // Use characteristics-based cache threshold calculation
52
- const cacheThreshold = Math.min(
53
- CachingAnalysis.getCacheThreshold(source),
54
- context.tuning.cte.maxCacheThreshold
55
- );
56
-
57
- const cachedSource = new CacheNode(
58
- source.scope,
59
- source,
60
- 'memory',
61
- cacheThreshold
62
- );
63
-
64
- // Create new CTE with cached source (specific to CTENode implementation)
65
- const result = new CTENode(
66
- node.scope,
67
- cteNode.cteName,
68
- cteNode.columns,
69
- cachedSource,
70
- cteNode.materializationHint,
71
- cteNode.isRecursive
72
- );
73
-
74
- log('Created CTE with caching');
75
- return result;
76
- }
77
-
78
- return null; // No transformation needed
79
- }
@@ -1,77 +0,0 @@
1
- /**
2
- * Rule: Materialization Advisory
3
- *
4
- * Required Characteristics:
5
- * - Node must be non-relational with relational children
6
- * - Children must be cacheable based on reference analysis
7
- * - Children must benefit from materialization
8
- *
9
- * Applied When:
10
- * - Transition from non-relational to relational subtrees
11
- * - Relational subtrees would benefit from caching
12
- *
13
- * Benefits: Reduces redundant computation for repeated scans and loop contexts
14
- */
15
-
16
- import { createLogger } from '../../../common/logger.js';
17
- import type { PlanNode } from '../../nodes/plan-node.js';
18
- import type { OptContext } from '../../framework/context.js';
19
- import { MaterializationAdvisory } from '../../cache/materialization-advisory.js';
20
- import { PlanNodeCharacteristics } from '../../framework/characteristics.js';
21
-
22
- const log = createLogger('optimizer:rule:materialization-advisory');
23
-
24
- export function ruleMaterializationAdvisory(node: PlanNode, context: OptContext): PlanNode | null {
25
- // Apply this rule when we're at a non-relational node that has relational children
26
- // This captures transitions into relational subtrees (queries, subqueries, CTEs, etc.)
27
-
28
- // Check if this is a non-relational node using characteristics
29
- if (PlanNodeCharacteristics.isRelational(node)) {
30
- // This is already a relational node, don't apply here
31
- return null;
32
- }
33
-
34
- // Check if this node has any relational children
35
- const relations = node.getRelations();
36
- if (relations.length === 0) {
37
- // No relational children, nothing to analyze
38
- return null;
39
- }
40
-
41
- log('Applying materialization advisory at transition from %s to relational children', node.getType().typeClass);
42
-
43
- try {
44
- // Create advisory with current tuning parameters
45
- const advisory = new MaterializationAdvisory(context.tuning);
46
-
47
- // We need to analyze and potentially transform each relational subtree
48
- let anyTransformed = false;
49
-
50
- // For each relational child, analyze and transform its entire subtree
51
- for (const relation of relations) {
52
- const transformedRelation = advisory.analyzeAndTransform(relation);
53
- if (transformedRelation !== relation) {
54
- anyTransformed = true;
55
- log('Transformed relational subtree under %s node', node.getType().typeClass);
56
- }
57
- }
58
-
59
- // If any relational children were transformed, we need to return a transformed node
60
- // However, since we can't easily reconstruct the parent node with new relational children
61
- // (as discussed in the earlier implementation), we'll analyze the entire node
62
- if (anyTransformed) {
63
- // Re-analyze the entire tree rooted at this node
64
- const fullTransform = advisory.analyzeAndTransform(node);
65
- if (fullTransform !== node) {
66
- return fullTransform;
67
- }
68
- }
69
-
70
- return null;
71
-
72
- } catch (error) {
73
- log('Error in materialization advisory: %s', error);
74
- // Don't fail optimization - just skip caching
75
- return null;
76
- }
77
- }
@@ -1,104 +0,0 @@
1
- /**
2
- * Rule: Mutating Subquery Cache Injection
3
- *
4
- * Required Characteristics:
5
- * - Node must be a join operation (JoinCapable interface)
6
- * - Right side must contain operations with side effects (readonly=false)
7
- * - Right side must not already be cached
8
- *
9
- * Applied When:
10
- * - Join has mutating operations on right side that could be executed multiple times
11
- *
12
- * Benefits: Prevents mutating subqueries from being executed multiple times in nested loop joins
13
- */
14
-
15
- import { createLogger } from '../../../common/logger.js';
16
- import { PlanNode } from '../../nodes/plan-node.js';
17
- import type { OptContext } from '../../framework/context.js';
18
- import { CacheNode } from '../../nodes/cache-node.js';
19
- import { JoinNode } from '../../nodes/join-node.js';
20
- import { PlanNodeCharacteristics, CapabilityDetectors, CachingAnalysis, type JoinCapable } from '../../framework/characteristics.js';
21
-
22
- const log = createLogger('optimizer:rule:mutating-subquery-cache');
23
-
24
- export function ruleMutatingSubqueryCache(node: PlanNode, _context: OptContext): PlanNode | null {
25
- // Guard: node must support join operations
26
- if (!CapabilityDetectors.isJoin(node)) {
27
- return null;
28
- }
29
-
30
- log('Checking join operation for side effects on right side');
31
-
32
- // Get join-specific characteristics
33
- const joinNode = node as JoinCapable;
34
- const rightSide = joinNode.getRightSource();
35
-
36
- // Check if right side contains operations with side effects
37
- const hasSideEffects = containsOperationsWithSideEffects(rightSide);
38
- if (!hasSideEffects) {
39
- log('Right side does not contain operations with side effects, skipping');
40
- return null;
41
- }
42
-
43
- // Check if right side is already cached
44
- if (CapabilityDetectors.isCached(rightSide) && rightSide.isCached()) {
45
- log('Right side is already cached, skipping');
46
- return null;
47
- }
48
-
49
- log('Detected operations with side effects on right side of join, injecting cache');
50
-
51
- // Calculate appropriate cache threshold using characteristics
52
- const threshold = CachingAnalysis.getCacheThreshold(rightSide);
53
-
54
- // Wrap the right side with a cache node
55
- const cachedRightSide = new CacheNode(
56
- rightSide.scope,
57
- rightSide,
58
- 'memory',
59
- threshold
60
- );
61
-
62
- // Create new join node with cached right side
63
- // Note: We still need to use specific constructor since we don't have a generic join builder yet
64
- const result = new JoinNode(
65
- node.scope,
66
- joinNode.getLeftSource(),
67
- cachedRightSide,
68
- joinNode.getJoinType(),
69
- joinNode.getJoinCondition(),
70
- // Special case: for JOINs, we also need to check if any of the join conditions
71
- // reference columns from the mutating subquery (via USING clause)
72
- joinNode.getUsingColumns()
73
- );
74
-
75
- log('Successfully injected cache for operations with side effects (threshold: %d)', threshold);
76
- return result;
77
- }
78
-
79
- /**
80
- * Recursively check if a plan tree contains operations with side effects
81
- * Uses characteristics-based analysis instead of hard-coded node type checks
82
- */
83
- function containsOperationsWithSideEffects(node: PlanNode): boolean {
84
- // Check this node's characteristics
85
- if (PlanNodeCharacteristics.hasSideEffects(node)) {
86
- return true;
87
- }
88
-
89
- // Recursively check all children
90
- for (const child of node.getChildren()) {
91
- if (containsOperationsWithSideEffects(child)) {
92
- return true;
93
- }
94
- }
95
-
96
- // Check relational children if available (preserved for compatibility)
97
- for (const relation of node.getRelations()) {
98
- if (containsOperationsWithSideEffects(relation)) {
99
- return true;
100
- }
101
- }
102
-
103
- return false;
104
- }
@@ -1,48 +0,0 @@
1
- import { createLogger } from '../../../common/logger.js';
2
- import type { PlanNode, RelationalPlanNode } from '../../nodes/plan-node.js';
3
- import type { OptContext } from '../../framework/context.js';
4
- import { JoinNode } from '../../nodes/join-node.js';
5
-
6
- const log = createLogger('optimizer:rule:join-greedy-commute');
7
-
8
- /**
9
- * Rule: Join Greedy Commute
10
- *
11
- * Simple heuristic: for INNER joins, prefer the smaller input on the left to drive nested-loop-like cost.
12
- * This uses children estimatedRows (influenced by pushdown/growth) and swaps left/right when beneficial.
13
- *
14
- * Safety:
15
- * - INNER joins are commutative; ColumnReferenceNode uses attribute IDs, so swapping sides preserves semantics.
16
- * - We do NOT change associativity; we only commute immediate children of a JoinNode.
17
- */
18
- export function ruleJoinGreedyCommute(node: PlanNode, _context: OptContext): PlanNode | null {
19
- if (!(node instanceof JoinNode)) return null;
20
- if (node.joinType !== 'inner' && node.joinType !== 'cross') return null;
21
-
22
- const leftRows = node.getLeftSource().estimatedRows ?? Number.POSITIVE_INFINITY;
23
- const rightRows = node.getRightSource().estimatedRows ?? Number.POSITIVE_INFINITY;
24
-
25
- // Prefer known finite estimatedRows; also detect <=1 row driver on either side
26
- const leftIsSingleton = node.getLeftSource().physical.uniqueKeys?.some(k => k.length === 0) === true;
27
- const rightIsSingleton = node.getRightSource().physical.uniqueKeys?.some(k => k.length === 0) === true;
28
-
29
- // If right is strictly better driver (smaller or singleton), swap
30
- const shouldSwap = (rightIsSingleton && !leftIsSingleton) || (!rightIsSingleton && !leftIsSingleton && rightRows < leftRows);
31
- if (!shouldSwap) return null;
32
-
33
- log('Commuting join children to place smaller input on the left (leftRows=%s, rightRows=%s)', String(leftRows), String(rightRows));
34
-
35
- // Swap children; condition stays the same (attribute IDs are stable)
36
- const swapped = new JoinNode(
37
- node.scope,
38
- node.getRightSource() as RelationalPlanNode,
39
- node.getLeftSource() as RelationalPlanNode,
40
- node.getJoinType(),
41
- node.getJoinCondition(),
42
- node.getUsingColumns()
43
- );
44
-
45
- return swapped;
46
- }
47
-
48
-
@@ -1,35 +0,0 @@
1
- import { createLogger } from '../../../common/logger.js';
2
- import type { PlanNode } from '../../nodes/plan-node.js';
3
- import type { OptContext } from '../../framework/context.js';
4
- import { JoinNode } from '../../nodes/join-node.js';
5
- import { BinaryOpNode } from '../../nodes/scalar.js';
6
- import { ColumnReferenceNode } from '../../nodes/reference.js';
7
-
8
- const log = createLogger('optimizer:rule:join-key-inference');
9
-
10
- /**
11
- * Rule: Join Key Inference
12
- *
13
- * Detect simple equi-join predicates (left.col = right.pk) and propagate
14
- * inner/cross join unique keys (already handled by JoinNode.computePhysical),
15
- * with a hook for future FK->PK inference (not implemented here yet).
16
- */
17
- export function ruleJoinKeyInference(node: PlanNode, _context: OptContext): PlanNode | null {
18
- if (!(node instanceof JoinNode)) return null;
19
- if (node.joinType !== 'inner' && node.joinType !== 'cross') return null;
20
-
21
- const cond = node.getJoinCondition();
22
- if (!cond || !(cond instanceof BinaryOpNode)) return null;
23
- if (cond.expression.operator !== '=') return null;
24
-
25
- // Simple left.col = right.col pattern check; placeholder for future FK->PK detection
26
- const leftIsCol = cond.left instanceof ColumnReferenceNode;
27
- const rightIsCol = cond.right instanceof ColumnReferenceNode;
28
- if (!leftIsCol || !rightIsCol) return null;
29
-
30
- log('Detected equi-join predicate; JoinNode.computePhysical will preserve side keys');
31
- // No structural change needed now; computePhysical on JoinNode already preserves side keys
32
- return null;
33
- }
34
-
35
-