@quereus/quereus 4.4.1 → 4.5.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 (265) hide show
  1. package/README.md +1 -1
  2. package/dist/src/core/database-materialized-views-analysis.d.ts.map +1 -1
  3. package/dist/src/core/database-materialized-views-analysis.js +1 -0
  4. package/dist/src/core/database-materialized-views-analysis.js.map +1 -1
  5. package/dist/src/func/builtins/scalar.d.ts.map +1 -1
  6. package/dist/src/func/builtins/scalar.js +92 -3
  7. package/dist/src/func/builtins/scalar.js.map +1 -1
  8. package/dist/src/func/registration.d.ts +4 -0
  9. package/dist/src/func/registration.d.ts.map +1 -1
  10. package/dist/src/func/registration.js +1 -0
  11. package/dist/src/func/registration.js.map +1 -1
  12. package/dist/src/index.d.ts +3 -3
  13. package/dist/src/index.d.ts.map +1 -1
  14. package/dist/src/index.js +2 -2
  15. package/dist/src/index.js.map +1 -1
  16. package/dist/src/planner/analysis/coarsened-key.d.ts +4 -3
  17. package/dist/src/planner/analysis/coarsened-key.d.ts.map +1 -1
  18. package/dist/src/planner/analysis/coarsened-key.js +37 -3
  19. package/dist/src/planner/analysis/coarsened-key.js.map +1 -1
  20. package/dist/src/planner/analysis/comparison-collation.d.ts +33 -3
  21. package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
  22. package/dist/src/planner/analysis/comparison-collation.js +36 -2
  23. package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
  24. package/dist/src/planner/analysis/coverage-prover.d.ts +13 -2
  25. package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -1
  26. package/dist/src/planner/analysis/coverage-prover.js +10 -14
  27. package/dist/src/planner/analysis/coverage-prover.js.map +1 -1
  28. package/dist/src/planner/analysis/predicate-conjuncts.d.ts +10 -4
  29. package/dist/src/planner/analysis/predicate-conjuncts.d.ts.map +1 -1
  30. package/dist/src/planner/analysis/predicate-conjuncts.js +28 -7
  31. package/dist/src/planner/analysis/predicate-conjuncts.js.map +1 -1
  32. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  33. package/dist/src/planner/analysis/query-rewrite-matcher.js +8 -27
  34. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  35. package/dist/src/planner/analysis/scalar-subqueries.d.ts +22 -3
  36. package/dist/src/planner/analysis/scalar-subqueries.d.ts.map +1 -1
  37. package/dist/src/planner/analysis/scalar-subqueries.js +32 -3
  38. package/dist/src/planner/analysis/scalar-subqueries.js.map +1 -1
  39. package/dist/src/planner/analysis/set-op-type-merge.d.ts +64 -0
  40. package/dist/src/planner/analysis/set-op-type-merge.d.ts.map +1 -0
  41. package/dist/src/planner/analysis/set-op-type-merge.js +97 -0
  42. package/dist/src/planner/analysis/set-op-type-merge.js.map +1 -0
  43. package/dist/src/planner/building/coercion.d.ts +78 -0
  44. package/dist/src/planner/building/coercion.d.ts.map +1 -0
  45. package/dist/src/planner/building/coercion.js +137 -0
  46. package/dist/src/planner/building/coercion.js.map +1 -0
  47. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  48. package/dist/src/planner/building/constraint-builder.js +5 -18
  49. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  50. package/dist/src/planner/building/expression.d.ts.map +1 -1
  51. package/dist/src/planner/building/expression.js +1 -104
  52. package/dist/src/planner/building/expression.js.map +1 -1
  53. package/dist/src/planner/building/function-call.d.ts.map +1 -1
  54. package/dist/src/planner/building/function-call.js +8 -0
  55. package/dist/src/planner/building/function-call.js.map +1 -1
  56. package/dist/src/planner/building/select-compound.d.ts.map +1 -1
  57. package/dist/src/planner/building/select-compound.js +10 -6
  58. package/dist/src/planner/building/select-compound.js.map +1 -1
  59. package/dist/src/planner/cost/conjunct-cost.d.ts +42 -0
  60. package/dist/src/planner/cost/conjunct-cost.d.ts.map +1 -0
  61. package/dist/src/planner/cost/conjunct-cost.js +62 -0
  62. package/dist/src/planner/cost/conjunct-cost.js.map +1 -0
  63. package/dist/src/planner/mutation/propagate.d.ts.map +1 -1
  64. package/dist/src/planner/mutation/propagate.js +1 -0
  65. package/dist/src/planner/mutation/propagate.js.map +1 -1
  66. package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
  67. package/dist/src/planner/nodes/async-gather-node.js +19 -8
  68. package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
  69. package/dist/src/planner/nodes/bloom-join-node.d.ts +2 -0
  70. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  71. package/dist/src/planner/nodes/bloom-join-node.js +10 -5
  72. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  73. package/dist/src/planner/nodes/join-node.d.ts +5 -0
  74. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  75. package/dist/src/planner/nodes/join-node.js +8 -1
  76. package/dist/src/planner/nodes/join-node.js.map +1 -1
  77. package/dist/src/planner/nodes/join-utils.d.ts +57 -0
  78. package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
  79. package/dist/src/planner/nodes/join-utils.js +47 -0
  80. package/dist/src/planner/nodes/join-utils.js.map +1 -1
  81. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts +87 -0
  82. package/dist/src/planner/nodes/key-set-semi-join-node.d.ts.map +1 -0
  83. package/dist/src/planner/nodes/key-set-semi-join-node.js +137 -0
  84. package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -0
  85. package/dist/src/planner/nodes/merge-join-node.d.ts +2 -0
  86. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  87. package/dist/src/planner/nodes/merge-join-node.js +14 -6
  88. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  89. package/dist/src/planner/nodes/plan-node-type.d.ts +1 -0
  90. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  91. package/dist/src/planner/nodes/plan-node-type.js +1 -0
  92. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  93. package/dist/src/planner/nodes/set-operation-node.d.ts +68 -16
  94. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  95. package/dist/src/planner/nodes/set-operation-node.js +147 -26
  96. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  97. package/dist/src/planner/nodes/table-access-nodes.d.ts +19 -1
  98. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  99. package/dist/src/planner/nodes/table-access-nodes.js +13 -2
  100. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  101. package/dist/src/planner/optimizer.d.ts.map +1 -1
  102. package/dist/src/planner/optimizer.js +49 -0
  103. package/dist/src/planner/optimizer.js.map +1 -1
  104. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts +68 -0
  105. package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -0
  106. package/dist/src/planner/rules/access/rule-key-set-seek.js +408 -0
  107. package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -0
  108. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
  109. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +2 -2
  110. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
  111. package/dist/src/planner/rules/access/rule-select-access-path.d.ts +27 -0
  112. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  113. package/dist/src/planner/rules/access/rule-select-access-path.js +31 -11
  114. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  115. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +67 -41
  116. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
  117. package/dist/src/planner/rules/join/equi-pair-extractor.js +72 -36
  118. package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
  119. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  120. package/dist/src/planner/rules/join/rule-join-physical-selection.js +14 -2
  121. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  122. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
  123. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +11 -1
  124. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
  125. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +1 -1
  126. package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +1 -1
  127. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.d.ts +30 -0
  128. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.d.ts.map +1 -0
  129. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.js +63 -0
  130. package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.js.map +1 -0
  131. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +17 -1
  132. package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
  133. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +206 -12
  134. package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -1
  135. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts +3 -1
  136. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
  137. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +13 -1
  138. package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
  139. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
  140. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +18 -3
  141. package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
  142. package/dist/src/planner/rules/shared/index-style-context.d.ts +17 -0
  143. package/dist/src/planner/rules/shared/index-style-context.d.ts.map +1 -1
  144. package/dist/src/planner/rules/shared/index-style-context.js +7 -0
  145. package/dist/src/planner/rules/shared/index-style-context.js.map +1 -1
  146. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts +24 -6
  147. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  148. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +175 -60
  149. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  150. package/dist/src/planner/stats/catalog-stats.d.ts +52 -0
  151. package/dist/src/planner/stats/catalog-stats.d.ts.map +1 -1
  152. package/dist/src/planner/stats/catalog-stats.js +151 -5
  153. package/dist/src/planner/stats/catalog-stats.js.map +1 -1
  154. package/dist/src/planner/stats/index.d.ts +15 -0
  155. package/dist/src/planner/stats/index.d.ts.map +1 -1
  156. package/dist/src/planner/stats/index.js.map +1 -1
  157. package/dist/src/planner/stats/selectivity-combine.d.ts +53 -0
  158. package/dist/src/planner/stats/selectivity-combine.d.ts.map +1 -0
  159. package/dist/src/planner/stats/selectivity-combine.js +75 -0
  160. package/dist/src/planner/stats/selectivity-combine.js.map +1 -0
  161. package/dist/src/planner/util/column-origins.d.ts +58 -0
  162. package/dist/src/planner/util/column-origins.d.ts.map +1 -0
  163. package/dist/src/planner/util/column-origins.js +90 -0
  164. package/dist/src/planner/util/column-origins.js.map +1 -0
  165. package/dist/src/runtime/deferred-constraint-queue.d.ts +40 -0
  166. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  167. package/dist/src/runtime/deferred-constraint-queue.js +90 -9
  168. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  169. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  170. package/dist/src/runtime/emit/alter-table.js +6 -0
  171. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  172. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
  173. package/dist/src/runtime/emit/asof-scan.js +8 -3
  174. package/dist/src/runtime/emit/asof-scan.js.map +1 -1
  175. package/dist/src/runtime/emit/between.d.ts.map +1 -1
  176. package/dist/src/runtime/emit/between.js +4 -38
  177. package/dist/src/runtime/emit/between.js.map +1 -1
  178. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  179. package/dist/src/runtime/emit/binary.js +2 -23
  180. package/dist/src/runtime/emit/binary.js.map +1 -1
  181. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  182. package/dist/src/runtime/emit/bloom-join.js +6 -35
  183. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  184. package/dist/src/runtime/emit/case.d.ts.map +1 -1
  185. package/dist/src/runtime/emit/case.js +40 -6
  186. package/dist/src/runtime/emit/case.js.map +1 -1
  187. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  188. package/dist/src/runtime/emit/constraint-check.js +32 -8
  189. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  190. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  191. package/dist/src/runtime/emit/dml-executor.js +26 -23
  192. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  193. package/dist/src/runtime/emit/filter.d.ts +18 -0
  194. package/dist/src/runtime/emit/filter.d.ts.map +1 -1
  195. package/dist/src/runtime/emit/filter.js +52 -10
  196. package/dist/src/runtime/emit/filter.js.map +1 -1
  197. package/dist/src/runtime/emit/join-key-extractor.d.ts +46 -0
  198. package/dist/src/runtime/emit/join-key-extractor.d.ts.map +1 -0
  199. package/dist/src/runtime/emit/join-key-extractor.js +60 -0
  200. package/dist/src/runtime/emit/join-key-extractor.js.map +1 -0
  201. package/dist/src/runtime/emit/join.d.ts.map +1 -1
  202. package/dist/src/runtime/emit/join.js +36 -15
  203. package/dist/src/runtime/emit/join.js.map +1 -1
  204. package/dist/src/runtime/emit/key-set-semi-join.d.ts +29 -0
  205. package/dist/src/runtime/emit/key-set-semi-join.d.ts.map +1 -0
  206. package/dist/src/runtime/emit/key-set-semi-join.js +143 -0
  207. package/dist/src/runtime/emit/key-set-semi-join.js.map +1 -0
  208. package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
  209. package/dist/src/runtime/emit/merge-join.js +15 -8
  210. package/dist/src/runtime/emit/merge-join.js.map +1 -1
  211. package/dist/src/runtime/emit/operand-comparator.d.ts +40 -0
  212. package/dist/src/runtime/emit/operand-comparator.d.ts.map +1 -0
  213. package/dist/src/runtime/emit/operand-comparator.js +59 -0
  214. package/dist/src/runtime/emit/operand-comparator.js.map +1 -0
  215. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  216. package/dist/src/runtime/emit/scan.js +11 -2
  217. package/dist/src/runtime/emit/scan.js.map +1 -1
  218. package/dist/src/runtime/parallel-driver.d.ts +5 -2
  219. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  220. package/dist/src/runtime/parallel-driver.js +6 -2
  221. package/dist/src/runtime/parallel-driver.js.map +1 -1
  222. package/dist/src/runtime/register.d.ts.map +1 -1
  223. package/dist/src/runtime/register.js +2 -0
  224. package/dist/src/runtime/register.js.map +1 -1
  225. package/dist/src/runtime/types.d.ts +7 -0
  226. package/dist/src/runtime/types.d.ts.map +1 -1
  227. package/dist/src/runtime/types.js.map +1 -1
  228. package/dist/src/schema/function.d.ts +9 -0
  229. package/dist/src/schema/function.d.ts.map +1 -1
  230. package/dist/src/schema/function.js.map +1 -1
  231. package/dist/src/types/builtin-types.d.ts.map +1 -1
  232. package/dist/src/types/builtin-types.js +30 -4
  233. package/dist/src/types/builtin-types.js.map +1 -1
  234. package/dist/src/util/comparison.d.ts +25 -0
  235. package/dist/src/util/comparison.d.ts.map +1 -1
  236. package/dist/src/util/comparison.js +31 -0
  237. package/dist/src/util/comparison.js.map +1 -1
  238. package/dist/src/vtab/best-access-plan.d.ts +87 -0
  239. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  240. package/dist/src/vtab/best-access-plan.js +87 -0
  241. package/dist/src/vtab/best-access-plan.js.map +1 -1
  242. package/dist/src/vtab/memory/layer/base.d.ts +6 -4
  243. package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
  244. package/dist/src/vtab/memory/layer/base.js +6 -4
  245. package/dist/src/vtab/memory/layer/base.js.map +1 -1
  246. package/dist/src/vtab/memory/layer/manager.d.ts +60 -18
  247. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  248. package/dist/src/vtab/memory/layer/manager.js +100 -39
  249. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  250. package/dist/src/vtab/memory/layer/transaction.d.ts +15 -6
  251. package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
  252. package/dist/src/vtab/memory/layer/transaction.js +26 -11
  253. package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
  254. package/dist/src/vtab/memory/module.d.ts +14 -2
  255. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  256. package/dist/src/vtab/memory/module.js +51 -39
  257. package/dist/src/vtab/memory/module.js.map +1 -1
  258. package/dist/src/vtab/memory/table.d.ts +1 -1
  259. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  260. package/dist/src/vtab/memory/table.js +9 -2
  261. package/dist/src/vtab/memory/table.js.map +1 -1
  262. package/dist/src/vtab/table.d.ts +9 -1
  263. package/dist/src/vtab/table.d.ts.map +1 -1
  264. package/dist/src/vtab/table.js.map +1 -1
  265. package/package.json +3 -3
