@quereus/quereus 3.3.0 → 4.0.0

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 (900) hide show
  1. package/README.md +7 -0
  2. package/dist/src/common/datatype.d.ts +12 -0
  3. package/dist/src/common/datatype.d.ts.map +1 -1
  4. package/dist/src/common/datatype.js.map +1 -1
  5. package/dist/src/common/types.d.ts +24 -0
  6. package/dist/src/common/types.d.ts.map +1 -1
  7. package/dist/src/common/types.js.map +1 -1
  8. package/dist/src/core/database-assertions.d.ts +37 -9
  9. package/dist/src/core/database-assertions.d.ts.map +1 -1
  10. package/dist/src/core/database-assertions.js +62 -110
  11. package/dist/src/core/database-assertions.js.map +1 -1
  12. package/dist/src/core/database-events.d.ts +163 -0
  13. package/dist/src/core/database-events.d.ts.map +1 -1
  14. package/dist/src/core/database-events.js +235 -21
  15. package/dist/src/core/database-events.js.map +1 -1
  16. package/dist/src/core/database-external-changes.d.ts +28 -0
  17. package/dist/src/core/database-external-changes.d.ts.map +1 -0
  18. package/dist/src/core/database-external-changes.js +242 -0
  19. package/dist/src/core/database-external-changes.js.map +1 -0
  20. package/dist/src/core/database-internal.d.ts +50 -1
  21. package/dist/src/core/database-internal.d.ts.map +1 -1
  22. package/dist/src/core/database-materialized-views.d.ts +1253 -0
  23. package/dist/src/core/database-materialized-views.d.ts.map +1 -0
  24. package/dist/src/core/database-materialized-views.js +3064 -0
  25. package/dist/src/core/database-materialized-views.js.map +1 -0
  26. package/dist/src/core/database-options.d.ts +4 -0
  27. package/dist/src/core/database-options.d.ts.map +1 -1
  28. package/dist/src/core/database-options.js +10 -0
  29. package/dist/src/core/database-options.js.map +1 -1
  30. package/dist/src/core/database-transaction.d.ts +19 -3
  31. package/dist/src/core/database-transaction.d.ts.map +1 -1
  32. package/dist/src/core/database-transaction.js +30 -3
  33. package/dist/src/core/database-transaction.js.map +1 -1
  34. package/dist/src/core/database-watchers.d.ts +19 -0
  35. package/dist/src/core/database-watchers.d.ts.map +1 -1
  36. package/dist/src/core/database-watchers.js +63 -3
  37. package/dist/src/core/database-watchers.js.map +1 -1
  38. package/dist/src/core/database.d.ts +203 -11
  39. package/dist/src/core/database.d.ts.map +1 -1
  40. package/dist/src/core/database.js +493 -29
  41. package/dist/src/core/database.js.map +1 -1
  42. package/dist/src/core/derived-row-validator.d.ts +137 -0
  43. package/dist/src/core/derived-row-validator.d.ts.map +1 -0
  44. package/dist/src/core/derived-row-validator.js +314 -0
  45. package/dist/src/core/derived-row-validator.js.map +1 -0
  46. package/dist/src/core/statement.d.ts.map +1 -1
  47. package/dist/src/core/statement.js +30 -9
  48. package/dist/src/core/statement.js.map +1 -1
  49. package/dist/src/emit/ast-stringify.d.ts +135 -1
  50. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  51. package/dist/src/emit/ast-stringify.js +793 -118
  52. package/dist/src/emit/ast-stringify.js.map +1 -1
  53. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  54. package/dist/src/func/builtins/aggregate.js +11 -10
  55. package/dist/src/func/builtins/aggregate.js.map +1 -1
  56. package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
  57. package/dist/src/func/builtins/builtin-window-functions.js +32 -0
  58. package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
  59. package/dist/src/func/builtins/explain.d.ts +3 -0
  60. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  61. package/dist/src/func/builtins/explain.js +229 -0
  62. package/dist/src/func/builtins/explain.js.map +1 -1
  63. package/dist/src/func/builtins/index.d.ts.map +1 -1
  64. package/dist/src/func/builtins/index.js +10 -2
  65. package/dist/src/func/builtins/index.js.map +1 -1
  66. package/dist/src/func/builtins/json.d.ts.map +1 -1
  67. package/dist/src/func/builtins/json.js +3 -2
  68. package/dist/src/func/builtins/json.js.map +1 -1
  69. package/dist/src/func/builtins/mutation.d.ts +2 -0
  70. package/dist/src/func/builtins/mutation.d.ts.map +1 -0
  71. package/dist/src/func/builtins/mutation.js +53 -0
  72. package/dist/src/func/builtins/mutation.js.map +1 -0
  73. package/dist/src/func/builtins/schema.d.ts +2 -0
  74. package/dist/src/func/builtins/schema.d.ts.map +1 -1
  75. package/dist/src/func/builtins/schema.js +713 -26
  76. package/dist/src/func/builtins/schema.js.map +1 -1
  77. package/dist/src/func/builtins/string.js +1 -1
  78. package/dist/src/func/builtins/string.js.map +1 -1
  79. package/dist/src/func/registration.d.ts +9 -0
  80. package/dist/src/func/registration.d.ts.map +1 -1
  81. package/dist/src/func/registration.js +4 -0
  82. package/dist/src/func/registration.js.map +1 -1
  83. package/dist/src/index.d.ts +25 -6
  84. package/dist/src/index.d.ts.map +1 -1
  85. package/dist/src/index.js +27 -3
  86. package/dist/src/index.js.map +1 -1
  87. package/dist/src/parser/ast.d.ts +353 -21
  88. package/dist/src/parser/ast.d.ts.map +1 -1
  89. package/dist/src/parser/index.d.ts +14 -1
  90. package/dist/src/parser/index.d.ts.map +1 -1
  91. package/dist/src/parser/index.js +19 -0
  92. package/dist/src/parser/index.js.map +1 -1
  93. package/dist/src/parser/lexer.d.ts +9 -0
  94. package/dist/src/parser/lexer.d.ts.map +1 -1
  95. package/dist/src/parser/lexer.js +9 -0
  96. package/dist/src/parser/lexer.js.map +1 -1
  97. package/dist/src/parser/parser.d.ts +276 -7
  98. package/dist/src/parser/parser.d.ts.map +1 -1
  99. package/dist/src/parser/parser.js +1387 -469
  100. package/dist/src/parser/parser.js.map +1 -1
  101. package/dist/src/parser/visitor.d.ts.map +1 -1
  102. package/dist/src/parser/visitor.js +12 -8
  103. package/dist/src/parser/visitor.js.map +1 -1
  104. package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
  105. package/dist/src/planner/analysis/assertion-classifier.js +4 -0
  106. package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
  107. package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
  108. package/dist/src/planner/analysis/assertion-hoist-cache.js +8 -4
  109. package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
  110. package/dist/src/planner/analysis/authored-inverse.d.ts +22 -0
  111. package/dist/src/planner/analysis/authored-inverse.d.ts.map +1 -0
  112. package/dist/src/planner/analysis/authored-inverse.js +267 -0
  113. package/dist/src/planner/analysis/authored-inverse.js.map +1 -0
  114. package/dist/src/planner/analysis/change-scope.d.ts +34 -4
  115. package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
  116. package/dist/src/planner/analysis/change-scope.js +108 -7
  117. package/dist/src/planner/analysis/change-scope.js.map +1 -1
  118. package/dist/src/planner/analysis/check-extraction.d.ts +36 -2
  119. package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
  120. package/dist/src/planner/analysis/check-extraction.js +174 -46
  121. package/dist/src/planner/analysis/check-extraction.js.map +1 -1
  122. package/dist/src/planner/analysis/coarsened-key.d.ts +109 -0
  123. package/dist/src/planner/analysis/coarsened-key.d.ts.map +1 -0
  124. package/dist/src/planner/analysis/coarsened-key.js +228 -0
  125. package/dist/src/planner/analysis/coarsened-key.js.map +1 -0
  126. package/dist/src/planner/analysis/comparison-collation.d.ts +216 -0
  127. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -0
  128. package/dist/src/planner/analysis/comparison-collation.js +341 -0
  129. package/dist/src/planner/analysis/comparison-collation.js.map +1 -0
  130. package/dist/src/planner/analysis/constraint-extractor.d.ts +3 -1
  131. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  132. package/dist/src/planner/analysis/constraint-extractor.js +192 -9
  133. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  134. package/dist/src/planner/analysis/coverage-prover.d.ts +321 -0
  135. package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -0
  136. package/dist/src/planner/analysis/coverage-prover.js +1038 -0
  137. package/dist/src/planner/analysis/coverage-prover.js.map +1 -0
  138. package/dist/src/planner/analysis/key-filter.d.ts +22 -0
  139. package/dist/src/planner/analysis/key-filter.d.ts.map +1 -0
  140. package/dist/src/planner/analysis/key-filter.js +105 -0
  141. package/dist/src/planner/analysis/key-filter.js.map +1 -0
  142. package/dist/src/planner/analysis/partial-unique-extraction.d.ts +36 -1
  143. package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -1
  144. package/dist/src/planner/analysis/partial-unique-extraction.js +148 -22
  145. package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -1
  146. package/dist/src/planner/analysis/predicate-normalizer.d.ts.map +1 -1
  147. package/dist/src/planner/analysis/predicate-normalizer.js +30 -1
  148. package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -1
  149. package/dist/src/planner/analysis/predicate-shape.d.ts +36 -1
  150. package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -1
  151. package/dist/src/planner/analysis/predicate-shape.js +51 -13
  152. package/dist/src/planner/analysis/predicate-shape.js.map +1 -1
  153. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +314 -0
  154. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -0
  155. package/dist/src/planner/analysis/query-rewrite-matcher.js +1081 -0
  156. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -0
  157. package/dist/src/planner/analysis/scalar-invertibility.d.ts +92 -0
  158. package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -0
  159. package/dist/src/planner/analysis/scalar-invertibility.js +129 -0
  160. package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -0
  161. package/dist/src/planner/analysis/update-lineage.d.ts +196 -0
  162. package/dist/src/planner/analysis/update-lineage.d.ts.map +1 -0
  163. package/dist/src/planner/analysis/update-lineage.js +322 -0
  164. package/dist/src/planner/analysis/update-lineage.js.map +1 -0
  165. package/dist/src/planner/analysis/view-complement.d.ts +42 -0
  166. package/dist/src/planner/analysis/view-complement.d.ts.map +1 -0
  167. package/dist/src/planner/analysis/view-complement.js +54 -0
  168. package/dist/src/planner/analysis/view-complement.js.map +1 -0
  169. package/dist/src/planner/building/alter-table.d.ts +1 -1
  170. package/dist/src/planner/building/alter-table.d.ts.map +1 -1
  171. package/dist/src/planner/building/alter-table.js +211 -2
  172. package/dist/src/planner/building/alter-table.js.map +1 -1
  173. package/dist/src/planner/building/block.d.ts.map +1 -1
  174. package/dist/src/planner/building/block.js +18 -1
  175. package/dist/src/planner/building/block.js.map +1 -1
  176. package/dist/src/planner/building/constraint-builder.d.ts +33 -5
  177. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  178. package/dist/src/planner/building/constraint-builder.js +63 -28
  179. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  180. package/dist/src/planner/building/create-view.d.ts +9 -0
  181. package/dist/src/planner/building/create-view.d.ts.map +1 -1
  182. package/dist/src/planner/building/create-view.js +41 -12
  183. package/dist/src/planner/building/create-view.js.map +1 -1
  184. package/dist/src/planner/building/ddl.d.ts.map +1 -1
  185. package/dist/src/planner/building/ddl.js +94 -0
  186. package/dist/src/planner/building/ddl.js.map +1 -1
  187. package/dist/src/planner/building/declare-schema.d.ts +1 -0
  188. package/dist/src/planner/building/declare-schema.d.ts.map +1 -1
  189. package/dist/src/planner/building/declare-schema.js +4 -1
  190. package/dist/src/planner/building/declare-schema.js.map +1 -1
  191. package/dist/src/planner/building/default-scope.d.ts +26 -0
  192. package/dist/src/planner/building/default-scope.d.ts.map +1 -0
  193. package/dist/src/planner/building/default-scope.js +41 -0
  194. package/dist/src/planner/building/default-scope.js.map +1 -0
  195. package/dist/src/planner/building/delete.d.ts +19 -1
  196. package/dist/src/planner/building/delete.d.ts.map +1 -1
  197. package/dist/src/planner/building/delete.js +109 -30
  198. package/dist/src/planner/building/delete.js.map +1 -1
  199. package/dist/src/planner/building/dml-target.d.ts +118 -0
  200. package/dist/src/planner/building/dml-target.d.ts.map +1 -0
  201. package/dist/src/planner/building/dml-target.js +282 -0
  202. package/dist/src/planner/building/dml-target.js.map +1 -0
  203. package/dist/src/planner/building/drop-index.d.ts.map +1 -1
  204. package/dist/src/planner/building/drop-index.js +4 -1
  205. package/dist/src/planner/building/drop-index.js.map +1 -1
  206. package/dist/src/planner/building/drop-view.d.ts.map +1 -1
  207. package/dist/src/planner/building/drop-view.js +4 -2
  208. package/dist/src/planner/building/drop-view.js.map +1 -1
  209. package/dist/src/planner/building/expression.d.ts.map +1 -1
  210. package/dist/src/planner/building/expression.js +60 -21
  211. package/dist/src/planner/building/expression.js.map +1 -1
  212. package/dist/src/planner/building/foreign-key-builder.d.ts +30 -0
  213. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  214. package/dist/src/planner/building/foreign-key-builder.js +160 -129
  215. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  216. package/dist/src/planner/building/insert.d.ts +45 -2
  217. package/dist/src/planner/building/insert.d.ts.map +1 -1
  218. package/dist/src/planner/building/insert.js +257 -88
  219. package/dist/src/planner/building/insert.js.map +1 -1
  220. package/dist/src/planner/building/lens-auxiliary-access.d.ts +22 -0
  221. package/dist/src/planner/building/lens-auxiliary-access.d.ts.map +1 -0
  222. package/dist/src/planner/building/lens-auxiliary-access.js +132 -0
  223. package/dist/src/planner/building/lens-auxiliary-access.js.map +1 -0
  224. package/dist/src/planner/building/materialized-view.d.ts +16 -0
  225. package/dist/src/planner/building/materialized-view.d.ts.map +1 -0
  226. package/dist/src/planner/building/materialized-view.js +57 -0
  227. package/dist/src/planner/building/materialized-view.js.map +1 -0
  228. package/dist/src/planner/building/returning-star.d.ts +32 -0
  229. package/dist/src/planner/building/returning-star.d.ts.map +1 -0
  230. package/dist/src/planner/building/returning-star.js +45 -0
  231. package/dist/src/planner/building/returning-star.js.map +1 -0
  232. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  233. package/dist/src/planner/building/select-aggregates.js +47 -0
  234. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  235. package/dist/src/planner/building/select-compound.d.ts.map +1 -1
  236. package/dist/src/planner/building/select-compound.js +84 -11
  237. package/dist/src/planner/building/select-compound.js.map +1 -1
  238. package/dist/src/planner/building/select-context.d.ts +10 -2
  239. package/dist/src/planner/building/select-context.d.ts.map +1 -1
  240. package/dist/src/planner/building/select-context.js +7 -1
  241. package/dist/src/planner/building/select-context.js.map +1 -1
  242. package/dist/src/planner/building/select-modifiers.js +6 -0
  243. package/dist/src/planner/building/select-modifiers.js.map +1 -1
  244. package/dist/src/planner/building/select-ordinal.d.ts +18 -0
  245. package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
  246. package/dist/src/planner/building/select-ordinal.js +30 -0
  247. package/dist/src/planner/building/select-ordinal.js.map +1 -1
  248. package/dist/src/planner/building/select-projections.d.ts +8 -2
  249. package/dist/src/planner/building/select-projections.d.ts.map +1 -1
  250. package/dist/src/planner/building/select-projections.js +26 -4
  251. package/dist/src/planner/building/select-projections.js.map +1 -1
  252. package/dist/src/planner/building/select-window.d.ts.map +1 -1
  253. package/dist/src/planner/building/select-window.js +8 -5
  254. package/dist/src/planner/building/select-window.js.map +1 -1
  255. package/dist/src/planner/building/select.d.ts.map +1 -1
  256. package/dist/src/planner/building/select.js +164 -59
  257. package/dist/src/planner/building/select.js.map +1 -1
  258. package/dist/src/planner/building/set-object-tags.d.ts +7 -0
  259. package/dist/src/planner/building/set-object-tags.d.ts.map +1 -0
  260. package/dist/src/planner/building/set-object-tags.js +38 -0
  261. package/dist/src/planner/building/set-object-tags.js.map +1 -0
  262. package/dist/src/planner/building/tag-diagnostics.d.ts +27 -0
  263. package/dist/src/planner/building/tag-diagnostics.d.ts.map +1 -0
  264. package/dist/src/planner/building/tag-diagnostics.js +37 -0
  265. package/dist/src/planner/building/tag-diagnostics.js.map +1 -0
  266. package/dist/src/planner/building/update.d.ts +18 -1
  267. package/dist/src/planner/building/update.d.ts.map +1 -1
  268. package/dist/src/planner/building/update.js +134 -58
  269. package/dist/src/planner/building/update.js.map +1 -1
  270. package/dist/src/planner/building/view-mutation-builder.d.ts +15 -0
  271. package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -0
  272. package/dist/src/planner/building/view-mutation-builder.js +1158 -0
  273. package/dist/src/planner/building/view-mutation-builder.js.map +1 -0
  274. package/dist/src/planner/building/with.d.ts +11 -0
  275. package/dist/src/planner/building/with.d.ts.map +1 -1
  276. package/dist/src/planner/building/with.js +48 -10
  277. package/dist/src/planner/building/with.js.map +1 -1
  278. package/dist/src/planner/cost/index.d.ts +83 -0
  279. package/dist/src/planner/cost/index.d.ts.map +1 -1
  280. package/dist/src/planner/cost/index.js +114 -0
  281. package/dist/src/planner/cost/index.js.map +1 -1
  282. package/dist/src/planner/framework/characteristics.d.ts +38 -4
  283. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  284. package/dist/src/planner/framework/characteristics.js +50 -6
  285. package/dist/src/planner/framework/characteristics.js.map +1 -1
  286. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  287. package/dist/src/planner/framework/pass.js +2 -1
  288. package/dist/src/planner/framework/pass.js.map +1 -1
  289. package/dist/src/planner/framework/registry.d.ts +39 -1
  290. package/dist/src/planner/framework/registry.d.ts.map +1 -1
  291. package/dist/src/planner/framework/registry.js +18 -2
  292. package/dist/src/planner/framework/registry.js.map +1 -1
  293. package/dist/src/planner/mutation/backward-body.d.ts +131 -0
  294. package/dist/src/planner/mutation/backward-body.d.ts.map +1 -0
  295. package/dist/src/planner/mutation/backward-body.js +135 -0
  296. package/dist/src/planner/mutation/backward-body.js.map +1 -0
  297. package/dist/src/planner/mutation/cte-flatten.d.ts +17 -0
  298. package/dist/src/planner/mutation/cte-flatten.d.ts.map +1 -0
  299. package/dist/src/planner/mutation/cte-flatten.js +364 -0
  300. package/dist/src/planner/mutation/cte-flatten.js.map +1 -0
  301. package/dist/src/planner/mutation/decomposition.d.ts +273 -0
  302. package/dist/src/planner/mutation/decomposition.d.ts.map +1 -0
  303. package/dist/src/planner/mutation/decomposition.js +1719 -0
  304. package/dist/src/planner/mutation/decomposition.js.map +1 -0
  305. package/dist/src/planner/mutation/lens-enforcement.d.ts +165 -0
  306. package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -0
  307. package/dist/src/planner/mutation/lens-enforcement.js +745 -0
  308. package/dist/src/planner/mutation/lens-enforcement.js.map +1 -0
  309. package/dist/src/planner/mutation/multi-source.d.ts +568 -0
  310. package/dist/src/planner/mutation/multi-source.d.ts.map +1 -0
  311. package/dist/src/planner/mutation/multi-source.js +2915 -0
  312. package/dist/src/planner/mutation/multi-source.js.map +1 -0
  313. package/dist/src/planner/mutation/mutation-diagnostic.d.ts +37 -0
  314. package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -0
  315. package/dist/src/planner/mutation/mutation-diagnostic.js +24 -0
  316. package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -0
  317. package/dist/src/planner/mutation/mutation-tags.d.ts +33 -0
  318. package/dist/src/planner/mutation/mutation-tags.d.ts.map +1 -0
  319. package/dist/src/planner/mutation/mutation-tags.js +31 -0
  320. package/dist/src/planner/mutation/mutation-tags.js.map +1 -0
  321. package/dist/src/planner/mutation/propagate.d.ts +97 -0
  322. package/dist/src/planner/mutation/propagate.d.ts.map +1 -0
  323. package/dist/src/planner/mutation/propagate.js +220 -0
  324. package/dist/src/planner/mutation/propagate.js.map +1 -0
  325. package/dist/src/planner/mutation/scope-transform.d.ts +181 -0
  326. package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -0
  327. package/dist/src/planner/mutation/scope-transform.js +574 -0
  328. package/dist/src/planner/mutation/scope-transform.js.map +1 -0
  329. package/dist/src/planner/mutation/set-op.d.ts +242 -0
  330. package/dist/src/planner/mutation/set-op.d.ts.map +1 -0
  331. package/dist/src/planner/mutation/set-op.js +1687 -0
  332. package/dist/src/planner/mutation/set-op.js.map +1 -0
  333. package/dist/src/planner/mutation/single-source.d.ts +261 -0
  334. package/dist/src/planner/mutation/single-source.d.ts.map +1 -0
  335. package/dist/src/planner/mutation/single-source.js +1096 -0
  336. package/dist/src/planner/mutation/single-source.js.map +1 -0
  337. package/dist/src/planner/nodes/aggregate-node.js +3 -3
  338. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  339. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  340. package/dist/src/planner/nodes/alias-node.js +5 -1
  341. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  342. package/dist/src/planner/nodes/alter-table-node.d.ts +124 -1
  343. package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
  344. package/dist/src/planner/nodes/alter-table-node.js +27 -0
  345. package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
  346. package/dist/src/planner/nodes/analyze-node.d.ts +2 -1
  347. package/dist/src/planner/nodes/analyze-node.d.ts.map +1 -1
  348. package/dist/src/planner/nodes/analyze-node.js +18 -1
  349. package/dist/src/planner/nodes/analyze-node.js.map +1 -1
  350. package/dist/src/planner/nodes/asserted-keys-node.d.ts +43 -0
  351. package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -0
  352. package/dist/src/planner/nodes/asserted-keys-node.js +99 -0
  353. package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -0
  354. package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
  355. package/dist/src/planner/nodes/async-gather-node.js +33 -8
  356. package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
  357. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  358. package/dist/src/planner/nodes/bloom-join-node.js +2 -1
  359. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  360. package/dist/src/planner/nodes/create-view-node.d.ts +7 -2
  361. package/dist/src/planner/nodes/create-view-node.d.ts.map +1 -1
  362. package/dist/src/planner/nodes/create-view-node.js +4 -1
  363. package/dist/src/planner/nodes/create-view-node.js.map +1 -1
  364. package/dist/src/planner/nodes/declarative-schema.d.ts +13 -1
  365. package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -1
  366. package/dist/src/planner/nodes/declarative-schema.js +32 -0
  367. package/dist/src/planner/nodes/declarative-schema.js.map +1 -1
  368. package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
  369. package/dist/src/planner/nodes/distinct-node.js +2 -0
  370. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  371. package/dist/src/planner/nodes/dml-executor-node.d.ts +29 -1
  372. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  373. package/dist/src/planner/nodes/dml-executor-node.js +27 -3
  374. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  375. package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -1
  376. package/dist/src/planner/nodes/eager-prefetch-node.js +2 -0
  377. package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -1
  378. package/dist/src/planner/nodes/envelope-scan-node.d.ts +42 -0
  379. package/dist/src/planner/nodes/envelope-scan-node.d.ts.map +1 -0
  380. package/dist/src/planner/nodes/envelope-scan-node.js +62 -0
  381. package/dist/src/planner/nodes/envelope-scan-node.js.map +1 -0
  382. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
  383. package/dist/src/planner/nodes/fanout-lookup-join-node.js +11 -1
  384. package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
  385. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  386. package/dist/src/planner/nodes/filter.js +63 -13
  387. package/dist/src/planner/nodes/filter.js.map +1 -1
  388. package/dist/src/planner/nodes/join-node.d.ts +41 -1
  389. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  390. package/dist/src/planner/nodes/join-node.js +78 -8
  391. package/dist/src/planner/nodes/join-node.js.map +1 -1
  392. package/dist/src/planner/nodes/join-utils.d.ts +33 -6
  393. package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
  394. package/dist/src/planner/nodes/join-utils.js +124 -9
  395. package/dist/src/planner/nodes/join-utils.js.map +1 -1
  396. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +104 -0
  397. package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -0
  398. package/dist/src/planner/nodes/lens-auxiliary-access-node.js +91 -0
  399. package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -0
  400. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  401. package/dist/src/planner/nodes/limit-offset.js +4 -5
  402. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  403. package/dist/src/planner/nodes/materialized-view-nodes.d.ts +69 -0
  404. package/dist/src/planner/nodes/materialized-view-nodes.d.ts.map +1 -0
  405. package/dist/src/planner/nodes/materialized-view-nodes.js +111 -0
  406. package/dist/src/planner/nodes/materialized-view-nodes.js.map +1 -0
  407. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  408. package/dist/src/planner/nodes/merge-join-node.js +2 -1
  409. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  410. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
  411. package/dist/src/planner/nodes/ordinal-slice-node.js +2 -0
  412. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
  413. package/dist/src/planner/nodes/plan-node-type.d.ts +9 -0
  414. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  415. package/dist/src/planner/nodes/plan-node-type.js +9 -0
  416. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  417. package/dist/src/planner/nodes/plan-node.d.ts +265 -5
  418. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  419. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  420. package/dist/src/planner/nodes/pragma.d.ts +2 -1
  421. package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
  422. package/dist/src/planner/nodes/pragma.js +12 -0
  423. package/dist/src/planner/nodes/pragma.js.map +1 -1
  424. package/dist/src/planner/nodes/project-node.d.ts +14 -1
  425. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  426. package/dist/src/planner/nodes/project-node.js +85 -11
  427. package/dist/src/planner/nodes/project-node.js.map +1 -1
  428. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  429. package/dist/src/planner/nodes/reference.js +62 -27
  430. package/dist/src/planner/nodes/reference.js.map +1 -1
  431. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  432. package/dist/src/planner/nodes/retrieve-node.js +7 -0
  433. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  434. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  435. package/dist/src/planner/nodes/returning-node.js +10 -3
  436. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  437. package/dist/src/planner/nodes/scalar.d.ts +20 -0
  438. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  439. package/dist/src/planner/nodes/scalar.js +71 -14
  440. package/dist/src/planner/nodes/scalar.js.map +1 -1
  441. package/dist/src/planner/nodes/set-object-tags-node.d.ts +39 -0
  442. package/dist/src/planner/nodes/set-object-tags-node.d.ts.map +1 -0
  443. package/dist/src/planner/nodes/set-object-tags-node.js +41 -0
  444. package/dist/src/planner/nodes/set-object-tags-node.js.map +1 -0
  445. package/dist/src/planner/nodes/set-operation-node.d.ts +123 -1
  446. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  447. package/dist/src/planner/nodes/set-operation-node.js +291 -18
  448. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  449. package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
  450. package/dist/src/planner/nodes/single-row.js +3 -0
  451. package/dist/src/planner/nodes/single-row.js.map +1 -1
  452. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  453. package/dist/src/planner/nodes/sort.js +7 -6
  454. package/dist/src/planner/nodes/sort.js.map +1 -1
  455. package/dist/src/planner/nodes/subquery.d.ts +2 -0
  456. package/dist/src/planner/nodes/subquery.d.ts.map +1 -1
  457. package/dist/src/planner/nodes/subquery.js +18 -2
  458. package/dist/src/planner/nodes/subquery.js.map +1 -1
  459. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  460. package/dist/src/planner/nodes/table-access-nodes.js +23 -3
  461. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  462. package/dist/src/planner/nodes/table-function-call.js +6 -0
  463. package/dist/src/planner/nodes/table-function-call.js.map +1 -1
  464. package/dist/src/planner/nodes/values-node.d.ts +1 -0
  465. package/dist/src/planner/nodes/values-node.d.ts.map +1 -1
  466. package/dist/src/planner/nodes/values-node.js +16 -6
  467. package/dist/src/planner/nodes/values-node.js.map +1 -1
  468. package/dist/src/planner/nodes/view-mutation-node.d.ts +259 -0
  469. package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -0
  470. package/dist/src/planner/nodes/view-mutation-node.js +273 -0
  471. package/dist/src/planner/nodes/view-mutation-node.js.map +1 -0
  472. package/dist/src/planner/nodes/window-function.d.ts +17 -1
  473. package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
  474. package/dist/src/planner/nodes/window-function.js +15 -1
  475. package/dist/src/planner/nodes/window-function.js.map +1 -1
  476. package/dist/src/planner/nodes/window-node.js +2 -2
  477. package/dist/src/planner/nodes/window-node.js.map +1 -1
  478. package/dist/src/planner/optimizer.d.ts.map +1 -1
  479. package/dist/src/planner/optimizer.js +372 -39
  480. package/dist/src/planner/optimizer.js.map +1 -1
  481. package/dist/src/planner/planning-context.d.ts +1 -1
  482. package/dist/src/planner/planning-context.d.ts.map +1 -1
  483. package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts +70 -0
  484. package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts.map +1 -0
  485. package/dist/src/planner/rules/access/lens-access-form-matcher.js +156 -0
  486. package/dist/src/planner/rules/access/lens-access-form-matcher.js.map +1 -0
  487. package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts +31 -0
  488. package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts.map +1 -0
  489. package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js +176 -0
  490. package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js.map +1 -0
  491. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  492. package/dist/src/planner/rules/access/rule-select-access-path.js +435 -37
  493. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  494. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
  495. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +9 -0
  496. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
  497. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +39 -0
  498. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -0
  499. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +616 -0
  500. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -0
  501. package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts.map +1 -1
  502. package/dist/src/planner/rules/cache/rule-scalar-cse.js +8 -1
  503. package/dist/src/planner/rules/cache/rule-scalar-cse.js.map +1 -1
  504. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +36 -0
  505. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
  506. package/dist/src/planner/rules/join/equi-pair-extractor.js +38 -1
  507. package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
  508. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
  509. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +10 -0
  510. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
  511. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
  512. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +19 -1
  513. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
  514. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +130 -0
  515. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts.map +1 -0
  516. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +206 -0
  517. package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js.map +1 -0
  518. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +67 -14
  519. package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
  520. package/dist/src/planner/rules/join/rule-join-elimination.js +81 -25
  521. package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
  522. package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts +84 -0
  523. package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts.map +1 -0
  524. package/dist/src/planner/rules/join/rule-join-existence-pruning.js +138 -0
  525. package/dist/src/planner/rules/join/rule-join-existence-pruning.js.map +1 -0
  526. package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
  527. package/dist/src/planner/rules/join/rule-join-greedy-commute.js +9 -1
  528. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
  529. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  530. package/dist/src/planner/rules/join/rule-join-physical-selection.js +12 -1
  531. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  532. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -1
  533. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +4 -0
  534. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -1
  535. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
  536. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +4 -0
  537. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
  538. package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
  539. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +10 -0
  540. package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
  541. package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts +286 -0
  542. package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts.map +1 -0
  543. package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js +548 -0
  544. package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js.map +1 -0
  545. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -1
  546. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +9 -1
  547. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -1
  548. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -1
  549. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +7 -0
  550. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
  551. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -1
  552. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +10 -1
  553. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -1
  554. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
  555. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +9 -0
  556. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
  557. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -1
  558. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +18 -0
  559. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -1
  560. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
  561. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +7 -0
  562. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
  563. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -1
  564. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +9 -0
  565. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
  566. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +13 -3
  567. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
  568. package/dist/src/planner/rules/retrieve/rule-projection-pruning.d.ts.map +1 -1
  569. package/dist/src/planner/rules/retrieve/rule-projection-pruning.js +14 -0
  570. package/dist/src/planner/rules/retrieve/rule-projection-pruning.js.map +1 -1
  571. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +1 -1
  572. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +4 -4
  573. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -1
  574. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -1
  575. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +8 -0
  576. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
  577. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -1
  578. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +7 -0
  579. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
  580. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  581. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +12 -0
  582. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  583. package/dist/src/planner/type-utils.d.ts +14 -0
  584. package/dist/src/planner/type-utils.d.ts.map +1 -1
  585. package/dist/src/planner/type-utils.js +66 -21
  586. package/dist/src/planner/type-utils.js.map +1 -1
  587. package/dist/src/planner/util/fd-utils.d.ts +177 -43
  588. package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
  589. package/dist/src/planner/util/fd-utils.js +396 -101
  590. package/dist/src/planner/util/fd-utils.js.map +1 -1
  591. package/dist/src/planner/util/ind-utils.d.ts +27 -1
  592. package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
  593. package/dist/src/planner/util/ind-utils.js +80 -6
  594. package/dist/src/planner/util/ind-utils.js.map +1 -1
  595. package/dist/src/planner/util/key-utils.d.ts.map +1 -1
  596. package/dist/src/planner/util/key-utils.js +81 -12
  597. package/dist/src/planner/util/key-utils.js.map +1 -1
  598. package/dist/src/planner/util/set-op-wrapper.d.ts +37 -0
  599. package/dist/src/planner/util/set-op-wrapper.d.ts.map +1 -0
  600. package/dist/src/planner/util/set-op-wrapper.js +82 -0
  601. package/dist/src/planner/util/set-op-wrapper.js.map +1 -0
  602. package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
  603. package/dist/src/planner/validation/plan-validator.js +1 -0
  604. package/dist/src/planner/validation/plan-validator.js.map +1 -1
  605. package/dist/src/runtime/context-helpers.d.ts +13 -1
  606. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  607. package/dist/src/runtime/context-helpers.js +7 -1
  608. package/dist/src/runtime/context-helpers.js.map +1 -1
  609. package/dist/src/runtime/delta-executor.d.ts +30 -1
  610. package/dist/src/runtime/delta-executor.d.ts.map +1 -1
  611. package/dist/src/runtime/delta-executor.js +29 -4
  612. package/dist/src/runtime/delta-executor.js.map +1 -1
  613. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  614. package/dist/src/runtime/emit/add-constraint.js +38 -5
  615. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  616. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  617. package/dist/src/runtime/emit/aggregate.js +10 -8
  618. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  619. package/dist/src/runtime/emit/alter-table.d.ts +1 -1
  620. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  621. package/dist/src/runtime/emit/alter-table.js +664 -108
  622. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  623. package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
  624. package/dist/src/runtime/emit/analyze.js +2 -1
  625. package/dist/src/runtime/emit/analyze.js.map +1 -1
  626. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  627. package/dist/src/runtime/emit/asof-scan.js +18 -5
  628. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  629. package/dist/src/runtime/emit/asserted-keys.d.ts +13 -0
  630. package/dist/src/runtime/emit/asserted-keys.d.ts.map +1 -0
  631. package/dist/src/runtime/emit/asserted-keys.js +13 -0
  632. package/dist/src/runtime/emit/asserted-keys.js.map +1 -0
  633. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  634. package/dist/src/runtime/emit/between.js +24 -19
  635. package/dist/src/runtime/emit/between.js.map +1 -1
  636. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  637. package/dist/src/runtime/emit/binary.js +5 -9
  638. package/dist/src/runtime/emit/binary.js.map +1 -1
  639. package/dist/src/runtime/emit/block.d.ts.map +1 -1
  640. package/dist/src/runtime/emit/block.js +11 -2
  641. package/dist/src/runtime/emit/block.js.map +1 -1
  642. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  643. package/dist/src/runtime/emit/bloom-join.js +8 -2
  644. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  645. package/dist/src/runtime/emit/constraint-check.js +15 -0
  646. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  647. package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
  648. package/dist/src/runtime/emit/create-table.js +8 -0
  649. package/dist/src/runtime/emit/create-table.js.map +1 -1
  650. package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
  651. package/dist/src/runtime/emit/create-view.js +16 -1
  652. package/dist/src/runtime/emit/create-view.js.map +1 -1
  653. package/dist/src/runtime/emit/dml-executor.d.ts +27 -0
  654. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  655. package/dist/src/runtime/emit/dml-executor.js +413 -193
  656. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  657. package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
  658. package/dist/src/runtime/emit/drop-table.js +10 -0
  659. package/dist/src/runtime/emit/drop-table.js.map +1 -1
  660. package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
  661. package/dist/src/runtime/emit/drop-view.js +17 -0
  662. package/dist/src/runtime/emit/drop-view.js.map +1 -1
  663. package/dist/src/runtime/emit/envelope-scan.d.ts +13 -0
  664. package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -0
  665. package/dist/src/runtime/emit/envelope-scan.js +22 -0
  666. package/dist/src/runtime/emit/envelope-scan.js.map +1 -0
  667. package/dist/src/runtime/emit/join.d.ts +10 -2
  668. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  669. package/dist/src/runtime/emit/join.js +128 -38
  670. package/dist/src/runtime/emit/join.js.map +1 -1
  671. package/dist/src/runtime/emit/lens-auxiliary-access.d.ts +16 -0
  672. package/dist/src/runtime/emit/lens-auxiliary-access.d.ts.map +1 -0
  673. package/dist/src/runtime/emit/lens-auxiliary-access.js +16 -0
  674. package/dist/src/runtime/emit/lens-auxiliary-access.js.map +1 -0
  675. package/dist/src/runtime/emit/materialized-view-helpers.d.ts +640 -0
  676. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -0
  677. package/dist/src/runtime/emit/materialized-view-helpers.js +2576 -0
  678. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -0
  679. package/dist/src/runtime/emit/materialized-view.d.ts +31 -0
  680. package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -0
  681. package/dist/src/runtime/emit/materialized-view.js +187 -0
  682. package/dist/src/runtime/emit/materialized-view.js.map +1 -0
  683. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  684. package/dist/src/runtime/emit/merge-join.js +15 -3
  685. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  686. package/dist/src/runtime/emit/project.d.ts.map +1 -1
  687. package/dist/src/runtime/emit/project.js +10 -5
  688. package/dist/src/runtime/emit/project.js.map +1 -1
  689. package/dist/src/runtime/emit/schema-declarative.d.ts +1 -0
  690. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  691. package/dist/src/runtime/emit/schema-declarative.js +101 -5
  692. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  693. package/dist/src/runtime/emit/set-object-tags.d.ts +16 -0
  694. package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -0
  695. package/dist/src/runtime/emit/set-object-tags.js +57 -0
  696. package/dist/src/runtime/emit/set-object-tags.js.map +1 -0
  697. package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
  698. package/dist/src/runtime/emit/set-operation.js +140 -24
  699. package/dist/src/runtime/emit/set-operation.js.map +1 -1
  700. package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
  701. package/dist/src/runtime/emit/subquery.js +110 -5
  702. package/dist/src/runtime/emit/subquery.js.map +1 -1
  703. package/dist/src/runtime/emit/unary.d.ts.map +1 -1
  704. package/dist/src/runtime/emit/unary.js +34 -6
  705. package/dist/src/runtime/emit/unary.js.map +1 -1
  706. package/dist/src/runtime/emit/view-mutation.d.ts +70 -0
  707. package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -0
  708. package/dist/src/runtime/emit/view-mutation.js +299 -0
  709. package/dist/src/runtime/emit/view-mutation.js.map +1 -0
  710. package/dist/src/runtime/emit/window.js +29 -5
  711. package/dist/src/runtime/emit/window.js.map +1 -1
  712. package/dist/src/runtime/foreign-key-actions.d.ts +66 -3
  713. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  714. package/dist/src/runtime/foreign-key-actions.js +580 -172
  715. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  716. package/dist/src/runtime/parallel-driver.d.ts +4 -1
  717. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  718. package/dist/src/runtime/parallel-driver.js +5 -1
  719. package/dist/src/runtime/parallel-driver.js.map +1 -1
  720. package/dist/src/runtime/register.d.ts.map +1 -1
  721. package/dist/src/runtime/register.js +17 -1
  722. package/dist/src/runtime/register.js.map +1 -1
  723. package/dist/src/runtime/types.d.ts +10 -0
  724. package/dist/src/runtime/types.d.ts.map +1 -1
  725. package/dist/src/runtime/types.js.map +1 -1
  726. package/dist/src/schema/basis-backfill.d.ts +63 -0
  727. package/dist/src/schema/basis-backfill.d.ts.map +1 -0
  728. package/dist/src/schema/basis-backfill.js +161 -0
  729. package/dist/src/schema/basis-backfill.js.map +1 -0
  730. package/dist/src/schema/catalog.d.ts +115 -1
  731. package/dist/src/schema/catalog.d.ts.map +1 -1
  732. package/dist/src/schema/catalog.js +249 -22
  733. package/dist/src/schema/catalog.js.map +1 -1
  734. package/dist/src/schema/change-events.d.ts +42 -1
  735. package/dist/src/schema/change-events.d.ts.map +1 -1
  736. package/dist/src/schema/change-events.js.map +1 -1
  737. package/dist/src/schema/column.d.ts +16 -0
  738. package/dist/src/schema/column.d.ts.map +1 -1
  739. package/dist/src/schema/column.js.map +1 -1
  740. package/dist/src/schema/constraint-builder.d.ts +182 -0
  741. package/dist/src/schema/constraint-builder.d.ts.map +1 -0
  742. package/dist/src/schema/constraint-builder.js +424 -0
  743. package/dist/src/schema/constraint-builder.js.map +1 -0
  744. package/dist/src/schema/ddl-generator.d.ts +86 -1
  745. package/dist/src/schema/ddl-generator.d.ts.map +1 -1
  746. package/dist/src/schema/ddl-generator.js +316 -20
  747. package/dist/src/schema/ddl-generator.js.map +1 -1
  748. package/dist/src/schema/declared-schema-manager.d.ts +51 -0
  749. package/dist/src/schema/declared-schema-manager.d.ts.map +1 -1
  750. package/dist/src/schema/declared-schema-manager.js +61 -0
  751. package/dist/src/schema/declared-schema-manager.js.map +1 -1
  752. package/dist/src/schema/derivation.d.ts +106 -0
  753. package/dist/src/schema/derivation.d.ts.map +1 -0
  754. package/dist/src/schema/derivation.js +25 -0
  755. package/dist/src/schema/derivation.js.map +1 -0
  756. package/dist/src/schema/function.d.ts +13 -0
  757. package/dist/src/schema/function.d.ts.map +1 -1
  758. package/dist/src/schema/function.js.map +1 -1
  759. package/dist/src/schema/lens-ack.d.ts +90 -0
  760. package/dist/src/schema/lens-ack.d.ts.map +1 -0
  761. package/dist/src/schema/lens-ack.js +361 -0
  762. package/dist/src/schema/lens-ack.js.map +1 -0
  763. package/dist/src/schema/lens-compiler.d.ts +62 -0
  764. package/dist/src/schema/lens-compiler.d.ts.map +1 -0
  765. package/dist/src/schema/lens-compiler.js +1594 -0
  766. package/dist/src/schema/lens-compiler.js.map +1 -0
  767. package/dist/src/schema/lens-fk-discovery.d.ts +175 -0
  768. package/dist/src/schema/lens-fk-discovery.d.ts.map +1 -0
  769. package/dist/src/schema/lens-fk-discovery.js +336 -0
  770. package/dist/src/schema/lens-fk-discovery.js.map +1 -0
  771. package/dist/src/schema/lens-prover.d.ts +336 -0
  772. package/dist/src/schema/lens-prover.d.ts.map +1 -0
  773. package/dist/src/schema/lens-prover.js +1988 -0
  774. package/dist/src/schema/lens-prover.js.map +1 -0
  775. package/dist/src/schema/lens.d.ts +254 -0
  776. package/dist/src/schema/lens.d.ts.map +1 -0
  777. package/dist/src/schema/lens.js +21 -0
  778. package/dist/src/schema/lens.js.map +1 -0
  779. package/dist/src/schema/manager.d.ts +676 -18
  780. package/dist/src/schema/manager.d.ts.map +1 -1
  781. package/dist/src/schema/manager.js +1573 -238
  782. package/dist/src/schema/manager.js.map +1 -1
  783. package/dist/src/schema/mapping-advertisement-tags.d.ts +39 -0
  784. package/dist/src/schema/mapping-advertisement-tags.d.ts.map +1 -0
  785. package/dist/src/schema/mapping-advertisement-tags.js +216 -0
  786. package/dist/src/schema/mapping-advertisement-tags.js.map +1 -0
  787. package/dist/src/schema/rename-rewriter.d.ts +45 -4
  788. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  789. package/dist/src/schema/rename-rewriter.js +412 -19
  790. package/dist/src/schema/rename-rewriter.js.map +1 -1
  791. package/dist/src/schema/reserved-tags-policy.d.ts +32 -0
  792. package/dist/src/schema/reserved-tags-policy.d.ts.map +1 -0
  793. package/dist/src/schema/reserved-tags-policy.js +34 -0
  794. package/dist/src/schema/reserved-tags-policy.js.map +1 -0
  795. package/dist/src/schema/reserved-tags.d.ts +170 -0
  796. package/dist/src/schema/reserved-tags.d.ts.map +1 -0
  797. package/dist/src/schema/reserved-tags.js +507 -0
  798. package/dist/src/schema/reserved-tags.js.map +1 -0
  799. package/dist/src/schema/schema-differ.d.ts +158 -2
  800. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  801. package/dist/src/schema/schema-differ.js +1460 -78
  802. package/dist/src/schema/schema-differ.js.map +1 -1
  803. package/dist/src/schema/schema-hasher.d.ts +8 -3
  804. package/dist/src/schema/schema-hasher.d.ts.map +1 -1
  805. package/dist/src/schema/schema-hasher.js +22 -2
  806. package/dist/src/schema/schema-hasher.js.map +1 -1
  807. package/dist/src/schema/schema.d.ts +25 -1
  808. package/dist/src/schema/schema.d.ts.map +1 -1
  809. package/dist/src/schema/schema.js +36 -2
  810. package/dist/src/schema/schema.js.map +1 -1
  811. package/dist/src/schema/table.d.ts +259 -10
  812. package/dist/src/schema/table.d.ts.map +1 -1
  813. package/dist/src/schema/table.js +309 -26
  814. package/dist/src/schema/table.js.map +1 -1
  815. package/dist/src/schema/unique-enforcement.d.ts +78 -0
  816. package/dist/src/schema/unique-enforcement.d.ts.map +1 -0
  817. package/dist/src/schema/unique-enforcement.js +93 -0
  818. package/dist/src/schema/unique-enforcement.js.map +1 -0
  819. package/dist/src/schema/view.d.ts +83 -2
  820. package/dist/src/schema/view.d.ts.map +1 -1
  821. package/dist/src/schema/view.js +67 -1
  822. package/dist/src/schema/view.js.map +1 -1
  823. package/dist/src/schema/window-function.d.ts +9 -1
  824. package/dist/src/schema/window-function.d.ts.map +1 -1
  825. package/dist/src/schema/window-function.js.map +1 -1
  826. package/dist/src/util/comparison.d.ts +24 -0
  827. package/dist/src/util/comparison.d.ts.map +1 -1
  828. package/dist/src/util/comparison.js +34 -0
  829. package/dist/src/util/comparison.js.map +1 -1
  830. package/dist/src/util/mutation-statement.d.ts.map +1 -1
  831. package/dist/src/util/mutation-statement.js +4 -1
  832. package/dist/src/util/mutation-statement.js.map +1 -1
  833. package/dist/src/util/serialization.d.ts +9 -0
  834. package/dist/src/util/serialization.d.ts.map +1 -1
  835. package/dist/src/util/serialization.js +26 -0
  836. package/dist/src/util/serialization.js.map +1 -1
  837. package/dist/src/vtab/backing-host.d.ts +286 -0
  838. package/dist/src/vtab/backing-host.d.ts.map +1 -0
  839. package/dist/src/vtab/backing-host.js +118 -0
  840. package/dist/src/vtab/backing-host.js.map +1 -0
  841. package/dist/src/vtab/best-access-plan.d.ts +21 -0
  842. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  843. package/dist/src/vtab/best-access-plan.js.map +1 -1
  844. package/dist/src/vtab/capabilities.d.ts +5 -5
  845. package/dist/src/vtab/capabilities.d.ts.map +1 -1
  846. package/dist/src/vtab/mapping-advertisement.d.ts +163 -0
  847. package/dist/src/vtab/mapping-advertisement.d.ts.map +1 -0
  848. package/dist/src/vtab/mapping-advertisement.js +2 -0
  849. package/dist/src/vtab/mapping-advertisement.js.map +1 -0
  850. package/dist/src/vtab/memory/index.d.ts +64 -4
  851. package/dist/src/vtab/memory/index.d.ts.map +1 -1
  852. package/dist/src/vtab/memory/index.js +119 -12
  853. package/dist/src/vtab/memory/index.js.map +1 -1
  854. package/dist/src/vtab/memory/layer/base.d.ts +38 -1
  855. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  856. package/dist/src/vtab/memory/layer/base.js +112 -24
  857. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  858. package/dist/src/vtab/memory/layer/manager.d.ts +291 -4
  859. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  860. package/dist/src/vtab/memory/layer/manager.js +1050 -91
  861. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  862. package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
  863. package/dist/src/vtab/memory/layer/plan-filter.js +35 -6
  864. package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
  865. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  866. package/dist/src/vtab/memory/layer/scan-layer.js +66 -14
  867. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  868. package/dist/src/vtab/memory/layer/scan-plan.d.ts +14 -0
  869. package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
  870. package/dist/src/vtab/memory/layer/scan-plan.js +27 -4
  871. package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
  872. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  873. package/dist/src/vtab/memory/layer/transaction.js +5 -1
  874. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  875. package/dist/src/vtab/memory/module.d.ts +17 -0
  876. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  877. package/dist/src/vtab/memory/module.js +82 -3
  878. package/dist/src/vtab/memory/module.js.map +1 -1
  879. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  880. package/dist/src/vtab/memory/table.js +15 -5
  881. package/dist/src/vtab/memory/table.js.map +1 -1
  882. package/dist/src/vtab/memory/types.d.ts +20 -2
  883. package/dist/src/vtab/memory/types.d.ts.map +1 -1
  884. package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
  885. package/dist/src/vtab/memory/utils/predicate.js +46 -24
  886. package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
  887. package/dist/src/vtab/memory/utils/primary-key-encode.d.ts +31 -0
  888. package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -0
  889. package/dist/src/vtab/memory/utils/primary-key-encode.js +101 -0
  890. package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -0
  891. package/dist/src/vtab/memory/utils/primary-key.d.ts +8 -0
  892. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  893. package/dist/src/vtab/memory/utils/primary-key.js +12 -5
  894. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  895. package/dist/src/vtab/module.d.ts +203 -4
  896. package/dist/src/vtab/module.d.ts.map +1 -1
  897. package/dist/src/vtab/table.d.ts +9 -0
  898. package/dist/src/vtab/table.d.ts.map +1 -1
  899. package/dist/src/vtab/table.js.map +1 -1
  900. package/package.json +6 -5
