@powersync/service-sync-rules 0.35.0 → 0.36.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 (70) hide show
  1. package/README.md +3 -3
  2. package/dist/BucketDescription.d.ts +1 -1
  3. package/dist/BucketParameterQuerier.d.ts +23 -1
  4. package/dist/BucketParameterQuerier.js +24 -0
  5. package/dist/BucketParameterQuerier.js.map +1 -1
  6. package/dist/BucketSource.d.ts +1 -1
  7. package/dist/HydratedSyncRules.d.ts +1 -1
  8. package/dist/HydratedSyncRules.js +1 -1
  9. package/dist/HydrationState.d.ts +9 -5
  10. package/dist/HydrationState.js +3 -3
  11. package/dist/HydrationState.js.map +1 -1
  12. package/dist/SqlParameterQuery.js +3 -1
  13. package/dist/SqlParameterQuery.js.map +1 -1
  14. package/dist/SqlSyncRules.d.ts +1 -1
  15. package/dist/StorageVersion.d.ts +27 -0
  16. package/dist/StorageVersion.js +17 -0
  17. package/dist/StorageVersion.js.map +1 -0
  18. package/dist/SyncConfig.d.ts +9 -3
  19. package/dist/SyncConfig.js +9 -3
  20. package/dist/SyncConfig.js.map +1 -1
  21. package/dist/TableValuedFunctions.js +1 -0
  22. package/dist/TableValuedFunctions.js.map +1 -1
  23. package/dist/compiler/compiler.d.ts +2 -2
  24. package/dist/compiler/equality.d.ts +2 -0
  25. package/dist/compiler/equality.js +35 -0
  26. package/dist/compiler/equality.js.map +1 -1
  27. package/dist/compiler/parser.d.ts +1 -1
  28. package/dist/compiler/parser.js +7 -5
  29. package/dist/compiler/parser.js.map +1 -1
  30. package/dist/compiler/querier_graph.js +13 -2
  31. package/dist/compiler/querier_graph.js.map +1 -1
  32. package/dist/compiler/scope.d.ts +2 -2
  33. package/dist/compiler/scope.js +2 -1
  34. package/dist/compiler/scope.js.map +1 -1
  35. package/dist/compiler/sqlite.d.ts +4 -0
  36. package/dist/compiler/sqlite.js.map +1 -1
  37. package/dist/compiler/table.d.ts +26 -0
  38. package/dist/compiler/table.js +76 -0
  39. package/dist/compiler/table.js.map +1 -1
  40. package/dist/events/SqlEventDescriptor.d.ts +1 -1
  41. package/dist/events/SqlEventDescriptor.js +1 -1
  42. package/dist/from_yaml.js +74 -17
  43. package/dist/from_yaml.js.map +1 -1
  44. package/dist/index.d.ts +1 -0
  45. package/dist/index.js +1 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/json_schema.js +7 -0
  48. package/dist/json_schema.js.map +1 -1
  49. package/dist/streams/variant.js +2 -2
  50. package/dist/streams/variant.js.map +1 -1
  51. package/dist/sync_plan/evaluator/bucket_source.js +1 -1
  52. package/dist/sync_plan/evaluator/bucket_source.js.map +1 -1
  53. package/dist/sync_plan/evaluator/parameter_evaluator.d.ts +50 -3
  54. package/dist/sync_plan/evaluator/parameter_evaluator.js +235 -23
  55. package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -1
  56. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.d.ts +1 -2
  57. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js +31 -4
  58. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js.map +1 -1
  59. package/dist/sync_plan/expression_visitor.d.ts +4 -1
  60. package/dist/sync_plan/expression_visitor.js +21 -12
  61. package/dist/sync_plan/expression_visitor.js.map +1 -1
  62. package/dist/sync_plan/plan.d.ts +1 -1
  63. package/dist/types/custom_sqlite_value.d.ts +1 -1
  64. package/dist/types/custom_sqlite_value.js +1 -1
  65. package/dist/types.d.ts +1 -1
  66. package/dist/types.js +1 -1
  67. package/dist/utils.d.ts +1 -1
  68. package/dist/utils.js +1 -1
  69. package/package.json +6 -6
  70. package/schema/sync_rules.json +9 -0
