@powersync/service-sync-rules 0.29.9 → 0.30.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 (170) hide show
  1. package/dist/BaseSqlDataQuery.d.ts +3 -9
  2. package/dist/BaseSqlDataQuery.js +11 -21
  3. package/dist/BaseSqlDataQuery.js.map +1 -1
  4. package/dist/BucketParameterQuerier.d.ts +42 -9
  5. package/dist/BucketParameterQuerier.js +30 -7
  6. package/dist/BucketParameterQuerier.js.map +1 -1
  7. package/dist/BucketSource.d.ts +94 -25
  8. package/dist/BucketSource.js +67 -0
  9. package/dist/BucketSource.js.map +1 -1
  10. package/dist/ExpressionType.d.ts +4 -2
  11. package/dist/ExpressionType.js.map +1 -1
  12. package/dist/HydratedSyncRules.d.ts +46 -0
  13. package/dist/HydratedSyncRules.js +88 -0
  14. package/dist/HydratedSyncRules.js.map +1 -0
  15. package/dist/HydrationState.d.ts +45 -0
  16. package/dist/HydrationState.js +41 -0
  17. package/dist/HydrationState.js.map +1 -0
  18. package/dist/SqlBucketDescriptor.d.ts +31 -28
  19. package/dist/SqlBucketDescriptor.js +89 -112
  20. package/dist/SqlBucketDescriptor.js.map +1 -1
  21. package/dist/SqlDataQuery.d.ts +4 -4
  22. package/dist/SqlDataQuery.js +5 -6
  23. package/dist/SqlDataQuery.js.map +1 -1
  24. package/dist/SqlParameterQuery.d.ts +17 -9
  25. package/dist/SqlParameterQuery.js +49 -23
  26. package/dist/SqlParameterQuery.js.map +1 -1
  27. package/dist/SqlSyncRules.d.ts +13 -29
  28. package/dist/SqlSyncRules.js +48 -77
  29. package/dist/SqlSyncRules.js.map +1 -1
  30. package/dist/StaticSqlParameterQuery.d.ts +13 -3
  31. package/dist/StaticSqlParameterQuery.js +38 -4
  32. package/dist/StaticSqlParameterQuery.js.map +1 -1
  33. package/dist/TablePattern.d.ts +4 -1
  34. package/dist/TablePattern.js +11 -0
  35. package/dist/TablePattern.js.map +1 -1
  36. package/dist/TableValuedFunctionSqlParameterQuery.d.ts +14 -4
  37. package/dist/TableValuedFunctionSqlParameterQuery.js +41 -7
  38. package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
  39. package/dist/compatibility.d.ts +23 -1
  40. package/dist/compatibility.js +32 -4
  41. package/dist/compatibility.js.map +1 -1
  42. package/dist/compiler/bucket_resolver.d.ts +70 -0
  43. package/dist/compiler/bucket_resolver.js +131 -0
  44. package/dist/compiler/bucket_resolver.js.map +1 -0
  45. package/dist/compiler/compatibility.d.ts +16 -0
  46. package/dist/compiler/compatibility.js +12 -0
  47. package/dist/compiler/compatibility.js.map +1 -0
  48. package/dist/compiler/compiler.d.ts +104 -0
  49. package/dist/compiler/compiler.js +113 -0
  50. package/dist/compiler/compiler.js.map +1 -0
  51. package/dist/compiler/equality.d.ts +99 -0
  52. package/dist/compiler/equality.js +284 -0
  53. package/dist/compiler/equality.js.map +1 -0
  54. package/dist/compiler/expression.d.ts +77 -0
  55. package/dist/compiler/expression.js +122 -0
  56. package/dist/compiler/expression.js.map +1 -0
  57. package/dist/compiler/filter.d.ts +71 -0
  58. package/dist/compiler/filter.js +110 -0
  59. package/dist/compiler/filter.js.map +1 -0
  60. package/dist/compiler/filter_simplifier.d.ts +26 -0
  61. package/dist/compiler/filter_simplifier.js +119 -0
  62. package/dist/compiler/filter_simplifier.js.map +1 -0
  63. package/dist/compiler/ir_to_sync_plan.d.ts +37 -0
  64. package/dist/compiler/ir_to_sync_plan.js +163 -0
  65. package/dist/compiler/ir_to_sync_plan.js.map +1 -0
  66. package/dist/compiler/parser.d.ts +99 -0
  67. package/dist/compiler/parser.js +556 -0
  68. package/dist/compiler/parser.js.map +1 -0
  69. package/dist/compiler/querier_graph.d.ts +42 -0
  70. package/dist/compiler/querier_graph.js +365 -0
  71. package/dist/compiler/querier_graph.js.map +1 -0
  72. package/dist/compiler/rows.d.ts +113 -0
  73. package/dist/compiler/rows.js +156 -0
  74. package/dist/compiler/rows.js.map +1 -0
  75. package/dist/compiler/scope.d.ts +22 -0
  76. package/dist/compiler/scope.js +47 -0
  77. package/dist/compiler/scope.js.map +1 -0
  78. package/dist/compiler/sqlite.d.ts +77 -0
  79. package/dist/compiler/sqlite.js +412 -0
  80. package/dist/compiler/sqlite.js.map +1 -0
  81. package/dist/compiler/table.d.ts +67 -0
  82. package/dist/compiler/table.js +67 -0
  83. package/dist/compiler/table.js.map +1 -0
  84. package/dist/errors.d.ts +4 -2
  85. package/dist/errors.js +16 -1
  86. package/dist/errors.js.map +1 -1
  87. package/dist/events/SqlEventDescriptor.js +1 -1
  88. package/dist/events/SqlEventDescriptor.js.map +1 -1
  89. package/dist/events/SqlEventSourceQuery.d.ts +1 -1
  90. package/dist/events/SqlEventSourceQuery.js +1 -2
  91. package/dist/events/SqlEventSourceQuery.js.map +1 -1
  92. package/dist/index.d.ts +8 -0
  93. package/dist/index.js +8 -0
  94. package/dist/index.js.map +1 -1
  95. package/dist/json_schema.js +5 -1
  96. package/dist/json_schema.js.map +1 -1
  97. package/dist/request_functions.js +1 -1
  98. package/dist/request_functions.js.map +1 -1
  99. package/dist/schema-generators/SchemaGenerator.d.ts +5 -0
  100. package/dist/schema-generators/SchemaGenerator.js +21 -14
  101. package/dist/schema-generators/SchemaGenerator.js.map +1 -1
  102. package/dist/sql_functions.d.ts +2 -1
  103. package/dist/sql_functions.js +1 -1
  104. package/dist/sql_functions.js.map +1 -1
  105. package/dist/streams/filter.d.ts +34 -4
  106. package/dist/streams/filter.js +93 -23
  107. package/dist/streams/filter.js.map +1 -1
  108. package/dist/streams/from_sql.js +2 -5
  109. package/dist/streams/from_sql.js.map +1 -1
  110. package/dist/streams/parameter.d.ts +7 -6
  111. package/dist/streams/stream.d.ts +25 -15
  112. package/dist/streams/stream.js +59 -87
  113. package/dist/streams/stream.js.map +1 -1
  114. package/dist/streams/variant.d.ts +14 -21
  115. package/dist/streams/variant.js +68 -46
  116. package/dist/streams/variant.js.map +1 -1
  117. package/dist/sync_plan/engine/javascript.d.ts +6 -0
  118. package/dist/sync_plan/engine/javascript.js +208 -0
  119. package/dist/sync_plan/engine/javascript.js.map +1 -0
  120. package/dist/sync_plan/engine/scalar_expression_engine.d.ts +48 -0
  121. package/dist/sync_plan/engine/scalar_expression_engine.js +99 -0
  122. package/dist/sync_plan/engine/scalar_expression_engine.js.map +1 -0
  123. package/dist/sync_plan/engine/sqlite.d.ts +12 -0
  124. package/dist/sync_plan/engine/sqlite.js +53 -0
  125. package/dist/sync_plan/engine/sqlite.js.map +1 -0
  126. package/dist/sync_plan/evaluator/bucket_data_source.d.ts +23 -0
  127. package/dist/sync_plan/evaluator/bucket_data_source.js +137 -0
  128. package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -0
  129. package/dist/sync_plan/evaluator/bucket_source.d.ts +19 -0
  130. package/dist/sync_plan/evaluator/bucket_source.js +145 -0
  131. package/dist/sync_plan/evaluator/bucket_source.js.map +1 -0
  132. package/dist/sync_plan/evaluator/index.d.ts +7 -0
  133. package/dist/sync_plan/evaluator/index.js +26 -0
  134. package/dist/sync_plan/evaluator/index.js.map +1 -0
  135. package/dist/sync_plan/evaluator/parameter_evaluator.d.ts +138 -0
  136. package/dist/sync_plan/evaluator/parameter_evaluator.js +359 -0
  137. package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -0
  138. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.d.ts +19 -0
  139. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js +62 -0
  140. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js.map +1 -0
  141. package/dist/sync_plan/expression.d.ts +109 -0
  142. package/dist/sync_plan/expression.js +85 -0
  143. package/dist/sync_plan/expression.js.map +1 -0
  144. package/dist/sync_plan/expression_to_sql.d.ts +43 -0
  145. package/dist/sync_plan/expression_to_sql.js +190 -0
  146. package/dist/sync_plan/expression_to_sql.js.map +1 -0
  147. package/dist/sync_plan/expression_visitor.d.ts +57 -0
  148. package/dist/sync_plan/expression_visitor.js +181 -0
  149. package/dist/sync_plan/expression_visitor.js.map +1 -0
  150. package/dist/sync_plan/plan.d.ts +196 -0
  151. package/dist/sync_plan/plan.js +2 -0
  152. package/dist/sync_plan/plan.js.map +1 -0
  153. package/dist/sync_plan/schema_inference.d.ts +15 -0
  154. package/dist/sync_plan/schema_inference.js +121 -0
  155. package/dist/sync_plan/schema_inference.js.map +1 -0
  156. package/dist/sync_plan/serialize.d.ts +82 -0
  157. package/dist/sync_plan/serialize.js +209 -0
  158. package/dist/sync_plan/serialize.js.map +1 -0
  159. package/dist/types/custom_sqlite_value.d.ts +1 -1
  160. package/dist/types/time.d.ts +24 -5
  161. package/dist/types/time.js +67 -12
  162. package/dist/types/time.js.map +1 -1
  163. package/dist/types.d.ts +52 -24
  164. package/dist/types.js +4 -1
  165. package/dist/types.js.map +1 -1
  166. package/dist/utils.d.ts +9 -2
  167. package/dist/utils.js +26 -3
  168. package/dist/utils.js.map +1 -1
  169. package/package.json +4 -3
  170. package/schema/sync_rules.json +9 -0