@@ -1,6 +1,7 @@
1
1
  import { PlanNodeType } from '../nodes/plan-node-type.js';
2
2
  import { BinaryOpNode, UnaryOpNode, LiteralNode, BetweenNode } from '../nodes/scalar.js';
3
3
  import { InNode } from '../nodes/subquery.js';
4
+ import { resolveComparisonCollation, resolveInCollation } from './comparison-collation.js';
4
5
  /**
5
6
  * Normalize a predicate for push-down and constraint extraction.
6
7
  *
@@ -176,9 +177,13 @@ function flipComparison(op) {
176
177
  // Attempt to collapse OR of equalities into an IN list when:
177
178
  // - All disjuncts are of the form (col = literal)
178
179
  // - The same column is used
180
+ // - Every disjunct's effective comparison collation equals the collation the
181
+ // rewritten IN would compare under (the lattice merge of the column with
182
+ // every collected value)
179
183
  // - Literal list is small (<= 32) to avoid large INs
180
- function tryCollapseOrToIn(scope, disjuncts) {
184
+ function tryCollapseOrToIn(_scope, disjuncts) {
181
185
  const values = [];
186
+ const disjunctCollations = [];
182
187
  let column = null;
183
188
  for (const d of disjuncts) {
184
189
  if (d.nodeType !== PlanNodeType.BinaryOp)
@@ -200,6 +205,16 @@ function tryCollapseOrToIn(scope, disjuncts) {
200
205
  else {
201
206
  return null;
202
207
  }
208
+ // Per-disjunct effective collation under the provenance lattice
209
+ // (symmetric, so the col/lit spelling order is immaterial). Constant
210
+ // folding keeps `'bob' COLLATE NOCASE` as a literal whose *type*
211
+ // carries rank-3 NOCASE, so the shape checks above never see the
212
+ // wrapper but the resolution still does. A conflict cannot normally
213
+ // reach here (plan-time validation rejected it); bail conservatively.
214
+ const disjunctResolution = resolveComparisonCollation(b.left.getType(), b.right.getType());
215
+ if (disjunctResolution.kind !== 'resolved')
216
+ return null;
217
+ disjunctCollations.push(disjunctResolution.name);
203
218
  if (!column) {
204
219
  column = col;
205
220
  }
@@ -212,6 +227,20 @@ function tryCollapseOrToIn(scope, disjuncts) {
212
227
  }
213
228
  if (!column || values.length === 0)
214
229
  return null;
230
+ // Collation gate (ticket `or-equality-collapse-collation-blind`): the
231
+ // rewritten IN compares every value under ONE lattice-merged collation
232
+ // (`emitIn`), while each written disjunct compares under its own effective
233
+ // collation. Collapse only when every disjunct agrees with the merged IN
234
+ // collation; both directions are unsound otherwise (a NOCASE disjunct
235
+ // collapsed into a BINARY IN under-matches, a BINARY disjunct into a
236
+ // NOCASE IN over-matches). Declining keeps the OR as-is — a completeness
237
+ // loss only, like the >32-values bail. Gating BEFORE construction also
238
+ // guarantees the InNode below validates cleanly.
239
+ const inResolution = resolveInCollation(column.getType(), values.map(v => v.getType()));
240
+ if (inResolution.kind !== 'resolved')
241
+ return null;
242
+ if (disjunctCollations.some(name => name !== inResolution.name))
243
+ return null;
215
244
  // Build an InNode with constant values
216
245
  const ast = {
217
246
  type: 'in',
@@ -1 +1 @@
1
- {"version":3,"file":"predicate-normalizer.js","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-normalizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"predicate-normalizer.js","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-normalizer.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,29 @@
10
10
  */