@@ -1,5 +1,5 @@
1
1
  import { ScopedParameterLookup, UnscopedParameterLookup } from '../../BucketParameterQuerier.js';
2
- import { cartesianProduct } from '../../streams/utils.js';
2
+ import { HashMap, listEquality, StableHasher } from '../../compiler/equality.js';
3
3
  import { isValidParameterValue } from '../../utils.js';
4
4
  import { mapExternalDataToInstantiation } from '../engine/scalar_expression_engine.js';
5
5
  import { MapSourceVisitor, visitExpr } from '../expression_visitor.js';
@@ -42,9 +42,10 @@ import { MapSourceVisitor, visitExpr } from '../expression_visitor.js';
42
42
  * queriers by indicating that no lookups will be used.
43
43
  */
44
44
  export class RequestParameterEvaluators {
45
+ stream;
45
46
  lookupStages;
46
47
  parameterValues;
47
- constructor(
48
+ constructor(stream,
48
49
  /**
49
50
  * Pending lookup stages, or their cached outputs.
50
51
  */
@@ -53,6 +54,7 @@ export class RequestParameterEvaluators {
53
54
  * Pending parameter values, or their cached outputs.
54
55
  */
55
56
  parameterValues) {
57
+ this.stream = stream;
56
58
  this.lookupStages = lookupStages;
57
59
  this.parameterValues = parameterValues;
58
60
  }
@@ -87,7 +89,7 @@ export class RequestParameterEvaluators {
87
89
  return lookup;
88
90
  }
89
91
  }
90
- return new RequestParameterEvaluators(this.lookupStages.map((stage) => stage.map(cloneLookup)), this.parameterValues.map(cloneValue));
92
+ return new RequestParameterEvaluators(this.stream, this.lookupStages.map((stage) => stage.map(cloneLookup)), this.parameterValues.map(cloneValue));
91
93
  }
92
94
  /**
93
95
  * Evaluates those lookups and parameter values that be evaluated without looking up parameter indexes.
@@ -102,7 +104,7 @@ export class RequestParameterEvaluators {
102
104
  this.lookupStages.forEach((stage, stageIndex) => {
103
105
  stage.forEach((_, indexInStage) => helper.expandingLookupSync(stageIndex, indexInStage));
104
106
  });
105
- return helper.tryResolveInstantiation(this.parameterValues);
107
+ return helper.tryResolveInstantiation(this.parameterValues)?.map(withoutProvenance);
106
108
  }
107
109
  /**
108
110
  * Resolves and caches all lookup stages and parameter values.
@@ -117,17 +119,18 @@ export class RequestParameterEvaluators {
117
119
  }
118
120
  // At this point, all lookups have been resolved and we can synchronously evaluate parameters which might depend on
119
121
  // those lookups.
120
- return helper.resolveInstantiation(this.parameterValues);
122
+ return helper.resolveInstantiation(this.parameterValues).map(withoutProvenance);
121
123
  }
122
124
  /**
123
125
  * Prepares evaluators for a description of parameter values obtained from a compiled querier in the sync plan.
124
126
  *
127
+ * @param stream Used to show the name of the stream for debugging purposes.
125
128
  * @param lookupStages The {@link plan.StreamQuerier.lookupStages} of the querier to compile.
126
129
  * @param values The {@link plan.StreamQuerier.sourceInstantiation} of the querier to compile.
127
130
  * @param input Access to bucket and parameter sources generated for buckets and parameter lookups referenced by the
128
131
  * querier.
129
132
  */
130
- static prepare(lookupStages, values, input) {
133
+ static prepare(stream, lookupStages, values, input) {
131
134
  const mappedStages = [];
132
135
  const lookupToStage = new Map();
133
136
  function mapParameterValue(value) {
@@ -195,7 +198,7 @@ export class RequestParameterEvaluators {
195
198
  }
196
199
  }
197
200
  }
198
- return new RequestParameterEvaluators(mappedStages, mapParameterValues(values));
201
+ return new RequestParameterEvaluators(stream, mappedStages, mapParameterValues(values));
199
202
  }
200
203
  }
