@quereus/quereus 2.8.0 → 2.9.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 (214) hide show
  1. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  2. package/dist/src/emit/ast-stringify.js +0 -3
  3. package/dist/src/emit/ast-stringify.js.map +1 -1
  4. package/dist/src/parser/ast.d.ts +3 -2
  5. package/dist/src/parser/ast.d.ts.map +1 -1
  6. package/dist/src/parser/parser.d.ts.map +1 -1
  7. package/dist/src/parser/parser.js +13 -4
  8. package/dist/src/parser/parser.js.map +1 -1
  9. package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
  10. package/dist/src/planner/building/foreign-key-builder.js +3 -2
  11. package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
  12. package/dist/src/planner/building/select.js +14 -2
  13. package/dist/src/planner/building/select.js.map +1 -1
  14. package/dist/src/planner/building/update.d.ts.map +1 -1
  15. package/dist/src/planner/building/update.js +10 -6
  16. package/dist/src/planner/building/update.js.map +1 -1
  17. package/dist/src/planner/framework/characteristics.d.ts +3 -1
  18. package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
  19. package/dist/src/planner/framework/characteristics.js +7 -0
  20. package/dist/src/planner/framework/characteristics.js.map +1 -1
  21. package/dist/src/planner/framework/physical-utils.d.ts +22 -1
  22. package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
  23. package/dist/src/planner/framework/physical-utils.js +47 -0
  24. package/dist/src/planner/framework/physical-utils.js.map +1 -1
  25. package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
  26. package/dist/src/planner/nodes/alias-node.js +2 -0
  27. package/dist/src/planner/nodes/alias-node.js.map +1 -1
  28. package/dist/src/planner/nodes/asof-scan-node.d.ts +137 -0
  29. package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -0
  30. package/dist/src/planner/nodes/asof-scan-node.js +223 -0
  31. package/dist/src/planner/nodes/asof-scan-node.js.map +1 -0
  32. package/dist/src/planner/nodes/constraint-check-node.d.ts +3 -0
  33. package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
  34. package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
  35. package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
  36. package/dist/src/planner/nodes/distinct-node.js +7 -0
  37. package/dist/src/planner/nodes/distinct-node.js.map +1 -1
  38. package/dist/src/planner/nodes/filter.d.ts.map +1 -1
  39. package/dist/src/planner/nodes/filter.js +2 -0
  40. package/dist/src/planner/nodes/filter.js.map +1 -1
  41. package/dist/src/planner/nodes/function.d.ts +11 -1
  42. package/dist/src/planner/nodes/function.d.ts.map +1 -1
  43. package/dist/src/planner/nodes/function.js +94 -1
  44. package/dist/src/planner/nodes/function.js.map +1 -1
  45. package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
  46. package/dist/src/planner/nodes/hash-aggregate.js +2 -0
  47. package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
  48. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  49. package/dist/src/planner/nodes/join-node.js +10 -2
  50. package/dist/src/planner/nodes/join-node.js.map +1 -1
  51. package/dist/src/planner/nodes/join-utils.d.ts +19 -1
  52. package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
  53. package/dist/src/planner/nodes/join-utils.js +46 -0
  54. package/dist/src/planner/nodes/join-utils.js.map +1 -1
  55. package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
  56. package/dist/src/planner/nodes/limit-offset.js +2 -0
  57. package/dist/src/planner/nodes/limit-offset.js.map +1 -1
  58. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  59. package/dist/src/planner/nodes/merge-join-node.js +4 -1
  60. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  61. package/dist/src/planner/nodes/ordinal-slice-node.d.ts +50 -0
  62. package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -0
  63. package/dist/src/planner/nodes/ordinal-slice-node.js +127 -0
  64. package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -0
  65. package/dist/src/planner/nodes/plan-node-type.d.ts +2 -0
  66. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  67. package/dist/src/planner/nodes/plan-node-type.js +2 -0
  68. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  69. package/dist/src/planner/nodes/plan-node.d.ts +130 -1
  70. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  71. package/dist/src/planner/nodes/plan-node.js +49 -0
  72. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  73. package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
  74. package/dist/src/planner/nodes/project-node.js +6 -1
  75. package/dist/src/planner/nodes/project-node.js.map +1 -1
  76. package/dist/src/planner/nodes/reference.d.ts +4 -1
  77. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  78. package/dist/src/planner/nodes/reference.js +16 -0
  79. package/dist/src/planner/nodes/reference.js.map +1 -1
  80. package/dist/src/planner/nodes/scalar.d.ts +7 -1
  81. package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
  82. package/dist/src/planner/nodes/scalar.js +100 -1
  83. package/dist/src/planner/nodes/scalar.js.map +1 -1
  84. package/dist/src/planner/nodes/set-operation-node.d.ts +2 -1
  85. package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
  86. package/dist/src/planner/nodes/set-operation-node.js +9 -0
  87. package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
  88. package/dist/src/planner/nodes/sort.d.ts.map +1 -1
  89. package/dist/src/planner/nodes/sort.js +20 -0
  90. package/dist/src/planner/nodes/sort.js.map +1 -1
  91. package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
  92. package/dist/src/planner/nodes/stream-aggregate.js +2 -0
  93. package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
  94. package/dist/src/planner/nodes/table-access-nodes.d.ts +37 -2
  95. package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
  96. package/dist/src/planner/nodes/table-access-nodes.js +87 -10
  97. package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
  98. package/dist/src/planner/nodes/update-node.d.ts +1 -3
  99. package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
  100. package/dist/src/planner/nodes/update-node.js +3 -9
  101. package/dist/src/planner/nodes/update-node.js.map +1 -1
  102. package/dist/src/planner/nodes/window-node.d.ts +61 -2
  103. package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
  104. package/dist/src/planner/nodes/window-node.js +64 -3
  105. package/dist/src/planner/nodes/window-node.js.map +1 -1
  106. package/dist/src/planner/optimizer-tuning.d.ts +9 -0
  107. package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
  108. package/dist/src/planner/optimizer-tuning.js +3 -0
  109. package/dist/src/planner/optimizer-tuning.js.map +1 -1
  110. package/dist/src/planner/optimizer.d.ts.map +1 -1
  111. package/dist/src/planner/optimizer.js +91 -0
  112. package/dist/src/planner/optimizer.js.map +1 -1
  113. package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts +30 -0
  114. package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts.map +1 -0
  115. package/dist/src/planner/rules/access/rule-asof-strategy-select.js +112 -0
  116. package/dist/src/planner/rules/access/rule-asof-strategy-select.js.map +1 -0
  117. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts +33 -0
  118. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts.map +1 -0
  119. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js +162 -0
  120. package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js.map +1 -0
  121. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts +29 -0
  122. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -0
  123. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +175 -0
  124. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -0
  125. package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
  126. package/dist/src/planner/rules/access/rule-select-access-path.js +31 -10
  127. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  128. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +61 -0
  129. package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -0
  130. package/dist/src/planner/rules/join/equi-pair-extractor.js +155 -0
  131. package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -0
  132. package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
  133. package/dist/src/planner/rules/join/rule-join-physical-selection.js +2 -122
  134. package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
  135. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts +21 -0
  136. package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -0
  137. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +405 -0
  138. package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -0
  139. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +31 -0
  140. package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -0
  141. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +113 -0
  142. package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -0
  143. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +47 -0
  144. package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -0
  145. package/dist/src/planner/rules/window/rule-monotonic-window.js +341 -0
  146. package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -0
  147. package/dist/src/runtime/context-helpers.d.ts +9 -0
  148. package/dist/src/runtime/context-helpers.d.ts.map +1 -1
  149. package/dist/src/runtime/context-helpers.js +5 -0
  150. package/dist/src/runtime/context-helpers.js.map +1 -1
  151. package/dist/src/runtime/emit/asof-scan.d.ts +10 -0
  152. package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -0
  153. package/dist/src/runtime/emit/asof-scan.js +467 -0
  154. package/dist/src/runtime/emit/asof-scan.js.map +1 -0
  155. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  156. package/dist/src/runtime/emit/constraint-check.js +20 -0
  157. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  158. package/dist/src/runtime/emit/ordinal-slice.d.ts +13 -0
  159. package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -0
  160. package/dist/src/runtime/emit/ordinal-slice.js +89 -0
  161. package/dist/src/runtime/emit/ordinal-slice.js.map +1 -0
  162. package/dist/src/runtime/emit/returning.d.ts.map +1 -1
  163. package/dist/src/runtime/emit/returning.js +9 -4
  164. package/dist/src/runtime/emit/returning.js.map +1 -1
  165. package/dist/src/runtime/emit/scan.d.ts +19 -3
  166. package/dist/src/runtime/emit/scan.d.ts.map +1 -1
  167. package/dist/src/runtime/emit/scan.js +12 -8
  168. package/dist/src/runtime/emit/scan.js.map +1 -1
  169. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  170. package/dist/src/runtime/emit/schema-declarative.js +91 -14
  171. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  172. package/dist/src/runtime/emit/window.d.ts.map +1 -1
  173. package/dist/src/runtime/emit/window.js +732 -37
  174. package/dist/src/runtime/emit/window.js.map +1 -1
  175. package/dist/src/runtime/foreign-key-actions.js +5 -4
  176. package/dist/src/runtime/foreign-key-actions.js.map +1 -1
  177. package/dist/src/runtime/register.d.ts.map +1 -1
  178. package/dist/src/runtime/register.js +4 -0
  179. package/dist/src/runtime/register.js.map +1 -1
  180. package/dist/src/schema/catalog.d.ts +10 -0
  181. package/dist/src/schema/catalog.d.ts.map +1 -1
  182. package/dist/src/schema/catalog.js +29 -6
  183. package/dist/src/schema/catalog.js.map +1 -1
  184. package/dist/src/schema/function.d.ts +24 -0
  185. package/dist/src/schema/function.d.ts.map +1 -1
  186. package/dist/src/schema/function.js.map +1 -1
  187. package/dist/src/schema/manager.d.ts +10 -0
  188. package/dist/src/schema/manager.d.ts.map +1 -1
  189. package/dist/src/schema/manager.js +10 -0
  190. package/dist/src/schema/manager.js.map +1 -1
  191. package/dist/src/schema/schema-differ.d.ts +18 -1
  192. package/dist/src/schema/schema-differ.d.ts.map +1 -1
  193. package/dist/src/schema/schema-differ.js +307 -42
  194. package/dist/src/schema/schema-differ.js.map +1 -1
  195. package/dist/src/types/logical-type.d.ts +11 -0
  196. package/dist/src/types/logical-type.d.ts.map +1 -1
  197. package/dist/src/types/logical-type.js.map +1 -1
  198. package/dist/src/util/ast-literal.d.ts +11 -0
  199. package/dist/src/util/ast-literal.d.ts.map +1 -0
  200. package/dist/src/util/ast-literal.js +26 -0
  201. package/dist/src/util/ast-literal.js.map +1 -0
  202. package/dist/src/vtab/best-access-plan.d.ts +41 -0
  203. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  204. package/dist/src/vtab/best-access-plan.js +29 -0
  205. package/dist/src/vtab/best-access-plan.js.map +1 -1
  206. package/dist/src/vtab/filter-info.d.ts +14 -0
  207. package/dist/src/vtab/filter-info.d.ts.map +1 -1
  208. package/dist/src/vtab/memory/module.d.ts +39 -1
  209. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  210. package/dist/src/vtab/memory/module.js +206 -44
  211. package/dist/src/vtab/memory/module.js.map +1 -1
  212. package/dist/src/vtab/module.d.ts +24 -0
  213. package/dist/src/vtab/module.d.ts.map +1 -1
  214. package/package.json +3 -3