11
11
  import type * as AST from '../../parser/ast.js';
12
12
  import type { SqlValue } from '../../common/types.js';
13
+ /**
14
+ * Resolves an AST column/identifier expression to a base-table column index, or
15
+ * `undefined` when it is not a (recognized) column of the frame. The default
16
+ * realization is bare-name resolution — `columnIndexFromExpr` bound to a column
17
+ * index map, ignoring any table/alias qualifier. The coverage prover injects a
18
+ * qualifier-aware variant for join bodies, so `alias.col` resolves only against
19
+ * the source `alias` actually denotes (see `coverage-prover.ts`).
20
+ */
21
+ export type ColumnIndexResolver = (expr: AST.Expression) => number | undefined;
13
22
  /**
14
23
  * Return the column index for an `AST.ColumnExpr` or unqualified
15
24
  * `AST.IdentifierExpr` that names a column in `columnIndexMap`; undefined
16
- * otherwise. Schema-qualified identifiers (`other.foo`) are rejected.
25
+ * otherwise. Schema-qualified identifiers (`other.foo`) are rejected. The
26
+ * table/alias qualifier on a `ColumnExpr` (`alias.col`) is **ignored** — bare
27
+ * name resolution only; callers needing qualifier-awareness compose a
28
+ * {@link ColumnIndexResolver}.
29
+ *
30
+ * The qualifier-blindness is load-bearing for CHECK extraction: `new.<col>`
31
+ * row-image references resolve to the bare column, which is deliberate — NEW
32
+ * is the stored row image, so NEW-qualified references are same-row facts.
33
+ * Self-table qualifiers (`t.col` on the owning table) resolve the same way.
34
+ * `old.<col>` references are NOT same-row; check-extraction screens those out
35
+ * wholesale (`containsOldRowImageRef`) before this resolver ever sees them.
17
36
  */