201
204
  class PartialInstantiator {
@@ -242,7 +245,7 @@ class PartialInstantiator {
242
245
  }
243
246
  return cached;
244
247
  });
245
- yield* cartesianProduct(...parameterValues);
248
+ yield* mergeValueCombinations(parameterValues);
246
249
  }
247
250
  /**
248
251
  * If possible, evaluates an element in an array of parameter values and replaces the parameter with a marker
@@ -254,18 +257,112 @@ class PartialInstantiator {
254
257
  return current.values;
255
258
  }
256
259
  else if (current.type === 'intersection') {
257
- let intersection = null;
260
+ const columns = [];
258
261
  for (let i = 0; i < current.values.length; i++) {
259
262
  const evaluated = this.parameterSync(current.values, i);
260
263
  if (evaluated == null) {
261
264
  return undefined; // Can't evaluate sub-parameter
262
265
  }
266
+ columns.push(evaluated);
267
+ }
268
+ // For the most part, this just needs to find an intersection of values present in all columns. It gets more
269
+ // complicated for rows with provenance, however. For those. we need to ensure we find an intersection of values
270
+ // with compatible source rows. For example, consider an intersection of the same parameter lookup with columns
271
+ // `c1` and `c2`, and assume that we had the following rows:
272
+ //
273
+ // 1. Row {c1: 'a', c2: 'a'}
274
+ // 2. Row {c1: 'a', c2: 'b'}
275
+ //
276
+ // The intersection of this has one value: `a`, with a provenance of Row 1. To achieve this, we re-create rows
277
+ // by tracking a canonical value per row. If we see another value in the same row, we know that row can't
278
+ // contribute to the intersection because it has different values for `c1` and `c2`.
279
+ const poison = Symbol('poison');
280
+ const valuesByResultSet = new Map();
281
+ const completedRows = new Map();
282
+ function markRowAsCompleted(resultSet, rowid) {
283
+ let rowids = completedRows.get(resultSet);
284
+ if (rowids == null) {
285
+ rowids = new Set();
286
+ completedRows.set(resultSet, rowids);
287
+ }
288
+ rowids.add(rowid);
289
+ }
290
+ // Eliminate rows with conflicting values.
291
+ for (const column of columns) {
292
+ nextValue: for (const value of column) {
293
+ const row = value.directOrigin;
294
+ if (row) {
295
+ let forResultSet = valuesByResultSet.get(row.resultSet);
296
+ if (forResultSet == null) {
297
+ forResultSet = new Map();
298
+ valuesByResultSet.set(row.resultSet, forResultSet);
299
+ }
300
+ const existingValue = forResultSet.get(row.row);
301
+ if (existingValue != null && existingValue != value.value) {
302
+ forResultSet.set(row.row, poison);
303
+ markRowAsCompleted(row.resultSet, row.row);
304
+ continue nextValue;
305
+ }
306
+ else {
307
+ forResultSet.set(row.row, value.value);
308
+ }
309
+ }
310
+ }
311
+ }
312
+ function shouldSkipValue(value) {
313
+ if (value.directOrigin) {
314
+ const { resultSet, row } = value.directOrigin;
315
+ const ignoredRowIds = completedRows.get(resultSet);
316
+ if (ignoredRowIds?.has(row))
317
+ return true;
318
+ const valuesForResultSet = valuesByResultSet.get(resultSet);
319
+ if (valuesForResultSet == null)
320
+ return false;
321
+ if (valuesForResultSet.get(row) != value.value)
322
+ return true;
323
+ }
324
+ return false;
325
+ }
326
+ let intersection = null;
327
+ for (const column of columns) {
263
328
  if (intersection == null) {
264
- intersection = new Set(evaluated);
329
+ intersection = new Map();
330
+ for (const value of column) {
331
+ if (shouldSkipValue(value))
332
+ continue;
333
+ const existing = intersection.get(value.value);
334
+ if (existing != null) {
335
+ existing.push(value.provenance);
336
+ }
337
+ else {
338
+ intersection.set(value.value, [value.provenance]);
339
+ }
340
+ for (const { resultSet, row } of value.provenance) {
341
+ // Any other value derived from this row must have the same value (otherwise we would have eliminated it).
342
+ // So we don't have to consider this row again.
343
+ markRowAsCompleted(resultSet, row);
344
+ }
345
+ }
265
346
  }
266
347
  else {
267
- // TODO: Remove as any once we can use ES2025 in TypeScript
268
- intersection = intersection.intersection(new Set(evaluated));
348
+ const unmatchedValues = new Set(intersection.keys());
349
+ for (const value of column) {
350
+ const existing = intersection.get(value.value);
351
+ if (existing == null) {
352
+ // Value not in intersection, ignore.
353
+ }
354
+ else {
355
+ unmatchedValues.delete(value.value);
356
+ if (!shouldSkipValue(value)) {
357
+ // An intersection value is derived from all inputs, so we track them all as provenance.
358
+ existing.push(value.provenance);
359
+ }
360
+ }
361
+ }
362
+ for (const unmatched of unmatchedValues) {
363
+ // Values in intersection before, but not in evaluated
364
+ intersection.delete(unmatched);
365
+ }
269
366
  }
270
367
  if (intersection.size == 0) {
271
368
  // Empty intersection, we don't even need to evaluate the rest.
@@ -274,7 +371,11 @@ class PartialInstantiator {
274
371
  }
275
372
  let values = [];
276
373
  if (intersection) {
277
- values.push(...intersection.keys());
374
+ intersection.forEach((provenances, value) => {
375
+ for (const provenance of provenances) {
376
+ values.push({ value, provenance });
377
+ }
378
+ });
278
379
  }
279
380
  parent[index] = { type: 'cached', values };
280
381
  return values;
@@ -289,7 +390,14 @@ class PartialInstantiator {
289
390
  }
290
391
  else if (current.type === 'request') {
291
392
  const value = current.read(this.input.request);
292
- const values = isValidParameterValue(value) ? [value] : [];
393
+ const values = isValidParameterValue(value)
394
+ ? [
395
+ {
396
+ value,
397
+ provenance: []
398
+ }
399
+ ]
400
+ : [];
293
401
  parent[index] = { type: 'cached', values };
294
402
  return values;
295
403
  }
@@ -299,7 +407,12 @@ class PartialInstantiator {
299
407
  const lookup = this.evaluators.lookupStages[stage][index];
300
408
  if (lookup.type == 'table_valued') {
301
409
  // We can evaluate this table-valued function already.
302
- const values = lookup.read(this.input.request);
410
+ const resultSetMarker = Symbol();
411
+ const values = lookup.read(this.input.request).map((values, rowid) => {
412
+ const directOrigin = { resultSet: resultSetMarker, row: rowid };
413
+ const provenance = [directOrigin];
414
+ return values.map((value) => ({ value, provenance, directOrigin }));
415
+ });
303
416
  this.evaluators.lookupStages[stage][index] = { type: 'cached', values };
304
417
  return values;
305
418
  }
@@ -321,15 +434,56 @@ class FullInstantiator extends PartialInstantiator {
321
434
  const lookup = this.evaluators.lookupStages[stage][index];
322
435
  if (lookup.type == 'parameter') {
323
436
  const scope = this.input.hydrationState.getParameterIndexLookupScope(lookup.lookup);
324
- const outputs = await this.input.source.getParameterSets([...this.resolveInputs(lookup.instantiation)].map((instantiation) => ScopedParameterLookup.normalized(scope, UnscopedParameterLookup.normalized(instantiation))));
325
- // Stream parameters generate an output row like {0: <expr>, 1: <expr>, ...}.
326
- const values = outputs.map((row) => {
327
- const length = Object.entries(row).length;
328
- const asArray = [];
329
- for (let i = 0; i < length; i++) {
330
- asArray.push(row[i.toString()]);
437
+ const resolvedLookup = lookup.lookup;
438
+ // It's possible that we'll have the same logical lookup with multiple provenance values. For instance, if the
439
+ // outputs of another lookup with two columns (where only one column is an input to this lookup) are passed into
440
+ // this, we can have two lookups with identical keys but different provenances. This hash map de-duplicates keys.
441
+ const pendingLookups = new HashMap(FullInstantiator.parameterArrayEquality);
442
+ for (const values of this.resolveInputs(lookup.instantiation)) {
443
+ const provenance = [];
444
+ for (const value of values) {
445
+ provenance.push(...value.provenance);
331
446
  }
332
- return asArray;
447
+ const directValues = withoutProvenance(values);
448
+ pendingLookups.setOrUpdate(directValues, (old) => {
449
+ if (old == null) {
450
+ return {
451
+ lookup: ScopedParameterLookup.normalized(scope, UnscopedParameterLookup.normalized(directValues)),
452
+ provenance: [{ origin: provenance, symbol: Symbol(`lookup ${stage}.${index}`) }]
453
+ };
454
+ }
455
+ else {
456
+ old.provenance.push({ origin: provenance, symbol: Symbol(`lookup ${stage}.${index}`) });
457
+ return old;
458
+ }
459
+ });
460
+ }
461
+ const lookupsToProvenance = new Map();
462
+ for (const [_, { lookup, provenance }] of pendingLookups.entries) {
463
+ lookupsToProvenance.set(lookup, provenance);
464
+ }
465
+ const outputs = await this.input.source.getParameterSets([...lookupsToProvenance.keys()], `Stream ${this.evaluators.stream.name} evaluating parameter on ${resolvedLookup.sourceTable.name}`);
466
+ // Stream parameters generate an output row like {0: <expr>, 1: <expr>, ...}.
467
+ const values = outputs.flatMap(({ lookup, rows }) => {
468
+ return lookupsToProvenance.get(lookup).flatMap(({ symbol, origin }) => {
469
+ return rows.map((row, rowid) => {
470
+ const length = Object.entries(row).length;
471
+ const asArray = [];
472
+ for (let i = 0; i < length; i++) {
473
+ const value = row[i.toString()];
474
+ const directOrigin = length > 1 ? { resultSet: symbol, row: rowid } : undefined;
475
+ asArray.push({
476
+ value,
477
+ // Note: Not tracking provenance for parameters with just a single output is purely a performance
478
+ // optimization. If there's just a single value, we don't need to correlate it with other columns in the
479
+ // row. Not adding provenance saves some work in mergeValueCombinations.
480
+ provenance: directOrigin != null ? [...origin, directOrigin] : origin,
481
+ directOrigin
482
+ });
483
+ }
484
+ return asArray;
485
+ });
486
+ });
333
487
  });
334
488
  this.evaluators.lookupStages[stage][index] = { type: 'cached', values };
335
489
  return values;
@@ -340,6 +494,10 @@ class FullInstantiator extends PartialInstantiator {
340
494
  }
341
495
  return other;
342
496
  }
497
+ static parameterArrayEquality = listEquality(StableHasher.parameterValueEquality);
498
+ }
499
+ function withoutProvenance(source) {
500
+ return source.map(({ value }) => value);
343
501
  }
344
502
  export function isValidParameterValueRow(row) {
345
503
  for (const value of row) {
@@ -373,4 +531,58 @@ function* filterParameterRows(rows) {
373
531
  }
374
532
  }
375
533
  }
534
+ /**
535
+ * Builds a cartesian product of parameter instantiations, taking {@link ParameterValueWithRow.provenance} into account
536
+ * to avoid combining values from different rows of the same result set.
537
+ *
538
+ * @param valuesByParameter An array containing possible instantiations for each parameter.
539
+ * @returns All allowed instantiations.
540
+ */
541
+ function* mergeValueCombinations(valuesByParameter) {
542
+ // Partial backtracking results, the current instantiation is fixed for 0..nextParameter in generateCombinations.
543
+ const partialResults = new Array(valuesByParameter.length);
544
+ // A map from result sets to rows used in the partial instantiation.
545
+ const usedRows = new Map();
546
+ function installRowIfNoConflict(value) {
547
+ const addedResultSets = [];
548
+ for (const origin of value.provenance) {
549
+ const { resultSet, row } = origin;
550
+ const existingRow = usedRows.get(resultSet);
551
+ if (existingRow === undefined) {
552
+ addedResultSets.push(resultSet);
553
+ usedRows.set(resultSet, row);
554
+ }
555
+ else if (existingRow == row) {
556
+ continue;
557
+ }
558
+ else {
559
+ // The current instantiation already contains a value from the same result set but derived from a different
560
+ // row. So we must ignore this parameter value.
561
+ return [false, addedResultSets];
562
+ }
563
+ }
564
+ return [true, addedResultSets];
565
+ }
566
+ function uninstallResultSets(resultSets) {
567
+ for (const rs of resultSets) {
568
+ usedRows.delete(rs);
569
+ }
570
+ }
571
+ function* generateCombinations(nextParameter) {
572
+ if (nextParameter >= valuesByParameter.length) {
573
+ yield [...partialResults];
574
+ return;
575
+ }
576
+ const availableValues = valuesByParameter[nextParameter];
577
+ for (const available of availableValues) {
578
+ const [canUse, addedResultSets] = installRowIfNoConflict(available);
579
+ if (canUse) {
580
+ partialResults[nextParameter] = available;
581
+ yield* generateCombinations(nextParameter + 1);
582
+ }
583
+ uninstallResultSets(addedResultSets);
584
+ }
585
+ }
586
+ yield* generateCombinations(0);
587
+ }
376
588
  //# sourceMappingURL=parameter_evaluator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parameter_evaluator.js","sourceRoot":"","sources":["../../../src/sync_plan/evaluator/parameter_evaluator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parameter_evaluator.js","sourceRoot":"","sources":["../../../src/sync_plan/evaluator/parameter_evaluator.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,9 @@ import { SqliteRow, UnscopedEvaluatedParametersResult } from '../../types.js';