@@ -1,9 +1,11 @@
1
1
  import { asRun } from '../types.js';
2
2
  import { emitCallFromPlan, emitPlanNode } from '../emitters.js';
3
3
  import { createLogger } from '../../common/logger.js';
4
- import { compareSqlValuesFast, BINARY_COLLATION } from '../../util/comparison.js';
4
+ import { BINARY_COLLATION } from '../../util/comparison.js';
5
5
  import { buildRowDescriptor } from '../../util/row-descriptor.js';
6
6
  import { effectiveCollationOfTypes } from '../../planner/analysis/comparison-collation.js';
7
+ import { makeOperandComparator } from './operand-comparator.js';
8
+ import { ANY_TYPE } from '../../types/builtin-types.js';
7
9
  import { createRowSlot } from '../context-helpers.js';
8
10
  import { joinOutputRow } from './join-output.js';
9
11
  import { resolveMaybe } from '../async-util.js';
@@ -26,10 +28,13 @@ export function emitLoopJoin(plan, ctx) {
26
28
  const leftRowDescriptor = buildRowDescriptor(leftAttributes);
27
29
  const rightAttributes = plan.right.getAttributes();
28
30
  const rightRowDescriptor = buildRowDescriptor(rightAttributes);
29
- // Pre-resolve USING column indices and collation-based comparators at emit time.
30
- // USING compares the two sides' same-named columns, so each pair resolves
31
- // through the shared provenance lattice — `using (k)` agrees with the
32
- // spelled-out `l.k = r.k` regardless of side order.
31
+ // Pre-resolve USING column indices and per-column comparators at emit time.
32
+ // USING compares the two sides' same-named columns, so each pair resolves its
33
+ // collation through the shared provenance lattice — `using (k)` agrees with the
34
+ // spelled-out `l.k = r.k` regardless of side order — and its comparator through
35
+ // `makeOperandComparator`, the one copy of the routing rule `emitComparisonOp`
36
+ // uses, so the two also agree on declared-type semantics (see
37
+ // {@link evaluateUsingCondition}).
33
38
  const usingResolved = plan.usingColumns?.map(columnName => {
34
39
  const lowerName = columnName.toLowerCase();
35
40
  const leftIndex = leftAttributes.findIndex(attr => attr.name.toLowerCase() === lowerName);
@@ -39,7 +44,8 @@ export function emitLoopJoin(plan, ctx) {
39
44
  const collationFunc = leftType && rightType
40
45
  ? ctx.resolveCollation(effectiveCollationOfTypes(leftType, rightType))
41
46
  : BINARY_COLLATION;
42
- return { leftIndex, rightIndex, collationFunc };
47
+ const compare = makeOperandComparator(leftType?.logicalType ?? ANY_TYPE, rightType?.logicalType ?? ANY_TYPE, collationFunc);
48
+ return { leftIndex, rightIndex, compare };
43
49
  });
44
50
  // Existence (`exists … as`) flags appended after both sides. The flag is the
45
51
  // ACTUAL match bit the outer-join null-extension already computes (NOT a
@@ -201,21 +207,36 @@ export function emitLoopJoin(plan, ctx) {
201
207
  };
202
208
  }
203
209
  /**
204
- * Evaluates USING condition using pre-resolved column indices and collation functions.
205
- * All index lookups and collation resolution are done at emit time.
206
- * Uses compareSqlValuesFast for safe cross-type comparison.
210
+ * Evaluates a USING condition from pre-resolved column indices and comparators.
211
+ * All index lookups, collation resolution and comparator routing happen at emit time.
207
212
  *
208
- * NOTE: USING equality is storage-class + collation, not semantic-ordering-aware
209
- * a TIMESPAN USING column treats 'PT1H'/'PT60M' as distinct where `l.d = r.d`
210
- * treats them equal. Fine while USING on semantic-ordering columns stays unused;
211
- * if it shows up, resolve per-column comparators like emitMergeJoin does.
213
+ * `using (k)` means exactly `l.k = r.k`, so each column compares through
214
+ * {@link makeOperandComparator} the one copy of the routing rule
215
+ * `emitComparisonOp` uses. A USING column pairing a semantic-ordering type with a
216
+ * plain one (TIMESPAN `d` against TEXT `d`) therefore takes the same runtime
217
+ * duration check `=` takes and reports 'PT1H' ≡ 'PT60M'; a same-type pair takes the
218
+ * type's own compare. A NULL on either side fails the column outright, mirroring
219
+ * `emitComparisonOp`'s `v1 === null || v2 === null ⇒ null` guard: `l.k = r.k` is
220
+ * UNKNOWN, not true, when both are NULL. The comparators themselves rank NULL/NULL as
221
+ * equal (they are ordering functions, where NULL is a value), so the guard belongs
222
+ * here — without it a nested-loop USING join emits rows the hash-keyed path and the
223
+ * spelled-out ON form both drop.
224
+ *
225
+ * NOTE: USING skips the plan-time cross-type coercion `=` gets, so a JSON column
226
+ * paired with a TEXT one still compares as OBJECT-vs-TEXT storage classes and never
227
+ * matches. Tracked as `bug-using-join-skips-cross-type-coercion`.
212
228
  */
213
229
  function evaluateUsingCondition(leftRow, rightRow, resolved) {
214
- for (const { leftIndex, rightIndex, collationFunc } of resolved) {
230
+ for (const { leftIndex, rightIndex, compare } of resolved) {
215
231
  if (leftIndex === -1 || rightIndex === -1) {
216
232
  return false;
217
233
  }
218
- if (compareSqlValuesFast(leftRow[leftIndex], rightRow[rightIndex], collationFunc) !== 0) {
234
+ const leftValue = leftRow[leftIndex];
235
+ const rightValue = rightRow[rightIndex];
236
+ if (leftValue === null || rightValue === null) {
237
+ return false;
238
+ }
239
+ if (compare(leftValue, rightValue) !== 0) {
219
240
  return false;
220
241
  }
221
242
  }
@@ -1 +1 @@
1
- {"version":3,"file":"join.js","sourceRoot":"","sources":["../../../../src/runtime/emit/join.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"join.js","sourceRoot":"","sources":["../../../../src/runtime/emit/join.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { KeySetSemiJoinNode, KeySetPushdown } from '../../planner/nodes/key-set-semi-join-node.js';
2
+ import type { Instruction } from '../types.js';
3
+ import type { EmissionContext } from '../emission-context.js';
4
+ import type { SqlValue } from '../../common/types.js';
5
+ import type { FilterInfo } from '../../vtab/filter-info.js';
6
+ /**
7
+ * Rewrite a full-scan FilterInfo into the single-column `plan=5` multi-seek the
8
+ * literal-IN arm of `rule-select-access-path` produces for `where col in (…)` —
9
+ * one EQ constraint per key, `argvIndex` 1…K, `inCount=<K>` in the idxStr
10
+ * (`seekWidth` omitted ⇒ 1). Every downstream consumer
11
+ * (`StoreTable.scanMultiSeek`, the memory vtab's scan-plan builder,
12
+ * `IsolatedTable.buildConstraintMatcher`) consumes it unchanged because it
13
+ * cannot be told apart from a literal list.
14
+ *
15
+ * Exported for the plan-time/runtime shape-equivalence unit test.
16
+ */
17
+ export declare function stampMultiSeek(base: FilterInfo, pushdown: KeySetPushdown, keys: readonly SqlValue[]): FilterInfo;
18
+ /**
19
+ * Emit a KeySetSemiJoin: drain the key source once into a set, decide
20
+ * seek-vs-scan, then stream the target probing every row against the set.
21
+ *
22
+ * The probe is unconditional — the pushdown only changes how many rows the
23
+ * target emits. The target leaf is emitted through `emitSeqScan`'s
24
+ * `FilterInfoOverride` hook (the OrdinalSlice pattern): the override reads the
25
+ * per-execution state this run() stamped and either leaves the full-scan
26
+ * FilterInfo untouched or replaces it with the multi-seek.
27
+ */
28
+ export declare function emitKeySetSemiJoin(plan: KeySetSemiJoinNode, ctx: EmissionContext): Instruction;
29
+ //# sourceMappingURL=key-set-semi-join.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-set-semi-join.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/key-set-semi-join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AACxG,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAO,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAK3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAc5D;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,SAAS,QAAQ,EAAE,GACvB,UAAU,CA0BZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAuG9F"}
@@ -0,0 +1,143 @@
1
+ import { asRun } from '../types.js';
2
+ import { emitPlanNode } from '../emitters.js';
3
+ import { emitSeqScan } from './scan.js';
4
+ import { StatusCode } from '../../common/types.js';
5
+ import { QuereusError, throwIfAborted } from '../../common/errors.js';
6
+ import { IndexConstraintOp } from '../../common/constants.js';
7
+ import { encodeIdxStr, makeIdxStrSpec } from '../../vtab/idx-str.js';
8
+ import { buildJoinKeyExtractor } from './join-key-extractor.js';
9
+ import { compareSqlValuesFast, normalizeCollationName } from '../../util/comparison.js';
10
+ import { createLogger } from '../../common/logger.js';
11
+ const log = createLogger('runtime:emit:key-set-semi-join');
12
+ /**
13
+ * Rewrite a full-scan FilterInfo into the single-column `plan=5` multi-seek the
14
+ * literal-IN arm of `rule-select-access-path` produces for `where col in (…)` —
15
+ * one EQ constraint per key, `argvIndex` 1…K, `inCount=<K>` in the idxStr
16
+ * (`seekWidth` omitted ⇒ 1). Every downstream consumer
17
+ * (`StoreTable.scanMultiSeek`, the memory vtab's scan-plan builder,
18
+ * `IsolatedTable.buildConstraintMatcher`) consumes it unchanged because it
19
+ * cannot be told apart from a literal list.
20
+ *
21
+ * Exported for the plan-time/runtime shape-equivalence unit test.
22
+ */
23
+ export function stampMultiSeek(base, pushdown, keys) {
24
+ const constraints = keys.map((_v, i) => ({
25
+ constraint: { iColumn: pushdown.seekColumnIndex, op: IndexConstraintOp.EQ, usable: true },
26
+ argvIndex: i + 1,
27
+ }));
28
+ const idxStr = encodeIdxStr(makeIdxStrSpec(pushdown.indexName, 'multiSeek', new Map([['inCount', String(keys.length)]])));
29
+ return {
30
+ ...base,
31
+ idxStr,
32
+ constraints,
33
+ args: keys,
34
+ accessPath: pushdown.accessPath,
35
+ indexInfoOutput: {
36
+ ...base.indexInfoOutput,
37
+ idxStr,
38
+ nConstraint: constraints.length,
39
+ aConstraint: constraints.map(c => c.constraint),
40
+ aConstraintUsage: constraints.map(c => ({ argvIndex: c.argvIndex, omit: true })),
41
+ estimatedRows: BigInt(keys.length),
42
+ // An ordering-only leaf stamps orderByConsumed vacuously (nothing above
43
+ // the replaced hash join consumed its order); the multi-seek is not an
44
+ // ordering plan, so report false — matching the literal-IN arm's shape.
45
+ orderByConsumed: false,
46
+ },
47
+ };
48
+ }
49
+ /**
50
+ * Emit a KeySetSemiJoin: drain the key source once into a set, decide
51
+ * seek-vs-scan, then stream the target probing every row against the set.
52
+ *
53
+ * The probe is unconditional — the pushdown only changes how many rows the
54
+ * target emits. The target leaf is emitted through `emitSeqScan`'s
55
+ * `FilterInfoOverride` hook (the OrdinalSlice pattern): the override reads the
56
+ * per-execution state this run() stamped and either leaves the full-scan
57
+ * FilterInfo untouched or replaces it with the multi-seek.
58
+ */
59
+ export function emitKeySetSemiJoin(plan, ctx) {
60
+ const targetAttributes = plan.target.getAttributes();
61
+ const keyAttributes = plan.keySource.getAttributes();
62
+ const targetColIdx = plan.target.getAttributeIndex().get(plan.targetAttrId) ?? -1;
63
+ const keyColIdx = plan.keySource.getAttributeIndex().get(plan.keyAttrId) ?? -1;
64
+ if (targetColIdx === -1 || keyColIdx === -1) {
65
+ throw new QuereusError(`KeySetSemiJoin: could not resolve join attr IDs ${plan.targetAttrId}=${plan.keyAttrId}`, StatusCode.INTERNAL);
66
+ }
67
+ // Same serialized-key pipeline as the bloom join it replaces — both sides
68
+ // MUST agree bit-for-bit (see join-key-extractor.ts).
69
+ const extractKey = buildJoinKeyExtractor([[targetAttributes[targetColIdx].type, keyAttributes[keyColIdx].type]], ctx);
70
+ const targetIndices = [targetColIdx];
71
+ const keyIndices = [keyColIdx];
72
+ // Seek keys are sorted under the INDEX's leading-key-column collation so the
73
+ // stamped multi-seek arrives in index-key order — required by the isolation
74
+ // overlay's ascending-merge assumption and what makes emission deterministic.
75
+ const seekCollation = ctx.resolveCollation(normalizeCollationName(plan.pushdown.accessPath.index.keyColumns[0].collation ?? 'BINARY'));
76
+ const seekSign = plan.pushdown.seekDescending ? -1 : 1;
77
+ const stateByCtx = new WeakMap();
78
+ const targetInstruction = emitSeqScan(plan.target, ctx, (base, rctx) => {
79
+ const state = stateByCtx.get(rctx);
80
+ if (!state) {
81
+ // The scheduler always runs the target as a child of this node's
82
+ // run(), so a missing state entry is a scheduling bug. A silent
83
+ // full-scan fallback here would be correct but would hide that bug
84
+ // indefinitely — mirrors OrdinalSlice's guard.
85
+ throw new QuereusError('KeySetSemiJoin target executed without key-set initialization', StatusCode.INTERNAL);
86
+ }
87
+ if (!state.seekKeys)
88
+ return base; // scan fallback — unchanged FilterInfo
89
+ return stampMultiSeek(base, plan.pushdown, state.seekKeys);
90
+ });
91
+ const keySourceInstruction = emitPlanNode(plan.keySource, ctx);
92
+ async function* run(rctx, targetRows, keyRows) {
93
+ // === Drain the key source completely into the probe set. Per distinct
94
+ // probe string, keep the FIRST raw value seen as the seek value.
95
+ // NOTE: under a nested-loop rescan this re-drains the key source each
96
+ // pass. Correct but wasteful; the right side is uncorrelated by rule
97
+ // construction, so caching it is a pure optimization that only matters
98
+ // if this shape ever shows up under an NLJ inner.
99
+ const probe = new Set();
100
+ const seekByProbe = new Map();
101
+ for await (const keyRow of keyRows) {
102
+ throwIfAborted(rctx.signal);
103
+ const key = extractKey(keyRow, keyIndices);
104
+ if (key === null)
105
+ continue; // NULL keys can't match
106
+ if (!probe.has(key)) {
107
+ probe.add(key);
108
+ seekByProbe.set(key, keyRow[keyColIdx]);
109
+ }
110
+ }
111
+ // An empty build side means the semi join emits nothing — the target
112
+ // must not be opened at all.
113
+ if (probe.size === 0) {
114
+ log('Key set empty — target not opened');
115
+ return;
116
+ }
117
+ const push = probe.size <= Math.min(plan.pushdown.maxKeys, plan.pushdown.breakEvenKeys);
118
+ let seekKeys = null;
119
+ if (push) {
120
+ seekKeys = [...seekByProbe.values()]
121
+ .sort((a, b) => seekSign * compareSqlValuesFast(a, b, seekCollation));
122
+ }
123
+ log('Key set drained: %d distinct keys, %s (breakEven=%d, max=%d)', probe.size, push ? 'seeking' : 'scanning', plan.pushdown.breakEvenKeys, plan.pushdown.maxKeys);
124
+ stateByCtx.set(rctx, { probe, seekKeys });
125
+ try {
126
+ for await (const targetRow of targetRows) {
127
+ const key = extractKey(targetRow, targetIndices);
128
+ if (key !== null && probe.has(key)) {
129
+ yield targetRow;
130
+ }
131
+ }
132
+ }
133
+ finally {
134
+ stateByCtx.delete(rctx);
135
+ }
136
+ }
137
+ return {
138
+ params: [targetInstruction, keySourceInstruction],
139
+ run: asRun(run),
140
+ note: `key-set semi join (${plan.pushdown.indexName})`,
141
+ };
142
+ }
143
+ //# sourceMappingURL=key-set-semi-join.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-set-semi-join.js","sourceRoot":"","sources":["../../../../src/runtime/emit/key-set-semi-join.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"merge-join.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/merge-join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAiC9D;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAiKpF"}
1
+ {"version":3,"file":"merge-join.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/merge-join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAiC9D;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAwKpF"}
@@ -56,20 +56,27 @@ export function emitMergeJoin(plan, ctx) {
56
56
  // lattice (explicit > declared > default > BINARY) so a merge key compares
57
57
  // identically to the same `l.k = r.k` under any other join algorithm and the
58
58
  // nested-loop fallback. Throws on an explicit/declared conflict — a loud
59
- // backstop: `equi-pair-extractor`'s matched-collation gate keeps
60
- // conflicting/asymmetric pairs out of the merge path (LOCKSTEP: the merge
61
- // algorithm also needs both inputs sorted under THIS collation, and the
62
- // physical ordering property is collation-blind the gate is what makes the
63
- // resolved key collation equal each input's declared sort collation; see the
64
- // gate's docstring in equi-pair-extractor.ts), so this is unreachable for
65
- // legitimately-admitted pairs.
59
+ // backstop: the extractor declines conflicting pairs outright. LOCKSTEP:
60
+ // merge additionally needs both inputs sorted under THIS collation, and the
61
+ // physical ordering property is collation-blind so the selection rules
62
+ // (`rule-join-physical-selection`, `rule-monotonic-merge-join`) admit merge
63
+ // only for pairs tagged `collationsMatch` (both sides declare the same
64
+ // collation, making the resolved key collation equal each input's declared
65
+ // sort collation; see EquiJoinPair.collationsMatch in join-utils.ts).
66
+ // Mismatched pairs go to hash join, whose emitter has no ordering premise.
66
67
  const collationName = effectiveCollationOfTypes(leftAttributes[li].type, rightAttributes[ri].type);
67
68
  const collationFunc = ctx.resolveCollation(collationName);
68
69
  // When both sides declare the SAME semantic-ordering logical type (TIMESPAN,
69
70
  // JSON), advance/match under the type's compare — the inputs are sorted by it
70
71
  // (Sort and index order are typed since the semantic-ordering change), so a
71
72
  // collation/text compare here would advance the wrong side and drop matches.
72
- // Mixed or plain pairs keep the storage-class + collation compare.
73
+ // Plain pairs (neither side semantic-ordering) keep the storage-class +
74
+ // collation compare. LOCKSTEP: a MIXED pair never arrives —
75
+ // `equi-pair-extractor`'s semantic-ordering gate declines it, because merge
76
+ // needs both inputs sorted in THIS comparator's order and a `timespan` side is
77
+ // sorted by elapsed time while a `text` side is sorted by text, so no single
78
+ // comparator merges them. That is why the gate declines rather than
79
+ // canonicalizing; see its docstring.
73
80
  const leftLogical = leftAttributes[li].type.logicalType;
74
81
  const rightLogical = rightAttributes[ri].type.logicalType;
75
82
  keyComparators.push(leftLogical === rightLogical && hasSemanticOrdering(leftLogical)
@@ -1 +1 @@
1
- {"version":3,"file":"merge-join.js","sourceRoot":"","sources":["../../../../src/runtime/emit/merge-join.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge-join.js","sourceRoot":"","sources":["../../../../src/runtime/emit/merge-join.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { SqlValue } from "../../common/types.js";
2
+ import type { CollationFunction, LogicalType } from "../../types/logical-type.js";
3
+ /** Three-way comparison of a probe value against one operand value. */
4
+ export type OperandComparator = (probe: SqlValue, operand: SqlValue) => number;
5
+ /**
6
+ * Comparator for a group of declared operand types that are all compared against
7
+ * one another, selecting the SAME path `emitComparisonOp` would select for the
8
+ * equivalent binary comparison, so every comparison construct and its desugared
9
+ * form agree:
10
+ * - every operand declares the same semantic-ordering type (TIMESPAN, JSON) ⇒ that
11
+ * type's compare, matching the operator's typed fast path;
12
+ * - no operand is temporal and all share a category (all numeric or all textual) ⇒
13
+ * plain storage-class + collation compare, matching the operator's same-category
14
+ * fast path. Notably a plain TEXT column holding duration-shaped text ('PT30M')
15
+ * stays text-ordered here, exactly as `>=` leaves it;
16
+ * - otherwise ⇒ a runtime duration check first, matching the operator's generic path.
17
+ * This is what makes `greatest(timespan_col, 'PT30M')` rank by elapsed time even
18
+ * though the literal declares TEXT.
19
+ *
20
+ * This is THE one copy of the routing rule — {@link makeOperandComparator} is the
21
+ * two-operand case of it — so BETWEEN, `=`, simple CASE and the comparison builtins
22
+ * cannot drift apart. The collation must already be resolved through the shared
23
+ * provenance lattice (`planner/analysis/comparison-collation.ts`) by the caller.
24
+ */
25
+ export declare function makeGroupComparator(logicals: readonly LogicalType[], collationFunc: CollationFunction): OperandComparator;
26
+ /**
27
+ * Comparator for ONE operand of a "probe against N independently-typed operands"
28
+ * construct (a BETWEEN bound, a simple-CASE WHEN value, a `nullif` pair) — the
29
+ * two-operand case of {@link makeGroupComparator}.
30
+ */
31
+ export declare function makeOperandComparator(probeLogical: LogicalType, operandLogical: LogicalType, collationFunc: CollationFunction): OperandComparator;
32
+ /**
33
+ * Build the collation suffix for an instruction note over per-operand collations:
34
+ * nothing when every operand resolved to BINARY, a single name when they all agree,
35
+ * or the slash-joined per-operand list when they differ (BETWEEN's `lower/upper`
36
+ * generalizes to a simple CASE's one entry per WHEN clause). So `explain` shows what
37
+ * each operand is actually compared under.
38
+ */
39
+ export declare function formatOperandCollationNote(collationNames: readonly string[]): string;
40
+ //# sourceMappingURL=operand-comparator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operand-comparator.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/operand-comparator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAGlF,uEAAuE;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,KAAK,MAAM,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,aAAa,EAAE,iBAAiB,GAC9B,iBAAiB,CAanB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACpC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,aAAa,EAAE,iBAAiB,GAC9B,iBAAiB,CAEnB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAOpF"}
@@ -0,0 +1,59 @@
1
+ import { compareSqlValuesFast, createTypedComparator, hasSemanticOrdering } from "../../util/comparison.js";
2
+ import { tryTemporalCompare } from "./temporal-arithmetic.js";
3
+ /**
4
+ * Comparator for a group of declared operand types that are all compared against
5
+ * one another, selecting the SAME path `emitComparisonOp` would select for the
6
+ * equivalent binary comparison, so every comparison construct and its desugared
7
+ * form agree:
8
+ * - every operand declares the same semantic-ordering type (TIMESPAN, JSON) ⇒ that
9
+ * type's compare, matching the operator's typed fast path;
10
+ * - no operand is temporal and all share a category (all numeric or all textual) ⇒
11
+ * plain storage-class + collation compare, matching the operator's same-category
12
+ * fast path. Notably a plain TEXT column holding duration-shaped text ('PT30M')
13
+ * stays text-ordered here, exactly as `>=` leaves it;
14
+ * - otherwise ⇒ a runtime duration check first, matching the operator's generic path.
15
+ * This is what makes `greatest(timespan_col, 'PT30M')` rank by elapsed time even
16
+ * though the literal declares TEXT.
17
+ *
18
+ * This is THE one copy of the routing rule — {@link makeOperandComparator} is the
19
+ * two-operand case of it — so BETWEEN, `=`, simple CASE and the comparison builtins
20
+ * cannot drift apart. The collation must already be resolved through the shared
21
+ * provenance lattice (`planner/analysis/comparison-collation.ts`) by the caller.
22
+ */
23
+ export function makeGroupComparator(logicals, collationFunc) {
24
+ const first = logicals[0];
25
+ if (first && logicals.every(l => l === first) && hasSemanticOrdering(first)) {
26
+ return createTypedComparator(first, collationFunc);
27
+ }
28
+ const needsTemporalCheck = logicals.some(l => l.isTemporal);
29
+ const sameCategory = logicals.every(l => l.isNumeric) || logicals.every(l => l.isTextual);
30
+ if (!needsTemporalCheck && sameCategory) {
31
+ return (a, b) => compareSqlValuesFast(a, b, collationFunc);
32
+ }
33
+ return (a, b) => tryTemporalCompare(a, b) ?? compareSqlValuesFast(a, b, collationFunc);
34
+ }
35
+ /**
36
+ * Comparator for ONE operand of a "probe against N independently-typed operands"
37
+ * construct (a BETWEEN bound, a simple-CASE WHEN value, a `nullif` pair) — the
38
+ * two-operand case of {@link makeGroupComparator}.
39
+ */
40
+ export function makeOperandComparator(probeLogical, operandLogical, collationFunc) {
41
+ return makeGroupComparator([probeLogical, operandLogical], collationFunc);
42
+ }
43
+ /**
44
+ * Build the collation suffix for an instruction note over per-operand collations:
45
+ * nothing when every operand resolved to BINARY, a single name when they all agree,
46
+ * or the slash-joined per-operand list when they differ (BETWEEN's `lower/upper`
47
+ * generalizes to a simple CASE's one entry per WHEN clause). So `explain` shows what
48
+ * each operand is actually compared under.
49
+ */
50
+ export function formatOperandCollationNote(collationNames) {
51
+ if (collationNames.length === 0)
52
+ return '';
53
+ const first = collationNames[0];
54
+ if (collationNames.every(name => name === first)) {
55
+ return first !== 'BINARY' ? ` ${first}` : '';
56
+ }
57
+ return ` ${collationNames.join('/')}`;
58
+ }
59
+ //# sourceMappingURL=operand-comparator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operand-comparator.js","sourceRoot":"","sources":["../../../../src/runtime/emit/operand-comparator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAK9D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CAClC,QAAgC,EAChC,aAAgC;IAEhC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7E,OAAO,qBAAqB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1F,IAAI,CAAC,kBAAkB,IAAI,YAAY,EAAE,CAAC;QACzC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AACxF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACpC,YAAyB,EACzB,cAA2B,EAC3B,aAAgC;IAEhC,OAAO,mBAAmB,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,aAAa,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,cAAiC;IAC3E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAItG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAChC,cAAc,EAAE,UAAU,EAC1B,UAAU,EAAE,cAAc,EAC1B,WAAW,EAAE,QAAQ,EAAE,KACnB,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,aAAa,EACjD,GAAG,EAAE,eAAe,EACpB,kBAAkB,CAAC,EAAE,kBAAkB,GACrC,WAAW,CA0Ib"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAItG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAChC,cAAc,EAAE,UAAU,EAC1B,UAAU,EAAE,cAAc,EAC1B,WAAW,EAAE,QAAQ,EAAE,KACnB,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,aAAa,EACjD,GAAG,EAAE,eAAe,EACpB,kBAAkB,CAAC,EAAE,kBAAkB,GACrC,WAAW,CAoJb"}
@@ -58,16 +58,25 @@ export function emitSeqScan(plan, ctx, filterInfoOverride) {
58
58
  vtabInstance = cachedInstance;
59
59
  }
60
60
  else {
61
+ // `schema.name` is the name this scan was EMITTED against. A deferred constraint
62
+ // evaluates a plan frozen at row-write time, so an `ALTER TABLE ... RENAME TO`
63
+ // later in the same transaction leaves that name pointing at nothing. The queue
64
+ // stamps the entry's old→new mapping onto the context while it evaluates; resolve
65
+ // through it so we connect under the name the table carries now. Undefined for
66
+ // every other execution, so this costs one optional lookup. Nothing else in this
67
+ // scan is name-bound — `schema.columns`, the row descriptor and the `FilterInfo`
68
+ // are positional, and a table rename changes no column.
69
+ const effectiveName = runtimeCtx.tableNameRemap?.get(`${schema.schemaName}.${schema.name}`.toLowerCase()) ?? schema.name;
61
70
  try {
62
71
  const options = {
63
72
  ...(schema.vtabArgs ?? {}),
64
73
  ...(source.readCommitted ? { _readCommitted: true } : {})
65
74
  };
66
- vtabInstance = await module.connect(runtimeCtx.db, capturedModuleInfo.auxData, schema.vtabModuleName, schema.schemaName, schema.name, options);
75
+ vtabInstance = await module.connect(runtimeCtx.db, capturedModuleInfo.auxData, schema.vtabModuleName, schema.schemaName, effectiveName, options);
67
76
  }
68
77
  catch (e) {
69
78
  const message = e instanceof Error ? e.message : String(e);
70
- throw new QuereusError(`Module '${schema.vtabModuleName}' connect failed for table '${schema.name}': ${message}`, e instanceof QuereusError ? e.code : StatusCode.ERROR, e instanceof Error ? e : undefined);
79
+ throw new QuereusError(`Module '${schema.vtabModuleName}' connect failed for table '${effectiveName}': ${message}`, e instanceof QuereusError ? e.code : StatusCode.ERROR, e instanceof Error ? e : undefined);
71
80
  }
72
81
  if (connectionCache) {
73
82
  connectionCache.set(scanConnectionKey, vtabInstance);
@@ -1 +1 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../../src/runtime/emit/scan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../../src/runtime/emit/scan.ts"],"names":[],"mappings":"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"}
@@ -42,8 +42,11 @@ export declare class ParallelDriver {
42
42
  * parent's entries — set/delete in one fork do not leak to siblings or parent;
43
43
  * - **shared** references to read-mostly state: `db`, `stmt`, `params`,
44
44
  * `enableMetrics`, `mutationOrdinal`, `signal`, `tracer`, `activeConnection`,
45
- * `contextTracker`, `planStack`, `executionMemo`, `scanConnections`, `cacheStates`,
46
- * `cteMaterializations`, `inSetProbes`.
45
+ * `tableNameRemap`, `contextTracker`, `planStack`, `executionMemo`,
46
+ * `scanConnections`, `cacheStates`, `cteMaterializations`, `inSetProbes`.
47
+ * (`tableNameRemap` is the deferred-constraint queue's per-entry old→new table
48
+ * name map; shared by reference and read-only, so a scan leaf inside a fork
49
+ * resolves the same post-rename name the parent would.)
47
50
  * (`signal` is shared so every
48
51
  * branch honors the same cooperative cancellation — the table-scan leaf reads
49
52
  * `rctx.signal`.) (`mutationOrdinal` is a per-row INSERT/envelope
@@ -1 +1 @@
1
- {"version":3,"file":"parallel-driver.d.ts","sourceRoot":"","sources":["../../../src/runtime/parallel-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAIN,qBAAqB,EACrB,qBAAqB,EAErB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,oGAAoG;AACpG,MAAM,WAAW,iBAAiB,CAAC,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAc;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmDG;IACH,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE;IA8CvD;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,CAAC,EACN,SAAS,EAAE,aAAa,CAAC,CAAC,GAAG,EAAE,cAAc,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,EACnE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,EACpC,IAAI,CAAC,EAAE,oBAAoB,GACzB,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAQtC"}
1
+ {"version":3,"file":"parallel-driver.d.ts","sourceRoot":"","sources":["../../../src/runtime/parallel-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAIN,qBAAqB,EACrB,qBAAqB,EAErB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,oGAAoG;AACpG,MAAM,WAAW,iBAAiB,CAAC,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAc;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsDG;IACH,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE;IA+CvD;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,CAAC,EACN,SAAS,EAAE,aAAa,CAAC,CAAC,GAAG,EAAE,cAAc,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,EACnE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,EACpC,IAAI,CAAC,EAAE,oBAAoB,GACzB,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAQtC"}
@@ -27,8 +27,11 @@ export class ParallelDriver {
27
27
  * parent's entries — set/delete in one fork do not leak to siblings or parent;
28
28
  * - **shared** references to read-mostly state: `db`, `stmt`, `params`,
29
29
  * `enableMetrics`, `mutationOrdinal`, `signal`, `tracer`, `activeConnection`,
30
- * `contextTracker`, `planStack`, `executionMemo`, `scanConnections`, `cacheStates`,
31
- * `cteMaterializations`, `inSetProbes`.
30
+ * `tableNameRemap`, `contextTracker`, `planStack`, `executionMemo`,
31
+ * `scanConnections`, `cacheStates`, `cteMaterializations`, `inSetProbes`.
32
+ * (`tableNameRemap` is the deferred-constraint queue's per-entry old→new table
33
+ * name map; shared by reference and read-only, so a scan leaf inside a fork
34
+ * resolves the same post-rename name the parent would.)
32
35
  * (`signal` is shared so every
33
36
  * branch honors the same cooperative cancellation — the table-scan leaf reads
34
37
  * `rctx.signal`.) (`mutationOrdinal` is a per-row INSERT/envelope
@@ -95,6 +98,7 @@ export class ParallelDriver {
95
98
  tableContexts: childTableContexts,
96
99
  tracer: rctx.tracer,
97
100
  activeConnection: rctx.activeConnection,
101
+ tableNameRemap: rctx.tableNameRemap,
98
102
  enableMetrics: rctx.enableMetrics,
99
103
  mutationOrdinal: rctx.mutationOrdinal,
100
104
  signal: rctx.signal,