@@ -1,7 +1,9 @@
1
1
  import { BucketInclusionReason } from '../BucketDescription.js';
2
2
  import { BucketParameterQuerier } from '../BucketParameterQuerier.js';
3
- import { SourceTableInterface } from '../SourceTableInterface.js';
4
- import { BucketIdTransformer, EvaluatedParametersResult, RequestParameters, SqliteJsonValue, SqliteRow, TableRow } from '../types.js';
3
+ import { BucketDataSource, BucketParameterQuerierSource, ParameterIndexLookupCreator } from '../BucketSource.js';
4
+ import { BucketDataScope } from '../HydrationState.js';
5
+ import { CreateSourceParams, ScopedParameterLookup } from '../index.js';
6
+ import { RequestParameters, SqliteJsonValue, TableRow } from '../types.js';
5
7
  import { BucketParameter, SubqueryEvaluator } from './parameter.js';
6
8
  import { SyncStream } from './stream.js';
7
9
  /**
@@ -44,10 +46,12 @@ export declare class StreamVariant {
44
46
  */
45
47
  requestFilters: RequestFilter[];
46
48
  constructor(id: number);
49
+ defaultBucketPrefix(streamName: string): string;
50
+ indexLookupCreators(): ParameterIndexLookupCreator[];
47
51
  /**
48
52
  * Given a row in the table this stream selects from, returns all ids of buckets to which that row belongs to.
49
53
  */