18
37
  export declare function columnIndexFromExpr(expr: AST.Expression, columnIndexMap: ReadonlyMap<string, number>): number | undefined;
19
38
  /**
@@ -41,6 +60,22 @@ export declare function flipComparison(op: string): string;
41
60
  * `partial-unique-extraction.ts` (top-level OR guard recognition).
42
61
  */
43
62
  export declare function flattenDisjunction(expr: AST.Expression): AST.Expression[];
63
+ /**
64
+ * Depth-first iteration over every AST node in `expr`'s subtree. Children are
65
+ * discovered reflectively (any object/array property carrying a `type` field)
66
+ * rather than via a typed visitor table, so soundness-sensitive walkers (the
67
+ * collation gate, the non-determinism screen) cannot silently miss node kinds
68
+ * a visitor enumeration forgot.
69
+ */
70
+ export declare function walkAstNodes(expr: AST.Expression): IterableIterator<AST.AstNode>;
71
+ /**
72
+ * Collect the collation name of every COLLATE node anywhere in `expr`'s
73
+ * subtree, as written (uninterpreted — no normalization). Empty array when the
74
+ * subtree contains none. Used by the schema-level value-discrimination gate
75
+ * (`comparison-collation.ts`) to detect non-BINARY wrappers inside compound
76
+ * comparison operands.
77
+ */
78
+ export declare function collectCollateNames(expr: AST.Expression): string[];
44
79
  /**
45
80
  * Collect the set of column indices referenced by `expr`. Only column /
46
81
  * identifier nodes naming columns in `columnIndexMap` count. Returns an empty
@@ -1 +1 @@
1
- {"version":3,"file":"predicate-shape.d.ts","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,GAAG,SAAS,CAWpB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,QAAQ,GAAG,SAAS,CAMvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,CAczE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,GAAG,CAAC,MAAM,CAAC,CAwBb"}
1
+ {"version":3,"file":"predicate-shape.d.ts","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,KAAK,MAAM,GAAG,SAAS,CAAC;AAE/E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,GAAG,SAAS,CAWpB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,QAAQ,GAAG,SAAS,CAMvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,CAczE;AAED;;;;;;GAMG;AACH,wBAAiB,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAmBjF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM,EAAE,CAQlE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,GAAG,CAAC,MAAM,CAAC,CASb"}
@@ -11,7 +11,17 @@
11
11
  /**
12
12
  * Return the column index for an `AST.ColumnExpr` or unqualified
13
13
  * `AST.IdentifierExpr` that names a column in `columnIndexMap`; undefined
14
- * otherwise. Schema-qualified identifiers (`other.foo`) are rejected.
14
+ * otherwise. Schema-qualified identifiers (`other.foo`) are rejected. The
15
+ * table/alias qualifier on a `ColumnExpr` (`alias.col`) is **ignored** — bare
16
+ * name resolution only; callers needing qualifier-awareness compose a
17
+ * {@link ColumnIndexResolver}.
18
+ *
19
+ * The qualifier-blindness is load-bearing for CHECK extraction: `new.<col>`
20
+ * row-image references resolve to the bare column, which is deliberate — NEW
21
+ * is the stored row image, so NEW-qualified references are same-row facts.
22
+ * Self-table qualifiers (`t.col` on the owning table) resolve the same way.
23
+ * `old.<col>` references are NOT same-row; check-extraction screens those out
24
+ * wholesale (`containsOldRowImageRef`) before this resolver ever sees them.
15
25
  */
