@powersync/service-sync-rules 0.0.0-dev-20260803144812 → 0.0.0-dev-20260929095716

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 (166) hide show
  1. package/README.md +49 -14
  2. package/dist/BucketSource.d.ts +2 -2
  3. package/dist/ConnectionConfig.d.ts +39 -0
  4. package/dist/ConnectionConfig.js +97 -0
  5. package/dist/ConnectionConfig.js.map +1 -0
  6. package/dist/HydratedSyncConfig.d.ts +11 -2
  7. package/dist/HydratedSyncConfig.js +18 -4
  8. package/dist/HydratedSyncConfig.js.map +1 -1
  9. package/dist/HydrationState.d.ts +2 -0
  10. package/dist/HydrationState.js.map +1 -1
  11. package/dist/SqlSyncRules.d.ts +15 -0
  12. package/dist/SqlSyncRules.js +3 -1
  13. package/dist/SqlSyncRules.js.map +1 -1
  14. package/dist/StorageVersion.js +2 -1
  15. package/dist/StorageVersion.js.map +1 -1
  16. package/dist/SyncConfig.d.ts +11 -3
  17. package/dist/SyncConfig.js +16 -11
  18. package/dist/SyncConfig.js.map +1 -1
  19. package/dist/SyncConfigParserHooks.d.ts +103 -0
  20. package/dist/SyncConfigParserHooks.js +11 -0
  21. package/dist/SyncConfigParserHooks.js.map +1 -0
  22. package/dist/compatibility.d.ts +2 -1
  23. package/dist/compatibility.js +4 -2
  24. package/dist/compatibility.js.map +1 -1
  25. package/dist/compiler/bucket_resolver.d.ts +1 -0
  26. package/dist/compiler/bucket_resolver.js +22 -12
  27. package/dist/compiler/bucket_resolver.js.map +1 -1
  28. package/dist/compiler/compatibility.d.ts +38 -9
  29. package/dist/compiler/compatibility.js +81 -11
  30. package/dist/compiler/compatibility.js.map +1 -1
  31. package/dist/compiler/compiler.d.ts +84 -16
  32. package/dist/compiler/compiler.js +112 -16
  33. package/dist/compiler/compiler.js.map +1 -1
  34. package/dist/compiler/equality.d.ts +2 -2
  35. package/dist/compiler/equality.js +2 -2
  36. package/dist/compiler/expression.d.ts +20 -18
  37. package/dist/compiler/expression.js +23 -14
  38. package/dist/compiler/expression.js.map +1 -1
  39. package/dist/compiler/filter.d.ts +4 -4
  40. package/dist/compiler/filter.js +5 -4
  41. package/dist/compiler/filter.js.map +1 -1
  42. package/dist/compiler/ir_to_sync_plan.d.ts +4 -2
  43. package/dist/compiler/ir_to_sync_plan.js +40 -36
  44. package/dist/compiler/ir_to_sync_plan.js.map +1 -1
  45. package/dist/compiler/parser.d.ts +1 -1
  46. package/dist/compiler/parser.js +2 -2
  47. package/dist/compiler/querier_graph.js +43 -24
  48. package/dist/compiler/querier_graph.js.map +1 -1
  49. package/dist/compiler/rows.d.ts +23 -29
  50. package/dist/compiler/rows.js +83 -59
  51. package/dist/compiler/rows.js.map +1 -1
  52. package/dist/compiler/sqlite.js +1 -2
  53. package/dist/compiler/sqlite.js.map +1 -1
  54. package/dist/compiler/table.d.ts +5 -4
  55. package/dist/compiler/table.js +6 -7
  56. package/dist/compiler/table.js.map +1 -1
  57. package/dist/events/CompiledEventSourceQuery.d.ts +51 -0
  58. package/dist/events/CompiledEventSourceQuery.js +119 -0
  59. package/dist/events/CompiledEventSourceQuery.js.map +1 -0
  60. package/dist/events/EventDescriptor.d.ts +26 -0
  61. package/dist/events/EventDescriptor.js +2 -0
  62. package/dist/events/EventDescriptor.js.map +1 -0
  63. package/dist/from_yaml.d.ts +14 -1
  64. package/dist/from_yaml.js +101 -39
  65. package/dist/from_yaml.js.map +1 -1
  66. package/dist/index.d.ts +5 -2
  67. package/dist/index.js +5 -2
  68. package/dist/index.js.map +1 -1
  69. package/dist/json.d.ts +7 -0
  70. package/dist/json.js +2 -0
  71. package/dist/json.js.map +1 -0
  72. package/dist/json_schema.d.ts +11 -0
  73. package/dist/json_schema.js +27 -4
  74. package/dist/json_schema.js.map +1 -1
  75. package/dist/legacy/BaseSqlDataQuery.d.ts +12 -0
  76. package/dist/legacy/BaseSqlDataQuery.js +3 -0
  77. package/dist/legacy/BaseSqlDataQuery.js.map +1 -1
  78. package/dist/legacy/SqlBucketDescriptor.d.ts +9 -0
  79. package/dist/legacy/SqlBucketDescriptor.js +6 -0
  80. package/dist/legacy/SqlBucketDescriptor.js.map +1 -1
  81. package/dist/legacy/SqlDataQuery.d.ts +6 -0
  82. package/dist/legacy/SqlDataQuery.js +3 -0
  83. package/dist/legacy/SqlDataQuery.js.map +1 -1
  84. package/dist/legacy/SqlParameterQuery.d.ts +4 -0
  85. package/dist/legacy/SqlParameterQuery.js +1 -0
  86. package/dist/legacy/SqlParameterQuery.js.map +1 -1
  87. package/dist/legacy/StaticSqlParameterQuery.d.ts +4 -0
  88. package/dist/legacy/StaticSqlParameterQuery.js +1 -0
  89. package/dist/legacy/StaticSqlParameterQuery.js.map +1 -1
  90. package/dist/legacy/TableQuerySchema.d.ts +1 -0
  91. package/dist/legacy/TableQuerySchema.js +1 -0
  92. package/dist/legacy/TableQuerySchema.js.map +1 -1
  93. package/dist/legacy/TableValuedFunctionSqlParameterQuery.d.ts +4 -0
  94. package/dist/legacy/TableValuedFunctionSqlParameterQuery.js +1 -0
  95. package/dist/legacy/TableValuedFunctionSqlParameterQuery.js.map +1 -1
  96. package/dist/legacy/sql_filters.d.ts +13 -0
  97. package/dist/legacy/sql_filters.js +10 -0
  98. package/dist/legacy/sql_filters.js.map +1 -1
  99. package/dist/legacy/sql_support.d.ts +33 -0
  100. package/dist/legacy/sql_support.js +33 -0
  101. package/dist/legacy/sql_support.js.map +1 -1
  102. package/dist/legacy/streams/filter.d.ts +22 -0
  103. package/dist/legacy/streams/filter.js +19 -0
  104. package/dist/legacy/streams/filter.js.map +1 -1
  105. package/dist/legacy/streams/from_sql.d.ts +3 -0
  106. package/dist/legacy/streams/from_sql.js +4 -1
  107. package/dist/legacy/streams/from_sql.js.map +1 -1
  108. package/dist/legacy/streams/functions.d.ts +3 -0
  109. package/dist/legacy/streams/functions.js +3 -0
  110. package/dist/legacy/streams/functions.js.map +1 -1
  111. package/dist/legacy/streams/parameter.d.ts +10 -0
  112. package/dist/legacy/streams/stream.d.ts +7 -1
  113. package/dist/legacy/streams/stream.js +7 -1
  114. package/dist/legacy/streams/stream.js.map +1 -1
  115. package/dist/legacy/streams/variant.d.ts +6 -0
  116. package/dist/legacy/streams/variant.js +1 -0
  117. package/dist/legacy/streams/variant.js.map +1 -1
  118. package/dist/legacy/validators.d.ts +1 -0
  119. package/dist/legacy/validators.js +1 -0
  120. package/dist/legacy/validators.js.map +1 -1
  121. package/dist/schema-generators/RustSchemaGenerator.d.ts +22 -0
  122. package/dist/schema-generators/RustSchemaGenerator.js +120 -0
  123. package/dist/schema-generators/RustSchemaGenerator.js.map +1 -0
  124. package/dist/schema-generators/generators.d.ts +2 -0
  125. package/dist/schema-generators/generators.js +2 -0
  126. package/dist/schema-generators/generators.js.map +1 -1
  127. package/dist/schema-generators/schema-generators.d.ts +1 -0
  128. package/dist/schema-generators/schema-generators.js +1 -0
  129. package/dist/schema-generators/schema-generators.js.map +1 -1
  130. package/dist/sql_functions.d.ts +1 -1
  131. package/dist/sync_plan/evaluator/bucket_data_source.js +11 -53
  132. package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -1
  133. package/dist/sync_plan/evaluator/bucket_source.js +1 -1
  134. package/dist/sync_plan/evaluator/index.d.ts +2 -7
  135. package/dist/sync_plan/evaluator/index.js +7 -7
  136. package/dist/sync_plan/evaluator/index.js.map +1 -1
  137. package/dist/sync_plan/evaluator/parameter_evaluator.d.ts +1 -1
  138. package/dist/sync_plan/evaluator/parameter_evaluator.js +12 -8
  139. package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -1
  140. package/dist/sync_plan/evaluator/row_projection.d.ts +22 -0
  141. package/dist/sync_plan/evaluator/row_projection.js +71 -0
  142. package/dist/sync_plan/evaluator/row_projection.js.map +1 -0
  143. package/dist/sync_plan/plan.d.ts +43 -6
  144. package/dist/sync_plan/plan_equality_serialized.d.ts +12 -2
  145. package/dist/sync_plan/plan_equality_serialized.js +56 -0
  146. package/dist/sync_plan/plan_equality_serialized.js.map +1 -1
  147. package/dist/sync_plan/schema_inference.d.ts +1 -1
  148. package/dist/sync_plan/schema_inference.js +1 -1
  149. package/dist/sync_plan/serialize.d.ts +52 -5
  150. package/dist/sync_plan/serialize.js +125 -20
  151. package/dist/sync_plan/serialize.js.map +1 -1
  152. package/dist/utils.d.ts +1 -0
  153. package/dist/utils.js +43 -12
  154. package/dist/utils.js.map +1 -1
  155. package/dist/yaml_source_locations.d.ts +14 -0
  156. package/dist/yaml_source_locations.js +117 -0
  157. package/dist/yaml_source_locations.js.map +1 -0
  158. package/dist/yaml_validation.js.map +1 -1
  159. package/package.json +2 -1
  160. package/schema/sync_rules.json +49 -3
  161. package/dist/events/SqlEventDescriptor.d.ts +0 -20
  162. package/dist/events/SqlEventDescriptor.js +0 -51
  163. package/dist/events/SqlEventDescriptor.js.map +0 -1
  164. package/dist/events/SqlEventSourceQuery.d.ts +0 -20
  165. package/dist/events/SqlEventSourceQuery.js +0 -125
  166. package/dist/events/SqlEventSourceQuery.js.map +0 -1