50
- bucketIdsForRow(streamName: string, options: TableRow, transformer: BucketIdTransformer): string[];
54
+ bucketParametersForRow(options: TableRow): string[];
51
55
  /**
52
56
  * Given a row to evaluate, returns all instantiations of parameters that satisfy conditions.
53
57
  *
@@ -62,23 +66,8 @@ export declare class StreamVariant {
62
66
  * @returns Each instantiation, with each sub-array having a value for a parameter.
63
67
  */
64
68
  private cartesianProductOfParameterInstantiations;
65
- get hasDynamicBucketQueries(): boolean;
66
- querier(stream: SyncStream, reason: BucketInclusionReason, params: RequestParameters, bucketIdTransformer: BucketIdTransformer): BucketParameterQuerier | null;
69
+ querier(stream: SyncStream, reason: BucketInclusionReason, params: RequestParameters, bucketScope: BucketDataScope, hydratedSubqueries: HydratedSubqueries): BucketParameterQuerier | null;
67
70
  findStaticInstantiations(params: RequestParameters): SqliteJsonValue[][];
68
- /**
69
- * Creates lookup indices for dynamically-resolved parameters.
70
- *
71
- * Resolving dynamic parameters is a two-step process: First, for tables referenced in subqueries, we create an index
72
- * to resolve which request parameters would match rows in subqueries. Then, when resolving bucket ids for a request,
73
- * we compute subquery results by looking up results in that index.
74
- *
75
- * This implements the first step of that process.
76
- *
77
- * @param result The array into which evaluation results should be written to.
78
- * @param sourceTable A table we depend on in a subquery.
79
- * @param row Row data to index.
80
- */
81
- pushParameterRowEvaluation(result: EvaluatedParametersResult[], sourceTable: SourceTableInterface, row: SqliteRow): void;
82
71
  debugRepresentation(): any;