16
26
  export function columnIndexFromExpr(expr, columnIndexMap) {
17
27
  if (expr.type === 'column') {
@@ -82,22 +92,17 @@ export function flattenDisjunction(expr) {
82
92
  return out;
83
93
  }
84
94
  /**
85
- * Collect the set of column indices referenced by `expr`. Only column /
86
- * identifier nodes naming columns in `columnIndexMap` count. Returns an empty
87
- * set when the expression references zero recognized columns; the caller can
88
- * distinguish "no columns" (constant expression) from "exactly one column"
89
- * by inspecting the size.
95
+ * Depth-first iteration over every AST node in `expr`'s subtree. Children are
96
+ * discovered reflectively (any object/array property carrying a `type` field)
97
+ * rather than via a typed visitor table, so soundness-sensitive walkers (the
98
+ * collation gate, the non-determinism screen) cannot silently miss node kinds
99
+ * a visitor enumeration forgot.
90
100
  */
91
- export function collectColumnNames(expr, columnIndexMap) {
92
- const out = new Set();
101
+ export function* walkAstNodes(expr) {
93
102
  const stack = [expr];
94
103
  while (stack.length > 0) {
95
104
  const node = stack.pop();
96
- const idx = node.type === 'column' || node.type === 'identifier'
97
- ? columnIndexFromExpr(node, columnIndexMap)
98
- : undefined;
99
- if (idx !== undefined)
100
- out.add(idx);
105
+ yield node;
101
106
  for (const key of Object.keys(node)) {
102
107
  const v = node[key];
103
108
  if (!v)
@@ -114,6 +119,39 @@ export function collectColumnNames(expr, columnIndexMap) {
114
119
  }
115
120
  }
116
121
  }
122
+ }
123
+ /**
124
+ * Collect the collation name of every COLLATE node anywhere in `expr`'s
125
+ * subtree, as written (uninterpreted — no normalization). Empty array when the
126
+ * subtree contains none. Used by the schema-level value-discrimination gate
127
+ * (`comparison-collation.ts`) to detect non-BINARY wrappers inside compound
128
+ * comparison operands.
129
+ */
130
+ export function collectCollateNames(expr) {
131
+ const out = [];
132
+ for (const node of walkAstNodes(expr)) {
133
+ if (node.type === 'collate') {
134
+ out.push(node.collation);
135
+ }
136
+ }
137
+ return out;
138
+ }
139
+ /**
140
+ * Collect the set of column indices referenced by `expr`. Only column /
141
+ * identifier nodes naming columns in `columnIndexMap` count. Returns an empty
142
+ * set when the expression references zero recognized columns; the caller can
143
+ * distinguish "no columns" (constant expression) from "exactly one column"
144
+ * by inspecting the size.
145
+ */
146
+ export function collectColumnNames(expr, columnIndexMap) {
147
+ const out = new Set();
148
+ for (const node of walkAstNodes(expr)) {
149
+ const idx = node.type === 'column' || node.type === 'identifier'
150
+ ? columnIndexFromExpr(node, columnIndexMap)
151
+ : undefined;
152
+ if (idx !== undefined)
153
+ out.add(idx);
154
+ }
117
155
  return out;
118
156
  }
119
157
  //# sourceMappingURL=predicate-shape.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"predicate-shape.js","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-shape.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"predicate-shape.js","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-shape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Query-rewrite matcher — the read-side dual of the coverage prover. It
3
+ * recognizes when an *arbitrary* scan-projection-filter query fragment (one that
4
+ * never names a materialized view) is **answered from** a covering MV, so the
5
+ * optimizer can scan the MV's backing table with a bounded residual instead of
6
+ * recomputing the body against the base tables.
7
+ *
8
+ * Distinct from `coverage-prover.ts` (which proves a *base-table UNIQUE
9
+ * constraint* is covered, on the write/enforcement path) but sharing its
10
+ * entailment vocabulary: `recognizeConjunctiveClauses` / `guardClausesEntail`
11
+ * (`partial-unique-extraction.ts`). The question answered here is **output-relation
12
+ * subsumption**: does the MV's stored output relation contain a superset (re-
13
+ * coverable via a bounded residual) of the rows the fragment produces, keyed so
14
+ * the residual recovers exactly the fragment's output?
15
+ *
16
+ * Soundness contract (mirrors the coverage prover exactly): **a false NotMatch
17
+ * only forgoes a speedup; a false Match returns wrong rows.** Every check forgoes
18
+ * the rewrite on doubt. The pre-existing recompute-over-base path is correct by
19
+ * construction; the rule only ever replaces it with a provably row-equivalent
20
+ * plan, so the rewrite is non-regressing.
21
+ *
22
+ * This phase delivers the **projection + filter subsumption** shape only.
23
+ * Aggregate rollup (`mv-query-rewrite-aggregate-rollup`) and join subsumption
24
+ * (`mv-query-rewrite-join-subsumption`) are pure additions to this matcher.
25
+ *
26
+ * ## Where the predicates come from (the pristine-fragment requirement)
27
+ *
28
+ * The fragment's WHERE is read from the live plan's `FilterNode` predicate (its
29
+ * `.expression` AST), and the MV's WHERE from `mv.derivation.selectAst.where`. Reading the
30
+ * fragment WHERE from the plan is only sound while the predicate is still an
31
+ * explicit `FilterNode` above the table access — *before* predicate-pushdown
32
+ * absorbs it into a range-bounded scan (where the matcher could no longer see it
33
+ * and would falsely treat the fragment as unfiltered). The rule that drives this
34
+ * matcher therefore fires in the **Structural rewrite pass, before grow-retrieve /
35
+ * predicate-pushdown**, where the fragment is the pristine
36
+ * `Project(Filter?(Retrieve(TableReference)))`. The shape walk additionally
37
+ * rejects any range-bounded physical scan (`SeqScan`/`IndexScan` with
38
+ * `rangeBoundedOn`, or an `IndexSeek`/`TableSeek`) as `'shape'` — defense in depth
39
+ * should an absorbed predicate ever reach the walk by another path.
40
+ *
41
+ * ## Why `.expression` recognition is sound under constant folding
42
+ *
43
+ * A scalar plan node retains its originating AST in `.expression`. Constant
44
+ * folding (which runs before the Structural pass) may make the *plan* more
45
+ * specific than its `.expression` (e.g. folding `1+1` → `2` while `.expression`
46
+ * still reads `amt > 1+1`). Such a divergence only ever makes a clause
47
+ * *unrecognized* (`literalValue` of a non-literal AST returns undefined), which is
48
+ * a conservative NotMatch — it never fabricates a recognized clause weaker than
49
+ * what the plan computes, so it cannot produce a false Match.
50
+ */
51
+ import type { RelationalPlanNode, ScalarPlanNode, GuardClause, Attribute } from '../nodes/plan-node.js';
52
+ import { ProjectNode } from '../nodes/project-node.js';
53
+ import { TableReferenceNode } from '../nodes/reference.js';
54
+ import { AggregateNode } from '../nodes/aggregate-node.js';
55
+ import { JoinNode } from '../nodes/join-node.js';
56
+ import type { MaintainedTableSchema } from '../../schema/derivation.js';
57
+ import type { TableSchema } from '../../schema/table.js';
58
+ export type RewriteFailureReason = 'no-candidate' | 'shape' | 'source-mismatch' | 'predicate-not-entailed' | 'missing-column' | 'aggregate-shape' | 'group-key-mismatch' | 'group-key-pinned' | 'aggregate-not-decomposable' | 'cost-declined';
59
+ export interface RewriteMatch {
60
+ readonly mv: MaintainedTableSchema;
61
+ readonly backing: TableSchema;
62
+ /**
63
+ * The recognized clauses of {@link residualConjuncts} — the extra predicate the
64
+ * fragment imposes beyond the MV's WHERE, in **base-table column-index** space.
65
+ * Empty ⇒ no residual filter. Exposed for diagnostics / unit tests; the rule
66
+ * builds the residual `Filter` from {@link residualConjuncts}, not from these.
67
+ */
68
+ readonly residualClauses: readonly GuardClause[];
69
+ /**
70
+ * The fragment's own WHERE conjunct plan nodes that are NOT already entailed by
71
+ * the MV's WHERE — the residual `Filter` to apply on top of the backing scan.
72
+ * Still reference the fragment's base-table attributes; the rule re-binds their
73
+ * column references onto the backing scan (via {@link backingColOfBaseCol}).
74
+ * Empty ⇒ no residual filter.
75
+ */
76
+ readonly residualConjuncts: readonly ScalarPlanNode[];
77
+ /**
78
+ * For each fragment output attribute (in output order), the backing-table column
79
+ * index that supplies it (a bare passthrough) — drives the residual `Project`.
80
+ */
81
+ readonly outputColumnMap: ReadonlyArray<{
82
+ attrId: number;
83
+ backingCol: number;
84
+ }>;
85
+ /**
86
+ * Base-table column index → backing-table column index. The rule uses this to
87
+ * re-bind both the residual conjuncts' and the output projections' column
88
+ * references onto the backing scan.
89
+ */
90
+ readonly backingColOfBaseCol: ReadonlyMap<number, number>;
91
+ /**
92
+ * Present iff this match answers a **join** fragment from a 1:1-join MV (the
93
+ * {@link matchJoinFragmentToMv} arm). The single-source arms key their residual
94
+ * re-bind on the base column index, which is ambiguous across a join (the same
95
+ * index can name a column of either source). The join arm therefore re-binds the
96
+ * residual by **stable source attribute id** instead: this maps each fragment
97
+ * `T`/`P` source attribute id to the backing column that stores it. Absent ⇒ use
98
+ * {@link backingColOfBaseCol}.
99
+ */
100
+ readonly backingColOfSourceAttrId?: ReadonlyMap<number, number>;
101
+ /** Present iff this is a {@link matchJoinFragmentToMv} match — carries the cost
102
+ * gate's per-side cardinality inputs. Absent for the single-source arms. */
103
+ readonly joinInfo?: JoinRewriteInfo;
104
+ /**
105
+ * Present iff this match answers an **aggregate** fragment from a grouped MV
106
+ * (the {@link matchAggregateFragmentToMv} arm). Absent ⇒ a plain
107
+ * projection-filter match (the foundation arm).
108
+ *
109
+ * - `exact === true` (query group key == MV group key) — the backing rows *are*
110
+ * the answer: {@link outputColumnMap} + {@link residualConjuncts} fully
111
+ * describe a direct scan, so the rule reuses the foundation's `buildReplacement`
112
+ * (scan → optional residual Filter on group-key columns → residual Project). No
113
+ * re-aggregation. The other `rollup` fields are unused.
114
+ * - `exact === false` (query group key ⊊ MV group key, incl. the empty global key)
115
+ * — the rule re-aggregates the backing rows down to {@link groupKeyBackingCols}
116
+ * using the per-aggregate {@link aggregates} recipes. {@link outputColumnMap}
117
+ * is unused in this case.
118
+ */
119
+ readonly rollup?: AggregateRollup;
120
+ }
121
+ /**
122
+ * How to reconstruct one fragment aggregate from the MV's stored backing columns
123
+ * during a rollup re-aggregation. The recombine is sound only for the
124
+ * decomposable-aggregate allowlist (see {@link matchAggregateFragmentToMv}).
125
+ */
126
+ export interface AggregateRecipe {
127
+ /** The fragment aggregate's output attribute (preserved through the rewrite). */
128
+ readonly outAttr: Attribute;
129
+ /**
130
+ * The recombine operator over the backing column(s):
131
+ * - `'sum'` — re-aggregate `sum(backingCol)` (reconstructs `sum(x)`).
132
+ * - `'count'` — re-aggregate `coalesce(sum(backingCol), 0)` (reconstructs
133
+ * `count(*)` / `count(x)`; the coalesce restores the count-over-zero-rows = 0
134
+ * semantics a bare `sum` would surface as NULL for the empty global group).
135
+ * - `'min'` / `'max'` — re-aggregate `min`/`max` of the partials.
136
+ * - `'avg'` — `sum(sumBackingCol) / sum(countBackingCol)` (Quereus `/` is real
137
+ * division, matching the native `avg`; NULL/0 over zero rows ⇒ NULL).
138
+ */
139
+ readonly kind: 'sum' | 'count' | 'min' | 'max' | 'avg';
140
+ /** Backing column(s): `[col]` for sum/count/min/max; `[sumCol, countCol]` for avg. */
141
+ readonly backingCols: readonly number[];
142
+ }
143
+ /** The aggregate-rollup descriptor on a {@link RewriteMatch}. */
144
+ export interface AggregateRollup {
145
+ /** True ⇒ exact-key direct scan (no re-aggregation); false ⇒ rollup re-aggregate. */
146
+ readonly exact: boolean;
147
+ /** Query group key in backing-column indices (in fragment group order; `[]` for the global scalar). */
148
+ readonly groupKeyBackingCols: readonly number[];
149
+ /** Fragment group-key output attributes (in order) — preserved by the re-aggregate's group columns. */
150
+ readonly groupOutAttrs: readonly Attribute[];
151
+ /** One recipe per fragment aggregate, in fragment aggregate order. */
152
+ readonly aggregates: readonly AggregateRecipe[];
153
+ }
154
+ /** Per-side cardinality inputs for the join arm's cost gate (see the rule). The
155
+ * driving `T` side is 1:1 with the joined output, so the backing carries one row
156
+ * per governed `T` row; the recompute side additionally pays the `P` scan + join. */
157
+ export interface JoinRewriteInfo {
158
+ readonly drivingTable: TableSchema;
159
+ readonly lookupTable: TableSchema;
160
+ }
161
+ export type RewriteResult = {
162
+ match: RewriteMatch;
163
+ } | {
164
+ match: undefined;
165
+ reason: RewriteFailureReason;
166
+ };
167
+ /** A predicate over the named function is deterministic iff this returns true. */
168
+ export type DeterminismProbe = (fnName: string, argc: number) => boolean;
169
+ /**
170
+ * The recognized scan-project-filter shape of a query fragment: its single base
171
+ * table, the bare-column output mapping, and the WHERE conjuncts. Shared so the
172
+ * rule can analyze the fragment once (to enumerate candidate MVs by base table)
173
+ * and reuse the result across every candidate match.
174
+ */
175
+ export interface FragmentShape {
176
+ readonly project: ProjectNode;
177
+ readonly tableRef: TableReferenceNode;
178
+ readonly baseTable: TableSchema;
179
+ /** One per fragment output column, in order. `baseCol` is the base-table column
180
+ * the bare-column projection passes through, or `undefined` for a computed
181
+ * output (v1 cannot recover it from the backing — a `missing-column` NotMatch). */
182
+ readonly outputs: ReadonlyArray<{
183
+ attrId: number;
184
+ baseCol: number | undefined;
185
+ }>;
186
+ /** Top-level AND-split conjuncts of the fragment WHERE (empty ⇒ no filter). */
187
+ readonly conjuncts: readonly ScalarPlanNode[];
188
+ }
189
+ export type FragmentResult = {
190
+ ok: true;
191
+ shape: FragmentShape;
192
+ } | {
193
+ ok: false;
194
+ reason: RewriteFailureReason;
195
+ };
196
+ /**
197
+ * Recognize a query fragment rooted at a `ProjectNode` as a single-source
198
+ * scan-project-filter chain. Walks `Project → Filter? → {Retrieve|Alias|full
199
+ * SeqScan/IndexScan}* → TableReference`. Any other node (Sort/Limit/Distinct/
200
+ * Aggregate/Join/SetOp, or a row-reducing seek / range-bounded scan) ⇒ `'shape'`.
201
+ */
202
+ export declare function analyzeQueryFragment(root: RelationalPlanNode): FragmentResult;
203
+ /**
204
+ * Decide whether `mv` (backed by `backing`) answers the fragment `shape`. See the
205
+ * module doc for the soundness contract. `isDeterministic` probes the function
206
+ * registry for the determinism gate (a registered MV is already deterministic by
207
+ * construction — the create gate rejects non-deterministic bodies — so this is
208
+ * defense in depth).
209
+ */
210
+ export declare function matchFragmentToMv(shape: FragmentShape, mv: MaintainedTableSchema, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
211
+ /**
212
+ * Convenience entry point (used by the unit tests): analyze `root` as a fragment
213
+ * and, on success, match it against `mv`. Returns the fragment-analysis failure
214
+ * reason when `root` is not a recognizable scan-project-filter chain.
215
+ */
216
+ export declare function matchMaterializedViewRewrite(root: RelationalPlanNode, mv: MaintainedTableSchema, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
217
+ /** A fragment aggregate recognized as `f([col])` / `count(*)` over the base table. */
218
+ export interface FragmentAggregate {
219
+ /** Lowercased aggregate function name. */
220
+ readonly funcName: string;
221
+ /** Base-table column index of a bare-column argument; `undefined` ⇒ no argument (`count(*)`). */
222
+ readonly argBaseCol: number | undefined;
223
+ readonly isDistinct: boolean;
224
+ /** The fragment output attribute this aggregate produces. */
225
+ readonly outAttr: Attribute;
226
+ }
227
+ /**
228
+ * The recognized shape of an aggregate query fragment: its single base table, the
229
+ * bare-column GROUP BY key, the aggregates, and the pre-aggregation WHERE conjuncts.
230
+ */
231
+ export interface AggregateFragmentShape {
232
+ readonly aggregateNode: AggregateNode;
233
+ readonly tableRef: TableReferenceNode;
234
+ readonly baseTable: TableSchema;
235
+ /** Query GROUP BY key as base-table column indices, in group order (`[]` for the global scalar). */
236
+ readonly groupBaseCols: readonly number[];
237
+ /** Query GROUP BY output attributes, in order. */
238
+ readonly groupOutAttrs: readonly Attribute[];
239
+ readonly aggregates: readonly FragmentAggregate[];
240
+ /** Top-level AND-split conjuncts of the pre-aggregation WHERE (empty ⇒ no filter). */
241
+ readonly conjuncts: readonly ScalarPlanNode[];
242
+ }
243
+ export type AggregateFragmentResult = {
244
+ ok: true;
245
+ shape: AggregateFragmentShape;
246
+ } | {
247
+ ok: false;
248
+ reason: RewriteFailureReason;
249
+ };
250
+ /**
251
+ * Recognize a query fragment rooted at a logical {@link AggregateNode} (the shape
252
+ * the optimizer presents in the Structural pass, before physical aggregate
253
+ * selection) as a single-source aggregate over a scan-filter chain. Requires
254
+ * **bare-column** GROUP BY expressions and aggregate arguments — a computed group
255
+ * key or aggregate argument (`group by d+1`, `sum(amt*2)`, `group_concat(x, ',')`)
256
+ * is unrecoverable from a stored MV column in v1 ⇒ `aggregate-shape`. Mirrors the
257
+ * row-time aggregate eligibility gate, which likewise requires bare group columns.
258
+ */
259
+ export declare function analyzeAggregateFragment(root: RelationalPlanNode): AggregateFragmentResult;
260
+ /**
261
+ * Decide whether the grouped MV `mv` (backed by `backing`) answers the aggregate
262
+ * fragment `shape`. See the arm doc above for the two sub-cases and the soundness
263
+ * contract; every check forgoes on doubt (a false NotMatch only forgoes a speedup).
264
+ */
265
+ export declare function matchAggregateFragmentToMv(shape: AggregateFragmentShape, mv: MaintainedTableSchema, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
266
+ /**
267
+ * Convenience entry point (used by the unit tests): analyze `root` as an aggregate
268
+ * fragment and, on success, match it against `mv`.
269
+ */
270
+ export declare function matchAggregateMaterializedViewRewrite(root: RelationalPlanNode, mv: MaintainedTableSchema, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
271
+ /** The recognized shape of a join query fragment: its `Project` root, the single
272
+ * binary join, the two base table references, and the post-join WHERE conjuncts. */
273
+ export interface JoinFragmentShape {
274
+ readonly project: ProjectNode;
275
+ readonly joinNode: JoinNode;
276
+ /** The two base-table references under the join (exactly two, distinct tables). */
277
+ readonly tableRefs: readonly [TableReferenceNode, TableReferenceNode];
278
+ /** Top-level AND-split conjuncts of the post-join WHERE (empty ⇒ no filter). */
279
+ readonly conjuncts: readonly ScalarPlanNode[];
280
+ }
281
+ export type JoinFragmentResult = {
282
+ ok: true;
283
+ shape: JoinFragmentShape;
284
+ } | {
285
+ ok: false;
286
+ reason: RewriteFailureReason;
287
+ };
288
+ /**
289
+ * Recognize a query fragment rooted at a `ProjectNode` whose source descends —
290
+ * through an optional `Filter` (post-join WHERE) and single-source pass-throughs —
291
+ * into a single binary {@link JoinNode} over exactly two distinct base tables. Any
292
+ * other shape (no join, a multi-way join, a non-passthrough node, a row-reducing
293
+ * scan) ⇒ `'shape'`. The fragment is pristine (the rule fires before
294
+ * predicate-pushdown / grow-retrieve), so the join's `ON` condition and the WHERE
295
+ * `Filter` are still explicit.
296
+ */
297
+ export declare function analyzeJoinQueryFragment(root: RelationalPlanNode): JoinFragmentResult;
298
+ /**
299
+ * Decide whether the 1:1-join MV `mv` (optimized body `mvBodyRoot`, backed by
300
+ * `backing`) answers the join fragment `shape`. See the arm doc above for the
301
+ * soundness contract; every check forgoes on doubt.
302
+ *
303
+ * `mvBodyRoot` is the MV body's optimized relational root (the rule plans it
304
+ * suppressed and caches it). When the rule could not plan it, pass `undefined` ⇒
305
+ * `no-candidate`.
306
+ */
307
+ export declare function matchJoinFragmentToMv(shape: JoinFragmentShape, mv: MaintainedTableSchema, mvBodyRoot: RelationalPlanNode | undefined, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
308
+ /**
309
+ * Convenience entry point (used by the unit tests): analyze `root` as a join
310
+ * fragment and, on success, match it against `mv` (whose optimized body root is
311
+ * `mvBodyRoot`).
312
+ */
313
+ export declare function matchJoinMaterializedViewRewrite(root: RelationalPlanNode, mv: MaintainedTableSchema, mvBodyRoot: RelationalPlanNode | undefined, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
314
+ //# sourceMappingURL=query-rewrite-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-rewrite-matcher.d.ts","sourceRoot":"","sources":["../../../../src/planner/analysis/query-rewrite-matcher.ts"],"names":[],"mappings":"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"}