@@ -1,27 +1,32 @@
1
1
  import { parse } from 'pgsql-ast-parser';
2
+ import { SqlRuleError } from '../errors.js';
2
3
  import { DangerousParameterDetector } from './detect_dangerous_parameters.js';
3
4
  import { HashSet } from './equality.js';
4
5
  import { NodeLocations } from './expression.js';
6
+ import { RowExpression, SingleDependencyExpression } from './filter.js';
5
7
  import { CompilerModelToSyncPlan } from './ir_to_sync_plan.js';
6
8
  import { StreamQueryParser } from './parser.js';
7
9
  import { QuerierGraphBuilder } from './querier_graph.js';
10
+ import { EventRowEvaluator } from './rows.js';
8
11
  import { SqlScope } from './scope.js';
9
12
  /**
10
- * State for compiling sync streams.
13
+ * State for compiling Sync Streams and replication events into a sync plan.
11
14
  *
12
- * The output of compiling all sync streams is a {@link SyncPlan}, a declarative description of the sync process that
13
- * can be serialized to bucket storage. The compiler stores a mutable intermediate representation that is essentially a
14
- * copy of the sync plan, except that we're using JavaScript classes with methods to compute hash codes and equality
15
- * relations. This allows the compiler to efficiently de-duplicate parameters and buckets.
15
+ * The compiler stores a mutable intermediate representation that is essentially a copy of the resulting
16
+ * {@link SyncPlan}. Stream compilation uses JavaScript classes with behavioral equality, while events use plain
17
+ * compiler records. Stream queries and event definitions remain separate within that model.
16
18
  *
17
- * Overall, the compilation process is as follows: Each data query for a stream is first parsed by
19
+ * The stream compilation process is as follows: Each data query for a stream is first parsed by
18
20
  * {@link StreamQueryParser} into a canonicalized intermediate representation (see that class for details).
19
21
  * Then, {@link QuerierGraphBuilder} analyzes a chain of `AND` expressions to identify parameters (as partition keys)
20
22
  * and their instantiation, as well as static filters that need to be added to reach row.
21
23
  */
