@powersync/service-sync-rules 0.29.10 → 0.31.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 (188) 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 +11 -53
  28. package/dist/SqlSyncRules.js +11 -376
  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/SyncConfig.d.ts +43 -0
  34. package/dist/SyncConfig.js +102 -0
  35. package/dist/SyncConfig.js.map +1 -0
  36. package/dist/TablePattern.d.ts +22 -4
  37. package/dist/TablePattern.js +57 -19
  38. package/dist/TablePattern.js.map +1 -1
  39. package/dist/TableValuedFunctionSqlParameterQuery.d.ts +14 -4
  40. package/dist/TableValuedFunctionSqlParameterQuery.js +41 -7
  41. package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
  42. package/dist/compatibility.d.ts +7 -0
  43. package/dist/compatibility.js +34 -0
  44. package/dist/compatibility.js.map +1 -1
  45. package/dist/compiler/bucket_resolver.d.ts +70 -0
  46. package/dist/compiler/bucket_resolver.js +131 -0
  47. package/dist/compiler/bucket_resolver.js.map +1 -0
  48. package/dist/compiler/compatibility.d.ts +16 -0
  49. package/dist/compiler/compatibility.js +12 -0
  50. package/dist/compiler/compatibility.js.map +1 -0
  51. package/dist/compiler/compiler.d.ts +110 -0
  52. package/dist/compiler/compiler.js +130 -0
  53. package/dist/compiler/compiler.js.map +1 -0
  54. package/dist/compiler/equality.d.ts +99 -0
  55. package/dist/compiler/equality.js +284 -0
  56. package/dist/compiler/equality.js.map +1 -0
  57. package/dist/compiler/expression.d.ts +77 -0
  58. package/dist/compiler/expression.js +122 -0
  59. package/dist/compiler/expression.js.map +1 -0
  60. package/dist/compiler/filter.d.ts +71 -0
  61. package/dist/compiler/filter.js +110 -0
  62. package/dist/compiler/filter.js.map +1 -0
  63. package/dist/compiler/filter_simplifier.d.ts +26 -0
  64. package/dist/compiler/filter_simplifier.js +119 -0
  65. package/dist/compiler/filter_simplifier.js.map +1 -0
  66. package/dist/compiler/ir_to_sync_plan.d.ts +37 -0
  67. package/dist/compiler/ir_to_sync_plan.js +163 -0
  68. package/dist/compiler/ir_to_sync_plan.js.map +1 -0
  69. package/dist/compiler/parser.d.ts +99 -0
  70. package/dist/compiler/parser.js +556 -0
  71. package/dist/compiler/parser.js.map +1 -0
  72. package/dist/compiler/querier_graph.d.ts +42 -0
  73. package/dist/compiler/querier_graph.js +365 -0
  74. package/dist/compiler/querier_graph.js.map +1 -0
  75. package/dist/compiler/rows.d.ts +113 -0
  76. package/dist/compiler/rows.js +156 -0
  77. package/dist/compiler/rows.js.map +1 -0
  78. package/dist/compiler/scope.d.ts +22 -0
  79. package/dist/compiler/scope.js +47 -0
  80. package/dist/compiler/scope.js.map +1 -0
  81. package/dist/compiler/sqlite.d.ts +77 -0
  82. package/dist/compiler/sqlite.js +412 -0
  83. package/dist/compiler/sqlite.js.map +1 -0
  84. package/dist/compiler/table.d.ts +66 -0
  85. package/dist/compiler/table.js +67 -0
  86. package/dist/compiler/table.js.map +1 -0
  87. package/dist/errors.d.ts +4 -2
  88. package/dist/errors.js +16 -1
  89. package/dist/errors.js.map +1 -1
  90. package/dist/events/SqlEventDescriptor.js +1 -1
  91. package/dist/events/SqlEventDescriptor.js.map +1 -1
  92. package/dist/events/SqlEventSourceQuery.d.ts +1 -1
  93. package/dist/events/SqlEventSourceQuery.js +1 -2
  94. package/dist/events/SqlEventSourceQuery.js.map +1 -1
  95. package/dist/from_yaml.d.ts +28 -0
  96. package/dist/from_yaml.js +411 -0
  97. package/dist/from_yaml.js.map +1 -0
  98. package/dist/index.d.ts +9 -0
  99. package/dist/index.js +9 -0
  100. package/dist/index.js.map +1 -1
  101. package/dist/json_schema.js +17 -1
  102. package/dist/json_schema.js.map +1 -1
  103. package/dist/request_functions.js.map +1 -1
  104. package/dist/schema-generators/DartSchemaGenerator.d.ts +3 -3
  105. package/dist/schema-generators/DartSchemaGenerator.js.map +1 -1
  106. package/dist/schema-generators/DotNetSchemaGenerator.d.ts +2 -2
  107. package/dist/schema-generators/DotNetSchemaGenerator.js.map +1 -1
  108. package/dist/schema-generators/JsLegacySchemaGenerator.d.ts +2 -2
  109. package/dist/schema-generators/JsLegacySchemaGenerator.js.map +1 -1
  110. package/dist/schema-generators/KotlinSchemaGenerator.d.ts +2 -2
  111. package/dist/schema-generators/KotlinSchemaGenerator.js.map +1 -1
  112. package/dist/schema-generators/RoomSchemaGenerator.d.ts +2 -2
  113. package/dist/schema-generators/RoomSchemaGenerator.js.map +1 -1
  114. package/dist/schema-generators/SchemaGenerator.d.ts +8 -3
  115. package/dist/schema-generators/SchemaGenerator.js +21 -14
  116. package/dist/schema-generators/SchemaGenerator.js.map +1 -1
  117. package/dist/schema-generators/SqlSchemaGenerator.d.ts +2 -2
  118. package/dist/schema-generators/SqlSchemaGenerator.js.map +1 -1
  119. package/dist/schema-generators/SwiftSchemaGenerator.d.ts +2 -2
  120. package/dist/schema-generators/SwiftSchemaGenerator.js.map +1 -1
  121. package/dist/schema-generators/TsSchemaGenerator.d.ts +2 -2
  122. package/dist/schema-generators/TsSchemaGenerator.js.map +1 -1
  123. package/dist/sql_functions.d.ts +4 -3
  124. package/dist/sql_functions.js +1 -1
  125. package/dist/sql_functions.js.map +1 -1
  126. package/dist/streams/filter.d.ts +34 -4
  127. package/dist/streams/filter.js +93 -23
  128. package/dist/streams/filter.js.map +1 -1
  129. package/dist/streams/from_sql.js +2 -5
  130. package/dist/streams/from_sql.js.map +1 -1
  131. package/dist/streams/parameter.d.ts +7 -6
  132. package/dist/streams/stream.d.ts +25 -15
  133. package/dist/streams/stream.js +59 -87
  134. package/dist/streams/stream.js.map +1 -1
  135. package/dist/streams/variant.d.ts +14 -21
  136. package/dist/streams/variant.js +68 -46
  137. package/dist/streams/variant.js.map +1 -1
  138. package/dist/sync_plan/engine/javascript.d.ts +6 -0
  139. package/dist/sync_plan/engine/javascript.js +208 -0
  140. package/dist/sync_plan/engine/javascript.js.map +1 -0
  141. package/dist/sync_plan/engine/scalar_expression_engine.d.ts +48 -0
  142. package/dist/sync_plan/engine/scalar_expression_engine.js +99 -0
  143. package/dist/sync_plan/engine/scalar_expression_engine.js.map +1 -0
  144. package/dist/sync_plan/engine/sqlite.d.ts +12 -0
  145. package/dist/sync_plan/engine/sqlite.js +53 -0
  146. package/dist/sync_plan/engine/sqlite.js.map +1 -0
  147. package/dist/sync_plan/evaluator/bucket_data_source.d.ts +24 -0
  148. package/dist/sync_plan/evaluator/bucket_data_source.js +139 -0
  149. package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -0
  150. package/dist/sync_plan/evaluator/bucket_source.d.ts +19 -0
  151. package/dist/sync_plan/evaluator/bucket_source.js +145 -0
  152. package/dist/sync_plan/evaluator/bucket_source.js.map +1 -0
  153. package/dist/sync_plan/evaluator/index.d.ts +17 -0
  154. package/dist/sync_plan/evaluator/index.js +32 -0
  155. package/dist/sync_plan/evaluator/index.js.map +1 -0
  156. package/dist/sync_plan/evaluator/parameter_evaluator.d.ts +138 -0
  157. package/dist/sync_plan/evaluator/parameter_evaluator.js +359 -0
  158. package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -0
  159. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.d.ts +20 -0
  160. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js +64 -0
  161. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js.map +1 -0
  162. package/dist/sync_plan/expression.d.ts +109 -0
  163. package/dist/sync_plan/expression.js +85 -0
  164. package/dist/sync_plan/expression.js.map +1 -0
  165. package/dist/sync_plan/expression_to_sql.d.ts +43 -0
  166. package/dist/sync_plan/expression_to_sql.js +190 -0
  167. package/dist/sync_plan/expression_to_sql.js.map +1 -0
  168. package/dist/sync_plan/expression_visitor.d.ts +57 -0
  169. package/dist/sync_plan/expression_visitor.js +181 -0
  170. package/dist/sync_plan/expression_visitor.js.map +1 -0
  171. package/dist/sync_plan/plan.d.ts +196 -0
  172. package/dist/sync_plan/plan.js +2 -0
  173. package/dist/sync_plan/plan.js.map +1 -0
  174. package/dist/sync_plan/schema_inference.d.ts +16 -0
  175. package/dist/sync_plan/schema_inference.js +123 -0
  176. package/dist/sync_plan/schema_inference.js.map +1 -0
  177. package/dist/sync_plan/serialize.d.ts +82 -0
  178. package/dist/sync_plan/serialize.js +214 -0
  179. package/dist/sync_plan/serialize.js.map +1 -0
  180. package/dist/types/custom_sqlite_value.d.ts +1 -1
  181. package/dist/types.d.ts +72 -29
  182. package/dist/types.js +30 -5
  183. package/dist/types.js.map +1 -1
  184. package/dist/utils.d.ts +10 -3
  185. package/dist/utils.js +26 -3
  186. package/dist/utils.js.map +1 -1
  187. package/package.json +4 -3
  188. package/schema/sync_rules.json +19 -3
