@powersync/service-sync-rules 0.31.0 → 0.32.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.
- package/dist/SqlSyncRules.d.ts +0 -7
- package/dist/SqlSyncRules.js +0 -1
- package/dist/SqlSyncRules.js.map +1 -1
- package/dist/SyncConfig.d.ts +5 -2
- package/dist/SyncConfig.js +6 -9
- package/dist/SyncConfig.js.map +1 -1
- package/dist/compatibility.d.ts +2 -1
- package/dist/compatibility.js +1 -0
- package/dist/compatibility.js.map +1 -1
- package/dist/compiler/bucket_resolver.d.ts +3 -3
- package/dist/compiler/bucket_resolver.js.map +1 -1
- package/dist/compiler/compiler.d.ts +4 -1
- package/dist/compiler/compiler.js +15 -2
- package/dist/compiler/compiler.js.map +1 -1
- package/dist/compiler/detect_dangerous_parameters.d.ts +10 -0
- package/dist/compiler/detect_dangerous_parameters.js +84 -0
- package/dist/compiler/detect_dangerous_parameters.js.map +1 -0
- package/dist/compiler/expression.d.ts +15 -3
- package/dist/compiler/expression.js +3 -2
- package/dist/compiler/expression.js.map +1 -1
- package/dist/compiler/filter.js +4 -2
- package/dist/compiler/filter.js.map +1 -1
- package/dist/compiler/filter_simplifier.js +5 -2
- package/dist/compiler/filter_simplifier.js.map +1 -1
- package/dist/compiler/ir_to_sync_plan.d.ts +8 -0
- package/dist/compiler/ir_to_sync_plan.js +64 -12
- package/dist/compiler/ir_to_sync_plan.js.map +1 -1
- package/dist/compiler/parser.js +44 -12
- package/dist/compiler/parser.js.map +1 -1
- package/dist/compiler/querier_graph.d.ts +2 -1
- package/dist/compiler/querier_graph.js +88 -26
- package/dist/compiler/querier_graph.js.map +1 -1
- package/dist/compiler/rows.d.ts +32 -3
- package/dist/compiler/rows.js +59 -2
- package/dist/compiler/rows.js.map +1 -1
- package/dist/compiler/scope.d.ts +4 -1
- package/dist/compiler/scope.js +13 -2
- package/dist/compiler/scope.js.map +1 -1
- package/dist/compiler/sqlite.d.ts +3 -11
- package/dist/compiler/sqlite.js +115 -79
- package/dist/compiler/sqlite.js.map +1 -1
- package/dist/compiler/table.d.ts +24 -7
- package/dist/compiler/table.js +58 -2
- package/dist/compiler/table.js.map +1 -1
- package/dist/from_yaml.d.ts +0 -4
- package/dist/from_yaml.js +18 -10
- package/dist/from_yaml.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/json_schema.js +1 -4
- package/dist/json_schema.js.map +1 -1
- package/dist/schema-generators/DartSchemaGenerator.d.ts +0 -9
- package/dist/schema-generators/DartSchemaGenerator.js +0 -55
- package/dist/schema-generators/DartSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/DotNetSchemaGenerator.js +21 -28
- package/dist/schema-generators/DotNetSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/generators.d.ts +1 -2
- package/dist/schema-generators/generators.js +1 -2
- package/dist/schema-generators/generators.js.map +1 -1
- package/dist/sync_plan/engine/javascript.js +13 -2
- package/dist/sync_plan/engine/javascript.js.map +1 -1
- package/dist/sync_plan/engine/scalar_expression_engine.d.ts +4 -2
- package/dist/sync_plan/engine/scalar_expression_engine.js +18 -0
- package/dist/sync_plan/engine/scalar_expression_engine.js.map +1 -1
- package/dist/sync_plan/engine/sqlite.js +2 -1
- package/dist/sync_plan/engine/sqlite.js.map +1 -1
- package/dist/sync_plan/evaluator/bucket_data_source.js +8 -6
- package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -1
- package/dist/sync_plan/evaluator/bucket_source.js +1 -1
- package/dist/sync_plan/evaluator/bucket_source.js.map +1 -1
- package/dist/sync_plan/evaluator/index.d.ts +3 -1
- package/dist/sync_plan/evaluator/index.js +3 -1
- package/dist/sync_plan/evaluator/index.js.map +1 -1
- package/dist/sync_plan/evaluator/parameter_evaluator.js +22 -2
- package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -1
- package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js +7 -6
- package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js.map +1 -1
- package/dist/sync_plan/evaluator/table_processor_to_sql.d.ts +20 -0
- package/dist/sync_plan/evaluator/table_processor_to_sql.js +28 -0
- package/dist/sync_plan/evaluator/table_processor_to_sql.js.map +1 -0
- package/dist/sync_plan/plan.d.ts +51 -9
- package/dist/sync_plan/serialize.d.ts +24 -10
- package/dist/sync_plan/serialize.js +75 -15
- package/dist/sync_plan/serialize.js.map +1 -1
- package/package.json +2 -1
- package/schema/sync_rules.json +1 -4
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TableValuedFunction, TableValuedFunctionOutput } from '../engine/scalar_expression_engine.js';
|
|
2
|
+
import { SqlExpression } from '../expression.js';
|
|
3
|
+
import * as plan from '../plan.js';
|
|
4
|
+
/**
|
|
5
|
+
* Utility to translate a {@link plan.TableProcessor} to a scalar SQL statement.
|
|
6
|
+
*
|
|
7
|
+
* This translates table-valued functions and filters. Output columns and partition keys have to be translated
|
|
8
|
+
* separately, because their order depends on the type of table processor (data source vs. parameter lookup creator).
|
|
9
|
+
*/
|
|
10
|
+
export declare class TableProcessorToSqlHelper {
|
|
11
|
+
mapper: {
|
|
12
|
+
instantiation: plan.ColumnSqlParameterValue[];
|
|
13
|
+
tableValuedFunctions: Map<plan.TableProcessorTableValuedFunction, TableValuedFunction>;
|
|
14
|
+
transform(expr: SqlExpression<plan.SqlParameterValue>): SqlExpression<number | TableValuedFunctionOutput>;
|
|
15
|
+
transformWithoutTableValued(expr: SqlExpression<plan.ColumnSqlParameterValue>): SqlExpression<number>;
|
|
16
|
+
};
|
|
17
|
+
readonly filterExpressions: SqlExpression<number | TableValuedFunctionOutput>[];
|
|
18
|
+
get tableValuedFunctions(): TableValuedFunction[];
|
|
19
|
+
constructor(source: plan.TableProcessor);
|
|
20
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { mapExternalDataToInstantiation } from '../engine/scalar_expression_engine.js';
|
|
2
|
+
/**
|
|
3
|
+
* Utility to translate a {@link plan.TableProcessor} to a scalar SQL statement.
|
|
4
|
+
*
|
|
5
|
+
* This translates table-valued functions and filters. Output columns and partition keys have to be translated
|
|
6
|
+
* separately, because their order depends on the type of table processor (data source vs. parameter lookup creator).
|
|
7
|
+
*/
|
|
8
|
+
export class TableProcessorToSqlHelper {
|
|
9
|
+
mapper = mapExternalDataToInstantiation();
|
|
10
|
+
filterExpressions = [];
|
|
11
|
+
get tableValuedFunctions() {
|
|
12
|
+
return [...this.mapper.tableValuedFunctions.values()];
|
|
13
|
+
}
|
|
14
|
+
constructor(source) {
|
|
15
|
+
// Add table-valued functions and filters
|
|
16
|
+
for (const fn of source.tableValuedFunctions) {
|
|
17
|
+
const mapped = {
|
|
18
|
+
name: fn.functionName,
|
|
19
|
+
inputs: fn.functionInputs.map((i) => this.mapper.transformWithoutTableValued(i))
|
|
20
|
+
};
|
|
21
|
+
this.mapper.tableValuedFunctions.set(fn, mapped);
|
|
22
|
+
}
|
|
23
|
+
for (const filter of source.filters) {
|
|
24
|
+
this.filterExpressions.push(this.mapper.transform(filter));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=table_processor_to_sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table_processor_to_sql.js","sourceRoot":"","sources":["../../../src/sync_plan/evaluator/table_processor_to_sql.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAG/B,MAAM,uCAAuC,CAAC;AAK/C;;;;;GAKG;AACH,MAAM,OAAO,yBAAyB;IACpC,MAAM,GAAG,8BAA8B,EAAgC,CAAC;IAC/D,iBAAiB,GAAwD,EAAE,CAAC;IAErF,IAAI,oBAAoB;QACtB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,YAAY,MAA2B;QACrC,yCAAyC;QACzC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAwB;gBAClC,IAAI,EAAE,EAAE,CAAC,YAAY;gBACrB,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;aACjF,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF"}
|
package/dist/sync_plan/plan.d.ts
CHANGED
|
@@ -44,9 +44,9 @@ export interface TableProcessor {
|
|
|
44
44
|
/**
|
|
45
45
|
* All of these expressions exclusively depend on the {@link sourceTable}.
|
|
46
46
|
*
|
|
47
|
-
* All of the filters must evaluate to a
|
|
47
|
+
* All of the filters must evaluate to a truthy (according to SQL definitions) value for the row to be processed.
|
|
48
48
|
*/
|
|
49
|
-
filters: SqlExpression<
|
|
49
|
+
filters: SqlExpression<TableProcessorData>[];
|
|
50
50
|
/**
|
|
51
51
|
* How to partition rows.
|
|
52
52
|
*
|
|
@@ -54,9 +54,51 @@ export interface TableProcessor {
|
|
|
54
54
|
* input values for the lookup.
|
|
55
55
|
*/
|
|
56
56
|
parameters: PartitionKey[];
|
|
57
|
+
tableValuedFunctions: TableProcessorTableValuedFunction[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A table-valued partition key evaluates a table-valued function on the source or parameter row to potentially generate
|
|
61
|
+
* multiple buckets for one input row.
|
|
62
|
+
*
|
|
63
|
+
* For instance, `SELECT p.* FROM posts p WHERE subscription.parameter('tag') IN (SELECT value FROM json_each(p.tags))`
|
|
64
|
+
* would put a row with `tags == '["foo", "bar"]'` into two buckets representing the expanded parameters.
|
|
65
|
+
*
|
|
66
|
+
* Note that the buckets a row is put into are derived from the cartesian product of all partition keys. In particular,
|
|
67
|
+
* this means that:
|
|
68
|
+
*
|
|
69
|
+
* - If a table-valued key evaluates to zero rows, the source row is not put into any buckets regardless of what other
|
|
70
|
+
* partition keys might exist.
|
|
71
|
+
* - Two table-valued partition keys evaluating two multiple rows leads to a quadratic amount of buckets being
|
|
72
|
+
* generated.
|
|
73
|
+
*/
|
|
74
|
+
export interface TableProcessorTableValuedFunction {
|
|
75
|
+
functionName: string;
|
|
76
|
+
functionInputs: SqlExpression<ColumnSqlParameterValue>[];
|
|
57
77
|
}
|
|
78
|
+
export interface TableProcessorTableValuedFunctionOutput {
|
|
79
|
+
/**
|
|
80
|
+
* A reference to the added table-valued function.
|
|
81
|
+
*/
|
|
82
|
+
function: TableProcessorTableValuedFunction;
|
|
83
|
+
/**
|
|
84
|
+
* The column of the table-valued function being referenced.
|
|
85
|
+
*/
|
|
86
|
+
outputName: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* External data that can be used in expressions for {@link TableProcessor}s.
|
|
90
|
+
*
|
|
91
|
+
* This allows references to the row in the table being processed, and references to outputs of joined
|
|
92
|
+
* {@link TableProcessor#tableValuedFunctions}.
|
|
93
|
+
*/
|
|
94
|
+
export type TableProcessorData = ColumnSqlParameterValue | TableProcessorTableValuedFunctionOutput;
|
|
95
|
+
/**
|
|
96
|
+
* A scalar partition key evaluates to a single value in the source or parameter row. For instance, a stream definition
|
|
97
|
+
* like `SELECT * FROM users WHERE id = auth.user_id()` would generate a scalar key to partition users by the `id`
|
|
98
|
+
* column.
|
|
99
|
+
*/
|
|
58
100
|
export interface PartitionKey {
|
|
59
|
-
expr: SqlExpression<
|
|
101
|
+
expr: SqlExpression<TableProcessorData>;
|
|
60
102
|
}
|
|
61
103
|
/**
|
|
62
104
|
* A description for a data source processing rows to replicate.
|
|
@@ -78,7 +120,7 @@ export interface StreamDataSource extends TableProcessor {
|
|
|
78
120
|
columns: ColumnSource[];
|
|
79
121
|
}
|
|
80
122
|
export type ColumnSource = 'star' | {
|
|
81
|
-
expr: SqlExpression<
|
|
123
|
+
expr: SqlExpression<TableProcessorData>;
|
|
82
124
|
alias: string;
|
|
83
125
|
};
|
|
84
126
|
/**
|
|
@@ -116,7 +158,7 @@ export interface StreamParameterIndexLookupCreator extends TableProcessor {
|
|
|
116
158
|
* streams because the output of parameters might be passed through additional stages or transformed by the querier
|
|
117
159
|
* before becoming a parameter value.
|
|
118
160
|
*/
|
|
119
|
-
outputs: SqlExpression<
|
|
161
|
+
outputs: SqlExpression<TableProcessorData>[];
|
|
120
162
|
}
|
|
121
163
|
export interface StreamOptions {
|
|
122
164
|
name: string;
|
|
@@ -149,7 +191,6 @@ export interface StreamQuerier {
|
|
|
149
191
|
bucket: StreamBucketDataSource;
|
|
150
192
|
sourceInstantiation: ParameterValue[];
|
|
151
193
|
}
|
|
152
|
-
export type SqlParameterValue = ColumnSqlParameterValue | RequestSqlParameterValue;
|
|
153
194
|
/**
|
|
154
195
|
* A value that resolves to a given column in a row being processed.
|
|
155
196
|
*/
|
|
@@ -164,10 +205,11 @@ export type ConnectionParameterSource = 'auth' | 'subscription' | 'connection';
|
|
|
164
205
|
export interface RequestSqlParameterValue {
|
|
165
206
|
request: ConnectionParameterSource;
|
|
166
207
|
}
|
|
208
|
+
export type SqlParameterValue = ColumnSqlParameterValue | RequestSqlParameterValue | TableProcessorTableValuedFunctionOutput;
|
|
167
209
|
/**
|
|
168
210
|
* A lookup returning multiple rows when instantiated.
|
|
169
211
|
*/
|
|
170
|
-
export type ExpandingLookup = ParameterLookup | EvaluateTableValuedFunction
|
|
212
|
+
export type ExpandingLookup = ParameterLookup | EvaluateTableValuedFunction<RequestSqlParameterValue>;
|
|
171
213
|
export interface ParameterLookup {
|
|
172
214
|
type: 'parameter';
|
|
173
215
|
lookup: StreamParameterIndexLookupCreator;
|
|
@@ -176,10 +218,10 @@ export interface ParameterLookup {
|
|
|
176
218
|
*/
|
|
177
219
|
instantiation: ParameterValue[];
|
|
178
220
|
}
|
|
179
|
-
export interface EvaluateTableValuedFunction {
|
|
221
|
+
export interface EvaluateTableValuedFunction<Input> {
|
|
180
222
|
type: 'table_valued';
|
|
181
223
|
functionName: string;
|
|
182
|
-
functionInputs: SqlExpression<
|
|
224
|
+
functionInputs: SqlExpression<Input>[];
|
|
183
225
|
outputs: SqlExpression<ColumnSqlParameterValue>[];
|
|
184
226
|
filters: SqlExpression<ColumnSqlParameterValue>[];
|
|
185
227
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ParameterLookupScope } from '../HydrationState.js';
|
|
2
2
|
import { SqlExpression } from './expression.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ColumnSqlParameterValue, RequestSqlParameterValue, StreamOptions, SyncPlan, TableProcessorTableValuedFunction } from './plan.js';
|
|
4
4
|
/**
|
|
5
5
|
* Serializes a sync plan into a simple JSON object.
|
|
6
6
|
*
|
|
@@ -8,10 +8,10 @@ import { ColumnSource, ColumnSqlParameterValue, PartitionKey, RequestSqlParamete
|
|
|
8
8
|
* queriers to bucket creators. To represent this efficiently, we assign numbers to referenced elements while
|
|
9
9
|
* serializing instead of duplicating definitions.
|
|
10
10
|
*/
|
|
11
|
-
export declare function serializeSyncPlan(plan: SyncPlan):
|
|
11
|
+
export declare function serializeSyncPlan(plan: SyncPlan): SerializedSyncPlanV1;
|
|
12
12
|
export declare function deserializeSyncPlan(serialized: unknown): SyncPlan;
|
|
13
|
-
interface
|
|
14
|
-
version:
|
|
13
|
+
interface SerializedSyncPlanV1 {
|
|
14
|
+
version: number;
|
|
15
15
|
dataSources: SerializedDataSource[];
|
|
16
16
|
buckets: SerializedBucketDataSource[];
|
|
17
17
|
parameterIndexes: SerializedParameterIndexLookupCreator[];
|
|
@@ -27,21 +27,35 @@ interface SerializedTablePattern {
|
|
|
27
27
|
schema: string | null;
|
|
28
28
|
table: string;
|
|
29
29
|
}
|
|
30
|
+
interface SerializedTableProcessorTableValuedFunctionOutput {
|
|
31
|
+
function: number;
|
|
32
|
+
outputName: string;
|
|
33
|
+
}
|
|
34
|
+
type SerializedTableProcessorData = ColumnSqlParameterValue | SerializedTableProcessorTableValuedFunctionOutput;
|
|
35
|
+
interface SerializedPartitionKey {
|
|
36
|
+
expr: SqlExpression<SerializedTableProcessorData>;
|
|
37
|
+
}
|
|
38
|
+
type SerializedColumnSource = 'star' | {
|
|
39
|
+
expr: SqlExpression<SerializedTableProcessorData>;
|
|
40
|
+
alias: string;
|
|
41
|
+
};
|
|
30
42
|
interface SerializedDataSource {
|
|
31
43
|
table: SerializedTablePattern;
|
|
32
44
|
outputTableName?: string;
|
|
33
45
|
hash: number;
|
|
34
|
-
columns:
|
|
35
|
-
filters: SqlExpression<
|
|
36
|
-
|
|
46
|
+
columns: SerializedColumnSource[];
|
|
47
|
+
filters: SqlExpression<SerializedTableProcessorData>[];
|
|
48
|
+
tableValuedFunctions: TableProcessorTableValuedFunction[];
|
|
49
|
+
partitionBy: SerializedPartitionKey[];
|
|
37
50
|
}
|
|
38
51
|
interface SerializedParameterIndexLookupCreator {
|
|
39
52
|
table: SerializedTablePattern;
|
|
40
53
|
hash: number;
|
|
41
54
|
lookupScope: ParameterLookupScope;
|
|
42
|
-
output: SqlExpression<
|
|
43
|
-
filters: SqlExpression<
|
|
44
|
-
|
|
55
|
+
output: SqlExpression<SerializedTableProcessorData>[];
|
|
56
|
+
filters: SqlExpression<SerializedTableProcessorData>[];
|
|
57
|
+
tableValuedFunctions: TableProcessorTableValuedFunction[];
|
|
58
|
+
partitionBy: SerializedPartitionKey[];
|
|
45
59
|
}
|
|
46
60
|
interface SerializedStream {
|
|
47
61
|
stream: StreamOptions;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ImplicitSchemaTablePattern, TablePattern } from '../TablePattern.js';
|
|
2
|
+
import { MapSourceVisitor, visitExpr } from './expression_visitor.js';
|
|
2
3
|
/**
|
|
3
4
|
* Serializes a sync plan into a simple JSON object.
|
|
4
5
|
*
|
|
@@ -11,6 +12,18 @@ export function serializeSyncPlan(plan) {
|
|
|
11
12
|
const bucketIndex = new Map();
|
|
12
13
|
const parameterIndex = new Map();
|
|
13
14
|
const expandingLookups = new Map();
|
|
15
|
+
const addedTableValuedFunctions = new Map();
|
|
16
|
+
const replaceFunctionReferenceWithIndex = new MapSourceVisitor((value) => {
|
|
17
|
+
if ('function' in value) {
|
|
18
|
+
return { function: addedTableValuedFunctions.get(value.function), outputName: value.outputName };
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
function serializeTableProcessorDataExpr(expr) {
|
|
25
|
+
return visitExpr(replaceFunctionReferenceWithIndex, expr, null);
|
|
26
|
+
}
|
|
14
27
|
function serializeTablePattern(pattern) {
|
|
15
28
|
return {
|
|
16
29
|
connection: pattern.connectionTag,
|
|
@@ -18,6 +31,17 @@ export function serializeSyncPlan(plan) {
|
|
|
18
31
|
table: pattern.tablePattern
|
|
19
32
|
};
|
|
20
33
|
}
|
|
34
|
+
function serializeTableValued(source) {
|
|
35
|
+
return source.tableValuedFunctions.map((fn, i) => {
|
|
36
|
+
addedTableValuedFunctions.set(fn, i);
|
|
37
|
+
return fn;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function translateParameters(source) {
|
|
41
|
+
return source.parameters.map((key) => {
|
|
42
|
+
return { expr: serializeTableProcessorDataExpr(key.expr) };
|
|
43
|
+
});
|
|
44
|
+
}
|
|
21
45
|
function serializeDataSources() {
|
|
22
46
|
return plan.dataSources.map((source, i) => {
|
|
23
47
|
dataSourceIndex.set(source, i);
|
|
@@ -25,9 +49,17 @@ export function serializeSyncPlan(plan) {
|
|
|
25
49
|
hash: source.hashCode,
|
|
26
50
|
table: serializeTablePattern(source.sourceTable),
|
|
27
51
|
outputTableName: source.outputTableName,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
52
|
+
tableValuedFunctions: serializeTableValued(source),
|
|
53
|
+
filters: source.filters.map(serializeTableProcessorDataExpr),
|
|
54
|
+
partitionBy: translateParameters(source),
|
|
55
|
+
columns: source.columns.map((c) => {
|
|
56
|
+
if (c == 'star') {
|
|
57
|
+
return 'star';
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return { expr: serializeTableProcessorDataExpr(c.expr), alias: c.alias };
|
|
61
|
+
}
|
|
62
|
+
})
|
|
31
63
|
};
|
|
32
64
|
});
|
|
33
65
|
}
|
|
@@ -37,9 +69,10 @@ export function serializeSyncPlan(plan) {
|
|
|
37
69
|
return {
|
|
38
70
|
hash: source.hashCode,
|
|
39
71
|
table: serializeTablePattern(source.sourceTable),
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
72
|
+
tableValuedFunctions: serializeTableValued(source),
|
|
73
|
+
filters: source.filters.map(serializeTableProcessorDataExpr),
|
|
74
|
+
partitionBy: translateParameters(source),
|
|
75
|
+
output: source.outputs.map((out) => visitExpr(replaceFunctionReferenceWithIndex, out, null)),
|
|
43
76
|
lookupScope: source.defaultLookupScope
|
|
44
77
|
};
|
|
45
78
|
});
|
|
@@ -92,7 +125,7 @@ export function serializeSyncPlan(plan) {
|
|
|
92
125
|
};
|
|
93
126
|
}
|
|
94
127
|
return {
|
|
95
|
-
version:
|
|
128
|
+
version: 1,
|
|
96
129
|
dataSources: serializeDataSources(),
|
|
97
130
|
buckets: plan.buckets.map((bkt, index) => {
|
|
98
131
|
bucketIndex.set(bkt, index);
|
|
@@ -110,8 +143,7 @@ export function serializeSyncPlan(plan) {
|
|
|
110
143
|
};
|
|
111
144
|
}
|
|
112
145
|
export function deserializeSyncPlan(serialized) {
|
|
113
|
-
|
|
114
|
-
if (serialized.version != 'unstable') {
|
|
146
|
+
if (serialized.version != 1) {
|
|
115
147
|
throw new Error('Unknown sync plan version passed to deserializeSyncPlan()');
|
|
116
148
|
}
|
|
117
149
|
function deserializeTablePattern(pattern) {
|
|
@@ -122,15 +154,41 @@ export function deserializeSyncPlan(serialized) {
|
|
|
122
154
|
return new ImplicitSchemaTablePattern(null, pattern.table);
|
|
123
155
|
}
|
|
124
156
|
}
|
|
157
|
+
let tableValuedFunctionsInScope = [];
|
|
158
|
+
const replaceFunctionIndexWithReference = new MapSourceVisitor((value) => {
|
|
159
|
+
if ('function' in value) {
|
|
160
|
+
return { function: tableValuedFunctionsInScope[value.function], outputName: value.outputName };
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
return value;
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
function deserializeTableProcessorDataExpr(expr) {
|
|
167
|
+
return visitExpr(replaceFunctionIndexWithReference, expr, null);
|
|
168
|
+
}
|
|
169
|
+
function deserializeParameters(source) {
|
|
170
|
+
return source.map((serializedKey) => {
|
|
171
|
+
return { expr: deserializeTableProcessorDataExpr(serializedKey.expr) };
|
|
172
|
+
});
|
|
173
|
+
}
|
|
125
174
|
const plan = serialized;
|
|
126
175
|
const dataSources = plan.dataSources.map((source) => {
|
|
176
|
+
const functions = (tableValuedFunctionsInScope = source.tableValuedFunctions);
|
|
127
177
|
return {
|
|
128
178
|
hashCode: source.hash,
|
|
129
179
|
sourceTable: deserializeTablePattern(source.table),
|
|
180
|
+
tableValuedFunctions: functions,
|
|
130
181
|
outputTableName: source.outputTableName,
|
|
131
|
-
filters: source.filters,
|
|
132
|
-
parameters: source.partitionBy,
|
|
133
|
-
columns: source.columns
|
|
182
|
+
filters: source.filters.map(deserializeTableProcessorDataExpr),
|
|
183
|
+
parameters: deserializeParameters(source.partitionBy),
|
|
184
|
+
columns: source.columns.map((c) => {
|
|
185
|
+
if (c == 'star') {
|
|
186
|
+
return 'star';
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
return { expr: deserializeTableProcessorDataExpr(c.expr), alias: c.alias };
|
|
190
|
+
}
|
|
191
|
+
})
|
|
134
192
|
};
|
|
135
193
|
});
|
|
136
194
|
const buckets = plan.buckets.map((bkt) => {
|
|
@@ -141,12 +199,14 @@ export function deserializeSyncPlan(serialized) {
|
|
|
141
199
|
};
|
|
142
200
|
});
|
|
143
201
|
const parameterIndexes = plan.parameterIndexes.map((source) => {
|
|
202
|
+
const functions = (tableValuedFunctionsInScope = source.tableValuedFunctions);
|
|
144
203
|
return {
|
|
145
204
|
hashCode: source.hash,
|
|
146
205
|
sourceTable: deserializeTablePattern(source.table),
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
206
|
+
tableValuedFunctions: functions,
|
|
207
|
+
filters: source.filters.map(deserializeTableProcessorDataExpr),
|
|
208
|
+
parameters: deserializeParameters(source.partitionBy),
|
|
209
|
+
outputs: source.output.map((out) => visitExpr(replaceFunctionIndexWithReference, out, null)),
|
|
150
210
|
defaultLookupScope: source.lookupScope
|
|
151
211
|
};
|
|
152
212
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/sync_plan/serialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/sync_plan/serialize.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powersync/service-sync-rules",
|
|
3
3
|
"repository": "https://github.com/powersync-ja/powersync-service",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.32.0",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"license": "FSL-1.1-ALv2",
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^22.16.2",
|
|
26
|
+
"ebnf": "^1.9.1",
|
|
26
27
|
"vitest": "^4.0.16"
|
|
27
28
|
},
|
|
28
29
|
"scripts": {
|
package/schema/sync_rules.json
CHANGED
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
"type": "integer",
|
|
168
168
|
"default": 1,
|
|
169
169
|
"minimum": 1,
|
|
170
|
-
"exclusiveMaximum":
|
|
170
|
+
"exclusiveMaximum": 4
|
|
171
171
|
},
|
|
172
172
|
"timestamp_max_precision": {
|
|
173
173
|
"type": "string",
|
|
@@ -178,9 +178,6 @@
|
|
|
178
178
|
"nanoseconds"
|
|
179
179
|
]
|
|
180
180
|
},
|
|
181
|
-
"sync_config_compiler": {
|
|
182
|
-
"type": "boolean"
|
|
183
|
-
},
|
|
184
181
|
"timestamps_iso8601": {
|
|
185
182
|
"type": "boolean",
|
|
186
183
|
"description": "Enabled by default starting from edition 2: Consistently renders timestamps with an ISO 8601-compatible format (previous versions used a space instead of a T to separate date and time)."
|