6
6
  import * as plan from '../plan.js';
7
7
  import { StreamEvaluationContext } from './index.js';
8
8
  export declare class PreparedParameterIndexLookupCreator implements ParameterIndexLookupCreator {
9
- private readonly source;
10
9
  readonly defaultLookupScope: ParameterLookupScope;
11
10
  private readonly evaluator;
12
- private readonly sourceTable;
11
+ readonly sourceTable: TablePattern;
13
12
  private readonly evaluatorInputs;
14
13
  private readonly numberOfOutputs;
15
14
  private readonly numberOfParameters;
@@ -2,7 +2,6 @@ import { UnscopedParameterLookup } from '../../BucketParameterQuerier.js';
2
2
  import { isValidParameterValueRow } from './parameter_evaluator.js';
3
3
  import { TableProcessorToSqlHelper } from './table_processor_to_sql.js';
4
4
  export class PreparedParameterIndexLookupCreator {
5
- source;
6
5
  defaultLookupScope;
7
6
  evaluator;
8
7
  sourceTable;
@@ -10,7 +9,6 @@ export class PreparedParameterIndexLookupCreator {
10
9
  numberOfOutputs;
11
10
  numberOfParameters;
12
11
  constructor(source, { engine, defaultSchema }) {
13
- this.source = source;
14
12
  this.defaultLookupScope = {
15
13
  ...source.defaultLookupScope,
16
14
  source: this
@@ -40,8 +38,34 @@ export class PreparedParameterIndexLookupCreator {
40
38
  if (!this.sourceTable.matches(sourceTable)) {
41
39
  return results;
42
40
  }
41
+ function parametersEqual(a, b) {
42
+ if (a.length != b.length)
43
+ return false;
44
+ return a.every((val, idx) => val === b[idx]);
45
+ }
43
46
  try {
44
47
  const inputInstantiation = this.evaluatorInputs.map((input) => row[input.column]);
48
+ // In almost all cases, lookups generate at most one output with exactly one bucket parameter. This is the case
49
+ // for all lookups without a table-valued function, e.g. `SELECT foo.* FROM foo, bar ON foo.x = bar.x AND
50
+ // bar.y = auth.user_id()` which generates a lookup from `bar.y` to `bar.x`. However, it's also possible for:
51
+ //
52
+ // - a single row with one partition value to generate multiple outputs, which would yield a lookup with multiple
53
+ // entries in bucketParameters.
54
+ // - a single row to generate multiple partition values, which would yield multiple lookup entries.
55
+ // - a combination of those two, if multiple table-valued functions are used in the parameter result set.
56
+ const lookups = [];
57
+ function resolveLookup(entries) {
58
+ // The lookups array could be a hash map, but since we don't expect rows to generate many lookups, a hash map
59
+ // would likely be more expensive than this linear search.
60
+ for (const existing of lookups) {
61
+ if (parametersEqual(existing.partitionValues, entries)) {
62
+ return existing;
63
+ }
64
+ }
65
+ const created = { partitionValues: entries, bucketParameters: [] };
66
+ lookups.push(created);
67
+ return created;
68
+ }
45
69
  for (const outputRow of this.evaluator.evaluate(inputInstantiation)) {
46
70
  if (!isValidParameterValueRow(outputRow)) {
47
71
  continue;
@@ -52,8 +76,11 @@ export class PreparedParameterIndexLookupCreator {
52
76
  }
53
77
  // source is [...outputs, ...partitionValues]
54
78
  const partitionValues = outputRow.splice(this.numberOfOutputs, this.numberOfParameters);
55
- const lookup = UnscopedParameterLookup.normalized(partitionValues);
56
- results.push({ lookup, bucketParameters: [outputs] });
79
+ const pendingLookup = resolveLookup(partitionValues);
80
+ pendingLookup.bucketParameters.push(outputs);
81
+ }
82
+ for (const { partitionValues, bucketParameters } of lookups) {
83
+ results.push({ lookup: UnscopedParameterLookup.normalized(partitionValues), bucketParameters });
57
84
  }
58
85
  }
59
86
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"parameter_index_lookup_creator.js","sourceRoot":"","sources":["../../../src/sync_plan/evaluator/parameter_index_lookup_creator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parameter_index_lookup_creator.js","sourceRoot":"","sources":["../../../src/sync_plan/evaluator/parameter_index_lookup_creator.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { NodeLocations } from '../compiler/expression.js';
1
2
  import { BetweenExpression, BinaryExpression, CaseWhenExpression, CastExpression, ExternalData, LiteralExpression, ScalarFunctionCallExpression, ScalarInExpression, SqlExpression, UnaryExpression } from './expression.js';
2
3
  /**
3
4
  * Callbacks for each type of SQL expression we support.
@@ -43,8 +44,10 @@ export declare abstract class RecursiveExpressionVisitor<Data, R, Arg = undefine
43
44
  * A visitor applying a mapping function to external data references in expressions.
44
45
  */
45
46
  export declare class MapSourceVisitor<DataIn, DataOut> implements ExpressionVisitor<DataIn, SqlExpression<DataOut>> {
47
+ #private;
46
48
  private readonly map;
47
- constructor(map: (a: DataIn) => DataOut);
49
+ private readonly locations?;
50
+ constructor(map: (a: DataIn) => DataOut, locations?: NodeLocations | undefined);
48
51
  visitExternalData(expr: ExternalData<DataIn>): SqlExpression<DataOut>;
49
52
  visitUnaryExpression(expr: UnaryExpression<DataIn>, arg: undefined): SqlExpression<DataOut>;
50
53
  visitBinaryExpression(expr: BinaryExpression<DataIn>, arg: undefined): SqlExpression<DataOut>;
@@ -112,18 +112,27 @@ export class RecursiveExpressionVisitor {
112
112
  */
113
113
  export class MapSourceVisitor {
114
114
  map;
115
- constructor(map) {
115
+ locations;
116
+ constructor(map, locations) {
116
117
  this.map = map;
118
+ this.locations = locations;
119
+ }
120
+ #trackLocations(source, mapped) {
121
+ const location = this.locations?.sourceForNode?.get(source);
122
+ if (location) {
123
+ this.locations.sourceForNode.set(mapped, location);
124
+ }
125
+ return mapped;
117
126
  }
118
127
  visitExternalData(expr) {
119
- return { type: 'data', source: this.map(expr.source) };
128
+ return this.#trackLocations(expr, { type: 'data', source: this.map(expr.source) });
120
129
  }
121
130
  visitUnaryExpression(expr, arg) {
122
131
  const operand = visitExpr(this, expr.operand, arg);
123
132
  if (operand == expr.operand) {
124
133
  return expr; // unchanged subtree
125
134
  }
126
- return { type: 'unary', operator: expr.operator, operand };
135
+ return this.#trackLocations(expr, { type: 'unary', operator: expr.operator, operand });
127
136
  }
128
137
  visitBinaryExpression(expr, arg) {
129
138
  const left = visitExpr(this, expr.left, arg);
@@ -131,7 +140,7 @@ export class MapSourceVisitor {
131
140
  if (left == expr.left && right == expr.right) {
132
141
  return expr; // unchanged subtree
133
142
  }
134
- return { type: 'binary', operator: expr.operator, left, right };
143
+ return this.#trackLocations(expr, { type: 'binary', operator: expr.operator, left, right });
135
144
  }
136
145
  visitBetweenExpression(expr, arg) {
137
146
  const value = visitExpr(this, expr.value, arg);
@@ -140,17 +149,17 @@ export class MapSourceVisitor {
140
149
  if (value == expr.value && expr.low == low && expr.high == high) {
141
150
  return expr; // unchanged subtree
142
151
  }
143
- return { type: 'between', value, low, high };
152
+ return this.#trackLocations(expr, { type: 'between', value, low, high });
144
153
  }
145
154
  visitScalarInExpression(expr, arg) {
146
- return {
155
+ return this.#trackLocations(expr, {
147
156
  type: 'scalar_in',
148
157
  target: visitExpr(this, expr.target, arg),
149
158
  in: expr.in.map((e) => visitExpr(this, e, arg))
150
- };
159
+ });
151
160
  }
152
161
  visitCaseWhenExpression(expr, arg) {
153
- return {
162
+ return this.#trackLocations(expr, {
154
163
  type: 'case_when',
155
164
  operand: expr.operand && visitExpr(this, expr.operand, arg),
156
165
  whens: expr.whens.map(({ when, then }) => ({
@@ -158,21 +167,21 @@ export class MapSourceVisitor {
158
167
  then: visitExpr(this, then, arg)
159
168
  })),
160
169
  else: expr.else && visitExpr(this, expr.else, arg)
161
- };
170
+ });
162
171
  }
163
172
  visitCastExpression(expr, arg) {
164
173
  const operand = visitExpr(this, expr.operand, arg);
165
174
  if (operand == expr.operand) {
166
175
  return expr; // unchanged subtree
167
176
  }
168
- return { type: 'cast', operand, cast_as: expr.cast_as };
177
+ return this.#trackLocations(expr, { type: 'cast', operand, cast_as: expr.cast_as });
169
178
  }
170
179
  visitScalarFunctionCallExpression(expr, arg) {
171
- return {
180
+ return this.#trackLocations(expr, {
172
181
  type: 'function',
173
182
  function: expr.function,
174
183
  parameters: expr.parameters.map((p) => visitExpr(this, p, arg))
175
- };
184
+ });
176
185
  }
177
186
  visitLiteralExpression(expr, arg) {
178
187
  return expr;