@@ -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
+ };
@@ -0,0 +1,99 @@
1
+ import { ExpressionToSqlite, Precedence } from '../expression_to_sql.js';
2
+ import { MapSourceVisitor, visitExpr } from '../expression_visitor.js';
3
+ export function scalarStatementToSql({ filters = [], outputs = [], tableValuedFunctions = [] }) {
4
+ const tableValuedFunctionNames = new Map();
5
+ for (const fn of tableValuedFunctions) {
6
+ tableValuedFunctionNames.set(fn, `tbl_${tableValuedFunctionNames.size}`);
7
+ }
8
+ const toSqlite = new StatementToSqlite(tableValuedFunctionNames);
9
+ toSqlite.addLexeme('SELECT');
10
+ if (outputs.length === 0) {
11
+ // We need to add a bogus expression to avoid a syntax error (`SELECT WHERE ...` alone is invalid).
12
+ toSqlite.addLexeme('1');
13
+ }
14
+ else {
15
+ outputs.forEach((expr, i) => {
16
+ if (i != 0)
17
+ toSqlite.comma();
18
+ visitExpr(toSqlite, expr, null);
19
+ });
20
+ }
21
+ if (tableValuedFunctionNames.size != 0) {
22
+ toSqlite.addLexeme('FROM');
23
+ let first = true;
24
+ tableValuedFunctionNames.forEach((name, fn) => {
25
+ if (!first) {
26
+ toSqlite.comma();
27
+ }
28
+ visitExpr(toSqlite, { type: 'function', function: fn.name, parameters: fn.inputs }, null);
29
+ toSqlite.addLexeme('AS');
30
+ toSqlite.identifier(name);
31
+ first = false;
32
+ });
33
+ }
34
+ if (filters.length != 0) {
35
+ toSqlite.addLexeme('WHERE');
36
+ filters.forEach((expr, i) => {
37
+ if (i != 0)
38
+ toSqlite.addLexeme('AND');
39
+ visitExpr(toSqlite, expr, Precedence.and);
40
+ });
41
+ }
42
+ return toSqlite.sql;
43
+ }
44
+ class StatementToSqlite extends ExpressionToSqlite {
45
+ tableValuedFunctionNames;
46
+ constructor(tableValuedFunctionNames) {
47
+ super();
48
+ this.tableValuedFunctionNames = tableValuedFunctionNames;
49
+ }
50
+ comma() {
51
+ this.addLexeme(',', { spaceLeft: false });
52
+ }
53
+ visitExternalData(expr) {
54
+ if (typeof expr.source === 'number') {
55
+ this.addLexeme(`?${expr.source}`);
56
+ }
57
+ else {
58
+ const fn = this.tableValuedFunctionNames.get(expr.source.function);
59
+ this.identifier(fn);
60
+ this.addLexeme('.', { spaceLeft: false, spaceRight: false });
61
+ this.identifier(expr.source.column);
62
+ }
63
+ }
64
+ }
65
+ /**
66
+ * Utility to transform multiple expressions embedding parameter values into expressions that reference a parameter
67
+ * index representing that value.
68
+ *
69
+ * Parameter values used multiple times are de-duplicated into the same SQL parameter.
70
+ */
71
+ export function mapExternalDataToInstantiation() {
72
+ const instantiation = [];
73
+ const columnsToIndex = new Map();
74
+ const requestToIndex = new Map();
75
+ const visitor = new MapSourceVisitor((data) => {
76
+ const indexIfAdded = instantiation.length + 1;
77
+ if ('column' in data) {
78
+ if (columnsToIndex.has(data)) {
79
+ return columnsToIndex.get(data);
80
+ }
81
+ columnsToIndex.set(data, indexIfAdded);
82
+ }
83
+ else {
84
+ if (requestToIndex.has(data)) {
85
+ return requestToIndex.get(data);
86
+ }
87
+ requestToIndex.set(data, indexIfAdded);
88
+ }
89
+ instantiation.push(data);
90
+ return indexIfAdded;
91
+ });
92
+ return {
93
+ instantiation,
94
+ transform(expr) {
95
+ return visitExpr(visitor, expr, null);
96
+ }
97
+ };
98
+ }
99
+ //# sourceMappingURL=scalar_expression_engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalar_expression_engine.js","sourceRoot":"","sources":["../../../src/sync_plan/engine/scalar_expression_engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { CompatibilityContext } from '../../compatibility.js';
2
+ import { ScalarExpressionEngine } from './scalar_expression_engine.js';
3
+ /**
4
+ * Creates a {@link ScalarExpressionEngine} backed by an in-memory SQLite database using `node:sqlite` APIs.
5
+ *
6
+ * @param module The imported `node:sqlite` module (passed as a parameter to ensure this package keeps working in
7
+ * browsers).
8
+ *
9
+ * @experimental This engine is not drop-in compatible with the JS operator implementations. So we can only use this
10
+ * engine when a new compatibility option is enabled. Currently, it is only used in tests.
11
+ */
12
+ export declare function nodeSqliteExpressionEngine(module: typeof import('node:sqlite'), compatibility: CompatibilityContext): ScalarExpressionEngine;
@@ -0,0 +1,53 @@
1
+ import { CompatibilityOption } from '../../compatibility.js';
2
+ import { generateSqlFunctions } from '../../index.js';
3
+ import { scalarStatementToSql } from './scalar_expression_engine.js';
4
+ /**
5
+ * Creates a {@link ScalarExpressionEngine} backed by an in-memory SQLite database using `node:sqlite` APIs.
6
+ *
7
+ * @param module The imported `node:sqlite` module (passed as a parameter to ensure this package keeps working in
8
+ * browsers).
9
+ *
10
+ * @experimental This engine is not drop-in compatible with the JS operator implementations. So we can only use this
11
+ * engine when a new compatibility option is enabled. Currently, it is only used in tests.
12
+ */
13
+ export function nodeSqliteExpressionEngine(module, compatibility) {
14
+ const db = new module.DatabaseSync(':memory:', { readOnly: true, readBigInts: true, returnArrays: true });
15
+ const functions = generateSqlFunctions(compatibility);
16
+ function registerPowerSyncFunction(name) {
17
+ const impl = functions.named[name];
18
+ db.function(name, { useBigIntArguments: true, varargs: true, deterministic: true }, (...args) => {
19
+ return impl.call(...args);
20
+ });
21
+ }
22
+ // Needed to make them deterministic / prevent passing 'now'
23
+ registerPowerSyncFunction('unixepoch');
24
+ registerPowerSyncFunction('datetime');
25
+ registerPowerSyncFunction('st_asgeojson');
26
+ registerPowerSyncFunction('st_astext');
27
+ registerPowerSyncFunction('st_x');
28
+ registerPowerSyncFunction('st_y');
29
+ if (!compatibility.isEnabled(CompatibilityOption.fixedJsonExtract)) {
30
+ // For backwards compatibility, use the old JSON operators which parse the path argument differently.
31
+ db.function('->', { useBigIntArguments: true, varargs: true, deterministic: true }, (...args) => {
32
+ return functions.operatorJsonExtractJson.call(...args);
33
+ });
34
+ db.function('->>', { useBigIntArguments: true, varargs: true, deterministic: true }, (...args) => {
35
+ return functions.operatorJsonExtractSql.call(...args);
36
+ });
37
+ }
38
+ return {
39
+ prepareEvaluator(input) {
40
+ const stmt = db.prepare(scalarStatementToSql(input));
41
+ return {
42
+ evaluate(inputs) {
43
+ // Types are wrong, all() will return a SqliteValue[][] because returnArrays is enabled.
44
+ return stmt.all(...inputs);
45
+ }
46
+ };
47
+ },
48
+ close() {
49
+ db.close();
50
+ }
51
+ };
52
+ }
53
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/sync_plan/engine/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAqD,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAExH;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAoC,EACpC,aAAmC;IAEnC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAS,CAAC,CAAC;IACjH,MAAM,SAAS,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAEtD,SAAS,yBAAyB,CAAC,IAAY;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;QAEpC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;YAC9F,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,yBAAyB,CAAC,WAAW,CAAC,CAAC;IACvC,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAEtC,yBAAyB,CAAC,cAAc,CAAC,CAAC;IAC1C,yBAAyB,CAAC,WAAW,CAAC,CAAC;IACvC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnE,qGAAqG;QACrG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;YAC9F,OAAO,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;YAC/F,OAAO,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,gBAAgB,CAAC,KAAK;YACpB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;YACrD,OAAO;gBACL,QAAQ,CAAC,MAAM;oBACb,wFAAwF;oBACxF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAA+B,CAAC;gBAC3D,CAAC;aACF,CAAC;QACJ,CAAC;QACD,KAAK;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { BucketDataSource } from '../../BucketSource.js';
2
+ import { ColumnDefinition } from '../../ExpressionType.js';
3
+ import { SourceTableInterface } from '../../SourceTableInterface.js';
4
+ import { TablePattern } from '../../TablePattern.js';
5
+ import { EvaluateRowOptions, SourceSchema, UnscopedEvaluationResult } from '../../types.js';
6
+ import * as plan from '../plan.js';
7
+ import { StreamEvaluationContext } from './index.js';
8
+ export declare class PreparedStreamBucketDataSource implements BucketDataSource {
9
+ readonly source: plan.StreamBucketDataSource;
10
+ private readonly sourceTables;
11
+ private readonly sources;
12
+ private readonly defaultSchema;
13
+ constructor(source: plan.StreamBucketDataSource, context: StreamEvaluationContext);
14
+ get uniqueName(): string;
15
+ get bucketParameters(): string[];
16
+ getSourceTables(): Set<TablePattern>;
17
+ private sourcesForTable;
18
+ tableSyncsData(table: SourceTableInterface): boolean;
19
+ evaluateRow(options: EvaluateRowOptions): UnscopedEvaluationResult[];
20
+ resolveResultSets(schema: SourceSchema, tables: Record<string, Record<string, ColumnDefinition>>): void;
21
+ debugWriteOutputTables(result: Record<string, {
22
+ query: string;
23
+ }[]>): void;
24
+ }
@@ -0,0 +1,139 @@
1
+ import { filterJsonRow, idFromData, isJsonValue, isValidParameterValue, JSONBucketNameSerialize } from '../../utils.js';
2
+ import { ExpressionToSqlite } from '../expression_to_sql.js';
3
+ import { mapExternalDataToInstantiation, scalarStatementToSql } from '../engine/scalar_expression_engine.js';
4
+ import { SyncPlanSchemaAnalyzer } from '../schema_inference.js';
5
+ export class PreparedStreamBucketDataSource {
6
+ source;
7
+ sourceTables = new Set();
8
+ sources = [];
9
+ defaultSchema;
10
+ constructor(source, context) {
11
+ this.source = source;
12
+ this.defaultSchema = context.defaultSchema;
13
+ for (const data of source.sources) {
14
+ const prepared = new PreparedStreamDataSource(data, context);
15
+ this.sources.push(prepared);
16
+ this.sourceTables.add(prepared.tablePattern);
17
+ }
18
+ }
19
+ get uniqueName() {
20
+ return this.source.uniqueName;
21
+ }
22
+ get bucketParameters() {
23
+ // We can pick an arbitrary evaluator within the source, since they're all guaranteed to have the same parameters.
24
+ const evaluator = this.source.sources[0];
25
+ // It doesn't matter what we return here because it's for debugging purposes only.
26
+ return evaluator.parameters.map((p) => ExpressionToSqlite.toSqlite(p.expr));
27
+ }
28
+ getSourceTables() {
29
+ return this.sourceTables;
30
+ }
31
+ *sourcesForTable(table) {
32
+ for (const source of this.sources) {
33
+ if (source.tablePattern.matches(table)) {
34
+ yield source;
35
+ }
36
+ }
37
+ }
38
+ tableSyncsData(table) {
39
+ return !this.sourcesForTable(table).next().done;
40
+ }
41
+ evaluateRow(options) {
42
+ const results = [];
43
+ for (const source of this.sourcesForTable(options.sourceTable)) {
44
+ source.evaluateRow(options, results);
45
+ }
46
+ return results;
47
+ }
48
+ resolveResultSets(schema, tables) {
49
+ const analyzer = new SyncPlanSchemaAnalyzer(this.defaultSchema, schema);
50
+ for (const source of this.source.sources) {
51
+ analyzer.resolveResultSets(source, tables);
52
+ }
53
+ }
54
+ debugWriteOutputTables(result) {
55
+ for (const source of this.sources) {
56
+ const table = source.fixedOutputTableName;
57
+ if (table != null) {
58
+ const queries = (result[table] ??= []);
59
+ queries.push({ query: source.debugSql });
60
+ }
61
+ }
62
+ }
63
+ }
64
+ class PreparedStreamDataSource {
65
+ tablePattern;
66
+ outputs = [];
67
+ numberOfOutputExpressions;
68
+ numberOfParameters;
69
+ evaluator;
70
+ evaluatorInputs;
71
+ fixedOutputTableName;
72
+ debugSql;
73
+ constructor(evaluator, { engine, defaultSchema }) {
74
+ const mapExpressions = mapExternalDataToInstantiation();
75
+ const outputExpressions = [];
76
+ for (const column of evaluator.columns) {
77
+ if (column === 'star') {
78
+ this.outputs.push('star');
79
+ }
80
+ else {
81
+ const expressionIndex = outputExpressions.length;
82
+ outputExpressions.push(mapExpressions.transform(column.expr));
83
+ this.outputs.push({ index: expressionIndex, alias: column.alias });
84
+ }
85
+ }
86
+ this.numberOfOutputExpressions = outputExpressions.length;
87
+ for (const parameter of evaluator.parameters) {
88
+ outputExpressions.push(mapExpressions.transform(parameter.expr));
89
+ }
90
+ this.numberOfParameters = evaluator.parameters.length;
91
+ const evaluatorOptions = {
92
+ outputs: outputExpressions,
93
+ filters: evaluator.filters.map((f) => mapExpressions.transform(f))
94
+ };
95
+ this.debugSql = scalarStatementToSql(evaluatorOptions);
96
+ this.evaluator = engine.prepareEvaluator(evaluatorOptions);
97
+ this.fixedOutputTableName = evaluator.outputTableName;
98
+ this.tablePattern = evaluator.sourceTable.toTablePattern(defaultSchema);
99
+ this.evaluatorInputs = mapExpressions.instantiation;
100
+ }
101
+ evaluateRow(options, results) {
102
+ try {
103
+ const inputInstantiation = this.evaluatorInputs.map((input) => options.record[input.column]);
104
+ row: for (const source of this.evaluator.evaluate(inputInstantiation)) {
105
+ const record = {};
106
+ for (const output of this.outputs) {
107
+ if (output === 'star') {
108
+ Object.assign(record, filterJsonRow(options.record));
109
+ }
110
+ else {
111
+ const value = source[output.index];
112
+ if (isJsonValue(value)) {
113
+ record[output.alias] = value;
114
+ }
115
+ }
116
+ }
117
+ const id = idFromData(record);
118
+ // source is [...outputs, ...partitionValues]
119
+ const partitionValues = source.splice(this.numberOfOutputExpressions, this.numberOfParameters);
120
+ for (const bucketParameter of partitionValues) {
121
+ if (!isValidParameterValue(bucketParameter)) {
122
+ continue row;
123
+ }
124
+ }
125
+ results.push({
126
+ id,
127
+ data: record,
128
+ table: this.fixedOutputTableName ?? options.sourceTable.name,
129
+ serializedBucketParameters: JSONBucketNameSerialize.stringify(partitionValues)
130
+ });
131
+ }
132
+ return results;
133
+ }
134
+ catch (e) {
135
+ return results.push({ error: e.message });
136
+ }
137
+ }
138
+ }
139
+ //# sourceMappingURL=bucket_data_source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket_data_source.js","sourceRoot":"","sources":["../../../src/sync_plan/evaluator/bucket_data_source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { BucketDataSource, BucketSource, BucketSourceType, CreateSourceParams, HydratedBucketSource, ParameterIndexLookupCreator } from '../../BucketSource.js';
2
+ import { StreamEvaluationContext } from './index.js';
3
+ import * as plan from '../plan.js';
4
+ export interface StreamInput extends StreamEvaluationContext {
5
+ preparedBuckets: Map<plan.StreamBucketDataSource, BucketDataSource>;
6
+ preparedLookups: Map<plan.StreamParameterIndexLookupCreator, ParameterIndexLookupCreator>;
7
+ }
8
+ export declare class StreamBucketSource implements BucketSource {
9
+ readonly stream: plan.CompiledSyncStream;
10
+ private readonly input;
11
+ readonly dataSources: BucketDataSource[];
12
+ readonly parameterIndexLookupCreators: ParameterIndexLookupCreator[];
13
+ constructor(stream: plan.CompiledSyncStream, input: StreamInput);
14
+ get name(): string;
15
+ get subscribedToByDefault(): boolean;
16
+ get type(): BucketSourceType;
17
+ debugRepresentation(): string;
18
+ hydrate(params: CreateSourceParams): HydratedBucketSource;
19
+ }