@rocicorp/zero 0.24.2025091200 → 0.24.2025092400

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 (174) hide show
  1. package/out/analyze-query/src/bin-analyze.js +7 -8
  2. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  3. package/out/analyze-query/src/explain-queries.d.ts +1 -1
  4. package/out/analyze-query/src/explain-queries.d.ts.map +1 -1
  5. package/out/analyze-query/src/run-ast.d.ts +13 -23
  6. package/out/analyze-query/src/run-ast.d.ts.map +1 -1
  7. package/out/analyze-query/src/run-ast.js +25 -20
  8. package/out/analyze-query/src/run-ast.js.map +1 -1
  9. package/out/{chunk-6XNI6IVJ.js → chunk-5JTC5G4I.js} +48 -34
  10. package/out/chunk-5JTC5G4I.js.map +7 -0
  11. package/out/{chunk-KXV3BZ4U.js → chunk-OQGMEB3H.js} +3 -3
  12. package/out/{chunk-K5ZSWG54.js → chunk-QZPMFA73.js} +841 -327
  13. package/out/chunk-QZPMFA73.js.map +7 -0
  14. package/out/{inspector-ZZSIUMBB.js → lazy-inspector-TOTYUTBC.js} +286 -249
  15. package/out/lazy-inspector-TOTYUTBC.js.map +7 -0
  16. package/out/react-native.js +1 -1
  17. package/out/react-native.js.map +2 -2
  18. package/out/react.js +2 -2
  19. package/out/replicache/src/connection-loop.d.ts.map +1 -1
  20. package/out/replicache/src/process-scheduler.d.ts.map +1 -1
  21. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  22. package/out/shared/src/sentinels.d.ts +2 -0
  23. package/out/shared/src/sentinels.d.ts.map +1 -1
  24. package/out/shared/src/sentinels.js +7 -0
  25. package/out/shared/src/sentinels.js.map +1 -0
  26. package/out/shared/src/valita.js +1 -1
  27. package/out/shared/src/valita.js.map +1 -1
  28. package/out/solid.js +3 -3
  29. package/out/zero/package.json +4 -4
  30. package/out/zero-cache/src/config/network.d.ts.map +1 -1
  31. package/out/zero-cache/src/config/network.js +1 -2
  32. package/out/zero-cache/src/config/network.js.map +1 -1
  33. package/out/zero-cache/src/server/anonymous-otel-start.d.ts +1 -0
  34. package/out/zero-cache/src/server/anonymous-otel-start.d.ts.map +1 -1
  35. package/out/zero-cache/src/server/anonymous-otel-start.js +18 -0
  36. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  37. package/out/zero-cache/src/server/inspector-delegate.d.ts.map +1 -1
  38. package/out/zero-cache/src/server/inspector-delegate.js +7 -6
  39. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  40. package/out/zero-cache/src/server/reaper.d.ts.map +1 -1
  41. package/out/zero-cache/src/server/reaper.js +8 -0
  42. package/out/zero-cache/src/server/reaper.js.map +1 -1
  43. package/out/zero-cache/src/services/analyze.d.ts +8 -0
  44. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  45. package/out/zero-cache/src/services/analyze.js +103 -33
  46. package/out/zero-cache/src/services/analyze.js.map +1 -1
  47. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +3 -1
  48. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  49. package/out/zero-cache/src/services/change-streamer/schema/init.d.ts.map +1 -1
  50. package/out/zero-cache/src/services/change-streamer/schema/init.js +1 -0
  51. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  52. package/out/zero-cache/src/services/mutagen/pusher.d.ts +28 -0
  53. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  54. package/out/zero-cache/src/services/replicator/change-processor.js +1 -1
  55. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  56. package/out/zero-cache/src/services/replicator/incremental-sync.js +2 -2
  57. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  58. package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts +16 -0
  59. package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts.map +1 -0
  60. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +50 -0
  61. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -0
  62. package/out/zero-cache/src/services/view-syncer/client-schema.js +1 -1
  63. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  64. package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +1 -1
  65. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +21 -5
  66. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  67. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +1 -1
  68. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  69. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +2 -3
  70. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  71. package/out/zero-cache/src/services/view-syncer/view-syncer.js +12 -0
  72. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  73. package/out/zero-client/src/client/inspector/client-group.d.ts +12 -0
  74. package/out/zero-client/src/client/inspector/client-group.d.ts.map +1 -0
  75. package/out/zero-client/src/client/inspector/client.d.ts +15 -0
  76. package/out/zero-client/src/client/inspector/client.d.ts.map +1 -0
  77. package/out/zero-client/src/client/inspector/html-dialog-prompt.d.ts +5 -0
  78. package/out/zero-client/src/client/inspector/html-dialog-prompt.d.ts.map +1 -0
  79. package/out/zero-client/src/client/inspector/inspector.d.ts +14 -18
  80. package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
  81. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts +49 -0
  82. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts.map +1 -0
  83. package/out/zero-client/src/client/inspector/query.d.ts +31 -0
  84. package/out/zero-client/src/client/inspector/query.d.ts.map +1 -0
  85. package/out/zero-client/src/client/options.d.ts +8 -4
  86. package/out/zero-client/src/client/options.d.ts.map +1 -1
  87. package/out/zero-client/src/client/zero.d.ts +4 -4
  88. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  89. package/out/zero-client/src/mod.d.ts +4 -1
  90. package/out/zero-client/src/mod.d.ts.map +1 -1
  91. package/out/zero-protocol/src/analyze-query-result.d.ts +22 -0
  92. package/out/zero-protocol/src/analyze-query-result.d.ts.map +1 -0
  93. package/out/zero-protocol/src/analyze-query-result.js +18 -0
  94. package/out/zero-protocol/src/analyze-query-result.js.map +1 -0
  95. package/out/zero-protocol/src/ast.d.ts +2 -0
  96. package/out/zero-protocol/src/ast.d.ts.map +1 -1
  97. package/out/zero-protocol/src/ast.js +2 -0
  98. package/out/zero-protocol/src/ast.js.map +1 -1
  99. package/out/zero-protocol/src/down.d.ts +15 -0
  100. package/out/zero-protocol/src/down.d.ts.map +1 -1
  101. package/out/zero-protocol/src/inspect-down.d.ts +47 -0
  102. package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
  103. package/out/zero-protocol/src/inspect-down.js +6 -1
  104. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  105. package/out/zero-protocol/src/inspect-up.d.ts +34 -0
  106. package/out/zero-protocol/src/inspect-up.d.ts.map +1 -1
  107. package/out/zero-protocol/src/inspect-up.js +11 -1
  108. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  109. package/out/zero-protocol/src/protocol-version.d.ts +1 -1
  110. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  111. package/out/zero-protocol/src/protocol-version.js +3 -1
  112. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  113. package/out/zero-protocol/src/up.d.ts +9 -0
  114. package/out/zero-protocol/src/up.d.ts.map +1 -1
  115. package/out/zero.js +3 -3
  116. package/out/zql/src/builder/builder.d.ts.map +1 -1
  117. package/out/zql/src/builder/builder.js +23 -11
  118. package/out/zql/src/builder/builder.js.map +1 -1
  119. package/out/zql/src/builder/debug-delegate.d.ts +2 -5
  120. package/out/zql/src/builder/debug-delegate.d.ts.map +1 -1
  121. package/out/zql/src/builder/debug-delegate.js +1 -0
  122. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  123. package/out/zql/src/ivm/constraint.js +1 -1
  124. package/out/zql/src/ivm/constraint.js.map +1 -1
  125. package/out/zql/src/ivm/fan-in.d.ts.map +1 -1
  126. package/out/zql/src/ivm/fan-in.js +3 -92
  127. package/out/zql/src/ivm/fan-in.js.map +1 -1
  128. package/out/zql/src/ivm/fan-out.js +2 -2
  129. package/out/zql/src/ivm/fan-out.js.map +1 -1
  130. package/out/zql/src/ivm/flipped-join.d.ts +33 -0
  131. package/out/zql/src/ivm/flipped-join.d.ts.map +1 -0
  132. package/out/zql/src/ivm/flipped-join.js +341 -0
  133. package/out/zql/src/ivm/flipped-join.js.map +1 -0
  134. package/out/zql/src/ivm/join-utils.d.ts +14 -0
  135. package/out/zql/src/ivm/join-utils.d.ts.map +1 -0
  136. package/out/zql/src/ivm/join-utils.js +94 -0
  137. package/out/zql/src/ivm/join-utils.js.map +1 -0
  138. package/out/zql/src/ivm/join.d.ts +1 -1
  139. package/out/zql/src/ivm/join.d.ts.map +1 -1
  140. package/out/zql/src/ivm/join.js +3 -101
  141. package/out/zql/src/ivm/join.js.map +1 -1
  142. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  143. package/out/zql/src/ivm/memory-source.js +15 -4
  144. package/out/zql/src/ivm/memory-source.js.map +1 -1
  145. package/out/zql/src/ivm/push-accumulated.d.ts +88 -0
  146. package/out/zql/src/ivm/push-accumulated.d.ts.map +1 -0
  147. package/out/zql/src/ivm/push-accumulated.js +326 -0
  148. package/out/zql/src/ivm/push-accumulated.js.map +1 -0
  149. package/out/zql/src/query/expression.d.ts +3 -3
  150. package/out/zql/src/query/expression.d.ts.map +1 -1
  151. package/out/zql/src/query/expression.js +1 -1
  152. package/out/zql/src/query/expression.js.map +1 -1
  153. package/out/zql/src/query/query-impl.d.ts +3 -4
  154. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  155. package/out/zql/src/query/query-impl.js +12 -5
  156. package/out/zql/src/query/query-impl.js.map +1 -1
  157. package/out/zql/src/query/query.d.ts +6 -3
  158. package/out/zql/src/query/query.d.ts.map +1 -1
  159. package/out/zql/src/query/query.js.map +1 -1
  160. package/out/zqlite/src/db.d.ts +1 -1
  161. package/out/zqlite/src/db.d.ts.map +1 -1
  162. package/out/zqlite/src/db.js +3 -3
  163. package/out/zqlite/src/db.js.map +1 -1
  164. package/out/zqlite/src/table-source.d.ts +0 -1
  165. package/out/zqlite/src/table-source.d.ts.map +1 -1
  166. package/out/zqlite/src/table-source.js +4 -5
  167. package/out/zqlite/src/table-source.js.map +1 -1
  168. package/package.json +4 -4
  169. package/out/chunk-6XNI6IVJ.js.map +0 -7
  170. package/out/chunk-K5ZSWG54.js.map +0 -7
  171. package/out/inspector-ZZSIUMBB.js.map +0 -7
  172. package/out/zero-client/src/client/inspector/types.d.ts +0 -50
  173. package/out/zero-client/src/client/inspector/types.d.ts.map +0 -1
  174. /package/out/{chunk-KXV3BZ4U.js.map → chunk-OQGMEB3H.js.map} +0 -0