22
24
  export class SyncStreamsCompiler {
23
25
  options;
24
- output = new CompiledStreamQueries();
26
+ output = {
27
+ streams: new CompiledStreamQueries(),
28
+ events: []
29
+ };
25
30
  locations = new NodeLocations();
26
31
  constructor(options) {
27
32
  this.options = options;
@@ -51,7 +56,7 @@ export class SyncStreamsCompiler {
51
56
  return parser.parseAsSubquery(stmt);
52
57
  }
53
58
  /**
54
- * Utility for compiling a sync stream.
59
+ * Utility for compiling a Sync Stream.
55
60
  *
56
61
  * @param options Name, priority and `auto_subscribe` state for the stream.
57
62
  */
@@ -94,10 +99,108 @@ export class SyncStreamsCompiler {
94
99
  }
95
100
  };
96
101
  }
102
+ /**
103
+ * Compiles the payload queries for a named replication event.
104
+ *
105
+ * Event queries intentionally support a smaller surface than stream queries: They must project and filter a single
106
+ * physical source table and cannot depend on request parameters, joins, subqueries or table-valued functions.
107
+ */
108
+ event(name) {
109
+ const event = { name, sourceQueries: [] };
110
+ this.output.events.push(event);
111
+ return {
112
+ addSourceQuery: (sql, errors) => {
113
+ const stmt = tryParse(sql, errors);
114
+ if (stmt == null) {
115
+ return;
116
+ }
117
+ let statementToCompile = stmt;
118
+ if (this.options.compileEventPayloadFilters === false && stmt.type == 'select' && stmt.where != null) {
119
+ errors.report('`WHERE` clauses in legacy event payload queries are ignored. Redeploy this sync config with edition 3 to validate and enable them.', stmt.where, { isWarning: true });
120
+ statementToCompile = { ...stmt, where: undefined };
121
+ }
122
+ const parser = new StreamQueryParser({
123
+ compiler: this,
124
+ originalText: sql,
125
+ locations: this.locations,
126
+ parentScope: new SqlScope({}),
127
+ errors
128
+ });
129
+ const query = parser.parse(statementToCompile);
130
+ if (query == null) {
131
+ return;
132
+ }
133
+ if (query.joined.length != 0) {
134
+ errors.report('Event payload queries must SELECT from a single physical source table.', query.span.location);
135
+ return;
136
+ }
137
+ const variants = [];
138
+ let valid = true;
139
+ for (const variant of query.where.terms) {
140
+ const filters = [];
141
+ for (const term of variant.terms) {
142
+ if (!(term instanceof SingleDependencyExpression) ||
143
+ term.dependsOnConnection ||
144
+ (term.resultSet != null && term.resultSet !== query.sourceTable)) {
145
+ errors.report('Event payload queries cannot depend on request parameters or other tables.', term instanceof SingleDependencyExpression ? term.expression.location.location : term.location);
146
+ valid = false;
147
+ continue;
148
+ }
149
+ filters.push(new RowExpression(term));
150
+ }
151
+ variants.push(new EventRowEvaluator({
152
+ columns: query.resultColumns,
153
+ syntacticSource: query.sourceTable,
154
+ filters,
155
+ partitionBy: [],
156
+ addedFunctions: []
157
+ }));
158
+ }
159
+ if (valid) {
160
+ event.sourceQueries.push({ sql, sourceTable: query.sourceTable, variants });
161
+ }
162
+ }
163
+ };
164
+ }
165
+ /**
166
+ * @returns A sync plan representing an immutable snapshot of the compiler output.
167
+ */
168
+ toSyncPlan() {
169
+ const translator = new CompilerModelToSyncPlan();
170
+ return translator.translate(this.output);
171
+ }
172
+ }
173
+ /**
174
+ * Compiles raw event definitions from legacy sync plans into the current plan representation.
175
+ *
176
+ * All definitions share one compiler to match normal sync-config compilation. Callers should reject fatal errors
177
+ * rather than carrying invalid legacy event evaluators into a {@link SyncPlan}.
178
+ */
179
+ export function compileEventDefinitions(definitions, options) {
180
+ const compiler = new SyncStreamsCompiler(options);
181
+ const errors = [];
182
+ for (const [name, queries] of Object.entries(definitions)) {
183
+ const event = compiler.event(name);
184
+ for (const sql of queries) {
185
+ event.addSourceQuery(sql, {
186
+ report(message, location, reportOptions) {
187
+ const error = new SqlRuleError(message, sql, location);
188
+ error.type = reportOptions?.isWarning ? 'warning' : 'fatal';
189
+ errors.push(error);
190
+ }
191
+ });
192
+ }
193
+ }
194
+ return { events: compiler.toSyncPlan().events, errors };
97
195
  }
