@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,503 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /**
3
- * Characteristics-based plan node analysis
4
- *
5
- * This module provides utilities for analyzing plan nodes based on their capabilities
6
- * and characteristics rather than their specific types, enabling robust and extensible
7
- * optimization rules.
8
- */
9
-
10
- import type { PlanNode, RelationalPlanNode, ScalarPlanNode, ConstantNode, TableDescriptor } from '../nodes/plan-node.js';
11
- import { isRelationalNode } from '../nodes/plan-node.js';
12
- import type * as AST from '../../parser/ast.js';
13
- import type { TableSchema } from '../../schema/table.js';
14
-
15
- // Default row estimate when not available
16
- const DEFAULT_ROW_ESTIMATE = 1000;
17
-
18
- /**
19
- * Core physical property-based characteristics
20
- */
21
- export class PlanNodeCharacteristics {
22
- // Physical property shortcuts
23
- static hasSideEffects(node: PlanNode): boolean {
24
- return node.physical.readonly === false;
25
- }
26
-
27
- static isReadOnly(node: PlanNode): boolean {
28
- return node.physical.readonly !== false;
29
- }
30
-
31
- static isDeterministic(node: PlanNode): boolean {
32
- return node.physical.deterministic !== false;
33
- }
34
-
35
- static isIdempotent(node: PlanNode): boolean {
36
- return node.physical.idempotent !== false;
37
- }
38
-
39
- static isConstant(node: PlanNode): node is ConstantNode {
40
- return node.physical.constant === true && 'getValue' in node;
41
- }
42
-
43
- static isFunctional(node: PlanNode): boolean {
44
- return this.isDeterministic(node) && this.isReadOnly(node);
45
- }
46
-
47
- // Ordering capabilities
48
- static hasOrderedOutput(node: PlanNode): boolean {
49
- return node.physical.ordering !== undefined && node.physical.ordering.length > 0;
50
- }
51
-
52
- static preservesOrdering(node: PlanNode): boolean {
53
- // Check if node preserves input ordering (single child with ordered output)
54
- const children = node.getChildren();
55
- return children.length === 1 && this.hasOrderedOutput(children[0]);
56
- }
57
-
58
- static getOrdering(node: PlanNode): { column: number; desc: boolean }[] | undefined {
59
- return node.physical.ordering;
60
- }
61
-
62
- // Cardinality analysis
63
- static estimatesRows(node: PlanNode): number {
64
- return node.physical.estimatedRows ?? DEFAULT_ROW_ESTIMATE;
65
- }
66
-
67
- static guaranteesUniqueRows(node: PlanNode): boolean {
68
- return node.physical.uniqueKeys?.some(key => key.length === 0) === true;
69
- }
70
-
71
- static hasUniqueKeys(node: PlanNode): boolean {
72
- return node.physical.uniqueKeys !== undefined && node.physical.uniqueKeys.length > 0;
73
- }
74
-
75
- static getUniqueKeys(node: PlanNode): number[][] | undefined {
76
- return node.physical.uniqueKeys;
77
- }
78
-
79
- // Relational capabilities
80
- static isRelational(node: PlanNode): node is RelationalPlanNode {
81
- return isRelationalNode(node);
82
- }
83
-
84
- static producesRows(node: PlanNode): node is RelationalPlanNode {
85
- return isRelationalNode(node);
86
- }
87
-
88
- static isScalar(node: PlanNode): boolean {
89
- return node.getType().typeClass === 'scalar';
90
- }
91
-
92
- static isVoid(node: PlanNode): boolean {
93
- return node.getType().typeClass === 'void';
94
- }
95
-
96
- // Performance characteristics
97
- static isExpensive(node: PlanNode): boolean {
98
- const estimatedRows = this.estimatesRows(node);
99
- return estimatedRows > 10000; // Tunable threshold
100
- }
101
-
102
- static isLikelyRepeated(node: PlanNode): boolean {
103
- // Heuristic: nodes with side effects are likely to be repeated in joins
104
- return this.hasSideEffects(node);
105
- }
106
- }
107
-
108
- /**
109
- * Interface for nodes that can provide predicates (WHERE clauses, join conditions)
110
- */
111
- export interface PredicateCapable extends PlanNode {
112
- getPredicate(): ScalarPlanNode | null;
113
- withPredicate(newPredicate: ScalarPlanNode | null): PlanNode;
114
- }
115
-
116
- /**
117
- * Interface for nodes that can expose one or more local predicates (e.g., WHERE, ON)
118
- */
119
- export interface PredicateSourceCapable extends PlanNode {
120
- getPredicates(): readonly ScalarPlanNode[];
121
- }
122
-
123
- /**
124
- * Interface for nodes that can combine predicates (for pushdown optimization)
125
- */
126
- export interface PredicateCombinable extends PredicateCapable {
127
- canCombinePredicates(): boolean;
128
- combineWith(other: ScalarPlanNode): ScalarPlanNode;
129
- }
130
-
131
- /**
132
- * Interface for table access nodes
133
- */
134
- export interface TableAccessCapable extends RelationalPlanNode {
135
- readonly tableSchema: TableSchema;
136
- getAccessMethod(): 'sequential' | 'index-scan' | 'index-seek' | 'virtual';
137
- }
138
-
139
- /**
140
- * Interface for aggregation operations
141
- */
142
- export interface AggregationCapable extends RelationalPlanNode {
143
- getGroupingKeys(): readonly ScalarPlanNode[];
144
- getAggregateExpressions(): readonly { expr: ScalarPlanNode; alias: string; attributeId: number }[];
145
- requiresOrdering(): boolean;
146
- canStreamAggregate(): boolean;
147
- getSource(): RelationalPlanNode;
148
- }
149
-
150
- /**
151
- * Interface for sorting operations
152
- */
153
- export interface SortCapable extends PlanNode {
154
- getSortKeys(): readonly { expression: ScalarPlanNode; direction: 'asc' | 'desc' }[];
155
- withSortKeys(keys: readonly { expression: ScalarPlanNode; direction: 'asc' | 'desc' }[]): PlanNode;
156
- }
157
-
158
- /**
159
- * Interface for limit/offset capability
160
- */
161
- export interface LimitCapable extends PlanNode {
162
- getLimitExpression(): ScalarPlanNode | undefined;
163
- getOffsetExpression(): ScalarPlanNode | undefined;
164
- }
165
-
166
- /**
167
- * Interface for nodes that can provide stable attribute→column bindings for constraint mapping
168
- */
169
- export interface ColumnBindingProvider extends PlanNode {
170
- /** Relation name used for mapping/presentation (e.g., schema.table or alias) */
171
- getBindingRelationName(): string;
172
- /** Attributes (id/name) visible at this binding boundary */
173
- getBindingAttributes(): ReadonlyArray<{ id: number; name: string }>;
174
- /** Column index in the output row for a given attribute id */
175
- getColumnIndexForAttribute(attributeId: number): number | undefined;
176
- }
177
-
178
- /**
179
- * Interface for projection operations
180
- */
181
- export interface ProjectionCapable extends RelationalPlanNode {
182
- getProjections(): readonly { node: ScalarPlanNode; alias: string; attributeId: number }[];
183
- withProjections(projections: readonly { node: ScalarPlanNode; alias: string; attributeId: number }[]): PlanNode;
184
- }
185
-
186
- /**
187
- * Interface for join operations
188
- */
189
- export interface JoinCapable extends RelationalPlanNode {
190
- getJoinType(): 'inner' | 'left' | 'right' | 'full' | 'cross';
191
- getJoinCondition(): ScalarPlanNode | undefined;
192
- getLeftSource(): RelationalPlanNode;
193
- getRightSource(): RelationalPlanNode;
194
- getUsingColumns(): readonly string[] | undefined;
195
- }
196
-
197
- /**
198
- * Interface for cached operations
199
- */
200
- export interface CacheCapable extends PlanNode {
201
- getCacheStrategy(): string | null;
202
- isCached(): boolean;
203
- }
204
-
205
- /**
206
- * Interface for Common Table Expression operations
207
- */
208
- export interface CTECapable extends RelationalPlanNode {
209
- readonly cteName: string;
210
- readonly columns: string[] | undefined;
211
- readonly materializationHint: 'materialized' | 'not_materialized' | undefined;
212
- readonly isRecursive: boolean;
213
- getCTESource(): RelationalPlanNode;
214
- }
215
-
216
- /**
217
- * Interface for column reference nodes
218
- */
219
- export interface ColumnReferenceCapable extends ScalarPlanNode {
220
- readonly attributeId: number;
221
- readonly columnIndex: number;
222
- readonly expression: AST.ColumnExpr;
223
- }
224
-
225
- /**
226
- * Interface for window function call nodes
227
- */
228
- export interface WindowFunctionCapable extends ScalarPlanNode {
229
- readonly functionName: string;
230
- readonly isDistinct: boolean;
231
- readonly alias?: string;
232
- }
233
-
234
- /**
235
- * Interface for aggregate function call nodes
236
- */
237
- export interface AggregateFunctionCapable extends ScalarPlanNode {
238
- readonly functionName: string;
239
- readonly isDistinct: boolean;
240
- readonly args: ReadonlyArray<ScalarPlanNode>;
241
- }
242
-
243
- /**
244
- * Interface for internal recursive CTE reference nodes
245
- */
246
- export interface RecursiveCTERefCapable extends RelationalPlanNode {
247
- readonly cteName: string;
248
- readonly workingTableDescriptor: TableDescriptor;
249
- }
250
-
251
- /**
252
- * Type guards for capability detection
253
- */
254
- export class CapabilityDetectors {
255
- static canPushDownPredicate(node: PlanNode): node is PredicateCapable {
256
- return 'getPredicate' in node &&
257
- typeof (node as any).getPredicate === 'function' &&
258
- 'withPredicate' in node &&
259
- typeof (node as any).withPredicate === 'function';
260
- }
261
-
262
- static canCombinePredicates(node: PlanNode): node is PredicateCombinable {
263
- return this.canPushDownPredicate(node) &&
264
- 'canCombinePredicates' in node &&
265
- typeof (node as any).canCombinePredicates === 'function';
266
- }
267
-
268
- static isPredicateSource(node: PlanNode): node is PredicateSourceCapable {
269
- return 'getPredicates' in node && typeof (node as any).getPredicates === 'function';
270
- }
271
-
272
- static isTableAccess(node: PlanNode): node is TableAccessCapable {
273
- return PlanNodeCharacteristics.isRelational(node) &&
274
- 'tableSchema' in node &&
275
- 'getAccessMethod' in node &&
276
- typeof (node as any).getAccessMethod === 'function';
277
- }
278
-
279
- static isAggregating(node: PlanNode): node is AggregationCapable {
280
- return PlanNodeCharacteristics.isRelational(node) &&
281
- 'getGroupingKeys' in node &&
282
- typeof (node as any).getGroupingKeys === 'function' &&
283
- 'getAggregateExpressions' in node &&
284
- typeof (node as any).getAggregateExpressions === 'function';
285
- }
286
-
287
- static isSortable(node: PlanNode): node is SortCapable {
288
- return 'getSortKeys' in node &&
289
- typeof (node as any).getSortKeys === 'function' &&
290
- 'withSortKeys' in node &&
291
- typeof (node as any).withSortKeys === 'function';
292
- }
293
-
294
- static isLimit(node: PlanNode): node is LimitCapable {
295
- return 'getLimitExpression' in node &&
296
- typeof (node as any).getLimitExpression === 'function' &&
297
- 'getOffsetExpression' in node &&
298
- typeof (node as any).getOffsetExpression === 'function';
299
- }
300
-
301
- static isColumnBindingProvider(node: PlanNode): node is ColumnBindingProvider {
302
- return 'getBindingRelationName' in node &&
303
- typeof (node as any).getBindingRelationName === 'string' || typeof (node as any).getBindingRelationName === 'function';
304
- }
305
-
306
- static canProject(node: PlanNode): node is ProjectionCapable {
307
- return PlanNodeCharacteristics.isRelational(node) &&
308
- 'getProjections' in node &&
309
- typeof (node as any).getProjections === 'function';
310
- }
311
-
312
- static isJoin(node: PlanNode): node is JoinCapable {
313
- return PlanNodeCharacteristics.isRelational(node) &&
314
- 'getJoinType' in node &&
315
- typeof (node as any).getJoinType === 'function' &&
316
- 'getLeftSource' in node &&
317
- 'getRightSource' in node;
318
- }
319
-
320
- static isCached(node: PlanNode): node is CacheCapable {
321
- return 'getCacheStrategy' in node &&
322
- typeof (node as any).getCacheStrategy === 'function';
323
- }
324
-
325
- static isCTE(node: PlanNode): node is CTECapable {
326
- return PlanNodeCharacteristics.isRelational(node) &&
327
- 'cteName' in node &&
328
- typeof (node as any).cteName === 'string' &&
329
- 'getCTESource' in node &&
330
- typeof (node as any).getCTESource === 'function';
331
- }
332
-
333
- static isColumnReference(node: PlanNode): node is ColumnReferenceCapable {
334
- if (!node) return false;
335
- return PlanNodeCharacteristics.isScalar(node) &&
336
- 'attributeId' in node &&
337
- typeof (node as any).attributeId === 'number' &&
338
- 'columnIndex' in node &&
339
- typeof (node as any).columnIndex === 'number' &&
340
- 'expression' in node;
341
- }
342
-
343
- static isWindowFunction(node: PlanNode): node is WindowFunctionCapable {
344
- if (!node) return false;
345
- // Check nodeType specifically to distinguish from AggregateFunctionCallNode
346
- return node.nodeType === 'WindowFunctionCall' &&
347
- PlanNodeCharacteristics.isScalar(node) &&
348
- 'functionName' in node &&
349
- typeof (node as any).functionName === 'string' &&
350
- 'isDistinct' in node &&
351
- typeof (node as any).isDistinct === 'boolean';
352
- }
353
-
354
- static isAggregateFunction(node: PlanNode): node is AggregateFunctionCapable {
355
- if (!node) return false;
356
- // Check for AggregateFunctionCallNode - it uses ScalarFunctionCall nodeType but has args property
357
- return PlanNodeCharacteristics.isScalar(node) &&
358
- 'functionName' in node &&
359
- typeof (node as any).functionName === 'string' &&
360
- 'isDistinct' in node &&
361
- typeof (node as any).isDistinct === 'boolean' &&
362
- 'args' in node &&
363
- Array.isArray((node as any).args) &&
364
- 'functionSchema' in node;
365
- }
366
-
367
- static isRecursiveCTERef(node: PlanNode): node is RecursiveCTERefCapable {
368
- if (!node) return false;
369
- return PlanNodeCharacteristics.isRelational(node) &&
370
- 'cteName' in node &&
371
- typeof (node as any).cteName === 'string' &&
372
- 'workingTableDescriptor' in node;
373
- }
374
- }
375
-
376
- /**
377
- * Extensible capability registry for custom characteristics
378
- */
379
- export class CapabilityRegistry {
380
- private static readonly detectors = new Map<string, (node: PlanNode) => boolean>();
381
-
382
- static register(
383
- capability: string,
384
- detector: (node: PlanNode) => boolean
385
- ): void {
386
- this.detectors.set(capability, detector);
387
- }
388
-
389
- static hasCapability(node: PlanNode, capability: string): boolean {
390
- const detector = this.detectors.get(capability);
391
- return detector ? detector(node) : false;
392
- }
393
-
394
- static getCapable(
395
- nodes: readonly PlanNode[],
396
- capability: string
397
- ): PlanNode[] {
398
- const detector = this.detectors.get(capability);
399
- if (!detector) return [];
400
- return nodes.filter(detector);
401
- }
402
-
403
- static getAllCapabilities(): string[] {
404
- return Array.from(this.detectors.keys());
405
- }
406
-
407
- static unregister(capability: string): boolean {
408
- return this.detectors.delete(capability);
409
- }
410
- }
411
-
412
- /**
413
- * Caching analysis utilities
414
- */
415
- export class CachingAnalysis {
416
- static isCacheable(node: PlanNode): boolean {
417
- // Must be relational to cache results
418
- if (!PlanNodeCharacteristics.isRelational(node)) {
419
- return false;
420
- }
421
-
422
- // Already cached nodes don't need re-caching
423
- if (CapabilityDetectors.isCached(node) && (node as any).isCached()) {
424
- return false;
425
- }
426
-
427
- // Check physical properties for side effects
428
- if (PlanNodeCharacteristics.hasSideEffects(node)) {
429
- // Only cache if execution would be expensive and repeated
430
- return this.isExpensiveRepeatedOperation(node);
431
- }
432
-
433
- return true;
434
- }
435
-
436
- static shouldCache(node: PlanNode): boolean {
437
- if (!this.isCacheable(node)) {
438
- return false;
439
- }
440
-
441
- // Cache expensive operations
442
- if (PlanNodeCharacteristics.isExpensive(node)) {
443
- return true;
444
- }
445
-
446
- // Cache likely repeated operations
447
- if (PlanNodeCharacteristics.isLikelyRepeated(node)) {
448
- return true;
449
- }
450
-
451
- return false;
452
- }
453
-
454
- private static isExpensiveRepeatedOperation(node: PlanNode): boolean {
455
- return PlanNodeCharacteristics.isExpensive(node) &&
456
- PlanNodeCharacteristics.isLikelyRepeated(node);
457
- }
458
-
459
- static getCacheThreshold(node: PlanNode): number {
460
- const estimatedRows = PlanNodeCharacteristics.estimatesRows(node);
461
- return Math.min(Math.max(estimatedRows * 0.1, 1000), 100000);
462
- }
463
- }
464
-
465
- /**
466
- * Predicate analysis utilities
467
- */
468
- export class PredicateAnalysis {
469
- static canPushDown(predicate: ScalarPlanNode, targetNode: PlanNode): boolean {
470
- if (!CapabilityDetectors.canPushDownPredicate(targetNode)) {
471
- return false;
472
- }
473
-
474
- // Check if predicate only references columns from target
475
- return this.predicateReferencesOnly(predicate, targetNode);
476
- }
477
-
478
- static canCombine(pred1: ScalarPlanNode, pred2: ScalarPlanNode): boolean {
479
- // Basic heuristic: both must be deterministic
480
- return PlanNodeCharacteristics.isDeterministic(pred1) &&
481
- PlanNodeCharacteristics.isDeterministic(pred2);
482
- }
483
-
484
- private static predicateReferencesOnly(_predicate: ScalarPlanNode, _targetNode: PlanNode): boolean {
485
- // TODO: Implement column reference analysis
486
- // For now, conservatively return true
487
- return true;
488
- }
489
- }
490
-
491
- // Register built-in capabilities
492
- CapabilityRegistry.register('predicate-pushdown', CapabilityDetectors.canPushDownPredicate);
493
- CapabilityRegistry.register('table-access', CapabilityDetectors.isTableAccess);
494
- CapabilityRegistry.register('aggregation', CapabilityDetectors.isAggregating);
495
- CapabilityRegistry.register('sort', CapabilityDetectors.isSortable);
496
- CapabilityRegistry.register('projection', CapabilityDetectors.canProject);
497
- CapabilityRegistry.register('join', CapabilityDetectors.isJoin);
498
- CapabilityRegistry.register('cache', CapabilityDetectors.isCached);
499
- CapabilityRegistry.register('cte', CapabilityDetectors.isCTE);
500
- CapabilityRegistry.register('column-reference', CapabilityDetectors.isColumnReference);
501
- CapabilityRegistry.register('window-function', CapabilityDetectors.isWindowFunction);
502
- CapabilityRegistry.register('aggregate-function', CapabilityDetectors.isAggregateFunction);
503
- CapabilityRegistry.register('recursive-cte-ref', CapabilityDetectors.isRecursiveCTERef);