83
72
  /**
84
73
  * Replaces {@link StreamVariant.parameters} with static values looked up in request parameters.
@@ -90,13 +79,15 @@ export declare class StreamVariant {
90
79
  /**
91
80
  * Builds a bucket id for an instantiation, like `stream|0[1,2,"foo"]`.
92
81
  *
93
- * @param streamName The name of the stream, included in the bucket id
82
+ * @param bucketPrefix The name of the the bucket, excluding parameters
94
83
  * @param instantiation An instantiation for all parameters in this variant.
95
84
  * @param transformer A transformer adding version information to the inner id.
96
85
  * @returns The generated bucket id
97
86
  */
98
- private buildBucketId;
87
+ private serializeBucketParameters;
99
88
  private resolveBucket;
89
+ createParameterQuerierSource(params: CreateSourceParams, stream: SyncStream, querierDataSource: BucketDataSource): BucketParameterQuerierSource;
90
+ private queriersForSubscription;
100
91
  }
101
92
  /**
102
93
  * A stateless filter condition that only depends on the request itself, e.g. `WHERE token_parameters.is_admin`.
@@ -120,3 +111,5 @@ export interface SubqueryRequestFilter {
120
111
  matches(params: RequestParameters, results: SqliteJsonValue[]): boolean;
121
112
  }
122
113
  export type RequestFilter = StaticRequestFilter | SubqueryRequestFilter;
114
+ type HydratedSubqueries = Map<SubqueryEvaluator, (params: RequestParameters) => ScopedParameterLookup[]>;
115
+ export {};
@@ -1,4 +1,4 @@
1
- import { isJsonValue, JSONBucketNameSerialize } from '../utils.js';
1
+ import { buildBucketName, isJsonValue, JSONBucketNameSerialize } from '../utils.js';
2
2
  import { cartesianProduct } from './utils.js';
3
3
  /**
4
4
  * A variant of a stream.
@@ -46,11 +46,17 @@ export class StreamVariant {
46
46
  this.additionalRowFilters = [];
47
47
  this.requestFilters = [];
48
48
  }
49
+ defaultBucketPrefix(streamName) {
50
+ return `${streamName}|${this.id}`;
51
+ }
52
+ indexLookupCreators() {
53
+ return this.subqueries.flatMap((subquery) => subquery.indexLookupCreators());
54
+ }
49
55
  /**
50
56
  * Given a row in the table this stream selects from, returns all ids of buckets to which that row belongs to.
51
57
  */