@@ -0,0 +1,467 @@
1
+ import { emitPlanNode } from '../emitters.js';
2
+ import { createLogger } from '../../common/logger.js';
3
+ import { buildRowDescriptor } from '../../util/row-descriptor.js';
4
+ import { createRowSlot } from '../context-helpers.js';
5
+ import { compareSqlValuesFast, BINARY_COLLATION } from '../../util/comparison.js';
6
+ import { resolveKeyNormalizer, serializeRowKey } from '../../util/key-serializer.js';
7
+ import { joinOutputRow } from './join-output.js';
8
+ const log = createLogger('runtime:emit:asof-scan');
9
+ function resolveSetup(plan, ctx) {
10
+ const leftAttrs = plan.left.getAttributes();
11
+ const rightAttrs = plan.right.getAttributes();
12
+ const leftRowDescriptor = buildRowDescriptor(leftAttrs);
13
+ const rightRowDescriptor = buildRowDescriptor(rightAttrs);
14
+ const leftMatchIdx = leftAttrs.findIndex(a => a.id === plan.matchAttr.leftAttrId);
15
+ const rightMatchIdx = rightAttrs.findIndex(a => a.id === plan.matchAttr.rightAttrId);
16
+ if (leftMatchIdx === -1 || rightMatchIdx === -1) {
17
+ throw new Error(`AsofScan: could not resolve match-attr ids ${plan.matchAttr.leftAttrId}/${plan.matchAttr.rightAttrId}`);
18
+ }
19
+ const matchCollationName = leftAttrs[leftMatchIdx].type.collationName ?? rightAttrs[rightMatchIdx].type.collationName;
20
+ const matchCollation = matchCollationName ? ctx.resolveCollation(matchCollationName) : BINARY_COLLATION;
21
+ const leftPartitionIndices = [];
22
+ const rightPartitionIndices = [];
23
+ const partitionCollations = [];
24
+ const keyNormalizers = [];
25
+ for (const p of plan.partitionAttrs) {
26
+ const leftIdx = leftAttrs.findIndex(a => a.id === p.leftAttrId);
27
+ const rightIdx = rightAttrs.findIndex(a => a.id === p.rightAttrId);
28
+ if (leftIdx === -1 || rightIdx === -1) {
29
+ throw new Error(`AsofScan: could not resolve partition-attr ids ${p.leftAttrId}/${p.rightAttrId}`);
30
+ }
31
+ leftPartitionIndices.push(leftIdx);
32
+ rightPartitionIndices.push(rightIdx);
33
+ const collationName = leftAttrs[leftIdx].type.collationName ?? rightAttrs[rightIdx].type.collationName;
34
+ partitionCollations.push(collationName ? ctx.resolveCollation(collationName) : BINARY_COLLATION);
35
+ keyNormalizers.push(resolveKeyNormalizer(collationName));
36
+ }
37
+ const rightOutputColumnIndices = plan.getRightOutputColumnIndices();
38
+ const projectedRightColCount = rightOutputColumnIndices.length;
39
+ const projectRight = (row) => {
40
+ const out = new Array(projectedRightColCount);
41
+ for (let i = 0; i < projectedRightColCount; i++) {
42
+ out[i] = row[rightOutputColumnIndices[i]];
43
+ }
44
+ return out;
45
+ };
46
+ return {
47
+ leftMatchIdx,
48
+ rightMatchIdx,
49
+ matchCollation,
50
+ leftPartitionIndices,
51
+ rightPartitionIndices,
52
+ partitionCollations,
53
+ keyNormalizers,
54
+ rightOutputColumnIndices,
55
+ projectedRightColCount,
56
+ outerJoinType: plan.outer ? 'left' : 'inner',
57
+ strict: plan.strict,
58
+ direction: plan.direction,
59
+ leftRowDescriptor,
60
+ rightRowDescriptor,
61
+ projectRight,
62
+ };
63
+ }
64
+ /**
65
+ * Dispatch on `plan.strategy` to the appropriate emitter. The strategy is
66
+ * chosen by `rule-asof-strategy-select` during optimization; runtime carries
67
+ * it through verbatim.
68
+ */
69
+ export function emitAsofScan(plan, ctx) {
70
+ return plan.strategy === 'merge'
71
+ ? emitAsofScanMerge(plan, ctx)
72
+ : emitAsofScanHash(plan, ctx);
73
+ }
74
+ /**
75
+ * Hash-bucketed asof scan.
76
+ *
77
+ * Algorithm:
78
+ * 1. Bucket the right input by partition key (single bucket if no partition).
79
+ * Within each bucket, rows arrive in monotonicOn(matchAttr, asc) order from
80
+ * the right access plan. Right rows with NULL match values are dropped.
81
+ * 2. For each left row:
82
+ * - Look up its partition's bucket. If absent, emit NULL-padded (outer) or
83
+ * drop (inner).
84
+ * - 'desc' direction (latest right ≤ left.match): cursor starts at -1 and
85
+ * advances forward while the next bucket row's match still qualifies
86
+ * (≤ left.match, or < when strict). The cursor sits on the last
87
+ * qualifying row.
88
+ * - 'asc' direction (earliest right ≥ left.match): cursor starts at 0 and
89
+ * advances forward while the current bucket row's match is too small
90
+ * (< left.match, or ≤ when strict). The cursor sits on the first
91
+ * qualifying row, or past-the-end when no row qualifies.
92
+ * - Emit (left, projected right) when the cursor lands on a match;
93
+ * otherwise NULL-pad (outer) or drop (inner).
94
+ * 3. Left rows with NULL match values are NULL-padded (outer) or dropped.
95
+ *
96
+ * Memory: O(R). Latency: all R right rows must arrive before the first emit.
97
+ */
98
+ function emitAsofScanHash(plan, ctx) {
99
+ const setup = resolveSetup(plan, ctx);
100
+ const { leftMatchIdx, rightMatchIdx, matchCollation, leftPartitionIndices, rightPartitionIndices, keyNormalizers, projectedRightColCount, outerJoinType, strict, direction, leftRowDescriptor, rightRowDescriptor, projectRight, } = setup;
101
+ async function* run(rctx, leftSource, rightSource) {
102
+ log('Starting %s asof scan [hash]: direction=%s, %d partition keys, strict=%s', plan.outer ? 'LEFT' : 'INNER', direction, plan.partitionAttrs.length, strict);
103
+ const leftSlot = createRowSlot(rctx, leftRowDescriptor);
104
+ const rightSlot = createRowSlot(rctx, rightRowDescriptor);
105
+ try {
106
+ // Bucket right rows by partition key. Right rows with NULL match are dropped;
107
+ // those with NULL partition values are dropped (sentinel null key).
108
+ const buckets = new Map();
109
+ let rightCount = 0;
110
+ for await (const row of rightSource) {
111
+ if (row[rightMatchIdx] === null)
112
+ continue;
113
+ const pk = serializeRowKey(row, rightPartitionIndices, keyNormalizers);
114
+ if (pk === null)
115
+ continue; // NULL partition value — never matches
116
+ let bucket = buckets.get(pk);
117
+ if (!bucket) {
118
+ bucket = [];
119
+ buckets.set(pk, bucket);
120
+ }
121
+ bucket.push(row);
122
+ rightCount++;
123
+ }
124
+ log('Right side bucketed: %d rows in %d buckets', rightCount, buckets.size);
125
+ // Per-bucket cursor positions (the index of the latest row whose match ≤ current left.match).
126
+ // -1 means "before the first row" (no match yet).
127
+ const cursors = new Map();
128
+ for await (const leftRow of leftSource) {
129
+ leftSlot.set(leftRow);
130
+ const leftMatch = leftRow[leftMatchIdx];
131
+ if (leftMatch === null) {
132
+ // Left match is NULL — three-valued logic excludes it from any match.
133
+ const padding = joinOutputRow(outerJoinType, false, false, leftRow, projectedRightColCount, rightSlot);
134
+ if (padding)
135
+ yield padding;
136
+ continue;
137
+ }
138
+ const pk = serializeRowKey(leftRow, leftPartitionIndices, keyNormalizers);
139
+ if (pk === null) {
140
+ // NULL partition value — bucket can't be matched.
141
+ const padding = joinOutputRow(outerJoinType, false, false, leftRow, projectedRightColCount, rightSlot);
142
+ if (padding)
143
+ yield padding;
144
+ continue;
145
+ }
146
+ const bucket = buckets.get(pk);
147
+ if (!bucket || bucket.length === 0) {
148
+ const padding = joinOutputRow(outerJoinType, false, false, leftRow, projectedRightColCount, rightSlot);
149
+ if (padding)
150
+ yield padding;
151
+ continue;
152
+ }
153
+ const initialCursor = direction === 'desc' ? -1 : 0;
154
+ let cursor = cursors.get(pk) ?? initialCursor;
155
+ let matchedRight;
156
+ if (direction === 'desc') {
157
+ // Cursor is the index of the last qualifying row (or -1 before any).
158
+ // Advance while bucket[cursor+1].match still qualifies (≤ left.match, or <).
159
+ while (cursor + 1 < bucket.length) {
160
+ const candidate = bucket[cursor + 1];
161
+ const cmp = compareSqlValuesFast(candidate[rightMatchIdx], leftMatch, matchCollation);
162
+ if (strict ? cmp < 0 : cmp <= 0)
163
+ cursor++;
164
+ else
165
+ break;
166
+ }
167
+ cursors.set(pk, cursor);
168
+ if (cursor >= 0)
169
+ matchedRight = bucket[cursor];
170
+ }
171
+ else {
172
+ // 'asc': cursor is the index of the first qualifying row (or bucket.length when none).
173
+ // Advance while bucket[cursor].match is still too small (< left.match, or ≤).
174
+ while (cursor < bucket.length) {
175
+ const candidate = bucket[cursor];
176
+ const cmp = compareSqlValuesFast(candidate[rightMatchIdx], leftMatch, matchCollation);
177
+ if (strict ? cmp <= 0 : cmp < 0)
178
+ cursor++;
179
+ else
180
+ break;
181
+ }
182
+ cursors.set(pk, cursor);
183
+ if (cursor < bucket.length)
184
+ matchedRight = bucket[cursor];
185
+ }
186
+ if (!matchedRight) {
187
+ // No row in this bucket qualifies for the current left.match.
188
+ const padding = joinOutputRow(outerJoinType, false, false, leftRow, projectedRightColCount, rightSlot);
189
+ if (padding)
190
+ yield padding;
191
+ continue;
192
+ }
193
+ rightSlot.set(matchedRight);
194
+ const projectedRight = projectRight(matchedRight);
195
+ yield [...leftRow, ...projectedRight];
196
+ }
197
+ }
198
+ finally {
199
+ leftSlot.close();
200
+ rightSlot.close();
201
+ }
202
+ }
203
+ const leftInstruction = emitPlanNode(plan.left, ctx);
204
+ const rightInstruction = emitPlanNode(plan.right, ctx);
205
+ return {
206
+ params: [leftInstruction, rightInstruction],
207
+ run: run,
208
+ note: `${plan.outer ? 'left' : 'inner'} asof scan [hash]${strict ? ' strict' : ''}`,
209
+ };
210
+ }
211
+ /**
212
+ * Co-streaming (merge-by-partition-key) asof scan.
213
+ *
214
+ * Both inputs must be pre-ordered by `[partition cols..., matchAttr]` —
215
+ * `rule-asof-strategy-select` validates this against the children's
216
+ * `physical.ordering` before promoting the strategy.
217
+ *
218
+ * Algorithm:
219
+ * 1. Walk both iterators with peek-1 lookahead.
220
+ * 2. For each left row in turn:
221
+ * - Skip (padding/drop) NULL-match or NULL-partition left rows.
222
+ * - On entering a new partition: drain right of NULLs and rows in earlier
223
+ * partitions; reset the per-partition `descMatched` state.
224
+ * - Run the per-row inner loop:
225
+ * • `'desc'` (latest right ≤ left.match): consume right rows while
226
+ * next.matchAttr still qualifies. The most recently consumed
227
+ * qualifier persists across left rows in the same partition.
228
+ * • `'asc'` (earliest right ≥ left.match): consume right rows while
229
+ * next.matchAttr is too small; the first qualifier is read off peek
230
+ * but NOT consumed (it may match subsequent left rows).
231
+ * 3. Emit (left, projected right) on a match; pad/drop on miss.
232
+ *
233
+ * Memory: O(1) (one row of state per side plus one saved partition match).
234
+ * Latency: emits as left rows arrive.
235
+ */
236
+ function emitAsofScanMerge(plan, ctx) {
237
+ const setup = resolveSetup(plan, ctx);
238
+ const { leftMatchIdx, rightMatchIdx, matchCollation, leftPartitionIndices, rightPartitionIndices, partitionCollations, projectedRightColCount, outerJoinType, strict, direction, leftRowDescriptor, rightRowDescriptor, projectRight, } = setup;
239
+ const partitionLen = plan.partitionAttrs.length;
240
+ // All ordering positions in the recognized merge case agree on direction
241
+ // across left and right; the rule validated this. We need the per-position
242
+ // direction to invert comparisons so "right is behind" remains consistent
243
+ // under descending partition ordering. Read off the left-side ordering
244
+ // positions [0..partitionLen) directly at emit time; if the rule promoted
245
+ // to merge, they exist.
246
+ const leftOrdering = plan.left.physical.ordering ?? [];
247
+ const partitionDescending = [];
248
+ for (let i = 0; i < partitionLen; i++) {
249
+ partitionDescending.push(leftOrdering[i]?.desc ?? false);
250
+ }
251
+ function hasNullPartitionLeft(row) {
252
+ for (const idx of leftPartitionIndices) {
253
+ if (row[idx] === null)
254
+ return true;
255
+ }
256
+ return false;
257
+ }
258
+ function hasNullPartitionRight(row) {
259
+ for (const idx of rightPartitionIndices) {
260
+ if (row[idx] === null)
261
+ return true;
262
+ }
263
+ return false;
264
+ }
265
+ /**
266
+ * Compare partition tuples drawn from a left row and a right row, using
267
+ * per-position collations and the agreed direction. Returns negative when
268
+ * left's partition is "before" right's in the agreed direction, positive
269
+ * when "after", zero when equal.
270
+ */
271
+ function comparePartitions(leftRow, rightRow) {
272
+ for (let i = 0; i < partitionLen; i++) {
273
+ const a = leftRow[leftPartitionIndices[i]];
274
+ const b = rightRow[rightPartitionIndices[i]];
275
+ let c = compareSqlValuesFast(a, b, partitionCollations[i]);
276
+ if (partitionDescending[i])
277
+ c = -c;
278
+ if (c !== 0)
279
+ return c;
280
+ }
281
+ return 0;
282
+ }
283
+ /** Variant of `comparePartitions` for two left rows (e.g. tracking the active partition). */
284
+ function compareLeftPartitions(a, b) {
285
+ for (let i = 0; i < partitionLen; i++) {
286
+ const idx = leftPartitionIndices[i];
287
+ let c = compareSqlValuesFast(a[idx], b[idx], partitionCollations[i]);
288
+ if (partitionDescending[i])
289
+ c = -c;
290
+ if (c !== 0)
291
+ return c;
292
+ }
293
+ return 0;
294
+ }
295
+ async function* run(rctx, leftSource, rightSource) {
296
+ log('Starting %s asof scan [merge]: direction=%s, %d partition keys, strict=%s', plan.outer ? 'LEFT' : 'INNER', direction, partitionLen, strict);
297
+ const leftSlot = createRowSlot(rctx, leftRowDescriptor);
298
+ const rightSlot = createRowSlot(rctx, rightRowDescriptor);
299
+ const leftIter = peekableAsyncIterator(leftSource);
300
+ const rightIter = peekableAsyncIterator(rightSource);
301
+ // Per-partition state. `activePartitionRow` is the left row that
302
+ // established the current partition's identity; on a partition change
303
+ // we reset `descMatched` and drain right.
304
+ let activePartitionRow;
305
+ let descMatched;
306
+ try {
307
+ while (true) {
308
+ const leftRow = await leftIter.peek();
309
+ if (!leftRow)
310
+ break;
311
+ // NULL match or partition on left: pad/drop and advance.
312
+ if (leftRow[leftMatchIdx] === null || hasNullPartitionLeft(leftRow)) {
313
+ leftSlot.set(leftRow);
314
+ const padding = joinOutputRow(outerJoinType, false, false, leftRow, projectedRightColCount, rightSlot);
315
+ if (padding)
316
+ yield padding;
317
+ leftIter.consume();
318
+ continue;
319
+ }
320
+ // Partition transition?
321
+ const partitionChanged = !activePartitionRow ||
322
+ compareLeftPartitions(activePartitionRow, leftRow) !== 0;
323
+ if (partitionChanged) {
324
+ descMatched = undefined;
325
+ activePartitionRow = leftRow;
326
+ // Drain right of NULLs and rows in earlier partitions.
327
+ while (true) {
328
+ const r = await rightIter.peek();
329
+ if (!r)
330
+ break;
331
+ if (r[rightMatchIdx] === null || hasNullPartitionRight(r)) {
332
+ rightIter.consume();
333
+ continue;
334
+ }
335
+ const cmpP = comparePartitions(leftRow, r);
336
+ if (cmpP > 0) {
337
+ rightIter.consume();
338
+ continue;
339
+ }
340
+ break;
341
+ }
342
+ }
343
+ // Run the per-leftRow inner loop.
344
+ leftSlot.set(leftRow);
345
+ const leftMatch = leftRow[leftMatchIdx];
346
+ let matched;
347
+ if (direction === 'desc') {
348
+ // Advance while next-right's matchAttr still qualifies (≤, or < when strict).
349
+ // `descMatched` persists across consecutive same-partition left rows.
350
+ while (true) {
351
+ const r = await rightIter.peek();
352
+ if (!r)
353
+ break;
354
+ if (r[rightMatchIdx] === null || hasNullPartitionRight(r)) {
355
+ rightIter.consume();
356
+ continue;
357
+ }
358
+ const cmpP = comparePartitions(leftRow, r);
359
+ if (cmpP !== 0)
360
+ break; // partition advanced past current
361
+ const cmpM = compareSqlValuesFast(r[rightMatchIdx], leftMatch, matchCollation);
362
+ if (!(strict ? cmpM < 0 : cmpM <= 0))
363
+ break;
364
+ descMatched = r;
365
+ rightIter.consume();
366
+ }
367
+ matched = descMatched;
368
+ }
369
+ else {
370
+ // 'asc': advance while peek's matchAttr is too small. The first
371
+ // qualifier is the answer; do NOT consume it (it may match
372
+ // subsequent left rows in the same partition).
373
+ while (true) {
374
+ const r = await rightIter.peek();
375
+ if (!r)
376
+ break;
377
+ if (r[rightMatchIdx] === null || hasNullPartitionRight(r)) {
378
+ rightIter.consume();
379
+ continue;
380
+ }
381
+ const cmpP = comparePartitions(leftRow, r);
382
+ if (cmpP !== 0)
383
+ break;
384
+ const cmpM = compareSqlValuesFast(r[rightMatchIdx], leftMatch, matchCollation);
385
+ if (strict ? cmpM <= 0 : cmpM < 0) {
386
+ rightIter.consume();
387
+ continue;
388
+ }
389
+ matched = r;
390
+ break;
391
+ }
392
+ }
393
+ if (matched) {
394
+ rightSlot.set(matched);
395
+ const projectedRight = projectRight(matched);
396
+ // The right scan's own rowSlot (created when its iterator started)
397
+ // holds the cursor's *current* peek — by the time we land here
398
+ // it's the row that broke the desc loop / first qualifier of asc,
399
+ // not necessarily `matched`. Reclaim our descriptor so
400
+ // downstream attribute-index lookups for the right's attr ids
401
+ // resolve through *our* slot rather than the scan's cursor.
402
+ rightSlot.reactivate();
403
+ yield [...leftRow, ...projectedRight];
404
+ }
405
+ else {
406
+ const padding = joinOutputRow(outerJoinType, false, false, leftRow, projectedRightColCount, rightSlot);
407
+ if (padding) {
408
+ // Same shadowing concern as the matched branch: ensure NULL
409
+ // padding wins the attributeIndex race against the still-
410
+ // running right scan's slot.
411
+ rightSlot.reactivate();
412
+ yield padding;
413
+ }
414
+ }
415
+ leftIter.consume();
416
+ }
417
+ }
418
+ finally {
419
+ leftSlot.close();
420
+ rightSlot.close();
421
+ await leftIter.close();
422
+ await rightIter.close();
423
+ }
424
+ }
425
+ const leftInstruction = emitPlanNode(plan.left, ctx);
426
+ const rightInstruction = emitPlanNode(plan.right, ctx);
427
+ return {
428
+ params: [leftInstruction, rightInstruction],
429
+ run: run,
430
+ note: `${plan.outer ? 'left' : 'inner'} asof scan [merge]${strict ? ' strict' : ''}`,
431
+ };
432
+ }
433
+ function peekableAsyncIterator(source) {
434
+ const it = source[Symbol.asyncIterator]();
435
+ let head;
436
+ let hasHead = false;
437
+ let done = false;
438
+ return {
439
+ async peek() {
440
+ if (hasHead)
441
+ return head;
442
+ if (done)
443
+ return undefined;
444
+ const r = await it.next();
445
+ if (r.done) {
446
+ done = true;
447
+ return undefined;
448
+ }
449
+ head = r.value;
450
+ hasHead = true;
451
+ return head;
452
+ },
453
+ consume() {
454
+ head = undefined;
455
+ hasHead = false;
456
+ },
457
+ async close() {
458
+ if (it.return) {
459
+ try {
460
+ await it.return();
461
+ }
462
+ catch { /* ignore */ }
463
+ }
464
+ },
465
+ };
466
+ }
467
+ //# sourceMappingURL=asof-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asof-scan.js","sourceRoot":"","sources":["../../../../src/runtime/emit/asof-scan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constraint-check.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/constraint-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAuC,MAAM,8CAA8C,CAAC;AAC7H,OAAO,KAAK,EAAE,WAAW,EAAkC,MAAM,aAAa,CAAC;AAE/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AA0D9D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAwIhG"}
1
+ {"version":3,"file":"constraint-check.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/constraint-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAuC,MAAM,8CAA8C,CAAC;AAC7H,OAAO,KAAK,EAAE,WAAW,EAAkC,MAAM,aAAa,CAAC;AAE/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AA6D9D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAyIhG"}
@@ -5,6 +5,7 @@ import { ConflictResolution } from '../../common/constants.js';
5
5
  import { withAsyncRowContext, createRowSlot } from '../context-helpers.js';