@@ -0,0 +1,341 @@
1
+ import { assert, unreachable } from "../../../shared/src/asserts.js";
2
+ import { binarySearch } from "../../../shared/src/binary-search.js";
3
+ import { generateWithOverlay, isJoinMatch, rowEqualsForCompoundKey, } from "./join-utils.js";
4
+ import { throwOutput, } from "./operator.js";
5
+ import { first } from "./stream.js";
6
+ /**
7
+ * An *inner* join which fetches nodes from its child input first and then
8
+ * fetches their related nodes from its parent input. Output nodes are the
9
+ * nodes from parent input (in parent input order), which have at least one
10
+ * related child. These output nodes have a new relationship added to them,
11
+ * which has the name `relationshipName`. The value of the relationship is a
12
+ * stream of related nodes from the child input (in child input order).
13
+ */
14
+ export class FlippedJoin {
15
+ #parent;
16
+ #child;
17
+ #parentKey;
18
+ #childKey;
19
+ #relationshipName;
20
+ #schema;
21
+ #output = throwOutput;
22
+ #inprogressChildChange;
23
+ constructor({ parent, child, parentKey, childKey, relationshipName, hidden, system, }) {
24
+ assert(parent !== child, 'Parent and child must be different operators');
25
+ assert(parentKey.length === childKey.length, 'The parentKey and childKey keys must have same length');
26
+ this.#parent = parent;
27
+ this.#child = child;
28
+ this.#parentKey = parentKey;
29
+ this.#childKey = childKey;
30
+ this.#relationshipName = relationshipName;
31
+ const parentSchema = parent.getSchema();
32
+ const childSchema = child.getSchema();
33
+ this.#schema = {
34
+ ...parentSchema,
35
+ relationships: {
36
+ ...parentSchema.relationships,
37
+ [relationshipName]: {
38
+ ...childSchema,
39
+ isHidden: hidden,
40
+ system,
41
+ },
42
+ },
43
+ };
44
+ parent.setOutput({
45
+ push: (change) => this.#pushParent(change),
46
+ });
47
+ child.setOutput({
48
+ push: (change) => this.#pushChild(change),
49
+ });
50
+ }
51
+ destroy() {
52
+ this.#child.destroy();
53
+ this.#parent.destroy();
54
+ }
55
+ setOutput(output) {
56
+ this.#output = output;
57
+ }
58
+ getSchema() {
59
+ return this.#schema;
60
+ }
61
+ // TODO: When parentKey is the parent's primary key (or more
62
+ // generally when the parent cardinality is expected to be small) a different
63
+ // algorithm should be used: For each child node, fetch all parent nodes
64
+ // eagerly and then sort using quicksort.
65
+ *fetch(req) {
66
+ const childNodes = [...this.#child.fetch({})];
67
+ // FlippedJoin's split-push change overlay logic is largely
68
+ // the same as Join's with the exception of remove. For remove,
69
+ // the change is undone here, and then re-applied to parents with order
70
+ // less than or equal to change.position below. This is necessary
71
+ // because if the removed node was the last related child, the
72
+ // related parents with position greater than change.position
73
+ // (which should not yet have the node removed), would not even
74
+ // be fetched here, and would be absent from the output all together.
75
+ if (this.#inprogressChildChange?.change.type === 'remove') {
76
+ const removedNode = this.#inprogressChildChange.change.node;
77
+ const compare = this.#child.getSchema().compareRows;
78
+ const insertPos = binarySearch(childNodes.length, i => compare(childNodes[i].row, removedNode.row));
79
+ childNodes.splice(insertPos, 0, removedNode);
80
+ }
81
+ const parentIterators = [];
82
+ let threw = false;
83
+ try {
84
+ for (const childNode of childNodes) {
85
+ // TODO: consider adding the ability to pass a set of
86
+ // ids to fetch, and have them applied to sqlite using IN.
87
+ // TODO: Can there be a conflict between req constraint and
88
+ // the join constraint?
89
+ const stream = this.#parent.fetch({
90
+ ...req,
91
+ constraint: {
92
+ ...req.constraint,
93
+ ...Object.fromEntries(this.#parentKey.map((key, i) => [
94
+ key,
95
+ childNode.row[this.#childKey[i]],
96
+ ])),
97
+ },
98
+ });
99
+ const iterator = stream[Symbol.iterator]();
100
+ parentIterators.push(iterator);
101
+ }
102
+ const nextParentNodes = [];
103
+ for (let i = 0; i < parentIterators.length; i++) {
104
+ const iter = parentIterators[i];
105
+ const result = iter.next();
106
+ nextParentNodes[i] = result.done ? null : result.value;
107
+ }
108
+ while (true) {
109
+ let minParentNode = null;
110
+ let minParentNodeChildIndexes = [];
111
+ for (let i = 0; i < nextParentNodes.length; i++) {
112
+ const parentNode = nextParentNodes[i];
113
+ if (parentNode === null) {
114
+ continue;
115
+ }
116
+ if (minParentNode === null) {
117
+ minParentNode = parentNode;
118
+ minParentNodeChildIndexes.push(i);
119
+ }
120
+ else {
121
+ const compareResult = this.#schema.compareRows(parentNode.row, minParentNode.row) *
122
+ (req.reverse ? -1 : 1);
123
+ if (compareResult === 0) {
124
+ minParentNodeChildIndexes.push(i);
125
+ }
126
+ else if (compareResult < 0) {
127
+ minParentNode = parentNode;
128
+ minParentNodeChildIndexes = [i];
129
+ }
130
+ }
131
+ }
132
+ if (minParentNode === null) {
133
+ return;
134
+ }
135
+ const relatedChildNodes = [];
136
+ for (const minParentNodeChildIndex of minParentNodeChildIndexes) {
137
+ relatedChildNodes.push(childNodes[minParentNodeChildIndex]);
138
+ const iter = parentIterators[minParentNodeChildIndex];
139
+ const result = iter.next();
140
+ nextParentNodes[minParentNodeChildIndex] = result.done
141
+ ? null
142
+ : result.value;
143
+ }
144
+ let overlaidRelatedChildNodes = relatedChildNodes;
145
+ if (this.#inprogressChildChange &&
146
+ this.#inprogressChildChange.position &&
147
+ isJoinMatch(this.#inprogressChildChange.change.node.row, this.#childKey, minParentNode.row, this.#parentKey)) {
148
+ if (this.#inprogressChildChange.change.type === 'remove') {
149
+ if (this.#parent
150
+ .getSchema()
151
+ .compareRows(minParentNode.row, this.#inprogressChildChange.position) <= 0) {
152
+ overlaidRelatedChildNodes = relatedChildNodes.filter(n => n !== this.#inprogressChildChange?.change.node);
153
+ }
154
+ }
155
+ else if (this.#parent
156
+ .getSchema()
157
+ .compareRows(minParentNode.row, this.#inprogressChildChange.position) > 0) {
158
+ overlaidRelatedChildNodes = [
159
+ ...generateWithOverlay(relatedChildNodes, this.#inprogressChildChange.change, this.#child.getSchema()),
160
+ ];
161
+ }
162
+ }
163
+ // yield node if after the overlay it still has relationship nodes
164
+ if (overlaidRelatedChildNodes.length > 0) {
165
+ yield {
166
+ ...minParentNode,
167
+ relationships: {
168
+ ...minParentNode.relationships,
169
+ [this.#relationshipName]: () => overlaidRelatedChildNodes,
170
+ },
171
+ };
172
+ }
173
+ }
174
+ }
175
+ catch (e) {
176
+ threw = true;
177
+ for (const iter of parentIterators) {
178
+ try {
179
+ iter.throw?.(e);
180
+ }
181
+ catch (_cleanupError) {
182
+ // error in the iter.throw cleanup,
183
+ // catch so other iterators are cleaned up
184
+ }
185
+ }
186
+ throw e;
187
+ }
188
+ finally {
189
+ if (!threw) {
190
+ for (const iter of parentIterators) {
191
+ try {
192
+ iter.return?.();
193
+ }
194
+ catch (_cleanupError) {
195
+ // error in the iter.return cleanup,
196
+ // catch so other iterators are cleaned up
197
+ }
198
+ }
199
+ }
200
+ }
201
+ }
202
+ *cleanup(_req) { }
203
+ #pushChild(change) {
204
+ const pushChildChange = (exists) => {
205
+ this.#inprogressChildChange = {
206
+ change,
207
+ position: undefined,
208
+ };
209
+ try {
210
+ const parentNodeStream = this.#parent.fetch({
211
+ constraint: Object.fromEntries(this.#parentKey.map((key, i) => [
212
+ key,
213
+ change.node.row[this.#childKey[i]],
214
+ ])),
215
+ });
216
+ for (const parentNode of parentNodeStream) {
217
+ this.#inprogressChildChange = {
218
+ change,
219
+ position: parentNode.row,
220
+ };
221
+ const childNodeStream = () => this.#child.fetch({
222
+ constraint: Object.fromEntries(this.#childKey.map((key, i) => [
223
+ key,
224
+ parentNode.row[this.#parentKey[i]],
225
+ ])),
226
+ });
227
+ if (!exists) {
228
+ for (const childNode of childNodeStream()) {
229
+ if (this.#child
230
+ .getSchema()
231
+ .compareRows(childNode.row, change.node.row) !== 0) {
232
+ exists = true;
233
+ break;
234
+ }
235
+ }
236
+ }
237
+ if (exists) {
238
+ this.#output.push({
239
+ type: 'child',
240
+ node: {
241
+ ...parentNode,
242
+ relationships: {
243
+ ...parentNode.relationships,
244
+ [this.#relationshipName]: childNodeStream,
245
+ },
246
+ },
247
+ child: {
248
+ relationshipName: this.#relationshipName,
249
+ change,
250
+ },
251
+ });
252
+ }
253
+ else {
254
+ this.#output.push({
255
+ ...change,
256
+ node: {
257
+ ...parentNode,
258
+ relationships: {
259
+ ...parentNode.relationships,
260
+ [this.#relationshipName]: () => [change.node],
261
+ },
262
+ },
263
+ });
264
+ }
265
+ }
266
+ }
267
+ finally {
268
+ this.#inprogressChildChange = undefined;
269
+ }
270
+ };
271
+ switch (change.type) {
272
+ case 'add':
273
+ case 'remove':
274
+ pushChildChange();
275
+ break;
276
+ case 'edit': {
277
+ assert(rowEqualsForCompoundKey(change.oldNode.row, change.node.row, this.#childKey), `Child edit must not change relationship.`);
278
+ pushChildChange(true);
279
+ break;
280
+ }
281
+ case 'child':
282
+ pushChildChange(true);
283
+ break;
284
+ }
285
+ }
286
+ #pushParent(change) {
287
+ const childNodeStream = (node) => () => this.#child.fetch({
288
+ constraint: Object.fromEntries(this.#childKey.map((key, i) => [key, node.row[this.#parentKey[i]]])),
289
+ });
290
+ const flip = (node) => ({
291
+ ...node,
292
+ relationships: {
293
+ ...node.relationships,
294
+ [this.#relationshipName]: childNodeStream(node),
295
+ },
296
+ });
297
+ switch (change.type) {
298
+ case 'add':
299
+ case 'remove':
300
+ case 'child': {
301
+ if (first(childNodeStream(change.node)()) === undefined) {
302
+ return;
303
+ }
304
+ this.#output.push({
305
+ ...change,
306
+ node: flip(change.node),
307
+ });
308
+ break;
309
+ }
310
+ case 'edit': {
311
+ const oldHasChild = first(childNodeStream(change.oldNode)()) !== undefined;
312
+ const hasChild = first(childNodeStream(change.node)()) !== undefined;
313
+ assert(rowEqualsForCompoundKey(change.oldNode.row, change.node.row, this.#parentKey), `Parent edit must not change relationship.`);
314
+ if (oldHasChild && hasChild) {
315
+ this.#output.push({
316
+ type: 'edit',
317
+ oldNode: flip(change.oldNode),
318
+ node: flip(change.node),
319
+ });
320
+ break;
321
+ }
322
+ if (oldHasChild) {
323
+ this.#output.push({
324
+ type: 'remove',
325
+ node: flip(change.node),
326
+ });
327
+ }
328
+ if (hasChild) {
329
+ this.#output.push({
330
+ type: 'add',
331
+ node: flip(change.node),
332
+ });
333
+ }
334
+ break;
335
+ }
336
+ default:
337
+ unreachable(change);
338
+ }
339
+ }
340
+ }
341
+ //# sourceMappingURL=flipped-join.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flipped-join.js","sourceRoot":"","sources":["../../../../../zql/src/ivm/flipped-join.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Row } from '../../../zero-protocol/src/data.ts';
2
+ import type { Change } from './change.ts';
3
+ import type { SourceSchema } from './schema.ts';
4
+ import type { Stream } from './stream.ts';
5
+ import { type Node } from './data.ts';
6
+ import type { CompoundKey } from '../../../zero-protocol/src/ast.ts';
7
+ export type JoinChangeOverlay = {
8
+ change: Change;
9
+ position: Row | undefined;
10
+ };
11
+ export declare function generateWithOverlay(stream: Stream<Node>, overlay: Change, schema: SourceSchema): Stream<Node>;
12
+ export declare function rowEqualsForCompoundKey(a: Row, b: Row, key: CompoundKey): boolean;
13
+ export declare function isJoinMatch(parent: Row, parentKey: CompoundKey, child: Row, childKey: CompoundKey): boolean;
14
+ //# sourceMappingURL=join-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-utils.d.ts","sourceRoot":"","sources":["../../../../../zql/src/ivm/join-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,oCAAoC,CAAC;AAC5D,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAA6B,KAAK,IAAI,EAAC,MAAM,WAAW,CAAC;AAEhE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mCAAmC,CAAC;AAEnE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,GAAG,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAiB,mBAAmB,CAClC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC,IAAI,CAAC,CAmFd;AAED,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,GAAG,EACN,CAAC,EAAE,GAAG,EACN,GAAG,EAAE,WAAW,GACf,OAAO,CAOT;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,WAAW,WAQtB"}
@@ -0,0 +1,94 @@
1
+ import { compareValues, valuesEqual } from "./data.js";
2
+ import { assert } from "../../../shared/src/asserts.js";
3
+ export function* generateWithOverlay(stream, overlay, schema) {
4
+ let applied = false;
5
+ let editOldApplied = false;
6
+ let editNewApplied = false;
7
+ for (const node of stream) {
8
+ let yieldNode = true;
9
+ if (!applied) {
10
+ switch (overlay.type) {
11
+ case 'add': {
12
+ if (schema.compareRows(overlay.node.row, node.row) === 0) {
13
+ applied = true;
14
+ yieldNode = false;
15
+ }
16
+ break;
17
+ }
18
+ case 'remove': {
19
+ if (schema.compareRows(overlay.node.row, node.row) < 0) {
20
+ applied = true;
21
+ yield overlay.node;
22
+ }
23
+ break;
24
+ }
25
+ case 'edit': {
26
+ if (!editOldApplied &&
27
+ schema.compareRows(overlay.oldNode.row, node.row) < 0) {
28
+ editOldApplied = true;
29
+ if (editNewApplied) {
30
+ applied = true;
31
+ }
32
+ yield overlay.oldNode;
33
+ }
34
+ if (!editNewApplied &&
35
+ schema.compareRows(overlay.node.row, node.row) === 0) {
36
+ editNewApplied = true;
37
+ if (editOldApplied) {
38
+ applied = true;
39
+ }
40
+ yieldNode = false;
41
+ }
42
+ break;
43
+ }
44
+ case 'child': {
45
+ if (schema.compareRows(overlay.node.row, node.row) === 0) {
46
+ applied = true;
47
+ yield {
48
+ row: node.row,
49
+ relationships: {
50
+ ...node.relationships,
51
+ [overlay.child.relationshipName]: () => generateWithOverlay(node.relationships[overlay.child.relationshipName](), overlay.child.change, schema.relationships[overlay.child.relationshipName]),
52
+ },
53
+ };
54
+ yieldNode = false;
55
+ }
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ if (yieldNode) {
61
+ yield node;
62
+ }
63
+ }
64
+ if (!applied) {
65
+ if (overlay.type === 'remove') {
66
+ applied = true;
67
+ yield overlay.node;
68
+ }
69
+ else if (overlay.type === 'edit') {
70
+ assert(editNewApplied);
71
+ editOldApplied = true;
72
+ applied = true;
73
+ yield overlay.oldNode;
74
+ }
75
+ }
76
+ assert(applied);
77
+ }
78
+ export function rowEqualsForCompoundKey(a, b, key) {
79
+ for (let i = 0; i < key.length; i++) {
80
+ if (compareValues(a[key[i]], b[key[i]]) !== 0) {
81
+ return false;
82
+ }
83
+ }
84
+ return true;
85
+ }
86
+ export function isJoinMatch(parent, parentKey, child, childKey) {
87
+ for (let i = 0; i < parentKey.length; i++) {
88
+ if (!valuesEqual(parent[parentKey[i]], child[childKey[i]])) {
89
+ return false;
90
+ }
91
+ }
92
+ return true;
93
+ }
94
+ //# sourceMappingURL=join-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-utils.js","sourceRoot":"","sources":["../../../../../zql/src/ivm/join-utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAE,WAAW,EAAY,MAAM,WAAW,CAAC;AAChE,OAAO,EAAC,MAAM,EAAC,MAAM,gCAAgC,CAAC;AAQtD,MAAM,SAAS,CAAC,CAAC,mBAAmB,CAClC,MAAoB,EACpB,OAAe,EACf,MAAoB;IAEpB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzD,OAAO,GAAG,IAAI,CAAC;wBACf,SAAS,GAAG,KAAK,CAAC;oBACpB,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvD,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM,OAAO,CAAC,IAAI,CAAC;oBACrB,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,IACE,CAAC,cAAc;wBACf,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EACrD,CAAC;wBACD,cAAc,GAAG,IAAI,CAAC;wBACtB,IAAI,cAAc,EAAE,CAAC;4BACnB,OAAO,GAAG,IAAI,CAAC;wBACjB,CAAC;wBACD,MAAM,OAAO,CAAC,OAAO,CAAC;oBACxB,CAAC;oBACD,IACE,CAAC,cAAc;wBACf,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EACpD,CAAC;wBACD,cAAc,GAAG,IAAI,CAAC;wBACtB,IAAI,cAAc,EAAE,CAAC;4BACnB,OAAO,GAAG,IAAI,CAAC;wBACjB,CAAC;wBACD,SAAS,GAAG,KAAK,CAAC;oBACpB,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzD,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM;4BACJ,GAAG,EAAE,IAAI,CAAC,GAAG;4BACb,aAAa,EAAE;gCACb,GAAG,IAAI,CAAC,aAAa;gCACrB,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,CACrC,mBAAmB,CACjB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,EACpD,OAAO,CAAC,KAAK,CAAC,MAAM,EACpB,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CACrD;6BACJ;yBACF,CAAC;wBACF,SAAS,GAAG,KAAK,CAAC;oBACpB,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,CAAC;QACb,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,OAAO,CAAC,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,MAAM,CAAC,cAAc,CAAC,CAAC;YACvB,cAAc,GAAG,IAAI,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,OAAO,CAAC,OAAO,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,CAAM,EACN,CAAM,EACN,GAAgB;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,MAAW,EACX,SAAsB,EACtB,KAAU,EACV,QAAqB;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { CompoundKey, System } from '../../../zero-protocol/src/ast.ts';
2
2
  import type { Row, Value } from '../../../zero-protocol/src/data.ts';
3
3
  import type { PrimaryKey } from '../../../zero-protocol/src/primary-key.ts';
4
- import { type Node } from './data.ts';
4
+ import type { Node } from './data.ts';
5
5
  import { type FetchRequest, type Input, type Output, type Storage } from './operator.ts';
6
6
  import type { SourceSchema } from './schema.ts';
7
7
  import { type Stream } from './stream.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../../../../zql/src/ivm/join.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,WAAW,EAAE,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAC,GAAG,EAAE,KAAK,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,2CAA2C,CAAC;AAE1E,OAAO,EAA6B,KAAK,IAAI,EAAC,MAAM,WAAW,CAAC;AAChE,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,OAAO,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAO,KAAK,MAAM,EAAC,MAAM,aAAa,CAAC;AAE9C,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IAGjB,SAAS,EAAE,WAAW,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;IAItB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAOF;;;;;;;;;GASG;AACH,qBAAa,IAAK,YAAW,KAAK;;gBAapB,EACV,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,MAAM,GACP,EAAE,IAAI;IAmCP,OAAO,IAAI,IAAI;IAKf,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,SAAS,IAAI,YAAY;IAIxB,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;IAUtC,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;CAkU1C;AAID,4BAA4B;AAC5B,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,MAAM,CAGxE;AAED,4BAA4B;AAC5B,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CAEvE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,GAAG,GACP,MAAM,CAMR"}
1
+ {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../../../../zql/src/ivm/join.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,WAAW,EAAE,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAC,GAAG,EAAE,KAAK,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,2CAA2C,CAAC;AAE1E,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAOpC,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,OAAO,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAO,KAAK,MAAM,EAAC,MAAM,aAAa,CAAC;AAE9C,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IAGjB,SAAS,EAAE,WAAW,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;IAItB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;GASG;AACH,qBAAa,IAAK,YAAW,KAAK;;gBAapB,EACV,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,MAAM,GACP,EAAE,IAAI;IAmCP,OAAO,IAAI,IAAI;IAKf,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,SAAS,IAAI,YAAY;IAIxB,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;IAUtC,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;CAwN1C;AAID,4BAA4B;AAC5B,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,MAAM,CAGxE;AAED,4BAA4B;AAC5B,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CAEvE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,GAAG,GACP,MAAM,CAMR"}
@@ -1,5 +1,5 @@
1
1
  import { assert, unreachable } from "../../../shared/src/asserts.js";
2
- import { compareValues, valuesEqual } from "./data.js";
2
+ import { generateWithOverlay, isJoinMatch, rowEqualsForCompoundKey, } from "./join-utils.js";
3
3
  import { throwOutput, } from "./operator.js";
4
4
  import { take } from "./stream.js";
5
5
  /**
@@ -153,88 +153,6 @@ export class Join {
153
153
  unreachable(change);
154
154
  }
155
155
  }
156
- *#generateChildStreamWithOverlay(stream, overlay) {
157
- let applied = false;
158
- let editOldApplied = false;
159
- let editNewApplied = false;
160
- for (const child of stream) {
161
- let yieldChild = true;
162
- if (!applied) {
163
- switch (overlay.type) {
164
- case 'add': {
165
- if (this.#child
166
- .getSchema()
167
- .compareRows(overlay.node.row, child.row) === 0) {
168
- applied = true;
169
- yieldChild = false;
170
- }
171
- break;
172
- }
173
- case 'remove': {
174
- if (this.#child.getSchema().compareRows(overlay.node.row, child.row) <
175
- 0) {
176
- applied = true;
177
- yield overlay.node;
178
- }
179
- break;
180
- }
181
- case 'edit': {
182
- if (this.#child
183
- .getSchema()
184
- .compareRows(overlay.oldNode.row, child.row) < 0) {
185
- editOldApplied = true;
186
- if (editNewApplied) {
187
- applied = true;
188
- }
189
- yield overlay.oldNode;
190
- }
191
- if (this.#child
192
- .getSchema()
193
- .compareRows(overlay.node.row, child.row) === 0) {
194
- editNewApplied = true;
195
- if (editOldApplied) {
196
- applied = true;
197
- }
198
- yieldChild = false;
199
- }
200
- break;
201
- }
202
- case 'child': {
203
- if (this.#child
204
- .getSchema()
205
- .compareRows(overlay.node.row, child.row) === 0) {
206
- applied = true;
207
- yield {
208
- row: child.row,
209
- relationships: {
210
- ...child.relationships,
211
- [overlay.child.relationshipName]: () => this.#generateChildStreamWithOverlay(child.relationships[overlay.child.relationshipName](), overlay.child.change),
212
- },
213
- };
214
- yieldChild = false;
215
- }
216
- break;
217
- }
218
- }
219
- }
220
- if (yieldChild) {
221
- yield child;
222
- }
223
- }
224
- if (!applied) {
225
- if (overlay.type === 'remove') {
226
- applied = true;
227
- yield overlay.node;
228
- }
229
- else if (overlay.type === 'edit') {
230
- assert(editNewApplied);
231
- editOldApplied = true;
232
- applied = true;
233
- yield overlay.oldNode;
234
- }
235
- }
236
- assert(applied);
237
- }
238
156
  #processParentNode(parentNodeRow, parentNodeRelations, mode) {
239
157
  let method = mode;
240
158
  let storageUpdated = false;
@@ -263,10 +181,10 @@ export class Join {
263
181
  ])),
264
182
  });
265
183
  if (this.#inprogressChildChange &&
266
- this.#isJoinMatch(parentNodeRow, this.#inprogressChildChange.change.node.row) &&
184
+ isJoinMatch(parentNodeRow, this.#parentKey, this.#inprogressChildChange.change.node.row, this.#childKey) &&
267
185
  this.#inprogressChildChange.position &&
268
186
  this.#schema.compareRows(parentNodeRow, this.#inprogressChildChange.position) > 0) {
269
- return this.#generateChildStreamWithOverlay(stream, this.#inprogressChildChange.change);
187
+ return generateWithOverlay(stream, this.#inprogressChildChange.change, this.#child.getSchema());
270
188
  }
271
189
  return stream;
272
190
  };
@@ -278,14 +196,6 @@ export class Join {
278
196
  },
279
197
  };
280
198
  }
281
- #isJoinMatch(parent, child) {
282
- for (let i = 0; i < this.#parentKey.length; i++) {
283
- if (!valuesEqual(parent[this.#parentKey[i]], child[this.#childKey[i]])) {
284
- return false;
285
- }
286
- }
287
- return true;
288
- }
289
199
  }
290
200
  /** Exported for testing. */
291
201
  export function makeStorageKeyForValues(values) {
@@ -307,12 +217,4 @@ export function makeStorageKey(key, primaryKey, row) {
307
217
  }
308
218
  return makeStorageKeyForValues(values);
309
219
  }
310
- function rowEqualsForCompoundKey(a, b, key) {
311
- for (let i = 0; i < key.length; i++) {
312
- if (compareValues(a[key[i]], b[key[i]]) !== 0) {
313
- return false;
314
- }
315
- }
316
- return true;
317
- }
318
220
  //# sourceMappingURL=join.js.map