52
- bucketIdsForRow(streamName, options, transformer) {
53
- return this.instantiationsForRow(options).map((values) => this.buildBucketId(streamName, values, transformer));
58
+ bucketParametersForRow(options) {
59
+ return this.instantiationsForRow(options).map((values) => this.serializeBucketParameters(values));
54
60
  }
55
61
  /**
56
62
  * Given a row to evaluate, returns all instantiations of parameters that satisfy conditions.
@@ -89,10 +95,7 @@ export class StreamVariant {
89
95
  cartesianProductOfParameterInstantiations(instantiations) {
90
96
  return [...cartesianProduct(...instantiations)];
91
97
  }
92
- get hasDynamicBucketQueries() {
93
- return this.requestFilters.some((f) => f.type == 'dynamic');
94
- }
95
- querier(stream, reason, params, bucketIdTransformer) {
98
+ querier(stream, reason, params, bucketScope, hydratedSubqueries) {
96
99
  const instantiation = this.partiallyEvaluateParameters(params);
97
100
  if (instantiation == null) {
98
101
  return null;
@@ -111,21 +114,24 @@ export class StreamVariant {
111
114
  }
112
115
  }
113
116
  for (const subquery of this.subqueries) {
114
- subqueryToLookups.set(subquery, subquery.lookupsForRequest(params));
117
+ const subqueryLookup = hydratedSubqueries.get(subquery);
118
+ if (subqueryLookup == null) {
119
+ throw new Error('Internal error, missing subquery lookup');
120
+ }
121
+ subqueryToLookups.set(subquery, subqueryLookup(params));
115
122
  }
116
123
  const staticBuckets = [];
117
124
  if (dynamicParameters.length == 0 && dynamicRequestFilters.length == 0) {
118
125
  // When we have no dynamic parameters, the partial evaluation is a full instantiation.
119
126
  const instantiations = this.cartesianProductOfParameterInstantiations(instantiation);
120
127
  for (const instantiation of instantiations) {
121
- staticBuckets.push(this.resolveBucket(stream, instantiation, reason, bucketIdTransformer));
128
+ staticBuckets.push(this.resolveBucket(stream, instantiation, reason, bucketScope));
122
129
  }
123
130
  }
124
131
  const variant = this;
125
132
  return {
126
133
  staticBuckets: staticBuckets,
127
134
  hasDynamicBuckets: this.subqueries.length != 0,
128
- parameterQueryLookups: [...subqueryToLookups.values()].flatMap((f) => f),
129
135
  async queryDynamicBucketDescriptions(source) {
130
136
  // Evaluate subqueries
131
137
  const subqueryResults = new Map();
@@ -156,7 +162,7 @@ export class StreamVariant {
156
162
  perParameterInstantiation[lookup.index] = subqueryResults.get(lookup.subquery);
157
163
  }
158
164
  const product = variant.cartesianProductOfParameterInstantiations(perParameterInstantiation);
159
- return Promise.resolve(product.map((e) => variant.resolveBucket(stream, e, reason, bucketIdTransformer)));
165
+ return Promise.resolve(product.map((e) => variant.resolveBucket(stream, e, reason, bucketScope)));
160
166
  }
161
167
  };
162
168
  }
@@ -168,36 +174,6 @@ export class StreamVariant {
168
174
  // This will be an array of values (i.e. a total evaluation) because there are no dynamic parameters.
169
175
  this.partiallyEvaluateParameters(params));
170
176
  }
171
- /**
172
- * Creates lookup indices for dynamically-resolved parameters.
173
- *
174
- * Resolving dynamic parameters is a two-step process: First, for tables referenced in subqueries, we create an index
175
- * to resolve which request parameters would match rows in subqueries. Then, when resolving bucket ids for a request,
176
- * we compute subquery results by looking up results in that index.
177
- *
178
- * This implements the first step of that process.
179
- *
180
- * @param result The array into which evaluation results should be written to.
181
- * @param sourceTable A table we depend on in a subquery.
182
- * @param row Row data to index.
183
- */
184
- pushParameterRowEvaluation(result, sourceTable, row) {
185
- for (const subquery of this.subqueries) {
186
- if (subquery.parameterTable.matches(sourceTable)) {
187
- const lookups = subquery.lookupsForParameterRow(sourceTable, row);
188
- if (lookups == null) {
189
- continue;
190
- }
191
- // The row of the subquery. Since we only support subqueries with a single column, we unconditionally name the
192
- // column `result` for simplicity.
193
- const resultRow = { result: lookups.value };
194
- result.push(...lookups.lookups.map((l) => ({
195
- lookup: l,
196
- bucketParameters: [resultRow]
197
- })));
198
- }
199
- }
200
- }
201
177
  debugRepresentation() {
202
178
  return {
203
179
  id: this.id,
@@ -244,24 +220,70 @@ export class StreamVariant {
244
220
  /**
245
221
  * Builds a bucket id for an instantiation, like `stream|0[1,2,"foo"]`.
246
222
  *
247
- * @param streamName The name of the stream, included in the bucket id
223
+ * @param bucketPrefix The name of the the bucket, excluding parameters
248
224
  * @param instantiation An instantiation for all parameters in this variant.
249
225
  * @param transformer A transformer adding version information to the inner id.
250
226
  * @returns The generated bucket id
251
227
  */
252
- buildBucketId(streamName, instantiation, transformer) {
228
+ serializeBucketParameters(instantiation) {
253
229
  if (instantiation.length != this.parameters.length) {
254
230
  throw Error('Internal error, instantiation length mismatch');
255
231
  }
256
- return transformer(`${streamName}|${this.id}${JSONBucketNameSerialize.stringify(instantiation)}`);
232
+ return JSONBucketNameSerialize.stringify(instantiation);
257
233
  }
258
- resolveBucket(stream, instantiation, reason, bucketIdTransformer) {
234
+ resolveBucket(stream, instantiation, reason, bucketScope) {
259
235
  return {
260
236
  definition: stream.name,
261
237
  inclusion_reasons: [reason],
262
- bucket: this.buildBucketId(stream.name, instantiation, bucketIdTransformer),
238
+ bucket: buildBucketName(bucketScope, this.serializeBucketParameters(instantiation)),
263
239
  priority: stream.priority
264
240
  };
265
241
  }
242
+ createParameterQuerierSource(params, stream, querierDataSource) {
243
+ const hydrationState = params.hydrationState;
244
+ const bucketScope = hydrationState.getBucketSourceScope(querierDataSource);
245
+ const hydratedSubqueries = new Map(this.subqueries.map((s) => [s, s.hydrateLookupsForRequest(hydrationState)]));
246
+ return {
247
+ pushBucketParameterQueriers: (result, options) => {
248
+ const subscriptions = options.streams[stream.name] ?? [];
249
+ if (!stream.subscribedToByDefault && !subscriptions.length) {
250
+ // The client is not subscribing to this stream, so don't query buckets related to it.
251
+ return;
252
+ }
253
+ let hasExplicitDefaultSubscription = false;
254
+ for (const subscription of subscriptions) {
255
+ let subscriptionParams = options.globalParameters;
256
+ if (subscription.parameters != null) {
257
+ subscriptionParams = subscriptionParams.withAddedStreamParameters(subscription.parameters);
258
+ }
259
+ else {
260
+ hasExplicitDefaultSubscription = true;
261
+ }
262
+ this.queriersForSubscription(stream, result, subscription, subscriptionParams, bucketScope, hydratedSubqueries);
263
+ }
264
+ // If the stream is subscribed to by default and there is no explicit subscription that would match the default
265
+ // subscription, also include the default querier.
266
+ if (stream.subscribedToByDefault && !hasExplicitDefaultSubscription) {
267
+ this.queriersForSubscription(stream, result, null, options.globalParameters, bucketScope, hydratedSubqueries);
268
+ }
269
+ }
270
+ };
271
+ }
272
+ queriersForSubscription(stream, result, subscription, params, bucketScope, hydratedSubqueries) {
273
+ const reason = subscription != null ? { subscription: subscription.opaque_id } : 'default';
274
+ try {
275
+ const querier = this.querier(stream, reason, params, bucketScope, hydratedSubqueries);
276
+ if (querier) {
277
+ result.queriers.push(querier);
278
+ }
279
+ }
280
+ catch (e) {
281
+ result.errors.push({
282
+ descriptor: stream.name,
283
+ message: `Error evaluating bucket ids: ${e.message}`,
284
+ subscription: subscription ?? undefined
285
+ });
286
+ }
287
+ }
266
288
  }
267
289
  //# sourceMappingURL=variant.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"variant.js","sourceRoot":"","sources":["../../src/streams/variant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"variant.js","sourceRoot":"","sources":["../../src/streams/variant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { CompatibilityContext } from '../../index.js';
2
+ import { ScalarExpressionEngine } from './scalar_expression_engine.js';
3
+ /**
4
+ * Creates a {@link ScalarExpressionEngine} implemented by evaluating scalar expressions in JavaScript.
5
+ */
6
+ export declare function javaScriptExpressionEngine(compatibility: CompatibilityContext): ScalarExpressionEngine;
@@ -0,0 +1,208 @@
1
+ import { compare, generateSqlFunctions, SQLITE_FALSE, SQLITE_TRUE, sqliteBool, sqliteNot } from '../../index.js';
2
+ import { cast, evaluateOperator } from '../../sql_functions.js';
3
+ import { cartesianProduct } from '../../streams/utils.js';
4
+ import { generateTableValuedFunctions } from '../../TableValuedFunctions.js';
5
+ import { visitExpr } from '../expression_visitor.js';
6
+ /**
7
+ * Creates a {@link ScalarExpressionEngine} implemented by evaluating scalar expressions in JavaScript.
8
+ */
9
+ export function javaScriptExpressionEngine(compatibility) {
10
+ const tableValued = generateTableValuedFunctions(compatibility);
11
+ const regularFunctions = generateSqlFunctions(compatibility);
12
+ const compiler = new ExpressionToJavaScriptFunction({
13
+ named: regularFunctions.named,
14
+ jsonExtractJson: regularFunctions.operatorJsonExtractJson,
15
+ jsonExtractSql: regularFunctions.operatorJsonExtractSql
16
+ });
17
+ return {
18
+ close() { },
19
+ prepareEvaluator({ outputs = [], filters = [], tableValuedFunctions = [] }) {
20
+ function compileScalar(expr) {
21
+ return compiler.compile(expr);
22
+ }
23
+ const resolvedTableValuedFunctions = tableValuedFunctions.map((fn) => {
24
+ const found = tableValued[fn.name];
25
+ if (found == null) {
26
+ throw new Error(`Unknown table-valued function: ${fn.name}`);
27
+ }
28
+ const inputs = fn.inputs.map(compileScalar);
29
+ return {
30
+ original: fn,
31
+ evaluate: (input) => {
32
+ return found.call(inputs.map((f) => f(input)));
33
+ }
34
+ };
35
+ });
36
+ const columns = outputs.map(compileScalar);
37
+ const compiledFilters = filters.map(compileScalar);
38
+ return {
39
+ evaluate(inputs) {
40
+ // First, evaluate table-valued functions (if any).
41
+ const perFunctionResults = [];
42
+ for (const { original, evaluate } of resolvedTableValuedFunctions) {
43
+ perFunctionResults.push(evaluate({ inputs }).map((row) => [original, row]));
44
+ }
45
+ const rows = [];
46
+ // We're doing an inner join on all table-valued functions, which we implement as a cross join on which each
47
+ // filter is evaluated. Having more than one table-valued function per statement would be very rare in
48
+ // practice.
49
+ row: for (const sourceRow of cartesianProduct(...perFunctionResults)) {
50
+ const byFunction = new Map();
51
+ for (const [fn, output] of sourceRow) {
52
+ byFunction.set(fn, output);
53
+ }
54
+ const input = { inputs, row: byFunction };
55
+ for (const filter of compiledFilters) {
56
+ if (!sqliteBool(filter(input))) {
57
+ continue row;
58
+ }
59
+ }
60
+ rows.push(columns.map((c) => c(input)));
61
+ }
62
+ return rows;
63
+ }
64
+ };
65
+ }
66
+ };
67
+ }
68
+ class ExpressionToJavaScriptFunction {
69
+ functions;
70
+ constructor(functions) {
71
+ this.functions = functions;
72
+ }
73
+ compile(expr) {
74
+ return visitExpr(this, expr, null);
75
+ }
76
+ visitExternalData(expr, arg) {
77
+ if (typeof expr.source === 'number') {
78
+ const index = expr.source;
79
+ // -1 because variables in SQLite are 1-indexed.
80
+ return ({ inputs }) => inputs[index - 1];
81
+ }
82
+ else {
83
+ const { column, function: fn } = expr.source;
84
+ return ({ row }) => {
85
+ const result = row.get(fn);
86
+ return result[column];
87
+ };
88
+ }
89
+ }
90
+ visitUnaryExpression(expr) {
91
+ const operand = this.compile(expr.operand);
92
+ switch (expr.operator) {
93
+ case '+':
94
+ return operand;
95
+ case 'not':
96
+ return (input) => sqliteNot(operand(input));
97
+ // case '~':
98
+ // case '-':
99
+ // throw new Error(`unary operator not supported: ${expr.operator}`);
100
+ }
101
+ }
102
+ visitBinaryExpression(expr) {
103
+ const left = this.compile(expr.left);
104
+ const right = this.compile(expr.right);
105
+ const operator = expr.operator.toUpperCase();
106
+ return (input) => evaluateOperator(operator, left(input), right(input));
107
+ }
108
+ visitBetweenExpression(expr) {
109
+ const low = this.compile(expr.low);
110
+ const high = this.compile(expr.high);
111
+ const value = this.compile(expr.value);
112
+ return (input) => {
113
+ const evaluatedValue = value(input);
114
+ const geqLow = evaluateOperator('>=', evaluatedValue, low(input));
115
+ const leqHigh = evaluateOperator('<=', evaluatedValue, high(input));
116
+ if (geqLow == null || leqHigh == null) {
117
+ return null;
118
+ }
119
+ return sqliteBool(geqLow) && sqliteBool(leqHigh);
120
+ };
121
+ }
122
+ visitScalarInExpression(expr) {
123
+ const target = this.compile(expr.target);
124
+ const inQuery = expr.in.map((q) => this.compile(q));
125
+ return (input) => {
126
+ const evaluatedTarget = target(input);
127
+ if (evaluatedTarget == null) {
128
+ return null;
129
+ }
130
+ let hasNullQuery = false;
131
+ for (const q of inQuery) {
132
+ const evaluated = q(input);
133
+ if (evaluated == null) {
134
+ hasNullQuery = true;
135
+ continue;
136
+ }
137
+ if (compare(evaluatedTarget, evaluated) == 0) {
138
+ return SQLITE_TRUE;
139
+ }
140
+ }
141
+ return hasNullQuery ? null : SQLITE_FALSE;
142
+ };
143
+ }
144
+ visitCaseWhenExpression(expr) {
145
+ const compiledWhens = expr.whens.map((w) => ({ when: this.compile(w.when), then: this.compile(w.then) }));
146
+ const compiledElse = expr.else && this.compile(expr.else);
147
+ if (expr.operand) {
148
+ const operand = this.compile(expr.operand);
149
+ return (input) => {
150
+ const evaluatedOperand = operand(input);
151
+ for (const { when, then } of compiledWhens) {
152
+ if (evaluateOperator('=', evaluatedOperand, when(input))) {
153
+ return then(input);
154
+ }
155
+ }
156
+ return compiledElse ? compiledElse(input) : null;
157
+ };
158
+ }
159
+ else {
160
+ return (input) => {
161
+ for (const { when, then } of compiledWhens) {
162
+ if (sqliteBool(when(input))) {
163
+ return then(input);
164
+ }
165
+ }
166
+ return compiledElse ? compiledElse(input) : null;
167
+ };
168
+ }
169
+ }
170
+ visitCastExpression(expr) {
171
+ const operand = this.compile(expr.operand);
172
+ return (input) => {
173
+ return cast(operand(input), expr.cast_as);
174
+ };
175
+ }
176
+ visitScalarFunctionCallExpression(expr) {
177
+ let fnImpl;
178
+ if (expr.function === '->') {
179
+ fnImpl = this.functions.jsonExtractJson;
180
+ }
181
+ else if (expr.function === '->>') {
182
+ fnImpl = this.functions.jsonExtractSql;
183
+ }
184
+ else {
185
+ fnImpl = this.functions.named[expr.function];
186
+ if (!fnImpl) {
187
+ throw new Error(`Function not implemented: ${expr.function}`);
188
+ }
189
+ }
190
+ const args = expr.parameters.map((p) => this.compile(p));
191
+ return (input) => {
192
+ return fnImpl.call(...args.map((f) => f(input)));
193
+ };
194
+ }
195
+ visitLiteralExpression(expr) {
196
+ switch (expr.type) {
197
+ case 'lit_null':
198
+ return () => null;
199
+ case 'lit_double':
200
+ return () => expr.value;
201
+ case 'lit_int':
202
+ return () => BigInt(expr.base10);
203
+ case 'lit_string':
204
+ return () => expr.value;
205
+ }
206
+ }
207
+ }
208
+ //# sourceMappingURL=javascript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/sync_plan/engine/javascript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { SqliteValue } from '../../types.js';
2
+ import { SqlExpression } from '../expression.js';
3
+ import { SqlParameterValue } from '../plan.js';
4
+ /**
5
+ * Description of a scalar SQL statement (without external dependencies on tables).
6
+ *
7
+ * This corresponds to the SQL statement `SELECT $outputs FROM $tableValuedFunctions WHERE $filters`.
8
+ *
9
+ * Each output and filter expression can reference:
10
+ *
11
+ * 1. An external parameter, passed in {@link ScalarExpressionEvaluator.evaluate}. The number corresponds to the index
12
+ * of the parameter to use.
13
+ * 2. An output column of a table-valued function added to the statement.
14
+ */
15
+ export interface ScalarStatement {
16
+ outputs?: SqlExpression<number | TableValuedFunctionOutput>[];
17
+ filters?: SqlExpression<number | TableValuedFunctionOutput>[];
18
+ tableValuedFunctions?: TableValuedFunction[];
19
+ }
20
+ export interface TableValuedFunction {
21
+ name: string;
22
+ inputs: SqlExpression<number>[];
23
+ }
24
+ export interface TableValuedFunctionOutput {
25
+ function: TableValuedFunction;
26
+ column: string;
27
+ }
28
+ export interface ScalarExpressionEngine {
29
+ prepareEvaluator(statement: ScalarStatement): ScalarExpressionEvaluator;
30
+ /**
31
+ * Disposes all evaluators and closes this engine.
32
+ */
33
+ close(): void;
34
+ }
35
+ export interface ScalarExpressionEvaluator {
36
+ evaluate(inputs: SqliteValue[]): SqliteValue[][];
37
+ }
38
+ export declare function scalarStatementToSql({ filters, outputs, tableValuedFunctions }: ScalarStatement): string;
39
+ /**
40
+ * Utility to transform multiple expressions embedding parameter values into expressions that reference a parameter
41
+ * index representing that value.
42
+ *
43
+ * Parameter values used multiple times are de-duplicated into the same SQL parameter.
44
+ */
45
+ export declare function mapExternalDataToInstantiation<T extends SqlParameterValue>(): {
46
+ instantiation: T[];
47
+ transform(expr: SqlExpression<SqlParameterValue>): SqlExpression<number>;
48
+ };