6
6
  import { expressionToString } from '../../emit/ast-stringify.js';
7
7
  import { composeCombinedDescriptor } from '../descriptor-helpers.js';
8
+ import { sqlValuesEqual } from '../../util/comparison.js';
8
9
  /**
9
10
  * Resolve the effective conflict action for a single failure.
10
11
  *
@@ -68,6 +69,7 @@ export function emitConstraintCheck(plan, ctx) {
68
69
  contextRow: undefined,
69
70
  contextDescriptor,
70
71
  kind: check.kind ?? 'check',
72
+ referencedColumnIndices: check.referencedColumnIndices,
71
73
  };
72
74
  });
73
75
  async function* run(rctx, inputRows, ...evaluatorFunctions) {
@@ -192,6 +194,24 @@ async function checkCheckConstraints(rctx, plan, tableSchema, row, constraintMet
192
194
  for (let i = 0; i < constraintMetadata.length; i++) {
193
195
  const metadata = constraintMetadata[i];
194
196
  const evaluator = evaluatorFunctions[i] ?? metadata.evaluator;
197
+ // Parent-side FK UPDATE: skip the NOT EXISTS subquery when none of the
198
+ // referenced parent columns actually changed.
199
+ if (plan.operation === RowOpFlag.UPDATE &&
200
+ metadata.kind === 'fk-parent' &&
201
+ metadata.referencedColumnIndices) {
202
+ const numCols = tableSchema.columns.length;
203
+ let anyChanged = false;
204
+ for (const colIdx of metadata.referencedColumnIndices) {
205
+ const oldVal = row[colIdx]; // OLD section: 0..n-1
206
+ const newVal = row[numCols + colIdx]; // NEW section: n..2n-1
207
+ if (!sqlValuesEqual(oldVal, newVal)) {
208
+ anyChanged = true;
209
+ break;
210
+ }
211
+ }
212
+ if (!anyChanged)
213
+ continue;
214
+ }
195
215
  // Resolve effective action up front; non-default actions (IGNORE/REPLACE/FAIL/ROLLBACK)
196
216
  // must be applied at row time, so we cannot let those defer to commit.
197
217
  const effectiveAction = pickAction(stmtOR, metadata.schema.defaultConflict);
@@ -1 +1 @@
1
- {"version":3,"file":"constraint-check.js","sourceRoot":"","sources":["../../../../src/runtime/emit/constraint-check.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAInG,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAoBrE;;;;GAIG;AACH,SAAS,UAAU,CAClB,MAAsC,EACtC,iBAAiD;IAEjD,OAAO,MAAM,IAAI,iBAAiB,IAAI,kBAAkB,CAAC,KAAK,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,MAA0B,EAAE,OAAe;IAClE,IAAI,MAAM,KAAK,kBAAkB,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,MAAM,KAAK,kBAAkB,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAyB,EAAE,GAAoB;IAClF,6CAA6C;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAE3C,sDAAsD;IACtD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IAEjD,gEAAgE;IAChE,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;IACzD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAE/B,oDAAoD;IACpD,MAAM,4BAA4B,GAAkB,EAAE,CAAC;IACvD,IAAI,qBAAqB,IAAI,iBAAiB,EAAE,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,SAAS,EAAE,CAAC;gBACf,4BAA4B,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;YACrE,CAAC;QACF,CAAC;IACF,CAAC;IAED,uEAAuE;IACvE,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CACzD,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CACvC,CAAC;IAEF,uEAAuE;IACvE,MAAM,mBAAmB,GAAsC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;IAC1F,MAAM,0BAA0B,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IAEtG,MAAM,kBAAkB,GAA8B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAsB,EAAE,GAAG,EAAE,EAAE;QAC/G,MAAM,oBAAoB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,6BAA6B,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7G,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjE,OAAO;YACN,MAAM,EAAE,KAAK,CAAC,UAAU;YACxB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,SAAS,EAAE,oBAAoB,CAAC,GAAG;YACnC,cAAc;YACd,cAAc;YACd,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,aAAa,CAAC;YACxF,SAAS,EAAE,GAAG,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,IAAI,EAAE;YAC1D,UAAU,EAAE,SAAS;YACrB,iBAAiB;YACjB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,OAAO;SAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,IAAoB,EAAE,SAA6B,EAAE,GAAG,kBAA+D;QAC1I,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO;QACR,CAAC;QAED,oFAAoF;QACpF,gDAAgD;QAChD,MAAM,oBAAoB,GAAG,4BAA4B,CAAC,MAAM,CAAC;QACjE,MAAM,uBAAuB,GAAG,kBAAkB,CAAC,MAAM,CAAC;QAE1D,IAAI,UAA2B,CAAC;QAChC,IAAI,WAAyD,CAAC;QAE9D,IAAI,oBAAoB,GAAG,CAAC,IAAI,iBAAiB,EAAE,CAAC;YACnD,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAE/E,UAAU,GAAG,EAAE,CAAC;YAChB,KAAK,MAAM,gBAAgB,IAAI,oBAAoB,EAAE,CAAC;gBACrD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAa,CAAC;gBACvD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;YAED,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;YACrD,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,uBAAuB,GAAG,kBAAkB,CAAC,KAAK,CACvD,oBAAoB,EACpB,oBAAoB,GAAG,uBAAuB,CAC9C,CAAC;QACF,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,KAAK,CAAC,oBAAoB,GAAG,uBAAuB,CAAC,CAAC;QAEtG,MAAM,eAAe,GAA4B,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACnF,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC;SAClC,CAAC,CAAC,CAAC;QAEJ,6DAA6D;QAC7D,MAAM,kBAAkB,GAAG,iBAAiB,IAAI,UAAU;YACzD,CAAC,CAAC,yBAAyB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;YACjE,CAAC,CAAC,iBAAiB,CAAC;QAErB,IAAI,CAAC;YACJ,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACxC,IAAI,OAAO,GAAG,QAAQ,CAAC;gBAEvB,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;oBAC3I,OAAO,MAAM,gBAAgB,CAC5B,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,OAAO,EACP,kBAAkB,EAClB,uBAAuB,EACvB,MAAM,EACN,eAAe,CACf,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,IAAI,UAAU,CAAC,IAAI;oBAAE,SAAS;gBAC9B,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;oBAC5B,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC;gBAClC,CAAC;gBAED,MAAM,OAAO,CAAC;YACf,CAAC;QACF,CAAC;gBAAS,CAAC;YACV,IAAI,WAAW,EAAE,CAAC;gBACjB,WAAW,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACF,CAAC;IACF,CAAC;IAED,8BAA8B;IAC9B,MAAM,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEzD,OAAO;QACN,MAAM,EAAE,CAAC,iBAAiB,EAAE,GAAG,4BAA4B,EAAE,GAAG,eAAe,EAAE,GAAG,0BAA0B,CAAC;QAC/G,GAAG,EAAE,GAAqB;QAC1B,IAAI,EAAE,mBAAmB,IAAI,CAAC,SAAS,KAAK,4BAA4B,CAAC,MAAM,SAAS,IAAI,CAAC,gBAAgB,CAAC,MAAM,YAAY,0BAA0B,CAAC,MAAM,YAAY;KAC7K,CAAC;AACH,CAAC;AAcD,KAAK,UAAU,gBAAgB,CAC9B,IAAoB,EACpB,IAAyB,EACzB,WAAwB,EACxB,GAAQ,EACR,kBAA6C,EAC7C,kBAA+D,EAC/D,MAAsC,EACtC,eAAwC;IAExC,mEAAmE;IACnE,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACtG,IAAI,QAAQ,CAAC,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,QAAQ,CAAC,WAAW;QAAE,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC;IAErD,sFAAsF;IACtF,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAC3H,IAAI,QAAQ,CAAC,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,uBAAuB,CACrC,IAAoB,EACpB,IAAyB,EACzB,WAAwB,EACxB,OAAY,EACZ,MAAsC,EACtC,eAAwC;IAExC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;IAC3C,IAAI,UAA2B,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,SAAS;QAE9B,MAAM,aAAa,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,uBAAuB;QAC1D,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAEpD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,+BAA+B,WAAW,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAEjF,IAAI,MAAM,KAAK,kBAAkB,CAAC,MAAM,EAAE,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,MAAM,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC3C,0CAA0C;YAC1C,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnB,iDAAiD;gBACjD,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI,CAAa,CAAC;YACpE,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBACzD,mEAAmE;gBACnE,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,UAAU;gBAAE,UAAU,GAAG,CAAC,GAAG,OAAO,CAAQ,CAAC;YAClD,UAAU,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC;YACzC,SAAS;QACV,CAAC;QAED,0BAA0B;QAC1B,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,qBAAqB,CACnC,IAAoB,EACpB,IAAyB,EACzB,WAAwB,EACxB,GAAQ,EACR,kBAA6C,EAC7C,kBAA+D,EAC/D,MAAsC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC;QAE9D,wFAAwF;QACxF,uEAAuE;QACvE,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC5E,MAAM,eAAe,GAAG,eAAe,KAAK,kBAAkB,CAAC,KAAK,CAAC;QAErE,IAAI,QAAQ,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC;YAC/D,IAAI,CAAC,EAAE,CAAC,2BAA2B,CAClC,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,cAAc,EACvB,GAAG,CAAC,KAAK,EAAS,EAClB,QAAQ,CAAC,iBAAiB,EAC1B,SAAS,EACT,kBAAkB,EAClB,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,iBAAiB,CAC1B,CAAC;YACF,SAAS;QACV,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAa,CAAC;QAEjD,+EAA+E;QAC/E,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE;gBACpD,CAAC,CAAC,KAAK,QAAQ,CAAC,cAAc,GAAG;gBACjC,CAAC,CAAC,EAAE,CAAC;YACN,sEAAsE;YACtE,wEAAwE;YACxE,iEAAiE;YACjE,MAAM,WAAW,GAAG,4BAA4B,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAAE,CAAC;YAErF,IAAI,eAAe,KAAK,kBAAkB,CAAC,MAAM,EAAE,CAAC;gBACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACvB,CAAC;YAED,uEAAuE;YACvE,iFAAiF;YACjF,IAAI,eAAe,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBACpD,MAAM,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;YACxC,CAAC;YAED,cAAc,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,6BAA6B,CAAC,WAAwB,EAAE,UAA+B;IAC/F,+FAA+F;IAC/F,MAAM,aAAa,GAAG,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAsB,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;IAC3G,OAAO,UAAU,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"constraint-check.js","sourceRoot":"","sources":["../../../../src/runtime/emit/constraint-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { OrdinalSliceNode } from '../../planner/nodes/ordinal-slice-node.js';
2
+ import type { Instruction } from '../types.js';
3
+ import type { EmissionContext } from '../emission-context.js';
4
+ /**
5
+ * Emit an OrdinalSlice node. The slice's source must be a physical access
6
+ * leaf whose scan supports `FilterInfo.offset`/`FilterInfo.limit` (i.e.,
7
+ * the access plan advertised `supportsOrdinalSeek`). The emitter forwards
8
+ * the resolved offset/limit into the leaf's FilterInfo and then enforces
9
+ * the row cap as a streaming guard so any module that ignores the
10
+ * directive still produces correct results.
11
+ */
12
+ export declare function emitOrdinalSlice(plan: OrdinalSliceNode, ctx: EmissionContext): Instruction;
13
+ //# sourceMappingURL=ordinal-slice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ordinal-slice.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/ordinal-slice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAElF,OAAO,KAAK,EAAE,WAAW,EAAkC,MAAM,aAAa,CAAC;AAG/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAkB9D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CA8E1F"}