98
196
  function tryParse(sql, errors) {
99
197
  try {
100
- const [stmt] = parse(sql, { locationTracking: true });
198
+ const statements = parse(sql, { locationTracking: true });
199
+ if (statements.length != 1) {
200
+ errors.report('Only a single SELECT statement is supported', statements[1]?._location ?? { start: 0, end: sql.length });
201
+ return null;
202
+ }
203
+ const [stmt] = statements;
101
204
  return stmt;
102
205
  }
103
206
  catch (e) {
@@ -132,12 +235,5 @@ export class CompiledStreamQueries {
132
235
  canonicalizePointLookup(lookup) {
133
236
  return this._pointLookups.getOrInsert(lookup)[0];
134
237
  }
135
- /**
136
- * @returns A sync plan representing an immutable snapshot of this intermediate representation.
137
- */
138
- toSyncPlan() {
139
- const translator = new CompilerModelToSyncPlan();
140
- return translator.translate(this);
141
- }
142
238
  }
143
239
  //# sourceMappingURL=compiler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/compiler/compiler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/compiler/compiler.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import { SqliteParameterValue } from '../types.js';
2
2
  /**
3
- * Stable value-based hashcodes for JavaScript. The sync streams compiler uses hashmaps derived from this to efficiently
3
+ * Stable value-based hashcodes for JavaScript. The Sync Streams compiler uses hashmaps derived from this to efficiently
4
4
  * de-duplicate equivalent expressions and lookups.
5
5
  *
6
6
  * This is copied from Dart SDK sources, which in turn based the algorithm on Jenkins hash functions.
7
7
  *
8
8
  * Because hash codes are stable across restarts, they should not be used for untrusted inputs to avoid attacks
9
9
  * provoking hash collisions and subpar hashmap performance. The sync rules package only uses these hashes to compile
10
- * sync streams, but the compiled IR processing source rows does not need these hashes.
10
+ * Sync Streams, but the compiled IR processing source rows does not need these hashes.
11
11
  */
12
12
  export declare class StableHasher {
13
13
  private static readonly seed;
@@ -1,12 +1,12 @@
1
1
  /**
2
- * Stable value-based hashcodes for JavaScript. The sync streams compiler uses hashmaps derived from this to efficiently
2
+ * Stable value-based hashcodes for JavaScript. The Sync Streams compiler uses hashmaps derived from this to efficiently
3
3
  * de-duplicate equivalent expressions and lookups.
4
4
  *
5
5
  * This is copied from Dart SDK sources, which in turn based the algorithm on Jenkins hash functions.
6
6
  *
7
7
  * Because hash codes are stable across restarts, they should not be used for untrusted inputs to avoid attacks
8
8
  * provoking hash collisions and subpar hashmap performance. The sync rules package only uses these hashes to compile
9
- * sync streams, but the compiled IR processing source rows does not need these hashes.
9
+ * Sync Streams, but the compiled IR processing source rows does not need these hashes.
10
10
  */
11
11
  export class StableHasher {
12
12
  static seed = 614160925; // 'PowerSync'.hashCode on the Dart VM
@@ -1,14 +1,14 @@
1
1
  import { Expr, NodeLocation, PGNode } from 'pgsql-ast-parser';
2
2
  import { SqlExpression } from '../sync_plan/expression.js';
3
3
  import { ConnectionParameterSource } from '../sync_plan/plan.js';
4
- import { EqualsIgnoringResultSet } from './compatibility.js';
4
+ import { EqualsIgnoringPrimaryResultSet, TableValuedFunctionEquality } from './compatibility.js';
5
5
  import { ParsingErrorListener } from './compiler.js';
6
- import { StableHasher } from './equality.js';
6
+ import { Equatable, StableHasher } from './equality.js';
7
7
  import { SourceResultSet } from './table.js';
8
8
  /**
9
9
  * An analyzed SQL expression tracking dependencies on non-static data (i.e. rows or connection sources).
10
10
  *
11
- * Consider the sync stream `SELECT * FROM issues WHERE is_public OR auth.param('is_admin')`. To be able to explicitly
11
+ * Consider the Sync Stream `SELECT * FROM issues WHERE is_public OR auth.param('is_admin')`. To be able to explicitly
12
12
  * track dependencies referenced in expressions, we transform them into a {@link SyncExpression}. For the `WHERE` clause
13
13
  * in that example, the {@link sqlExpression} would be `?1 OR (?2 ->> 'is_admin')`, where `?1` is a {@link ColumnInRow}
14
14
  * and `?2` is a {@link ConnectionParameter}.
@@ -16,7 +16,7 @@ import { SourceResultSet } from './table.js';
16
16
  * Once in this form, it's easy to reason about dependencies in expressions (used to later generate parameter match
17
17
  * clauses) and to evaluate expressions at runtime (by preparing them as a statement and binding external values).
18
18
  */
19
- export declare class SyncExpression implements EqualsIgnoringResultSet {
19
+ export declare class SyncExpression implements EqualsIgnoringPrimaryResultSet {
20
20
  #private;
21
21
  /**
22
22
  * The AST node backing {@link sql}.
@@ -46,26 +46,26 @@ export declare class SyncExpression implements EqualsIgnoringResultSet {
46
46
  * We use this to be able to compose expressions, e.g. to possibly merge them.
47
47
  */
48
48
  node: SqlExpression<ExpressionInput>, locations: NodeLocations);
49
- equalsAssumingSameResultSet(other: EqualsIgnoringResultSet): boolean;
50
- assumingSameResultSetEqualityHashCode(hasher: StableHasher): void;
49
+ equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet, tableValued: TableValuedFunctionEquality): boolean;
50
+ assumingSamePrimaryResultSetEqualityHashCode(tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
51
51
  }
52
52
  export type ExpressionInput = ColumnInRow | RowMetadata | ConnectionParameter;
53
53
  /**
54
54
  * An expression input resolved against a row of a result set: either a column value or metadata about the row's
55
55
  * source table.
56
56
  */
57
- export declare abstract class RowReference implements EqualsIgnoringResultSet {
57
+ export declare abstract class RowReference implements EqualsIgnoringPrimaryResultSet {
58
58
  readonly syntacticOrigin: Expr;
59
59
  readonly resultSet: SourceResultSet;
60
60
  constructor(syntacticOrigin: Expr, resultSet: SourceResultSet);
61
- abstract equalsAssumingSameResultSet(other: EqualsIgnoringResultSet): boolean;
62
- abstract assumingSameResultSetEqualityHashCode(hasher: StableHasher): void;
61
+ abstract equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet, tableValued: TableValuedFunctionEquality): boolean;
62
+ abstract assumingSamePrimaryResultSetEqualityHashCode(tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
63
63
  }
64
64
  export declare class ColumnInRow extends RowReference {
65
65
  readonly column: string;
66
66
  constructor(syntacticOrigin: Expr, resultSet: SourceResultSet, column: string);
67
- equalsAssumingSameResultSet(other: EqualsIgnoringResultSet): boolean;
68
- assumingSameResultSetEqualityHashCode(hasher: StableHasher): void;
67
+ equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet, tableValued: TableValuedFunctionEquality): boolean;
68
+ assumingSamePrimaryResultSetEqualityHashCode(tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
69
69
  }
70
70
  export type RowMetadataKind = 'schema' | 'table_name' | 'table_suffix';
71
71
  /**
@@ -76,21 +76,23 @@ export type RowMetadataKind = 'schema' | 'table_name' | 'table_suffix';
76
76
  export declare class RowMetadata extends RowReference {
77
77
  readonly kind: RowMetadataKind;
78
78
  constructor(syntacticOrigin: Expr, resultSet: SourceResultSet, kind: RowMetadataKind);
79
- equalsAssumingSameResultSet(other: EqualsIgnoringResultSet): boolean;
80
- assumingSameResultSetEqualityHashCode(hasher: StableHasher): void;
79
+ equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet): boolean;
80
+ assumingSamePrimaryResultSetEqualityHashCode(_tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
81
81
  }
82
- export declare class ConnectionParameter implements EqualsIgnoringResultSet {
82
+ export declare class ConnectionParameter implements EqualsIgnoringPrimaryResultSet, Equatable {
83
83
  readonly syntacticOrigin: Expr;
84
84
  readonly source: ConnectionParameterSource;
85
85
  constructor(syntacticOrigin: Expr, source: ConnectionParameterSource);
86
- equalsAssumingSameResultSet(other: EqualsIgnoringResultSet): boolean;
87
- assumingSameResultSetEqualityHashCode(hasher: StableHasher): void;
86
+ equals(other: unknown): boolean;
87
+ buildHash(hasher: StableHasher): void;
88
+ equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet): boolean;
89
+ assumingSamePrimaryResultSetEqualityHashCode(_tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
88
90
  }
89
91
  /**
90
92
  * Tracks the original source location for translated {@link SqlExpression} nodes.
91
93
  *
92
94
  * We want to serialize translated expressions for sync plan, so embedding source offsets in them expands the size of
93
- * sync plans and is tedious. We only need access to node locations while compiling sync streams, which we store in this
95
+ * sync plans and is tedious. We only need access to node locations while compiling Sync Streams, which we store in this
94
96
  * in-memory map.
95
97
  */
96
98
  export declare class NodeLocations {
@@ -102,7 +104,7 @@ export interface SourceLocation {
102
104
  /**
103
105
  * An error reporter that can understand the given {@link location}.
104
106
  *
105
- * Because sync streams might be composed of multiple source statements (like common table expressions) that can
107
+ * Because Sync Streams might be composed of multiple source statements (like common table expressions) that can
106
108
  * ultimately only be fully analyzed together, this is necessary to ensure we can report errors on the correct source
107
109
  * everywhere.
108
110
  */
@@ -1,11 +1,10 @@
1
1
  import { getLocation } from '../errors.js';
2
2
  import { ExpressionToSqlite } from '../sync_plan/expression_to_sql.js';
3
3
  import { RecursiveExpressionVisitor } from '../sync_plan/expression_visitor.js';
4
- import { equalsIgnoringResultSetList } from './compatibility.js';
5
4
  /**
6
5
  * An analyzed SQL expression tracking dependencies on non-static data (i.e. rows or connection sources).
7
6
  *
8
- * Consider the sync stream `SELECT * FROM issues WHERE is_public OR auth.param('is_admin')`. To be able to explicitly
7
+ * Consider the Sync Stream `SELECT * FROM issues WHERE is_public OR auth.param('is_admin')`. To be able to explicitly
9
8
  * track dependencies referenced in expressions, we transform them into a {@link SyncExpression}. For the `WHERE` clause
10
9
  * in that example, the {@link sqlExpression} would be `?1 OR (?2 ->> 'is_admin')`, where `?1` is a {@link ColumnInRow}
11
10
  * and `?2` is a {@link ConnectionParameter}.
@@ -53,14 +52,14 @@ export class SyncExpression {
53
52
  this.node = node;
54
53
  this.locations = locations;
55
54
  }
56
- equalsAssumingSameResultSet(other) {
55
+ equalsAssumingSamePrimaryResultSet(other, tableValued) {
57
56
  return (other instanceof SyncExpression &&
58
57
  other.sql == this.sql &&
59
- equalsIgnoringResultSetList.equals(other.instantiation, this.instantiation));
58
+ tableValued.listEquality.equals(other.instantiation, this.instantiation));
60
59
  }
61
- assumingSameResultSetEqualityHashCode(hasher) {
60
+ assumingSamePrimaryResultSetEqualityHashCode(tableValued, hasher) {
62
61
  hasher.addString(this.sql);
63
- equalsIgnoringResultSetList.hash(hasher, this.instantiation);
62
+ tableValued.listEquality.hash(hasher, this.instantiation);
64
63
  }
65
64
  }
66
65
  class FindExternalData extends RecursiveExpressionVisitor {
@@ -90,11 +89,14 @@ export class ColumnInRow extends RowReference {
90
89
  super(syntacticOrigin, resultSet);
91
90
  this.column = column;
92
91
  }
93
- equalsAssumingSameResultSet(other) {
94
- return other instanceof ColumnInRow && other.column == this.column;
92
+ equalsAssumingSamePrimaryResultSet(other, tableValued) {
93
+ return (other instanceof ColumnInRow &&
94
+ other.column == this.column &&
95
+ tableValued.resultSetEquals(other.resultSet, this.resultSet));
95
96
  }
96
- assumingSameResultSetEqualityHashCode(hasher) {
97
+ assumingSamePrimaryResultSetEqualityHashCode(tableValued, hasher) {
97
98
  hasher.addString(this.column);
99
+ tableValued.hashResultSet(hasher, this.resultSet);
98
100
  }
99
101
  }
100
102
  /**
@@ -108,10 +110,11 @@ export class RowMetadata extends RowReference {
108
110
  super(syntacticOrigin, resultSet);
109
111
  this.kind = kind;
110
112
  }
111
- equalsAssumingSameResultSet(other) {
113
+ equalsAssumingSamePrimaryResultSet(other) {
114
+ // Row metadata is always on the primary result set, so no need to hash the result set here.
112
115
  return other instanceof RowMetadata && other.kind == this.kind;
113
116
  }
114
- assumingSameResultSetEqualityHashCode(hasher) {
117
+ assumingSamePrimaryResultSetEqualityHashCode(_tableValued, hasher) {
115
118
  hasher.addString(`table.${this.kind}`);
116
119
  }
117
120
  }
@@ -122,18 +125,24 @@ export class ConnectionParameter {
122
125
  this.syntacticOrigin = syntacticOrigin;
123
126
  this.source = source;
124
127
  }
125
- equalsAssumingSameResultSet(other) {
128
+ equals(other) {
126
129
  return other instanceof ConnectionParameter && other.source == this.source;
127
130
  }
128
- assumingSameResultSetEqualityHashCode(hasher) {
131
+ buildHash(hasher) {
129
132
  hasher.addString(this.source);
130
133
  }
134
+ equalsAssumingSamePrimaryResultSet(other) {
135
+ return this.equals(other);
136
+ }
137
+ assumingSamePrimaryResultSetEqualityHashCode(_tableValued, hasher) {
138
+ return this.buildHash(hasher);
139
+ }
131
140
  }
132
141
  /**
133
142
  * Tracks the original source location for translated {@link SqlExpression} nodes.
134
143
  *
135
144
  * We want to serialize translated expressions for sync plan, so embedding source offsets in them expands the size of
136
- * sync plans and is tedious. We only need access to node locations while compiling sync streams, which we store in this
145
+ * sync plans and is tedious. We only need access to node locations while compiling Sync Streams, which we store in this
137
146
  * in-memory map.
138
147
  */
139
148
  export class NodeLocations {
@@ -1 +1 @@
1
- {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../src/compiler/expression.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../src/compiler/expression.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { NodeLocation } from 'pgsql-ast-parser';
2
- import { EqualsIgnoringResultSet } from './compatibility.js';
2
+ import { EqualsIgnoringPrimaryResultSet, TableValuedFunctionEquality } from './compatibility.js';
3
3
  import { StableHasher } from './equality.js';
4
4
  import { ExpressionInput, SyncExpression } from './expression.js';
5
5
  import { SourceResultSet } from './table.js';
@@ -21,7 +21,7 @@ export declare function isBaseTerm(value: unknown): value is BaseTerm;
21
21
  /**
22
22
  * A {@link SyncExpression} that only depends on a single result set or connection data.
23
23
  */
24
- export declare class SingleDependencyExpression implements EqualsIgnoringResultSet {
24
+ export declare class SingleDependencyExpression implements EqualsIgnoringPrimaryResultSet {
25
25
  readonly expression: SyncExpression;
26
26
  /**
27
27
  * The single result set on which the expression depends on.
@@ -34,8 +34,8 @@ export declare class SingleDependencyExpression implements EqualsIgnoringResultS
34
34
  */
35
35
  readonly dependsOnConnection: boolean;
36
36
  constructor(expression: SyncExpression | SingleDependencyExpression);
37
- equalsAssumingSameResultSet(other: EqualsIgnoringResultSet): boolean;
38
- assumingSameResultSetEqualityHashCode(hasher: StableHasher): void;
37
+ equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet, tableValued: TableValuedFunctionEquality): boolean;
38
+ assumingSamePrimaryResultSetEqualityHashCode(tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
39
39
  /**
40
40
  * If all inputs have a single dependency, returns either the result set they all depend on or `null` and whether they
41
41
  * depend on connection data.
@@ -35,11 +35,12 @@ export class SingleDependencyExpression {
35
35
  this.dependsOnConnection = expression.dependsOnConnection;
36
36
  }
37
37
  }
38
- equalsAssumingSameResultSet(other) {
39
- return other instanceof SingleDependencyExpression && other.expression.equalsAssumingSameResultSet(this.expression);
38
+ equalsAssumingSamePrimaryResultSet(other, tableValued) {
39
+ return (other instanceof SingleDependencyExpression &&
40
+ other.expression.equalsAssumingSamePrimaryResultSet(this.expression, tableValued));
40
41
  }
41
- assumingSameResultSetEqualityHashCode(hasher) {
42
- this.expression.assumingSameResultSetEqualityHashCode(hasher);
42
+ assumingSamePrimaryResultSetEqualityHashCode(tableValued, hasher) {
43
+ this.expression.assumingSamePrimaryResultSetEqualityHashCode(tableValued, hasher);
43
44
  }
44
45
  /**
45
46
  * If all inputs have a single dependency, returns either the result set they all depend on or `null` and whether they
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/compiler/filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/compiler/filter.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as plan from '../sync_plan/plan.js';
2
- import { CompiledStreamQueries } from './compiler.js';
2
+ import type { SyncPlanCompilerModel } from './compiler.js';
3
3
  export declare class CompilerModelToSyncPlan {
4
4
  private static readonly evaluatorHash;
5
5
  private mappedObjects;
@@ -25,11 +25,12 @@ export declare class CompilerModelToSyncPlan {
25
25
  */
26
26
  private evaluatorsToBuckets;
27
27
  private translateStatefulObject;
28
- translate(source: CompiledStreamQueries): plan.SyncPlan;
28
+ translate(source: SyncPlanCompilerModel): plan.SyncPlan;
29
29
  private createBucketSource;
30
30
  private translatePartitionKey;
31
31
  private translateAddedTableValuedFunctions;
32
32
  private translateRowEvaluator;
33
+ private translateRowProjection;
33
34
  private translatePointLookup;
34
35
  /**
35
36
  * @param expression The expression to translate.
@@ -42,4 +43,5 @@ export declare class CompilerModelToSyncPlan {
42
43
  private translateStreamResolver;
43
44
  private translateExpandingLookup;
44
45
  private translateParameterValue;
46
+ private translateCompiledEvent;
45
47
  }