@quereus/quereus 0.7.2 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/package.json +3 -3
  2. package/dist/src/common/constants.js.map +0 -1
  3. package/dist/src/common/datatype.js.map +0 -1
  4. package/dist/src/common/errors.js.map +0 -1
  5. package/dist/src/common/json-types.js.map +0 -1
  6. package/dist/src/common/logger.js.map +0 -1
  7. package/dist/src/common/type-inference.js.map +0 -1
  8. package/dist/src/common/types.js.map +0 -1
  9. package/dist/src/core/database-options.js.map +0 -1
  10. package/dist/src/core/database.js.map +0 -1
  11. package/dist/src/core/param.js.map +0 -1
  12. package/dist/src/core/statement.js.map +0 -1
  13. package/dist/src/func/builtins/aggregate.js.map +0 -1
  14. package/dist/src/func/builtins/builtin-window-functions.js.map +0 -1
  15. package/dist/src/func/builtins/conversion.js.map +0 -1
  16. package/dist/src/func/builtins/datetime.js.map +0 -1
  17. package/dist/src/func/builtins/explain.js.map +0 -1
  18. package/dist/src/func/builtins/generation.js.map +0 -1
  19. package/dist/src/func/builtins/index.js.map +0 -1
  20. package/dist/src/func/builtins/json-helpers.js.map +0 -1
  21. package/dist/src/func/builtins/json-tvf.js.map +0 -1
  22. package/dist/src/func/builtins/json.js.map +0 -1
  23. package/dist/src/func/builtins/scalar.js.map +0 -1
  24. package/dist/src/func/builtins/schema.js.map +0 -1
  25. package/dist/src/func/builtins/string.js.map +0 -1
  26. package/dist/src/func/builtins/timespan.js.map +0 -1
  27. package/dist/src/func/context.js.map +0 -1
  28. package/dist/src/func/registration.js.map +0 -1
  29. package/dist/src/index.js.map +0 -1
  30. package/dist/src/parser/ast.js.map +0 -1
  31. package/dist/src/parser/index.js.map +0 -1
  32. package/dist/src/parser/lexer.js.map +0 -1
  33. package/dist/src/parser/parser.js.map +0 -1
  34. package/dist/src/parser/utils.js.map +0 -1
  35. package/dist/src/parser/visitor.js.map +0 -1
  36. package/dist/src/planner/analysis/binding-collector.js.map +0 -1
  37. package/dist/src/planner/analysis/const-evaluator.js.map +0 -1
  38. package/dist/src/planner/analysis/const-pass.js.map +0 -1
  39. package/dist/src/planner/analysis/constraint-extractor.js.map +0 -1
  40. package/dist/src/planner/analysis/predicate-normalizer.js.map +0 -1
  41. package/dist/src/planner/building/alter-table.js.map +0 -1
  42. package/dist/src/planner/building/block.js.map +0 -1
  43. package/dist/src/planner/building/constraint-builder.js.map +0 -1
  44. package/dist/src/planner/building/create-assertion.js.map +0 -1
  45. package/dist/src/planner/building/create-view.js.map +0 -1
  46. package/dist/src/planner/building/ddl.js.map +0 -1
  47. package/dist/src/planner/building/declare-schema.js.map +0 -1
  48. package/dist/src/planner/building/delete.js.map +0 -1
  49. package/dist/src/planner/building/drop-assertion.js.map +0 -1
  50. package/dist/src/planner/building/drop-table.js.map +0 -1
  51. package/dist/src/planner/building/drop-view.js.map +0 -1
  52. package/dist/src/planner/building/expression.js.map +0 -1
  53. package/dist/src/planner/building/function-call.js.map +0 -1
  54. package/dist/src/planner/building/insert.js.map +0 -1
  55. package/dist/src/planner/building/pragma.js.map +0 -1
  56. package/dist/src/planner/building/schema-resolution.js.map +0 -1
  57. package/dist/src/planner/building/select-aggregates.js.map +0 -1
  58. package/dist/src/planner/building/select-compound.js.map +0 -1
  59. package/dist/src/planner/building/select-context.js.map +0 -1
  60. package/dist/src/planner/building/select-modifiers.js.map +0 -1
  61. package/dist/src/planner/building/select-projections.js.map +0 -1
  62. package/dist/src/planner/building/select-window.js.map +0 -1
  63. package/dist/src/planner/building/select.js.map +0 -1
  64. package/dist/src/planner/building/table-function.js.map +0 -1
  65. package/dist/src/planner/building/table.js.map +0 -1
  66. package/dist/src/planner/building/transaction.js.map +0 -1
  67. package/dist/src/planner/building/update.js.map +0 -1
  68. package/dist/src/planner/building/with.js.map +0 -1
  69. package/dist/src/planner/cache/correlation-detector.js.map +0 -1
  70. package/dist/src/planner/cache/materialization-advisory.js.map +0 -1
  71. package/dist/src/planner/cache/reference-graph.js.map +0 -1
  72. package/dist/src/planner/cost/index.js.map +0 -1
  73. package/dist/src/planner/debug/logger-utils.js.map +0 -1
  74. package/dist/src/planner/debug.js.map +0 -1
  75. package/dist/src/planner/framework/characteristics.js.map +0 -1
  76. package/dist/src/planner/framework/context.js.map +0 -1
  77. package/dist/src/planner/framework/pass.js.map +0 -1
  78. package/dist/src/planner/framework/physical-utils.js.map +0 -1
  79. package/dist/src/planner/framework/registry.js.map +0 -1
  80. package/dist/src/planner/framework/trace.js.map +0 -1
  81. package/dist/src/planner/nodes/add-constraint-node.js.map +0 -1
  82. package/dist/src/planner/nodes/aggregate-function.js.map +0 -1
  83. package/dist/src/planner/nodes/aggregate-node.js.map +0 -1
  84. package/dist/src/planner/nodes/array-index-node.js.map +0 -1
  85. package/dist/src/planner/nodes/block.js.map +0 -1
  86. package/dist/src/planner/nodes/cache-node.js.map +0 -1
  87. package/dist/src/planner/nodes/constraint-check-node.js.map +0 -1
  88. package/dist/src/planner/nodes/create-assertion-node.js.map +0 -1
  89. package/dist/src/planner/nodes/create-index-node.js.map +0 -1
  90. package/dist/src/planner/nodes/create-table-node.js.map +0 -1
  91. package/dist/src/planner/nodes/create-view-node.js.map +0 -1
  92. package/dist/src/planner/nodes/cte-node.js.map +0 -1
  93. package/dist/src/planner/nodes/cte-reference-node.js.map +0 -1
  94. package/dist/src/planner/nodes/declarative-schema.js.map +0 -1
  95. package/dist/src/planner/nodes/delete-node.js.map +0 -1
  96. package/dist/src/planner/nodes/distinct-node.js.map +0 -1
  97. package/dist/src/planner/nodes/dml-executor-node.js.map +0 -1
  98. package/dist/src/planner/nodes/drop-assertion-node.js.map +0 -1
  99. package/dist/src/planner/nodes/drop-table-node.js.map +0 -1
  100. package/dist/src/planner/nodes/drop-view-node.js.map +0 -1
  101. package/dist/src/planner/nodes/filter.js.map +0 -1
  102. package/dist/src/planner/nodes/function.js.map +0 -1
  103. package/dist/src/planner/nodes/insert-node.js.map +0 -1
  104. package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +0 -1
  105. package/dist/src/planner/nodes/join-node.js.map +0 -1
  106. package/dist/src/planner/nodes/limit-offset.js.map +0 -1
  107. package/dist/src/planner/nodes/plan-node-type.js.map +0 -1
  108. package/dist/src/planner/nodes/plan-node.js.map +0 -1
  109. package/dist/src/planner/nodes/pragma.js.map +0 -1
  110. package/dist/src/planner/nodes/project-node.js.map +0 -1
  111. package/dist/src/planner/nodes/recursive-cte-node.js.map +0 -1
  112. package/dist/src/planner/nodes/reference.js.map +0 -1
  113. package/dist/src/planner/nodes/remote-query-node.js.map +0 -1
  114. package/dist/src/planner/nodes/retrieve-node.js.map +0 -1
  115. package/dist/src/planner/nodes/returning-node.js.map +0 -1
  116. package/dist/src/planner/nodes/scalar.js.map +0 -1
  117. package/dist/src/planner/nodes/sequencing-node.js.map +0 -1
  118. package/dist/src/planner/nodes/set-operation-node.js.map +0 -1
  119. package/dist/src/planner/nodes/single-row.js.map +0 -1
  120. package/dist/src/planner/nodes/sink-node.js.map +0 -1
  121. package/dist/src/planner/nodes/sort.js.map +0 -1
  122. package/dist/src/planner/nodes/stream-aggregate.js.map +0 -1
  123. package/dist/src/planner/nodes/subquery.js.map +0 -1
  124. package/dist/src/planner/nodes/table-access-nodes.js.map +0 -1
  125. package/dist/src/planner/nodes/table-function-call.js.map +0 -1
  126. package/dist/src/planner/nodes/transaction-node.js.map +0 -1
  127. package/dist/src/planner/nodes/update-node.js.map +0 -1
  128. package/dist/src/planner/nodes/values-node.js.map +0 -1
  129. package/dist/src/planner/nodes/view-reference-node.js.map +0 -1
  130. package/dist/src/planner/nodes/window-function.js.map +0 -1
  131. package/dist/src/planner/nodes/window-node.js.map +0 -1
  132. package/dist/src/planner/optimizer-tuning.js.map +0 -1
  133. package/dist/src/planner/optimizer.js.map +0 -1
  134. package/dist/src/planner/planning-context.js.map +0 -1
  135. package/dist/src/planner/resolve.js.map +0 -1
  136. package/dist/src/planner/rules/access/rule-select-access-path.js.map +0 -1
  137. package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +0 -1
  138. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +0 -1
  139. package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
  140. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +0 -1
  141. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +0 -1
  142. package/dist/src/planner/rules/join/rule-join-key-inference.js.map +0 -1
  143. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +0 -1
  144. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +0 -1
  145. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +0 -1
  146. package/dist/src/planner/scopes/aliased.js.map +0 -1
  147. package/dist/src/planner/scopes/base.js.map +0 -1
  148. package/dist/src/planner/scopes/empty.js.map +0 -1
  149. package/dist/src/planner/scopes/global.js.map +0 -1
  150. package/dist/src/planner/scopes/multi.js.map +0 -1
  151. package/dist/src/planner/scopes/param.js.map +0 -1
  152. package/dist/src/planner/scopes/registered.js.map +0 -1
  153. package/dist/src/planner/scopes/scope.js.map +0 -1
  154. package/dist/src/planner/stats/basic-estimates.js.map +0 -1
  155. package/dist/src/planner/stats/index.js.map +0 -1
  156. package/dist/src/planner/type-utils.js.map +0 -1
  157. package/dist/src/planner/util/key-utils.js.map +0 -1
  158. package/dist/src/planner/validation/determinism-validator.js.map +0 -1
  159. package/dist/src/planner/validation/plan-validator.js.map +0 -1
  160. package/dist/src/runtime/async-util.js.map +0 -1
  161. package/dist/src/runtime/cache/shared-cache.js.map +0 -1
  162. package/dist/src/runtime/context-helpers.js.map +0 -1
  163. package/dist/src/runtime/deferred-constraint-queue.js.map +0 -1
  164. package/dist/src/runtime/emission-context.js.map +0 -1
  165. package/dist/src/runtime/emit/add-constraint.js.map +0 -1
  166. package/dist/src/runtime/emit/aggregate.js.map +0 -1
  167. package/dist/src/runtime/emit/array-index.js.map +0 -1
  168. package/dist/src/runtime/emit/between.js.map +0 -1
  169. package/dist/src/runtime/emit/binary.js.map +0 -1
  170. package/dist/src/runtime/emit/block.js.map +0 -1
  171. package/dist/src/runtime/emit/cache.js.map +0 -1
  172. package/dist/src/runtime/emit/case.js.map +0 -1
  173. package/dist/src/runtime/emit/cast.js.map +0 -1
  174. package/dist/src/runtime/emit/collate.js.map +0 -1
  175. package/dist/src/runtime/emit/column-reference.js.map +0 -1
  176. package/dist/src/runtime/emit/constraint-check.js.map +0 -1
  177. package/dist/src/runtime/emit/create-assertion.js.map +0 -1
  178. package/dist/src/runtime/emit/create-index.js.map +0 -1
  179. package/dist/src/runtime/emit/create-table.js.map +0 -1
  180. package/dist/src/runtime/emit/create-view.js.map +0 -1
  181. package/dist/src/runtime/emit/cte-reference.js.map +0 -1
  182. package/dist/src/runtime/emit/cte.js.map +0 -1
  183. package/dist/src/runtime/emit/delete.js.map +0 -1
  184. package/dist/src/runtime/emit/distinct.js.map +0 -1
  185. package/dist/src/runtime/emit/dml-executor.js.map +0 -1
  186. package/dist/src/runtime/emit/drop-assertion.js.map +0 -1
  187. package/dist/src/runtime/emit/drop-table.js.map +0 -1
  188. package/dist/src/runtime/emit/drop-view.js.map +0 -1
  189. package/dist/src/runtime/emit/filter.js.map +0 -1
  190. package/dist/src/runtime/emit/insert.js.map +0 -1
  191. package/dist/src/runtime/emit/internal-recursive-cte-ref.js.map +0 -1
  192. package/dist/src/runtime/emit/join.js.map +0 -1
  193. package/dist/src/runtime/emit/limit-offset.js.map +0 -1
  194. package/dist/src/runtime/emit/literal.js.map +0 -1
  195. package/dist/src/runtime/emit/parameter.js.map +0 -1
  196. package/dist/src/runtime/emit/pragma.js.map +0 -1
  197. package/dist/src/runtime/emit/project.js.map +0 -1
  198. package/dist/src/runtime/emit/recursive-cte.js.map +0 -1
  199. package/dist/src/runtime/emit/remote-query.js.map +0 -1
  200. package/dist/src/runtime/emit/retrieve.js.map +0 -1
  201. package/dist/src/runtime/emit/returning.js.map +0 -1
  202. package/dist/src/runtime/emit/scalar-function.js.map +0 -1
  203. package/dist/src/runtime/emit/scan.js.map +0 -1
  204. package/dist/src/runtime/emit/schema-declarative.js.map +0 -1
  205. package/dist/src/runtime/emit/sequencing.js.map +0 -1
  206. package/dist/src/runtime/emit/set-operation.js.map +0 -1
  207. package/dist/src/runtime/emit/sink.js.map +0 -1
  208. package/dist/src/runtime/emit/sort.js.map +0 -1
  209. package/dist/src/runtime/emit/subquery.js.map +0 -1
  210. package/dist/src/runtime/emit/table-valued-function.js.map +0 -1
  211. package/dist/src/runtime/emit/temporal-arithmetic.js.map +0 -1
  212. package/dist/src/runtime/emit/transaction.js.map +0 -1
  213. package/dist/src/runtime/emit/unary.js.map +0 -1
  214. package/dist/src/runtime/emit/update.js.map +0 -1
  215. package/dist/src/runtime/emit/values.js.map +0 -1
  216. package/dist/src/runtime/emit/window-function.js.map +0 -1
  217. package/dist/src/runtime/emit/window.js.map +0 -1
  218. package/dist/src/runtime/emitters.js.map +0 -1
  219. package/dist/src/runtime/register.js.map +0 -1
  220. package/dist/src/runtime/scheduler.js.map +0 -1
  221. package/dist/src/runtime/types.js.map +0 -1
  222. package/dist/src/runtime/utils.js.map +0 -1
  223. package/dist/src/schema/assertion.js.map +0 -1
  224. package/dist/src/schema/catalog.js.map +0 -1
  225. package/dist/src/schema/change-events.js.map +0 -1
  226. package/dist/src/schema/column.js.map +0 -1
  227. package/dist/src/schema/declared-schema-manager.js.map +0 -1
  228. package/dist/src/schema/function.js.map +0 -1
  229. package/dist/src/schema/manager.js.map +0 -1
  230. package/dist/src/schema/schema-differ.js.map +0 -1
  231. package/dist/src/schema/schema-hasher.js.map +0 -1
  232. package/dist/src/schema/schema.js.map +0 -1
  233. package/dist/src/schema/table.js.map +0 -1
  234. package/dist/src/schema/view.js.map +0 -1
  235. package/dist/src/schema/window-function.js.map +0 -1
  236. package/dist/src/types/builtin-types.js.map +0 -1
  237. package/dist/src/types/index.js.map +0 -1
  238. package/dist/src/types/json-type.js.map +0 -1
  239. package/dist/src/types/logical-type.js.map +0 -1
  240. package/dist/src/types/plugin-interface.js.map +0 -1
  241. package/dist/src/types/registry.js.map +0 -1
  242. package/dist/src/types/temporal-types.js.map +0 -1
  243. package/dist/src/types/validation.js.map +0 -1
  244. package/dist/src/util/affinity.js.map +0 -1
  245. package/dist/src/util/ast-stringify.js.map +0 -1
  246. package/dist/src/util/cached.js.map +0 -1
  247. package/dist/src/util/coercion.js.map +0 -1
  248. package/dist/src/util/comparison.js.map +0 -1
  249. package/dist/src/util/environment.js.map +0 -1
  250. package/dist/src/util/hash.js.map +0 -1
  251. package/dist/src/util/latches.js.map +0 -1
  252. package/dist/src/util/mutation-statement.js.map +0 -1
  253. package/dist/src/util/patterns.js.map +0 -1
  254. package/dist/src/util/plan-formatter.js.map +0 -1
  255. package/dist/src/util/plugin-helper.js.map +0 -1
  256. package/dist/src/util/row-descriptor.js.map +0 -1
  257. package/dist/src/util/serialization.js.map +0 -1
  258. package/dist/src/util/sql-literal.js.map +0 -1
  259. package/dist/src/util/working-table-iterable.js.map +0 -1
  260. package/dist/src/vtab/best-access-plan.js.map +0 -1
  261. package/dist/src/vtab/connection.js.map +0 -1
  262. package/dist/src/vtab/filter-info.js.map +0 -1
  263. package/dist/src/vtab/index-info.js.map +0 -1
  264. package/dist/src/vtab/manifest.js.map +0 -1
  265. package/dist/src/vtab/memory/connection.js.map +0 -1
  266. package/dist/src/vtab/memory/index.js.map +0 -1
  267. package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
  268. package/dist/src/vtab/memory/layer/base.js.map +0 -1
  269. package/dist/src/vtab/memory/layer/connection.js.map +0 -1
  270. package/dist/src/vtab/memory/layer/interface.js.map +0 -1
  271. package/dist/src/vtab/memory/layer/manager.js.map +0 -1
  272. package/dist/src/vtab/memory/layer/safe-iterate.js.map +0 -1
  273. package/dist/src/vtab/memory/layer/scan-plan.js.map +0 -1
  274. package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
  275. package/dist/src/vtab/memory/layer/transaction.js.map +0 -1
  276. package/dist/src/vtab/memory/module.js.map +0 -1
  277. package/dist/src/vtab/memory/table.js.map +0 -1
  278. package/dist/src/vtab/memory/types.js.map +0 -1
  279. package/dist/src/vtab/memory/utils/logging.js.map +0 -1
  280. package/dist/src/vtab/memory/utils/primary-key.js.map +0 -1
  281. package/dist/src/vtab/module.js.map +0 -1
  282. package/dist/src/vtab/table.js.map +0 -1
  283. package/src/common/constants.ts +0 -60
  284. package/src/common/datatype.ts +0 -85
  285. package/src/common/errors.ts +0 -189
  286. package/src/common/json-types.ts +0 -16
  287. package/src/common/logger.ts +0 -97
  288. package/src/common/type-inference.ts +0 -39
  289. package/src/common/types.ts +0 -151
  290. package/src/core/database-options.ts +0 -258
  291. package/src/core/database.ts +0 -1461
  292. package/src/core/param.ts +0 -56
  293. package/src/core/statement.ts +0 -528
  294. package/src/func/builtins/aggregate.ts +0 -269
  295. package/src/func/builtins/builtin-window-functions.ts +0 -166
  296. package/src/func/builtins/conversion.ts +0 -226
  297. package/src/func/builtins/datetime.ts +0 -500
  298. package/src/func/builtins/explain.ts +0 -779
  299. package/src/func/builtins/generation.ts +0 -43
  300. package/src/func/builtins/index.ts +0 -167
  301. package/src/func/builtins/json-helpers.ts +0 -237
  302. package/src/func/builtins/json-tvf.ts +0 -224
  303. package/src/func/builtins/json.ts +0 -588
  304. package/src/func/builtins/scalar.ts +0 -423
  305. package/src/func/builtins/schema.ts +0 -213
  306. package/src/func/builtins/string.ts +0 -306
  307. package/src/func/builtins/timespan.ts +0 -179
  308. package/src/func/context.ts +0 -258
  309. package/src/func/registration.ts +0 -201
  310. package/src/index.ts +0 -172
  311. package/src/parser/ast.ts +0 -581
  312. package/src/parser/index.ts +0 -65
  313. package/src/parser/lexer.ts +0 -806
  314. package/src/parser/parser.ts +0 -3352
  315. package/src/parser/utils.ts +0 -10
  316. package/src/parser/visitor.ts +0 -188
  317. package/src/planner/analysis/README.md +0 -93
  318. package/src/planner/analysis/binding-collector.ts +0 -83
  319. package/src/planner/analysis/const-evaluator.ts +0 -63
  320. package/src/planner/analysis/const-pass.ts +0 -282
  321. package/src/planner/analysis/constraint-extractor.ts +0 -764
  322. package/src/planner/analysis/predicate-normalizer.ts +0 -237
  323. package/src/planner/building/alter-table.ts +0 -49
  324. package/src/planner/building/block.ts +0 -93
  325. package/src/planner/building/constraint-builder.ts +0 -178
  326. package/src/planner/building/create-assertion.ts +0 -7
  327. package/src/planner/building/create-view.ts +0 -29
  328. package/src/planner/building/ddl.ts +0 -24
  329. package/src/planner/building/declare-schema.ts +0 -22
  330. package/src/planner/building/delete.ts +0 -218
  331. package/src/planner/building/drop-assertion.ts +0 -11
  332. package/src/planner/building/drop-table.ts +0 -13
  333. package/src/planner/building/drop-view.ts +0 -19
  334. package/src/planner/building/expression.ts +0 -205
  335. package/src/planner/building/function-call.ts +0 -129
  336. package/src/planner/building/insert.ts +0 -435
  337. package/src/planner/building/pragma.ts +0 -34
  338. package/src/planner/building/schema-resolution.ts +0 -176
  339. package/src/planner/building/select-aggregates.ts +0 -318
  340. package/src/planner/building/select-compound.ts +0 -119
  341. package/src/planner/building/select-context.ts +0 -85
  342. package/src/planner/building/select-modifiers.ts +0 -236
  343. package/src/planner/building/select-projections.ts +0 -177
  344. package/src/planner/building/select-window.ts +0 -259
  345. package/src/planner/building/select.ts +0 -567
  346. package/src/planner/building/table-function.ts +0 -49
  347. package/src/planner/building/table.ts +0 -40
  348. package/src/planner/building/transaction.ts +0 -23
  349. package/src/planner/building/update.ts +0 -331
  350. package/src/planner/building/with.ts +0 -180
  351. package/src/planner/cache/correlation-detector.ts +0 -83
  352. package/src/planner/cache/materialization-advisory.ts +0 -265
  353. package/src/planner/cache/reference-graph.ts +0 -196
  354. package/src/planner/cost/index.ts +0 -169
  355. package/src/planner/debug/logger-utils.ts +0 -68
  356. package/src/planner/debug.ts +0 -480
  357. package/src/planner/framework/README.md +0 -132
  358. package/src/planner/framework/characteristics.ts +0 -503
  359. package/src/planner/framework/context.ts +0 -239
  360. package/src/planner/framework/pass.ts +0 -354
  361. package/src/planner/framework/physical-utils.ts +0 -210
  362. package/src/planner/framework/registry.ts +0 -261
  363. package/src/planner/framework/trace.ts +0 -259
  364. package/src/planner/nodes/add-constraint-node.ts +0 -62
  365. package/src/planner/nodes/aggregate-function.ts +0 -155
  366. package/src/planner/nodes/aggregate-node.ts +0 -267
  367. package/src/planner/nodes/array-index-node.ts +0 -50
  368. package/src/planner/nodes/block.ts +0 -80
  369. package/src/planner/nodes/cache-node.ts +0 -103
  370. package/src/planner/nodes/constraint-check-node.ts +0 -138
  371. package/src/planner/nodes/create-assertion-node.ts +0 -51
  372. package/src/planner/nodes/create-index-node.ts +0 -41
  373. package/src/planner/nodes/create-table-node.ts +0 -35
  374. package/src/planner/nodes/create-view-node.ts +0 -44
  375. package/src/planner/nodes/cte-node.ts +0 -168
  376. package/src/planner/nodes/cte-reference-node.ts +0 -125
  377. package/src/planner/nodes/declarative-schema.ts +0 -221
  378. package/src/planner/nodes/delete-node.ts +0 -102
  379. package/src/planner/nodes/distinct-node.ts +0 -107
  380. package/src/planner/nodes/dml-executor-node.ts +0 -104
  381. package/src/planner/nodes/drop-assertion-node.ts +0 -50
  382. package/src/planner/nodes/drop-table-node.ts +0 -36
  383. package/src/planner/nodes/drop-view-node.ts +0 -37
  384. package/src/planner/nodes/filter.ts +0 -144
  385. package/src/planner/nodes/function.ts +0 -98
  386. package/src/planner/nodes/insert-node.ts +0 -126
  387. package/src/planner/nodes/internal-recursive-cte-ref-node.ts +0 -61
  388. package/src/planner/nodes/join-node.ts +0 -336
  389. package/src/planner/nodes/limit-offset.ts +0 -144
  390. package/src/planner/nodes/plan-node-type.ts +0 -95
  391. package/src/planner/nodes/plan-node.ts +0 -503
  392. package/src/planner/nodes/pragma.ts +0 -98
  393. package/src/planner/nodes/project-node.ts +0 -337
  394. package/src/planner/nodes/recursive-cte-node.ts +0 -158
  395. package/src/planner/nodes/reference.ts +0 -334
  396. package/src/planner/nodes/remote-query-node.ts +0 -73
  397. package/src/planner/nodes/retrieve-node.ts +0 -86
  398. package/src/planner/nodes/returning-node.ts +0 -269
  399. package/src/planner/nodes/scalar.ts +0 -772
  400. package/src/planner/nodes/sequencing-node.ts +0 -113
  401. package/src/planner/nodes/set-operation-node.ts +0 -87
  402. package/src/planner/nodes/single-row.ts +0 -85
  403. package/src/planner/nodes/sink-node.ts +0 -61
  404. package/src/planner/nodes/sort.ts +0 -166
  405. package/src/planner/nodes/stream-aggregate.ts +0 -293
  406. package/src/planner/nodes/subquery.ts +0 -268
  407. package/src/planner/nodes/table-access-nodes.ts +0 -323
  408. package/src/planner/nodes/table-function-call.ts +0 -134
  409. package/src/planner/nodes/transaction-node.ts +0 -55
  410. package/src/planner/nodes/update-node.ts +0 -138
  411. package/src/planner/nodes/values-node.ts +0 -244
  412. package/src/planner/nodes/view-reference-node.ts +0 -97
  413. package/src/planner/nodes/window-function.ts +0 -73
  414. package/src/planner/nodes/window-node.ts +0 -199
  415. package/src/planner/optimizer-tuning.ts +0 -105
  416. package/src/planner/optimizer.ts +0 -332
  417. package/src/planner/planning-context.ts +0 -190
  418. package/src/planner/resolve.ts +0 -101
  419. package/src/planner/rules/README.md +0 -96
  420. package/src/planner/rules/access/rule-select-access-path.ts +0 -399
  421. package/src/planner/rules/aggregate/rule-aggregate-streaming.ts +0 -162
  422. package/src/planner/rules/cache/rule-cte-optimization.ts +0 -79
  423. package/src/planner/rules/cache/rule-materialization-advisory.ts +0 -77
  424. package/src/planner/rules/cache/rule-mutating-subquery-cache.ts +0 -104
  425. package/src/planner/rules/join/rule-join-greedy-commute.ts +0 -48
  426. package/src/planner/rules/join/rule-join-key-inference.ts +0 -35
  427. package/src/planner/rules/join/rule-quickpick-enumeration.ts +0 -267
  428. package/src/planner/rules/predicate/rule-predicate-pushdown.ts +0 -144
  429. package/src/planner/rules/retrieve/rule-grow-retrieve.ts +0 -337
  430. package/src/planner/scopes/aliased.ts +0 -50
  431. package/src/planner/scopes/base.ts +0 -10
  432. package/src/planner/scopes/empty.ts +0 -12
  433. package/src/planner/scopes/global.ts +0 -73
  434. package/src/planner/scopes/multi.ts +0 -40
  435. package/src/planner/scopes/param.ts +0 -95
  436. package/src/planner/scopes/registered.ts +0 -67
  437. package/src/planner/scopes/scope.ts +0 -16
  438. package/src/planner/stats/basic-estimates.ts +0 -107
  439. package/src/planner/stats/index.ts +0 -158
  440. package/src/planner/type-utils.ts +0 -87
  441. package/src/planner/util/key-utils.ts +0 -46
  442. package/src/planner/validation/determinism-validator.ts +0 -104
  443. package/src/planner/validation/plan-validator.ts +0 -335
  444. package/src/runtime/async-util.ts +0 -283
  445. package/src/runtime/cache/shared-cache.ts +0 -169
  446. package/src/runtime/context-helpers.ts +0 -191
  447. package/src/runtime/deferred-constraint-queue.ts +0 -196
  448. package/src/runtime/emission-context.ts +0 -319
  449. package/src/runtime/emit/add-constraint.ts +0 -78
  450. package/src/runtime/emit/aggregate.ts +0 -581
  451. package/src/runtime/emit/array-index.ts +0 -25
  452. package/src/runtime/emit/between.ts +0 -51
  453. package/src/runtime/emit/binary.ts +0 -357
  454. package/src/runtime/emit/block.ts +0 -23
  455. package/src/runtime/emit/cache.ts +0 -64
  456. package/src/runtime/emit/case.ts +0 -87
  457. package/src/runtime/emit/cast.ts +0 -151
  458. package/src/runtime/emit/collate.ts +0 -9
  459. package/src/runtime/emit/column-reference.ts +0 -17
  460. package/src/runtime/emit/constraint-check.ts +0 -290
  461. package/src/runtime/emit/create-assertion.ts +0 -82
  462. package/src/runtime/emit/create-index.ts +0 -15
  463. package/src/runtime/emit/create-table.ts +0 -15
  464. package/src/runtime/emit/create-view.ts +0 -52
  465. package/src/runtime/emit/cte-reference.ts +0 -38
  466. package/src/runtime/emit/cte.ts +0 -39
  467. package/src/runtime/emit/delete.ts +0 -24
  468. package/src/runtime/emit/distinct.ts +0 -40
  469. package/src/runtime/emit/dml-executor.ts +0 -198
  470. package/src/runtime/emit/drop-assertion.ts +0 -45
  471. package/src/runtime/emit/drop-table.ts +0 -27
  472. package/src/runtime/emit/drop-view.ts +0 -49
  473. package/src/runtime/emit/filter.ts +0 -30
  474. package/src/runtime/emit/insert.ts +0 -42
  475. package/src/runtime/emit/internal-recursive-cte-ref.ts +0 -37
  476. package/src/runtime/emit/join.ts +0 -148
  477. package/src/runtime/emit/limit-offset.ts +0 -73
  478. package/src/runtime/emit/literal.ts +0 -17
  479. package/src/runtime/emit/parameter.ts +0 -59
  480. package/src/runtime/emit/pragma.ts +0 -56
  481. package/src/runtime/emit/project.ts +0 -46
  482. package/src/runtime/emit/recursive-cte.ts +0 -111
  483. package/src/runtime/emit/remote-query.ts +0 -47
  484. package/src/runtime/emit/retrieve.ts +0 -15
  485. package/src/runtime/emit/returning.ts +0 -41
  486. package/src/runtime/emit/scalar-function.ts +0 -69
  487. package/src/runtime/emit/scan.ts +0 -106
  488. package/src/runtime/emit/schema-declarative.ts +0 -215
  489. package/src/runtime/emit/sequencing.ts +0 -24
  490. package/src/runtime/emit/set-operation.ts +0 -141
  491. package/src/runtime/emit/sink.ts +0 -27
  492. package/src/runtime/emit/sort.ts +0 -75
  493. package/src/runtime/emit/subquery.ts +0 -203
  494. package/src/runtime/emit/table-valued-function.ts +0 -106
  495. package/src/runtime/emit/temporal-arithmetic.ts +0 -302
  496. package/src/runtime/emit/transaction.ts +0 -205
  497. package/src/runtime/emit/unary.ts +0 -101
  498. package/src/runtime/emit/update.ts +0 -66
  499. package/src/runtime/emit/values.ts +0 -66
  500. package/src/runtime/emit/window-function.ts +0 -42
  501. package/src/runtime/emit/window.ts +0 -458
  502. package/src/runtime/emitters.ts +0 -183
  503. package/src/runtime/register.ts +0 -150
  504. package/src/runtime/scheduler.ts +0 -488
  505. package/src/runtime/types.ts +0 -242
  506. package/src/runtime/utils.ts +0 -177
  507. package/src/schema/assertion.ts +0 -21
  508. package/src/schema/catalog.ts +0 -269
  509. package/src/schema/change-events.ts +0 -80
  510. package/src/schema/column.ts +0 -51
  511. package/src/schema/declared-schema-manager.ts +0 -82
  512. package/src/schema/function.ts +0 -188
  513. package/src/schema/manager.ts +0 -1034
  514. package/src/schema/schema-differ.ts +0 -214
  515. package/src/schema/schema-hasher.ts +0 -26
  516. package/src/schema/schema.ts +0 -222
  517. package/src/schema/table.ts +0 -409
  518. package/src/schema/view.ts +0 -19
  519. package/src/schema/window-function.ts +0 -56
  520. package/src/types/builtin-types.ts +0 -350
  521. package/src/types/index.ts +0 -17
  522. package/src/types/json-type.ts +0 -152
  523. package/src/types/logical-type.ts +0 -91
  524. package/src/types/plugin-interface.ts +0 -10
  525. package/src/types/registry.ts +0 -204
  526. package/src/types/temporal-types.ts +0 -290
  527. package/src/types/validation.ts +0 -120
  528. package/src/util/affinity.ts +0 -151
  529. package/src/util/ast-stringify.ts +0 -887
  530. package/src/util/cached.ts +0 -25
  531. package/src/util/coercion.ts +0 -113
  532. package/src/util/comparison.ts +0 -510
  533. package/src/util/environment.ts +0 -52
  534. package/src/util/hash.ts +0 -90
  535. package/src/util/latches.ts +0 -47
  536. package/src/util/mutation-statement.ts +0 -135
  537. package/src/util/patterns.ts +0 -56
  538. package/src/util/plan-formatter.ts +0 -48
  539. package/src/util/plugin-helper.ts +0 -110
  540. package/src/util/row-descriptor.ts +0 -105
  541. package/src/util/serialization.ts +0 -47
  542. package/src/util/sql-literal.ts +0 -22
  543. package/src/util/working-table-iterable.ts +0 -38
  544. package/src/vtab/best-access-plan.ts +0 -244
  545. package/src/vtab/connection.ts +0 -36
  546. package/src/vtab/filter-info.ts +0 -23
  547. package/src/vtab/index-info.ts +0 -84
  548. package/src/vtab/manifest.ts +0 -86
  549. package/src/vtab/memory/connection.ts +0 -73
  550. package/src/vtab/memory/index.ts +0 -191
  551. package/src/vtab/memory/layer/base-cursor.ts +0 -124
  552. package/src/vtab/memory/layer/base.ts +0 -275
  553. package/src/vtab/memory/layer/connection.ts +0 -203
  554. package/src/vtab/memory/layer/interface.ts +0 -47
  555. package/src/vtab/memory/layer/manager.ts +0 -909
  556. package/src/vtab/memory/layer/safe-iterate.ts +0 -49
  557. package/src/vtab/memory/layer/scan-plan.ts +0 -84
  558. package/src/vtab/memory/layer/transaction-cursor.ts +0 -162
  559. package/src/vtab/memory/layer/transaction.ts +0 -229
  560. package/src/vtab/memory/module.ts +0 -667
  561. package/src/vtab/memory/table.ts +0 -251
  562. package/src/vtab/memory/types.ts +0 -23
  563. package/src/vtab/memory/utils/logging.ts +0 -36
  564. package/src/vtab/memory/utils/primary-key.ts +0 -163
  565. package/src/vtab/module.ts +0 -162
  566. package/src/vtab/table.ts +0 -177
@@ -1,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
-