@quereus/quereus 2.8.0 → 3.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 (454) hide show
  1. package/README.md +224 -222
  2. package/dist/src/core/database-assertions.d.ts +36 -16
  3. package/dist/src/core/database-assertions.d.ts.map +1 -1
  4. package/dist/src/core/database-assertions.js +222 -118
  5. package/dist/src/core/database-assertions.js.map +1 -1
  6. package/dist/src/core/database-transaction.d.ts +96 -13
  7. package/dist/src/core/database-transaction.d.ts.map +1 -1
  8. package/dist/src/core/database-transaction.js +294 -35
  9. package/dist/src/core/database-transaction.js.map +1 -1
  10. package/dist/src/core/database-watchers.d.ts +58 -0
  11. package/dist/src/core/database-watchers.d.ts.map +1 -0
  12. package/dist/src/core/database-watchers.js +206 -0
  13. package/dist/src/core/database-watchers.js.map +1 -0
  14. package/dist/src/core/database.d.ts +78 -5
  15. package/dist/src/core/database.d.ts.map +1 -1
  16. package/dist/src/core/database.js +120 -20
  17. package/dist/src/core/database.js.map +1 -1
  18. package/dist/src/core/statement.d.ts +9 -0
  19. package/dist/src/core/statement.d.ts.map +1 -1
  20. package/dist/src/core/statement.js +29 -0
  21. package/dist/src/core/statement.js.map +1 -1
  22. package/dist/src/core/table-handle.d.ts +45 -0
  23. package/dist/src/core/table-handle.d.ts.map +1 -0
  24. package/dist/src/core/table-handle.js +54 -0
  25. package/dist/src/core/table-handle.js.map +1 -0
  26. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  27. package/dist/src/emit/ast-stringify.js +0 -3
  28. package/dist/src/emit/ast-stringify.js.map +1 -1
  29. package/dist/src/func/builtins/conversion.d.ts.map +1 -1
  30. package/dist/src/func/builtins/conversion.js +12 -1
  31. package/dist/src/func/builtins/conversion.js.map +1 -1
  32. package/dist/src/func/builtins/explain.d.ts.map +1 -1
  33. package/dist/src/func/builtins/explain.js +22 -8
  34. package/dist/src/func/builtins/explain.js.map +1 -1
  35. package/dist/src/func/builtins/generation.d.ts.map +1 -1
  36. package/dist/src/func/builtins/generation.js +26 -1
  37. package/dist/src/func/builtins/generation.js.map +1 -1
  38. package/dist/src/func/builtins/index.d.ts.map +1 -1
  39. package/dist/src/func/builtins/index.js +5 -1
  40. package/dist/src/func/builtins/index.js.map +1 -1
  41. package/dist/src/func/builtins/json-tvf.d.ts.map +1 -1
  42. package/dist/src/func/builtins/json-tvf.js +16 -2
  43. package/dist/src/func/builtins/json-tvf.js.map +1 -1
  44. package/dist/src/func/builtins/schema.d.ts +4 -0
  45. package/dist/src/func/builtins/schema.d.ts.map +1 -1
  46. package/dist/src/func/builtins/schema.js +270 -11
  47. package/dist/src/func/builtins/schema.js.map +1 -1
  48. package/dist/src/func/registration.d.ts +19 -1
  49. package/dist/src/func/registration.d.ts.map +1 -1
  50. package/dist/src/func/registration.js +8 -3
  51. package/dist/src/func/registration.js.map +1 -1
  52. package/dist/src/index.d.ts +7 -1
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/index.js +5 -0
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/parser/ast.d.ts +3 -2
  57. package/dist/src/parser/ast.d.ts.map +1 -1
  58. package/dist/src/parser/parser.d.ts.map +1 -1
  59. package/dist/src/parser/parser.js +25 -8
  60. package/dist/src/parser/parser.js.map +1 -1
  61. package/dist/src/planner/analysis/assertion-classifier.d.ts +71 -0
  62. package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -0
  63. package/dist/src/planner/analysis/assertion-classifier.js +286 -0
  64. package/dist/src/planner/analysis/assertion-classifier.js.map +1 -0
  65. package/dist/src/planner/analysis/assertion-hoist-cache.d.ts +34 -0
  66. package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -0
  67. package/dist/src/planner/analysis/assertion-hoist-cache.js +119 -0
  68. package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -0
  69. package/dist/src/planner/analysis/binding-extractor.d.ts +58 -0
  70. package/dist/src/planner/analysis/binding-extractor.d.ts.map +1 -0
  71. package/dist/src/planner/analysis/binding-extractor.js +110 -0
  72. package/dist/src/planner/analysis/binding-extractor.js.map +1 -0
  73. package/dist/src/planner/analysis/change-scope.d.ts +184 -0
  74. package/dist/src/planner/analysis/change-scope.d.ts.map +1 -0
  75. package/dist/src/planner/analysis/change-scope.js +825 -0
  76. package/dist/src/planner/analysis/change-scope.js.map +1 -0
  77. package/dist/src/planner/analysis/check-extraction.d.ts +29 -0
  78. package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -0
  79. package/dist/src/planner/analysis/check-extraction.js +420 -0
  80. package/dist/src/planner/analysis/check-extraction.js.map +1 -0
  81. package/dist/src/planner/analysis/constraint-extractor.d.ts +47 -7
  82. package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
  83. package/dist/src/planner/analysis/constraint-extractor.js +169 -92
  84. package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
  85. package/dist/src/planner/analysis/partial-unique-extraction.d.ts +68 -0
  86. package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -0
  87. package/dist/src/planner/analysis/partial-unique-extraction.js +347 -0
  88. package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -0
  89. package/dist/src/planner/analysis/predicate-conjuncts.d.ts +14 -0
  90. package/dist/src/planner/analysis/predicate-conjuncts.d.ts.map +1 -0
  91. package/dist/src/planner/analysis/predicate-conjuncts.js +31 -0
  92. package/dist/src/planner/analysis/predicate-conjuncts.js.map +1 -0
  93. package/dist/src/planner/analysis/predicate-shape.d.ts +52 -0
  94. package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -0
  95. package/dist/src/planner/analysis/predicate-shape.js +119 -0
  96. package/dist/src/planner/analysis/predicate-shape.js.map +1 -0
  97. package/dist/src/planner/analysis/sat-checker.d.ts +43 -0
  98. package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -0
  99. package/dist/src/planner/analysis/sat-checker.js +393 -0
  100. package/dist/src/planner/analysis/sat-checker.js.map +1 -0
  101. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  102. package/dist/src/planner/building/foreign-key-builder.js +3 -2
  103. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  104. package/dist/src/planner/building/select.js +14 -2
  105. package/dist/src/planner/building/select.js.map +1 -1
  106. package/dist/src/planner/building/table.d.ts.map +1 -1
  107. package/dist/src/planner/building/table.js +1 -1
  108. package/dist/src/planner/building/table.js.map +1 -1
  109. package/dist/src/planner/building/update.d.ts.map +1 -1
  110. package/dist/src/planner/building/update.js +10 -6
  111. package/dist/src/planner/building/update.js.map +1 -1
  112. package/dist/src/planner/framework/characteristics.d.ts +13 -2
  113. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  114. package/dist/src/planner/framework/characteristics.js +31 -5
  115. package/dist/src/planner/framework/characteristics.js.map +1 -1
  116. package/dist/src/planner/framework/pass.d.ts.map +1 -1
  117. package/dist/src/planner/framework/pass.js +46 -16
  118. package/dist/src/planner/framework/pass.js.map +1 -1
  119. package/dist/src/planner/framework/physical-utils.d.ts +21 -9
  120. package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
  121. package/dist/src/planner/framework/physical-utils.js +47 -31
  122. package/dist/src/planner/framework/physical-utils.js.map +1 -1
  123. package/dist/src/planner/nodes/aggregate-node.d.ts +25 -0
  124. package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
  125. package/dist/src/planner/nodes/aggregate-node.js +75 -8
  126. package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
  127. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  128. package/dist/src/planner/nodes/alias-node.js +8 -1
  129. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  130. package/dist/src/planner/nodes/asof-scan-node.d.ts +137 -0
  131. package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -0
  132. package/dist/src/planner/nodes/asof-scan-node.js +237 -0
  133. package/dist/src/planner/nodes/asof-scan-node.js.map +1 -0
  134. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  135. package/dist/src/planner/nodes/bloom-join-node.js +19 -9
  136. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  137. package/dist/src/planner/nodes/constraint-check-node.d.ts +3 -0
  138. package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
  139. package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
  140. package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
  141. package/dist/src/planner/nodes/distinct-node.js +17 -6
  142. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  143. package/dist/src/planner/nodes/empty-relation-node.d.ts +27 -0
  144. package/dist/src/planner/nodes/empty-relation-node.d.ts.map +1 -0
  145. package/dist/src/planner/nodes/empty-relation-node.js +61 -0
  146. package/dist/src/planner/nodes/empty-relation-node.js.map +1 -0
  147. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  148. package/dist/src/planner/nodes/filter.js +67 -5
  149. package/dist/src/planner/nodes/filter.js.map +1 -1
  150. package/dist/src/planner/nodes/function.d.ts +11 -1
  151. package/dist/src/planner/nodes/function.d.ts.map +1 -1
  152. package/dist/src/planner/nodes/function.js +94 -1
  153. package/dist/src/planner/nodes/function.js.map +1 -1
  154. package/dist/src/planner/nodes/hash-aggregate.d.ts +1 -1
  155. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  156. package/dist/src/planner/nodes/hash-aggregate.js +10 -6
  157. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  158. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  159. package/dist/src/planner/nodes/join-node.js +21 -10
  160. package/dist/src/planner/nodes/join-node.js.map +1 -1
  161. package/dist/src/planner/nodes/join-utils.d.ts +42 -1
  162. package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
  163. package/dist/src/planner/nodes/join-utils.js +132 -0
  164. package/dist/src/planner/nodes/join-utils.js.map +1 -1
  165. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  166. package/dist/src/planner/nodes/limit-offset.js +8 -1
  167. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  168. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  169. package/dist/src/planner/nodes/merge-join-node.js +22 -9
  170. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  171. package/dist/src/planner/nodes/ordinal-slice-node.d.ts +50 -0
  172. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -0
  173. package/dist/src/planner/nodes/ordinal-slice-node.js +130 -0
  174. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -0
  175. package/dist/src/planner/nodes/plan-node-type.d.ts +3 -0
  176. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  177. package/dist/src/planner/nodes/plan-node-type.js +3 -0
  178. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  179. package/dist/src/planner/nodes/plan-node.d.ts +316 -5
  180. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  181. package/dist/src/planner/nodes/plan-node.js +49 -0
  182. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  183. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  184. package/dist/src/planner/nodes/project-node.js +78 -28
  185. package/dist/src/planner/nodes/project-node.js.map +1 -1
  186. package/dist/src/planner/nodes/reference.d.ts +27 -2
  187. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  188. package/dist/src/planner/nodes/reference.js +117 -1
  189. package/dist/src/planner/nodes/reference.js.map +1 -1
  190. package/dist/src/planner/nodes/retrieve-node.d.ts +9 -1
  191. package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
  192. package/dist/src/planner/nodes/retrieve-node.js +21 -0
  193. package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
  194. package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
  195. package/dist/src/planner/nodes/returning-node.js +64 -28
  196. package/dist/src/planner/nodes/returning-node.js.map +1 -1
  197. package/dist/src/planner/nodes/scalar.d.ts +8 -1
  198. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  199. package/dist/src/planner/nodes/scalar.js +112 -1
  200. package/dist/src/planner/nodes/scalar.js.map +1 -1
  201. package/dist/src/planner/nodes/set-operation-node.d.ts +2 -1
  202. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  203. package/dist/src/planner/nodes/set-operation-node.js +24 -0
  204. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  205. package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
  206. package/dist/src/planner/nodes/single-row.js +3 -1
  207. package/dist/src/planner/nodes/single-row.js.map +1 -1
  208. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  209. package/dist/src/planner/nodes/sort.js +28 -1
  210. package/dist/src/planner/nodes/sort.js.map +1 -1
  211. package/dist/src/planner/nodes/stream-aggregate.d.ts +1 -1
  212. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  213. package/dist/src/planner/nodes/stream-aggregate.js +10 -8
  214. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  215. package/dist/src/planner/nodes/table-access-nodes.d.ts +40 -5
  216. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  217. package/dist/src/planner/nodes/table-access-nodes.js +113 -18
  218. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  219. package/dist/src/planner/nodes/table-function-call.d.ts +4 -1
  220. package/dist/src/planner/nodes/table-function-call.d.ts.map +1 -1
  221. package/dist/src/planner/nodes/table-function-call.js +224 -14
  222. package/dist/src/planner/nodes/table-function-call.js.map +1 -1
  223. package/dist/src/planner/nodes/update-node.d.ts +1 -3
  224. package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
  225. package/dist/src/planner/nodes/update-node.js +3 -9
  226. package/dist/src/planner/nodes/update-node.js.map +1 -1
  227. package/dist/src/planner/nodes/window-node.d.ts +61 -2
  228. package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
  229. package/dist/src/planner/nodes/window-node.js +71 -3
  230. package/dist/src/planner/nodes/window-node.js.map +1 -1
  231. package/dist/src/planner/optimizer-tuning.d.ts +38 -1
  232. package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
  233. package/dist/src/planner/optimizer-tuning.js +6 -0
  234. package/dist/src/planner/optimizer-tuning.js.map +1 -1
  235. package/dist/src/planner/optimizer.d.ts.map +1 -1
  236. package/dist/src/planner/optimizer.js +278 -0
  237. package/dist/src/planner/optimizer.js.map +1 -1
  238. package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts +30 -0
  239. package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts.map +1 -0
  240. package/dist/src/planner/rules/access/rule-asof-strategy-select.js +112 -0
  241. package/dist/src/planner/rules/access/rule-asof-strategy-select.js.map +1 -0
  242. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts +33 -0
  243. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts.map +1 -0
  244. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js +162 -0
  245. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js.map +1 -0
  246. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts +29 -0
  247. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -0
  248. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +175 -0
  249. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -0
  250. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  251. package/dist/src/planner/rules/access/rule-select-access-path.js +53 -17
  252. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  253. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +30 -0
  254. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -0
  255. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +116 -0
  256. package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -0
  257. package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts +7 -7
  258. package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts.map +1 -1
  259. package/dist/src/planner/rules/distinct/rule-distinct-elimination.js +18 -16
  260. package/dist/src/planner/rules/distinct/rule-distinct-elimination.js.map +1 -1
  261. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +61 -0
  262. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -0
  263. package/dist/src/planner/rules/join/equi-pair-extractor.js +155 -0
  264. package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -0
  265. package/dist/src/planner/rules/join/rule-join-elimination.d.ts +56 -0
  266. package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -0
  267. package/dist/src/planner/rules/join/rule-join-elimination.js +326 -0
  268. package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -0
  269. package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
  270. package/dist/src/planner/rules/join/rule-join-greedy-commute.js +10 -2
  271. package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
  272. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  273. package/dist/src/planner/rules/join/rule-join-physical-selection.js +2 -122
  274. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  275. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts +21 -0
  276. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -0
  277. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +405 -0
  278. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -0
  279. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +31 -0
  280. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -0
  281. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +113 -0
  282. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -0
  283. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts +20 -0
  284. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -0
  285. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +181 -0
  286. package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -0
  287. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +46 -0
  288. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -0
  289. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +156 -0
  290. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -0
  291. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts +30 -0
  292. package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -0
  293. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +60 -0
  294. package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -0
  295. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts +45 -0
  296. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -0
  297. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +210 -0
  298. package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -0
  299. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts +29 -0
  300. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts.map +1 -0
  301. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +161 -0
  302. package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -0
  303. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +39 -0
  304. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts.map +1 -0
  305. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +91 -0
  306. package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -0
  307. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts +35 -0
  308. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -0
  309. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +74 -0
  310. package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -0
  311. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts +27 -0
  312. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -0
  313. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +103 -0
  314. package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -0
  315. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  316. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +1 -25
  317. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  318. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +47 -0
  319. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -0
  320. package/dist/src/planner/rules/window/rule-monotonic-window.js +341 -0
  321. package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -0
  322. package/dist/src/planner/scopes/global.js +2 -2
  323. package/dist/src/planner/scopes/global.js.map +1 -1
  324. package/dist/src/planner/type-utils.d.ts.map +1 -1
  325. package/dist/src/planner/type-utils.js +11 -0
  326. package/dist/src/planner/type-utils.js.map +1 -1
  327. package/dist/src/planner/util/fd-utils.d.ts +245 -0
  328. package/dist/src/planner/util/fd-utils.d.ts.map +1 -0
  329. package/dist/src/planner/util/fd-utils.js +1416 -0
  330. package/dist/src/planner/util/fd-utils.js.map +1 -0
  331. package/dist/src/planner/util/ind-utils.d.ts +79 -0
  332. package/dist/src/planner/util/ind-utils.d.ts.map +1 -0
  333. package/dist/src/planner/util/ind-utils.js +146 -0
  334. package/dist/src/planner/util/ind-utils.js.map +1 -0
  335. package/dist/src/planner/util/key-utils.d.ts +75 -14
  336. package/dist/src/planner/util/key-utils.d.ts.map +1 -1
  337. package/dist/src/planner/util/key-utils.js +234 -57
  338. package/dist/src/planner/util/key-utils.js.map +1 -1
  339. package/dist/src/runtime/context-helpers.d.ts +9 -0
  340. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  341. package/dist/src/runtime/context-helpers.js +5 -0
  342. package/dist/src/runtime/context-helpers.js.map +1 -1
  343. package/dist/src/runtime/delta-executor.d.ts +134 -0
  344. package/dist/src/runtime/delta-executor.d.ts.map +1 -0
  345. package/dist/src/runtime/delta-executor.js +382 -0
  346. package/dist/src/runtime/delta-executor.js.map +1 -0
  347. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  348. package/dist/src/runtime/emit/alter-table.js +52 -16
  349. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  350. package/dist/src/runtime/emit/asof-scan.d.ts +10 -0
  351. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -0
  352. package/dist/src/runtime/emit/asof-scan.js +467 -0
  353. package/dist/src/runtime/emit/asof-scan.js.map +1 -0
  354. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  355. package/dist/src/runtime/emit/constraint-check.js +20 -0
  356. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  357. package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
  358. package/dist/src/runtime/emit/create-assertion.js +3 -2
  359. package/dist/src/runtime/emit/create-assertion.js.map +1 -1
  360. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  361. package/dist/src/runtime/emit/dml-executor.js +40 -13
  362. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  363. package/dist/src/runtime/emit/drop-assertion.js +1 -1
  364. package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
  365. package/dist/src/runtime/emit/empty-relation.d.ts +5 -0
  366. package/dist/src/runtime/emit/empty-relation.d.ts.map +1 -0
  367. package/dist/src/runtime/emit/empty-relation.js +11 -0
  368. package/dist/src/runtime/emit/empty-relation.js.map +1 -0
  369. package/dist/src/runtime/emit/ordinal-slice.d.ts +13 -0
  370. package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -0
  371. package/dist/src/runtime/emit/ordinal-slice.js +89 -0
  372. package/dist/src/runtime/emit/ordinal-slice.js.map +1 -0
  373. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  374. package/dist/src/runtime/emit/returning.js +9 -4
  375. package/dist/src/runtime/emit/returning.js.map +1 -1
  376. package/dist/src/runtime/emit/scan.d.ts +19 -3
  377. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  378. package/dist/src/runtime/emit/scan.js +12 -8
  379. package/dist/src/runtime/emit/scan.js.map +1 -1
  380. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  381. package/dist/src/runtime/emit/schema-declarative.js +91 -14
  382. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  383. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  384. package/dist/src/runtime/emit/window.js +732 -37
  385. package/dist/src/runtime/emit/window.js.map +1 -1
  386. package/dist/src/runtime/foreign-key-actions.d.ts +16 -0
  387. package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
  388. package/dist/src/runtime/foreign-key-actions.js +86 -5
  389. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  390. package/dist/src/runtime/register.d.ts.map +1 -1
  391. package/dist/src/runtime/register.js +6 -0
  392. package/dist/src/runtime/register.js.map +1 -1
  393. package/dist/src/schema/assertion.d.ts +8 -0
  394. package/dist/src/schema/assertion.d.ts.map +1 -1
  395. package/dist/src/schema/catalog.d.ts +10 -0
  396. package/dist/src/schema/catalog.d.ts.map +1 -1
  397. package/dist/src/schema/catalog.js +29 -6
  398. package/dist/src/schema/catalog.js.map +1 -1
  399. package/dist/src/schema/change-events.d.ts +5 -1
  400. package/dist/src/schema/change-events.d.ts.map +1 -1
  401. package/dist/src/schema/change-events.js.map +1 -1
  402. package/dist/src/schema/function.d.ts +89 -1
  403. package/dist/src/schema/function.d.ts.map +1 -1
  404. package/dist/src/schema/function.js +31 -0
  405. package/dist/src/schema/function.js.map +1 -1
  406. package/dist/src/schema/manager.d.ts +43 -0
  407. package/dist/src/schema/manager.d.ts.map +1 -1
  408. package/dist/src/schema/manager.js +105 -4
  409. package/dist/src/schema/manager.js.map +1 -1
  410. package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
  411. package/dist/src/schema/rename-rewriter.js +303 -102
  412. package/dist/src/schema/rename-rewriter.js.map +1 -1
  413. package/dist/src/schema/schema-differ.d.ts +18 -1
  414. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  415. package/dist/src/schema/schema-differ.js +307 -42
  416. package/dist/src/schema/schema-differ.js.map +1 -1
  417. package/dist/src/schema/table.d.ts +21 -2
  418. package/dist/src/schema/table.d.ts.map +1 -1
  419. package/dist/src/schema/table.js +17 -8
  420. package/dist/src/schema/table.js.map +1 -1
  421. package/dist/src/types/logical-type.d.ts +11 -0
  422. package/dist/src/types/logical-type.d.ts.map +1 -1
  423. package/dist/src/types/logical-type.js.map +1 -1
  424. package/dist/src/types/temporal-types.d.ts.map +1 -1
  425. package/dist/src/types/temporal-types.js +32 -0
  426. package/dist/src/types/temporal-types.js.map +1 -1
  427. package/dist/src/util/ast-literal.d.ts +11 -0
  428. package/dist/src/util/ast-literal.d.ts.map +1 -0
  429. package/dist/src/util/ast-literal.js +26 -0
  430. package/dist/src/util/ast-literal.js.map +1 -0
  431. package/dist/src/vtab/best-access-plan.d.ts +41 -0
  432. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  433. package/dist/src/vtab/best-access-plan.js +29 -0
  434. package/dist/src/vtab/best-access-plan.js.map +1 -1
  435. package/dist/src/vtab/events.d.ts +9 -0
  436. package/dist/src/vtab/events.d.ts.map +1 -1
  437. package/dist/src/vtab/events.js +19 -0
  438. package/dist/src/vtab/events.js.map +1 -1
  439. package/dist/src/vtab/filter-info.d.ts +14 -0
  440. package/dist/src/vtab/filter-info.d.ts.map +1 -1
  441. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  442. package/dist/src/vtab/memory/layer/manager.js +24 -5
  443. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  444. package/dist/src/vtab/memory/module.d.ts +39 -1
  445. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  446. package/dist/src/vtab/memory/module.js +206 -44
  447. package/dist/src/vtab/memory/module.js.map +1 -1
  448. package/dist/src/vtab/memory/utils/predicate.d.ts +2 -1
  449. package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
  450. package/dist/src/vtab/memory/utils/predicate.js +32 -1
  451. package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
  452. package/dist/src/vtab/module.d.ts +24 -0
  453. package/dist/src/vtab/module.d.ts.map +1 -1
  454. package/package.json +3 -3
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Extract *guarded* FDs from partial UNIQUE constraints — those synthesized
3
+ * from `CREATE UNIQUE INDEX (K) WHERE P`. Inside the partial scope `P`, the
4
+ * columns `K` form a key, so `K → all_other_cols` holds; outside the scope
5
+ * the FD does not hold. We encode this as a guarded FD whose guard is the
6
+ * AND-conjunctive decomposition of `P` into clauses the FD-machinery can
7
+ * activate (see `GuardClause` in plan-node.ts).
8
+ *
9
+ * `TableReferenceNode.computePhysical` calls this alongside CHECK-derived
10
+ * FDs; Filter activation in `FilterNode` discharges the guard when a
11
+ * surrounding predicate entails every clause.
12
+ *
13
+ * Soundness rule: every conjunct of `P` must map to a recognized clause. A
14
+ * predicate with any unrecognized conjunct produces *no* FD — discharging on
15
+ * a weaker partial predicate would falsely activate the FD for rows the
16
+ * unrecognized conjunct excludes.
17
+ *
18
+ * Recognized conjunct shapes:
19
+ * col = literal ⇒ eq-literal
20
+ * literal = col ⇒ eq-literal (normalized)
21
+ * col1 = col2 ⇒ eq-column
22
+ * col IS NULL ⇒ is-null (negated:false)
23
+ * col IS NOT NULL ⇒ is-null (negated:true)
24
+ * NOT col (NOT-NULL numeric col) ⇒ eq-literal { col, value: 0 } (SQL false)
25
+ * col IN (lit, lit, …) ⇒ or-of [eq-literal …] (singleton collapses)
26
+ * a OR b OR … ⇒ or-of [recognize(a), recognize(b), …]
27
+ * col > literal ⇒ range { col, min: lit, minInc: false, maxInc: false }
28
+ * col >= literal ⇒ range { col, min: lit, minInc: true, maxInc: false }
29
+ * col < literal ⇒ range { col, max: lit, maxInc: false, minInc: false }
30
+ * col <= literal ⇒ range { col, max: lit, maxInc: true, minInc: false }
31
+ * literal op col ⇒ flipped to col op' literal, then as above
32
+ * col BETWEEN lo AND hi ⇒ range { col, min: lo, max: hi, minInc: true, maxInc: true }
33
+ *
34
+ * `NOT col` is rewritten to `col = 0` (SQLite encodes boolean FALSE as 0).
35
+ * This excludes NULL rows semantically — but the NOT-NULL gate below is
36
+ * syntactic, so `NOT col` on a nominally-nullable UC column is rejected to
37
+ * avoid double-counting that exclusion across producer and consumer. The
38
+ * rewrite is additionally gated on the column's logical type being numeric:
39
+ * for TEXT/BLOB/BOOLEAN columns `col = 0` is not equivalent to `NOT col`
40
+ * (TEXT `''` is falsy but is not equal-to-integer-0 under the strict
41
+ * `sqlValueEquals` comparison used by the consumer), so the rewrite would
42
+ * falsely activate a `col = 0` guard for rows the runtime UC never excluded.
43
+ *
44
+ * NOT-NULL gate: every UC column must be effectively non-NULL inside the
45
+ * partial scope. A column qualifies if either (a) it is declared NOT NULL on
46
+ * the table, or (b) the partial predicate has a matching `col IS NOT NULL`
47
+ * conjunct. Case (b) is sound because the FD only activates when a
48
+ * surrounding predicate entails every guard clause, including that
49
+ * `IS NOT NULL` clause — so discharge cannot falsely activate the FD over
50
+ * rows where the UC column could be NULL. A nullable UC column whose
51
+ * `IS NOT NULL` is not in the predicate would allow multiple NULLs inside
52
+ * scope, so `K → others` would not hold; those are rejected. Mirrors the
53
+ * relation-level rule in `relationTypeFromTableSchema` (type-utils.ts),
54
+ * relaxed for partial scopes that establish non-nullness themselves.
55
+ *
56
+ * Out-of-scope shapes (filed as backlog tickets in the implement ticket):
57
+ * - function-call / cast-wrapped column references in IN / NOT shapes
58
+ * - standalone `col` (truthy test) — only `NOT col` is recognized
59
+ * - IN / NOT / OR inside CHECK implication disjuncts
60
+ * - NOT BETWEEN (decomposes to a disjunction of two ranges)
61
+ * - symbolic/parameter range bounds (`age >= ?`)
62
+ * - per-column collation-aware text bound comparison
63
+ */
64
+ import { columnIndexFromExpr, flattenDisjunction, flipComparison, literalValue } from './predicate-shape.js';
65
+ const cache = new WeakMap();
66
+ export function getPartialUniqueGuardedFds(tableSchema) {
67
+ let cached = cache.get(tableSchema);
68
+ if (!cached) {
69
+ cached = extractPartialUniqueGuardedFds(tableSchema);
70
+ cache.set(tableSchema, cached);
71
+ }
72
+ return cached;
73
+ }
74
+ export function extractPartialUniqueGuardedFds(tableSchema) {
75
+ const out = [];
76
+ const ucs = tableSchema.uniqueConstraints;
77
+ if (!ucs)
78
+ return out;
79
+ const colCount = tableSchema.columns.length;
80
+ const isColumnNotNullDeclared = (col) => tableSchema.columns[col]?.notNull === true;
81
+ const isColumnNumericDeclared = (col) => tableSchema.columns[col]?.logicalType?.isNumeric === true;
82
+ for (const uc of ucs) {
83
+ if (uc.predicate === undefined)
84
+ continue;
85
+ const clauses = recognizeGuardClauses(uc.predicate, tableSchema.columnIndexMap, isColumnNotNullDeclared, isColumnNumericDeclared);
86
+ if (!clauses)
87
+ continue;
88
+ if (clauses.length === 0)
89
+ continue;
90
+ // NOT-NULL gate: each UC column must be effectively non-NULL inside the
91
+ // partial scope — either declared NOT NULL, or forced so by an
92
+ // `IS NOT NULL` conjunct of the partial predicate (which is one of the
93
+ // guard clauses, so discharge will require it).
94
+ const nonNullByPredicate = new Set();
95
+ for (const c of clauses) {
96
+ if (c.kind === 'is-null' && c.negated === true)
97
+ nonNullByPredicate.add(c.column);
98
+ }
99
+ const allUcColumnsNonNullable = uc.columns.every(idx => tableSchema.columns[idx]?.notNull === true || nonNullByPredicate.has(idx));
100
+ if (!allUcColumnsNonNullable)
101
+ continue;
102
+ const det = Array.from(uc.columns);
103
+ const detSet = new Set(det);
104
+ const dep = [];
105
+ for (let i = 0; i < colCount; i++) {
106
+ if (!detSet.has(i))
107
+ dep.push(i);
108
+ }
109
+ if (dep.length === 0)
110
+ continue;
111
+ const guard = { clauses };
112
+ out.push({ determinants: det, dependents: dep, guard });
113
+ }
114
+ return out;
115
+ }
116
+ /**
117
+ * Decompose a partial-index predicate into AND-conjunctive guard clauses.
118
+ *
119
+ * Returns `undefined` (NOT `[]`) if any conjunct fails to map to a recognized
120
+ * `GuardClause` — the entire FD must be skipped in that case. Returns `[]`
121
+ * only for trivially empty inputs (which the caller treats as "no FD").
122
+ */
123
+ function recognizeGuardClauses(expr, columnIndexMap, isColumnNotNullDeclared, isColumnNumericDeclared) {
124
+ const conjuncts = [];
125
+ const stack = [expr];
126
+ while (stack.length > 0) {
127
+ const cur = stack.pop();
128
+ if (cur.type === 'binary' && cur.operator === 'AND') {
129
+ const b = cur;
130
+ // Preserve textual order: push right then left so left is processed first.
131
+ stack.push(b.right, b.left);
132
+ continue;
133
+ }
134
+ conjuncts.push(cur);
135
+ }
136
+ const clauses = [];
137
+ for (const conjunct of conjuncts) {
138
+ const clause = recognizeClause(conjunct, columnIndexMap, isColumnNotNullDeclared, isColumnNumericDeclared);
139
+ if (!clause)
140
+ return undefined;
141
+ clauses.push(clause);
142
+ }
143
+ return clauses;
144
+ }
145
+ /**
146
+ * Recognize one conjunct (or disjunct, when called recursively from
147
+ * `recognizeOr`) as a guard clause.
148
+ *
149
+ * Accepted shapes:
150
+ * col = literal ⇒ eq-literal { column, value }
151
+ * literal = col ⇒ eq-literal { column, value } (normalized)
152
+ * col1 = col2 ⇒ eq-column { left, right }
153
+ * col IS NULL ⇒ is-null { column, negated:false }
154
+ * col IS NOT NULL ⇒ is-null { column, negated:true }
155
+ * NOT col ⇒ eq-literal { column, value: 0 } (declared NOT NULL + numeric only)
156
+ * col IN (lit, …) ⇒ or-of [eq-literal { col, lit_i } …]
157
+ * a OR b OR … ⇒ or-of [recognize(a), recognize(b), …]
158
+ * col > literal ⇒ range { col, min: lit, minInc: false, maxInc: false }
159
+ * col >= literal ⇒ range { col, min: lit, minInc: true, maxInc: false }
160
+ * col < literal ⇒ range { col, max: lit, maxInc: false, minInc: false }
161
+ * col <= literal ⇒ range { col, max: lit, maxInc: true, minInc: false }
162
+ * literal op col ⇒ flipped to col op' literal, then as above
163
+ * col BETWEEN lo AND hi ⇒ range { col, min: lo, max: hi, minInc: true, maxInc: true }
164
+ *
165
+ * `=` and `==` are interchangeable. NULL-literal bounds are rejected. Anything
166
+ * else returns undefined — the whole predicate is then dropped on the floor
167
+ * by the caller.
168
+ *
169
+ * For `NOT col`, only declared-NOT-NULL **and** declared-numeric columns are
170
+ * accepted: the rewrite to `col = 0` implicitly excludes NULL rows, but the
171
+ * NOT-NULL gate for the UC is syntactic. Rather than teach the gate about
172
+ * `NOT col`, the simpler/sound choice is to reject `NOT col` on
173
+ * nominally-nullable columns at the producer. The numeric gate is required
174
+ * because `col = 0` (under strict `sqlValueEquals`) only matches numeric
175
+ * zero — TEXT `''` and BOOLEAN `false` are falsy but compare unequal to
176
+ * integer 0, so the rewrite would falsely activate the FD for rows the
177
+ * runtime UC never excluded.
178
+ */
179
+ function recognizeClause(expr, columnIndexMap, isColumnNotNullDeclared, isColumnNumericDeclared) {
180
+ if (expr.type === 'unary') {
181
+ const u = expr;
182
+ if (u.operator === 'IS NULL' || u.operator === 'IS NOT NULL') {
183
+ const col = columnIndexFromExpr(u.expr, columnIndexMap);
184
+ if (col === undefined)
185
+ return undefined;
186
+ return { kind: 'is-null', column: col, negated: u.operator === 'IS NOT NULL' };
187
+ }
188
+ if (u.operator === 'NOT') {
189
+ const col = columnIndexFromExpr(u.expr, columnIndexMap);
190
+ if (col === undefined)
191
+ return undefined;
192
+ if (!isColumnNotNullDeclared(col))
193
+ return undefined;
194
+ if (!isColumnNumericDeclared(col))
195
+ return undefined;
196
+ return { kind: 'eq-literal', column: col, value: 0 };
197
+ }
198
+ return undefined;
199
+ }
200
+ if (expr.type === 'in') {
201
+ return recognizeIn(expr, columnIndexMap);
202
+ }
203
+ if (expr.type === 'between') {
204
+ return recognizeBetween(expr, columnIndexMap);
205
+ }
206
+ if (expr.type === 'binary') {
207
+ const b = expr;
208
+ if (b.operator === 'OR') {
209
+ return recognizeOr(b, columnIndexMap, isColumnNotNullDeclared, isColumnNumericDeclared);
210
+ }
211
+ if (b.operator === '=' || b.operator === '==') {
212
+ const lIdx = columnIndexFromExpr(b.left, columnIndexMap);
213
+ const rIdx = columnIndexFromExpr(b.right, columnIndexMap);
214
+ if (lIdx !== undefined && rIdx !== undefined) {
215
+ if (lIdx === rIdx)
216
+ return undefined;
217
+ return { kind: 'eq-column', left: lIdx, right: rIdx };
218
+ }
219
+ if (lIdx !== undefined) {
220
+ const lit = literalValue(b.right);
221
+ if (lit === undefined)
222
+ return undefined;
223
+ return { kind: 'eq-literal', column: lIdx, value: lit };
224
+ }
225
+ if (rIdx !== undefined) {
226
+ const lit = literalValue(b.left);
227
+ if (lit === undefined)
228
+ return undefined;
229
+ return { kind: 'eq-literal', column: rIdx, value: lit };
230
+ }
231
+ return undefined;
232
+ }
233
+ if (b.operator === '<' || b.operator === '<=' || b.operator === '>' || b.operator === '>=') {
234
+ return recognizeRange(b, columnIndexMap);
235
+ }
236
+ return undefined;
237
+ }
238
+ return undefined;
239
+ }
240
+ /**
241
+ * Recognize `col op literal` (or operand-flipped `literal op col`) as a range
242
+ * guard. NULL literal bounds are rejected.
243
+ */
244
+ function recognizeRange(b, columnIndexMap) {
245
+ const lIdx = columnIndexFromExpr(b.left, columnIndexMap);
246
+ const rIdx = columnIndexFromExpr(b.right, columnIndexMap);
247
+ let colIdx;
248
+ let lit;
249
+ let op;
250
+ if (lIdx !== undefined) {
251
+ lit = literalValue(b.right);
252
+ colIdx = lIdx;
253
+ op = b.operator;
254
+ }
255
+ else if (rIdx !== undefined) {
256
+ lit = literalValue(b.left);
257
+ colIdx = rIdx;
258
+ op = flipComparison(b.operator);
259
+ }
260
+ else {
261
+ return undefined;
262
+ }
263
+ if (lit === undefined || lit === null || colIdx === undefined)
264
+ return undefined;
265
+ switch (op) {
266
+ case '>':
267
+ return { kind: 'range', column: colIdx, min: lit, minInclusive: false, maxInclusive: false };
268
+ case '>=':
269
+ return { kind: 'range', column: colIdx, min: lit, minInclusive: true, maxInclusive: false };
270
+ case '<':
271
+ return { kind: 'range', column: colIdx, max: lit, minInclusive: false, maxInclusive: false };
272
+ case '<=':
273
+ return { kind: 'range', column: colIdx, max: lit, minInclusive: false, maxInclusive: true };
274
+ }
275
+ return undefined;
276
+ }
277
+ /**
278
+ * Recognize `col BETWEEN literal AND literal` as a closed-interval range
279
+ * guard. `NOT BETWEEN` is rejected (decomposes to a disjunction of two range
280
+ * halves which doesn't fit a single range clause).
281
+ */
282
+ function recognizeBetween(expr, columnIndexMap) {
283
+ if (expr.not === true)
284
+ return undefined;
285
+ const colIdx = columnIndexFromExpr(expr.expr, columnIndexMap);
286
+ if (colIdx === undefined)
287
+ return undefined;
288
+ const lo = literalValue(expr.lower);
289
+ const hi = literalValue(expr.upper);
290
+ if (lo === undefined || lo === null)
291
+ return undefined;
292
+ if (hi === undefined || hi === null)
293
+ return undefined;
294
+ return { kind: 'range', column: colIdx, min: lo, max: hi, minInclusive: true, maxInclusive: true };
295
+ }
296
+ /**
297
+ * Recognize `col IN (lit, lit, …)` as an `or-of` of `eq-literal` clauses.
298
+ * IN-with-subquery, non-literal values, or any other shape returns undefined.
299
+ * A singleton list collapses to a bare `eq-literal`.
300
+ */
301
+ function recognizeIn(expr, columnIndexMap) {
302
+ if (expr.subquery !== undefined)
303
+ return undefined;
304
+ if (!expr.values || expr.values.length === 0)
305
+ return undefined;
306
+ const col = columnIndexFromExpr(expr.expr, columnIndexMap);
307
+ if (col === undefined)
308
+ return undefined;
309
+ const subs = [];
310
+ for (const v of expr.values) {
311
+ const lit = literalValue(v);
312
+ if (lit === undefined)
313
+ return undefined;
314
+ subs.push({ kind: 'eq-literal', column: col, value: lit });
315
+ }
316
+ if (subs.length === 1)
317
+ return subs[0];
318
+ return { kind: 'or-of', clauses: subs };
319
+ }
320
+ /**
321
+ * Recognize a top-level `OR` chain as a flat `or-of`. Each disjunct must
322
+ * itself be a recognized clause. Nested `or-of` clauses are inlined so the
323
+ * result is single-level. A singleton (degenerate) collapses to the
324
+ * underlying clause.
325
+ */
326
+ function recognizeOr(expr, columnIndexMap, isColumnNotNullDeclared, isColumnNumericDeclared) {
327
+ const disjuncts = flattenDisjunction(expr);
328
+ if (disjuncts.length === 0)
329
+ return undefined;
330
+ const subs = [];
331
+ for (const d of disjuncts) {
332
+ const sub = recognizeClause(d, columnIndexMap, isColumnNotNullDeclared, isColumnNumericDeclared);
333
+ if (!sub)
334
+ return undefined;
335
+ if (sub.kind === 'or-of') {
336
+ for (const s of sub.clauses)
337
+ subs.push(s);
338
+ }
339
+ else {
340
+ subs.push(sub);
341
+ }
342
+ }
343
+ if (subs.length === 1)
344
+ return subs[0];
345
+ return { kind: 'or-of', clauses: subs };
346
+ }
347
+ //# sourceMappingURL=partial-unique-extraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partial-unique-extraction.js","sourceRoot":"","sources":["../../../../src/planner/analysis/partial-unique-extraction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAKH,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE7G,MAAM,KAAK,GAAG,IAAI,OAAO,EAAoD,CAAC;AAE9E,MAAM,UAAU,0BAA0B,CACzC,WAAwB;IAExB,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAC;QACrD,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC7C,WAAwB;IAExB,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,WAAW,CAAC,iBAAiB,CAAC;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IAErB,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;IAE5C,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAW,EAAE,CACxD,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAE5C,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAW,EAAE,CACxD,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,SAAS,KAAK,IAAI,CAAC;IAE3D,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS;YAAE,SAAS;QAEzC,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,cAAc,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;QAClI,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEnC,wEAAwE;QACxE,+DAA+D;QAC/D,uEAAuE;QACvE,gDAAgD;QAChD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI;gBAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,uBAAuB,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CACtD,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CACzE,CAAC;QACF,IAAI,CAAC,uBAAuB;YAAE,SAAS;QAEvC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAE/B,MAAM,KAAK,GAAmB,EAAE,OAAO,EAAE,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC7B,IAAoB,EACpB,cAA2C,EAC3C,uBAAiD,EACjD,uBAAiD;IAEjD,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAqB,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACzB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAK,GAAsB,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YACzE,MAAM,CAAC,GAAG,GAAqB,CAAC;YAChC,2EAA2E;YAC3E,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5B,SAAS;QACV,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;QAC3G,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,SAAS,eAAe,CACvB,IAAoB,EACpB,cAA2C,EAC3C,uBAAiD,EACjD,uBAAiD;IAEjD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAqB,CAAC;QAChC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC9D,MAAM,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YACxD,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YACxD,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YACxC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YACpD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YACpD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC,IAAkB,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,gBAAgB,CAAC,IAAuB,EAAE,cAAc,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAsB,CAAC;QACjC,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC,CAAC,EAAE,cAAc,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YAE1D,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9C,IAAI,IAAI,KAAK,IAAI;oBAAE,OAAO,SAAS,CAAC;gBACpC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACvD,CAAC;YACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,GAAG,KAAK,SAAS;oBAAE,OAAO,SAAS,CAAC;gBACxC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YACzD,CAAC;YACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,GAAG,KAAK,SAAS;oBAAE,OAAO,SAAS,CAAC;gBACxC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YACzD,CAAC;YACD,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC5F,OAAO,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CACtB,CAAiB,EACjB,cAA2C;IAE3C,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,MAA0B,CAAC;IAC/B,IAAI,GAAoC,CAAC;IACzC,IAAI,EAAU,CAAC;IACf,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxB,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,GAAG,IAAI,CAAC;QACd,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;IACjB,CAAC;SAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,GAAG,IAAI,CAAC;QACd,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACP,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAChF,QAAQ,EAAE,EAAE,CAAC;QACZ,KAAK,GAAG;YACP,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC9F,KAAK,IAAI;YACR,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC7F,KAAK,GAAG;YACP,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC9F,KAAK,IAAI;YACR,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC9F,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACxB,IAAqB,EACrB,cAA2C;IAE3C,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC9D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACtD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACpG,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CACnB,IAAgB,EAChB,cAA2C;IAE3C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/D,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC3D,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CACnB,IAAoB,EACpB,cAA2C,EAC3C,uBAAiD,EACjD,uBAAiD;IAEjD,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,EAAE,cAAc,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;QACjG,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACF,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Conjunct helpers for predicate rewriting.
3
+ *
4
+ * `splitConjuncts` flattens an AND-tree into its individual conjuncts;
5
+ * `combineConjuncts` rebuilds an AND-tree from a list. Operators that need to
6
+ * partition / push / inspect predicates conjunct-by-conjunct (subquery
7
+ * decorrelation, aggregate predicate pushdown, etc.) share these.
8
+ */
9
+ import type { ScalarPlanNode } from '../nodes/plan-node.js';
10
+ /** Split an AND-tree into its conjuncts. Non-AND predicates yield a single-element list. */
11
+ export declare function splitConjuncts(pred: ScalarPlanNode): ScalarPlanNode[];
12
+ /** Combine conjuncts back into a left-associative AND-tree; returns null when empty. */
13
+ export declare function combineConjuncts(conjuncts: ScalarPlanNode[]): ScalarPlanNode | null;
14
+ //# sourceMappingURL=predicate-conjuncts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicate-conjuncts.d.ts","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-conjuncts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,EAAE,CAYrE;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,cAAc,GAAG,IAAI,CAUnF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Conjunct helpers for predicate rewriting.
3
+ *
4
+ * `splitConjuncts` flattens an AND-tree into its individual conjuncts;
5
+ * `combineConjuncts` rebuilds an AND-tree from a list. Operators that need to
6
+ * partition / push / inspect predicates conjunct-by-conjunct (subquery
7
+ * decorrelation, aggregate predicate pushdown, etc.) share these.
8
+ */
9
+ import { BinaryOpNode } from '../nodes/scalar.js';
10
+ /** Split an AND-tree into its conjuncts. Non-AND predicates yield a single-element list. */
11
+ export function splitConjuncts(pred) {
12
+ const result = [];
13
+ const stack = [pred];
14
+ while (stack.length) {
15
+ const n = stack.pop();
16
+ if (n instanceof BinaryOpNode && n.expression.operator === 'AND') {
17
+ stack.push(n.left, n.right);
18
+ }
19
+ else {
20
+ result.push(n);
21
+ }
22
+ }
23
+ return result;
24
+ }
25
+ /** Combine conjuncts back into a left-associative AND-tree; returns null when empty. */
26
+ export function combineConjuncts(conjuncts) {
27
+ if (conjuncts.length === 0)
28
+ return null;
29
+ return conjuncts.reduce((acc, cur) => new BinaryOpNode(cur.scope, { type: 'binary', operator: 'AND', left: acc.expression, right: cur.expression }, acc, cur));
30
+ }
31
+ //# sourceMappingURL=predicate-conjuncts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicate-conjuncts.js","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-conjuncts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,4FAA4F;AAC5F,MAAM,UAAU,cAAc,CAAC,IAAoB;IAClD,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,KAAK,GAAqB,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACvB,IAAI,CAAC,YAAY,YAAY,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,gBAAgB,CAAC,SAA2B;IAC3D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACpC,IAAI,YAAY,CACf,GAAG,CAAC,KAAK,EACT,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,EAChF,GAAG,EACH,GAAG,CACH,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Shape recognizers for declared-predicate AST trees (CHECK constraints,
3
+ * partial-index WHERE clauses). Shared by `check-extraction.ts` and
4
+ * `partial-unique-extraction.ts`; both pull `col`-style references, literal
5
+ * values, and "which columns are mentioned anywhere" out of small AST shapes.
6
+ *
7
+ * These helpers are intentionally syntactic — they do not interpret types,
8
+ * collations, or coercions. Callers wanting semantic equivalence should layer
9
+ * that on top.
10
+ */
11
+ import type * as AST from '../../parser/ast.js';
12
+ import type { SqlValue } from '../../common/types.js';
13
+ /**
14
+ * Return the column index for an `AST.ColumnExpr` or unqualified
15
+ * `AST.IdentifierExpr` that names a column in `columnIndexMap`; undefined
16
+ * otherwise. Schema-qualified identifiers (`other.foo`) are rejected.
17
+ */
18
+ export declare function columnIndexFromExpr(expr: AST.Expression, columnIndexMap: ReadonlyMap<string, number>): number | undefined;
19
+ /**
20
+ * Return the literal `SqlValue` for an `AST.LiteralExpr`, or undefined for any
21
+ * other expression shape (functions, casts, casts-of-literals, etc.). Only
22
+ * compile-time literals count for binding/domain purposes.
23
+ */
24
+ export declare function literalValue(expr: AST.Expression): SqlValue | undefined;
25
+ /**
26
+ * Flip a comparison operator across its operands: if you rewrite `b op a` as
27
+ * `a flipComparison(op) b`, the truth value is preserved. Unrecognized
28
+ * operators (including `=`/`==`) round-trip unchanged.
29
+ *
30
+ * Used by `partial-unique-extraction.ts`, `check-extraction.ts`, and
31
+ * `fd-utils.ts` to normalize `lit op col` into `col flipped lit`. Distinct
32
+ * from predicate negation (the same-named `flipComparison` in
33
+ * `predicate-normalizer.ts` returns `NOT op` instead of `swap-operands op`).
34
+ */
35
+ export declare function flipComparison(op: string): string;
36
+ /**
37
+ * Flatten a top-level `OR` chain into an array of disjunct expressions.
38
+ * Non-OR roots return as a single-element array. Textual order is preserved.
39
+ *
40
+ * Shared by `check-extraction.ts` (implication-form CHECK recognition) and
41
+ * `partial-unique-extraction.ts` (top-level OR guard recognition).
42
+ */
43
+ export declare function flattenDisjunction(expr: AST.Expression): AST.Expression[];
44
+ /**
45
+ * Collect the set of column indices referenced by `expr`. Only column /
46
+ * identifier nodes naming columns in `columnIndexMap` count. Returns an empty
47
+ * set when the expression references zero recognized columns; the caller can
48
+ * distinguish "no columns" (constant expression) from "exactly one column"
49
+ * by inspecting the size.
50
+ */
51
+ export declare function collectColumnNames(expr: AST.Expression, columnIndexMap: ReadonlyMap<string, number>): Set<number>;
52
+ //# sourceMappingURL=predicate-shape.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Shape recognizers for declared-predicate AST trees (CHECK constraints,
3
+ * partial-index WHERE clauses). Shared by `check-extraction.ts` and
4
+ * `partial-unique-extraction.ts`; both pull `col`-style references, literal
5
+ * values, and "which columns are mentioned anywhere" out of small AST shapes.
6
+ *
7
+ * These helpers are intentionally syntactic — they do not interpret types,
8
+ * collations, or coercions. Callers wanting semantic equivalence should layer
9
+ * that on top.
10
+ */
11
+ /**
12
+ * Return the column index for an `AST.ColumnExpr` or unqualified
13
+ * `AST.IdentifierExpr` that names a column in `columnIndexMap`; undefined
14
+ * otherwise. Schema-qualified identifiers (`other.foo`) are rejected.
15
+ */
16
+ export function columnIndexFromExpr(expr, columnIndexMap) {
17
+ if (expr.type === 'column') {
18
+ const ref = expr;
19
+ return columnIndexMap.get(ref.name.toLowerCase());
20
+ }
21
+ if (expr.type === 'identifier') {
22
+ const ref = expr;
23
+ if (ref.schema)
24
+ return undefined;
25
+ return columnIndexMap.get(ref.name.toLowerCase());
26
+ }
27
+ return undefined;
28
+ }
29
+ /**
30
+ * Return the literal `SqlValue` for an `AST.LiteralExpr`, or undefined for any
31
+ * other expression shape (functions, casts, casts-of-literals, etc.). Only
32
+ * compile-time literals count for binding/domain purposes.
33
+ */
34
+ export function literalValue(expr) {
35
+ if (expr.type !== 'literal')
36
+ return undefined;
37
+ const lit = expr;
38
+ const v = lit.value;
39
+ if (v instanceof Promise)
40
+ return undefined;
41
+ return v;
42
+ }
43
+ /**
44
+ * Flip a comparison operator across its operands: if you rewrite `b op a` as
45
+ * `a flipComparison(op) b`, the truth value is preserved. Unrecognized
46
+ * operators (including `=`/`==`) round-trip unchanged.
47
+ *
48
+ * Used by `partial-unique-extraction.ts`, `check-extraction.ts`, and
49
+ * `fd-utils.ts` to normalize `lit op col` into `col flipped lit`. Distinct
50
+ * from predicate negation (the same-named `flipComparison` in
51
+ * `predicate-normalizer.ts` returns `NOT op` instead of `swap-operands op`).
52
+ */
53
+ export function flipComparison(op) {
54
+ switch (op) {
55
+ case '<': return '>';
56
+ case '<=': return '>=';
57
+ case '>': return '<';
58
+ case '>=': return '<=';
59
+ default: return op;
60
+ }
61
+ }
62
+ /**
63
+ * Flatten a top-level `OR` chain into an array of disjunct expressions.
64
+ * Non-OR roots return as a single-element array. Textual order is preserved.
65
+ *
66
+ * Shared by `check-extraction.ts` (implication-form CHECK recognition) and
67
+ * `partial-unique-extraction.ts` (top-level OR guard recognition).
68
+ */
69
+ export function flattenDisjunction(expr) {
70
+ const out = [];
71
+ const stack = [expr];
72
+ while (stack.length > 0) {
73
+ const cur = stack.pop();
74
+ if (cur.type === 'binary' && cur.operator === 'OR') {
75
+ const b = cur;
76
+ // Preserve textual order: push right then left so left is popped first.
77
+ stack.push(b.right, b.left);
78
+ continue;
79
+ }
80
+ out.push(cur);
81
+ }
82
+ return out;
83
+ }
84
+ /**
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.
90
+ */
91
+ export function collectColumnNames(expr, columnIndexMap) {
92
+ const out = new Set();
93
+ const stack = [expr];
94
+ while (stack.length > 0) {
95
+ 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);
101
+ for (const key of Object.keys(node)) {
102
+ const v = node[key];
103
+ if (!v)
104
+ continue;
105
+ if (Array.isArray(v)) {
106
+ for (const item of v) {
107
+ if (item && typeof item === 'object' && 'type' in item) {
108
+ stack.push(item);
109
+ }
110
+ }
111
+ }
112
+ else if (typeof v === 'object' && 'type' in v) {
113
+ stack.push(v);
114
+ }
115
+ }
116
+ }
117
+ return out;
118
+ }
119
+ //# sourceMappingURL=predicate-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicate-shape.js","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-shape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Per-column constraint-satisfiability checker.
3
+ *
4
+ * Folds the conjunction of (predicate conjuncts ∧ source domain constraints ∧
5
+ * literal constant bindings) into per-column accumulators, then asks:
6
+ * "is there any value of every mentioned column that satisfies every fact?"
7
+ *
8
+ * The fragment is intentionally narrow:
9
+ * - Single-column comparisons against literals (= / == / != / < / <= / > / >=).
10
+ * - Single-column BETWEEN literal AND literal (positive form).
11
+ * - Single-column IN (lit, lit, ...) and intersection across IN-lists.
12
+ * The empty form `x IN ()` is also recognized as trivially `unsat`.
13
+ * - Range from `DomainConstraint { kind: 'range' }`.
14
+ * - Enum from `DomainConstraint { kind: 'enum' }`.
15
+ * - Literal `ConstantBinding`.
16
+ *
17
+ * Everything else (LIKE, function calls, cross-column comparisons, OR-trees,
18
+ * CASE, IS NULL, NOT IN with non-literal RHS, …) marks the touched columns as
19
+ * `sawUnknown`. The checker only ever returns `unsat` when an in-scope subset
20
+ * proves a contradiction — false positives are never emitted.
21
+ *
22
+ * Used by `rule-filter-contradiction` to recognize `Filter(child, false)` cases
23
+ * that const-folding can then collapse to `EmptyRelationNode`.
24
+ */
25
+ import type { ScalarPlanNode, DomainConstraint, ConstantBinding } from '../nodes/plan-node.js';
26
+ export type SatResult = 'sat' | 'unsat' | 'unknown';
27
+ /**
28
+ * Returns `'unsat'` iff the conjunction is provably contradictory within the
29
+ * supported fragment; `'sat'` when no contradiction is found and every
30
+ * mentioned clause was in scope; `'unknown'` otherwise. Never returns false
31
+ * `'unsat'`.
32
+ *
33
+ * `attrIndex(attrId)` maps an attribute id visible to the predicate's
34
+ * `ColumnReferenceNode`s back to the physical column index used by
35
+ * `domains` / `bindings`. Pass an identity-style mapper if the caller has
36
+ * already aligned them.
37
+ *
38
+ * `getCollation(col)` is optional; when supplied, equality / range comparisons
39
+ * for that column use the named collation (TEXT only — numeric comparisons are
40
+ * collation-independent). Defaults to BINARY.
41
+ */
42
+ export declare function checkSatisfiability(conjuncts: ReadonlyArray<ScalarPlanNode>, domains: ReadonlyArray<DomainConstraint>, bindings: ReadonlyArray<ConstantBinding>, attrIndex: (attrId: number) => number | undefined, getCollation?: (col: number) => string | undefined): SatResult;
43
+ //# sourceMappingURL=sat-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sat-checker.d.ts","sourceRoot":"","sources":["../../../../src/planner/analysis/sat-checker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACX,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,MAAM,uBAAuB,CAAC;AAe/B,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;AAyBpD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,EACxC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,EACxC,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EACjD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAChD,SAAS,CA6EX"}