@powersync/service-sync-rules 0.0.0-dev-20260129132348 → 0.0.0-dev-20260202103935

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 (79) hide show
  1. package/dist/BucketParameterQuerier.d.ts +28 -5
  2. package/dist/BucketParameterQuerier.js +12 -4
  3. package/dist/BucketParameterQuerier.js.map +1 -1
  4. package/dist/SqlParameterQuery.js +0 -2
  5. package/dist/SqlParameterQuery.js.map +1 -1
  6. package/dist/StaticSqlParameterQuery.js +0 -1
  7. package/dist/StaticSqlParameterQuery.js.map +1 -1
  8. package/dist/TablePattern.d.ts +4 -1
  9. package/dist/TablePattern.js +11 -0
  10. package/dist/TablePattern.js.map +1 -1
  11. package/dist/TableValuedFunctionSqlParameterQuery.js +0 -1
  12. package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
  13. package/dist/compiler/bucket_resolver.d.ts +70 -0
  14. package/dist/compiler/bucket_resolver.js +131 -0
  15. package/dist/compiler/bucket_resolver.js.map +1 -0
  16. package/dist/compiler/compatibility.d.ts +16 -0
  17. package/dist/compiler/compatibility.js +12 -0
  18. package/dist/compiler/compatibility.js.map +1 -0
  19. package/dist/compiler/compiler.d.ts +91 -0
  20. package/dist/compiler/compiler.js +113 -0
  21. package/dist/compiler/compiler.js.map +1 -0
  22. package/dist/compiler/equality.d.ts +99 -0
  23. package/dist/compiler/equality.js +284 -0
  24. package/dist/compiler/equality.js.map +1 -0
  25. package/dist/compiler/expression.d.ts +77 -0
  26. package/dist/compiler/expression.js +122 -0
  27. package/dist/compiler/expression.js.map +1 -0
  28. package/dist/compiler/filter.d.ts +71 -0
  29. package/dist/compiler/filter.js +110 -0
  30. package/dist/compiler/filter.js.map +1 -0
  31. package/dist/compiler/filter_simplifier.d.ts +26 -0
  32. package/dist/compiler/filter_simplifier.js +119 -0
  33. package/dist/compiler/filter_simplifier.js.map +1 -0
  34. package/dist/compiler/ir_to_sync_plan.d.ts +37 -0
  35. package/dist/compiler/ir_to_sync_plan.js +163 -0
  36. package/dist/compiler/ir_to_sync_plan.js.map +1 -0
  37. package/dist/compiler/parser.d.ts +99 -0
  38. package/dist/compiler/parser.js +547 -0
  39. package/dist/compiler/parser.js.map +1 -0
  40. package/dist/compiler/querier_graph.d.ts +42 -0
  41. package/dist/compiler/querier_graph.js +365 -0
  42. package/dist/compiler/querier_graph.js.map +1 -0
  43. package/dist/compiler/rows.d.ts +113 -0
  44. package/dist/compiler/rows.js +156 -0
  45. package/dist/compiler/rows.js.map +1 -0
  46. package/dist/compiler/scope.d.ts +22 -0
  47. package/dist/compiler/scope.js +47 -0
  48. package/dist/compiler/scope.js.map +1 -0
  49. package/dist/compiler/sqlite.d.ts +77 -0
  50. package/dist/compiler/sqlite.js +394 -0
  51. package/dist/compiler/sqlite.js.map +1 -0
  52. package/dist/compiler/table.d.ts +50 -0
  53. package/dist/compiler/table.js +57 -0
  54. package/dist/compiler/table.js.map +1 -0
  55. package/dist/errors.d.ts +4 -2
  56. package/dist/errors.js +16 -1
  57. package/dist/errors.js.map +1 -1
  58. package/dist/index.d.ts +3 -0
  59. package/dist/index.js +3 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/sql_functions.d.ts +1 -1
  62. package/dist/streams/variant.js +0 -1
  63. package/dist/streams/variant.js.map +1 -1
  64. package/dist/sync_plan/expression.d.ts +109 -0
  65. package/dist/sync_plan/expression.js +85 -0
  66. package/dist/sync_plan/expression.js.map +1 -0
  67. package/dist/sync_plan/expression_to_sql.d.ts +41 -0
  68. package/dist/sync_plan/expression_to_sql.js +185 -0
  69. package/dist/sync_plan/expression_to_sql.js.map +1 -0
  70. package/dist/sync_plan/expression_visitor.d.ts +57 -0
  71. package/dist/sync_plan/expression_visitor.js +171 -0
  72. package/dist/sync_plan/expression_visitor.js.map +1 -0
  73. package/dist/sync_plan/plan.d.ts +196 -0
  74. package/dist/sync_plan/plan.js +2 -0
  75. package/dist/sync_plan/plan.js.map +1 -0
  76. package/dist/sync_plan/serialize.d.ts +68 -0
  77. package/dist/sync_plan/serialize.js +110 -0
  78. package/dist/sync_plan/serialize.js.map +1 -0
  79. package/package.json +1 -1
@@ -0,0 +1,57 @@
1
+ import { equalsIgnoringResultSetList } from './compatibility.js';
2
+ /**
3
+ * The syntactic sources of a {@link SourceResultSet} being added to a table.
4
+ */
5
+ export class SyntacticResultSetSource {
6
+ origin;
7
+ explicitName;
8
+ constructor(origin, explicitName) {
9
+ this.origin = origin;
10
+ this.explicitName = explicitName;
11
+ }
12
+ }
13
+ export class BaseSourceResultSet {
14
+ source;
15
+ constructor(source) {
16
+ this.source = source;
17
+ }
18
+ }
19
+ /**
20
+ * A {@link SourceResultSet} selecting rows from a table in the source database.
21
+ *
22
+ * The primary result set of streams must be of this type. Also, indexed lookups can only operate on this type.
23
+ */
24
+ export class PhysicalSourceResultSet extends BaseSourceResultSet {
25
+ tablePattern;
26
+ constructor(tablePattern, source) {
27
+ super(source);
28
+ this.tablePattern = tablePattern;
29
+ }
30
+ get description() {
31
+ return this.tablePattern.name;
32
+ }
33
+ }
34
+ /**
35
+ * A {@link SourceResultSet} applying a table-valued function with inputs that exclusively depend on request data.
36
+ */
37
+ export class RequestTableValuedResultSet extends BaseSourceResultSet {
38
+ tableValuedFunctionName;
39
+ parameters;
40
+ constructor(tableValuedFunctionName, parameters, source) {
41
+ super(source);
42
+ this.tableValuedFunctionName = tableValuedFunctionName;
43
+ this.parameters = parameters;
44
+ }
45
+ get description() {
46
+ return this.tableValuedFunctionName;
47
+ }
48
+ buildBehaviorHashCode(hasher) {
49
+ hasher.addString(this.tableValuedFunctionName);
50
+ equalsIgnoringResultSetList.hash(hasher, this.parameters);
51
+ }
52
+ behavesIdenticalTo(other) {
53
+ return (other.tableValuedFunctionName == this.tableValuedFunctionName &&
54
+ equalsIgnoringResultSetList.equals(other.parameters, this.parameters));
55
+ }
56
+ }
57
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/compiler/table.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAgBjE;;GAEG;AACH,MAAM,OAAO,wBAAwB;IAExB;IACA;IAFX,YACW,MAAc,EACd,YAA2B;QAD3B,WAAM,GAAN,MAAM,CAAQ;QACd,iBAAY,GAAZ,YAAY,CAAe;IACnC,CAAC;CACL;AAED,MAAM,OAAgB,mBAAmB;IAClB;IAArB,YAAqB,MAAgC;QAAhC,WAAM,GAAN,MAAM,CAA0B;IAAG,CAAC;CAG1D;AAED;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAEnD;IADX,YACW,YAA0B,EACnC,MAAgC;QAEhC,KAAK,CAAC,MAAM,CAAC,CAAC;QAHL,iBAAY,GAAZ,YAAY,CAAc;IAIrC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,mBAAmB;IAEvD;IACA;IAFX,YACW,uBAA+B,EAC/B,UAA+B,EACxC,MAAgC;QAEhC,KAAK,CAAC,MAAM,CAAC,CAAC;QAJL,4BAAuB,GAAvB,uBAAuB,CAAQ;QAC/B,eAAU,GAAV,UAAU,CAAqB;IAI1C,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACtC,CAAC;IAED,qBAAqB,CAAC,MAAoB;QACxC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC/C,2BAA2B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,kBAAkB,CAAC,KAAkC;QACnD,OAAO,CACL,KAAK,CAAC,uBAAuB,IAAI,IAAI,CAAC,uBAAuB;YAC7D,2BAA2B,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CACtE,CAAC;IACJ,CAAC;CACF"}
package/dist/errors.d.ts CHANGED
@@ -1,13 +1,15 @@
1
- import { Expr, NodeLocation } from 'pgsql-ast-parser';
1
+ import { NodeLocation, PGNode } from 'pgsql-ast-parser';
2
2
  export interface ErrorLocation {
3
3
  start: number;
4
4
  end: number;
5
5
  }
6
+ export declare function expandNodeLocations(nodes: Iterable<PGNode | NodeLocation | undefined>): NodeLocation | undefined;
7
+ export declare function getLocation(location?: NodeLocation | PGNode): NodeLocation | undefined;
6
8
  export declare class SqlRuleError extends Error {
7
9
  sql: string;
8
10
  location?: ErrorLocation;
9
11
  type: 'warning' | 'fatal';
10
- constructor(message: string, sql: string, location?: NodeLocation | Expr);
12
+ constructor(message: string, sql: string, location?: NodeLocation | PGNode);
11
13
  }
12
14
  export declare class YamlError extends Error {
13
15
  source: Error;
package/dist/errors.js CHANGED
@@ -1,5 +1,20 @@
1
1
  import * as yaml from 'yaml';
2
- function getLocation(location) {
2
+ export function expandNodeLocations(nodes) {
3
+ let location = undefined;
4
+ for (const node of nodes) {
5
+ const nodeLocation = getLocation(node);
6
+ if (nodeLocation == null)
7
+ continue;
8
+ if (location == null) {
9
+ location = nodeLocation;
10
+ }
11
+ else {
12
+ location = { start: Math.min(location.start, nodeLocation.start), end: Math.max(location.end, nodeLocation.end) };
13
+ }
14
+ }
15
+ return location;
16
+ }
17
+ export function getLocation(location) {
3
18
  if (location != null && !isLocation(location)) {
4
19
  return location._location;
5
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAO7B,SAAS,WAAW,CAAC,QAA8B;IACjD,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC,SAAS,CAAC;IAC5B,CAAC;SAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,QAA8B;IAChD,OAAO,CACL,QAAQ,IAAI,IAAI;QAChB,OAAQ,QAAyB,CAAC,KAAK,IAAI,QAAQ;QACnD,OAAQ,QAAyB,CAAC,GAAG,IAAI,QAAQ,CAClD,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IAM5B;IALT,QAAQ,CAAiB;IACzB,IAAI,GAAwB,OAAO,CAAC;IAEpC,YACE,OAAe,EACR,GAAW,EAClB,QAA8B;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,QAAG,GAAH,GAAG,CAAQ;QAKlB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACzE,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IAKzB;IAJT,QAAQ,CAAgB;IACxB,IAAI,GAAwB,OAAO,CAAC;IAEpC,YACS,MAAa,EACpB,QAAwB;QAExB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAHf,WAAM,GAAN,MAAM,CAAO;QAKpB,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;YACzD,QAAQ,GAAG;gBACT,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACnB,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC5B,QAAQ,GAAG;gBACT,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,EAAE;aACR,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,YAAY,SAAS,IAAI,MAAM,YAAY,YAAY,EAAE,CAAC;YAClE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAIrB;IAHnB,MAAM,CAAC,gBAAgB,CAAC,MAAmB;QACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,YAAmB,MAAmB;QACpC,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAD/B,WAAM,GAAN,MAAM,CAAa;IAEtC,CAAC;CACF;AAGD,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACzC,IAAI,CAAqB;IAEhC,YAAY,IAAwB,EAAE,OAAe;QACnD,KAAK,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -29,3 +29,6 @@ export * from './types/time.js';
29
29
  export * from './utils.js';
30
30
  export { versionedHydrationState } from './HydrationState.js';
31
31
  export * from './HydratedSyncRules.js';
32
+ export * from './compiler/compiler.js';
33
+ export * from './sync_plan/plan.js';
34
+ export { serializeSyncPlan } from './sync_plan/serialize.js';
package/dist/index.js CHANGED
@@ -29,4 +29,7 @@ export * from './types/time.js';
29
29
  export * from './utils.js';
30
30
  export { versionedHydrationState } from './HydrationState.js';
31
31
  export * from './HydratedSyncRules.js';
32
+ export * from './compiler/compiler.js';
33
+ export * from './sync_plan/plan.js';
34
+ export { serializeSyncPlan } from './sync_plan/serialize.js';
32
35
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0CAA0C,CAAC;AACzD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0CAA0C,CAAC;AACzD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,cAAc,wBAAwB,CAAC;AAEvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -21,7 +21,7 @@ export interface DocumentedSqlFunction extends SqlFunction {
21
21
  export declare function getOperatorFunction(op: string): SqlFunction;
22
22
  export declare function generateSqlFunctions(compatibility: CompatibilityContext): {
23
23
  named: Record<string, DocumentedSqlFunction>;
24
- callable: Record<"substring" | "length" | "upper" | "lower" | "hex" | "base64" | "uuid_blob" | "typeof" | "ifnull" | "iif" | "json_valid" | "json_keys" | "unixepoch" | "datetime" | "st_asgeojson" | "st_astext" | "st_x" | "st_y" | "json_extract" | "json_array_length", (...args: SqliteValue[]) => SqliteValue>;
24
+ callable: Record<"length" | "substring" | "hex" | "ifnull" | "iif" | "lower" | "typeof" | "upper" | "json_array_length" | "json_extract" | "json_valid" | "unixepoch" | "datetime" | "base64" | "json_keys" | "uuid_blob" | "st_asgeojson" | "st_astext" | "st_x" | "st_y", (...args: SqliteValue[]) => SqliteValue>;
25
25
  jsonExtract: (sourceValue: SqliteValue, path: SqliteValue, operator: string) => SqliteValue;
26
26
  jsonExtractFromRecord: (value: any, path: SqliteValue, operator: string) => SqliteValue;
27
27
  operatorJsonExtractJson: SqlFunction;
@@ -132,7 +132,6 @@ export class StreamVariant {
132
132
  return {
133
133
  staticBuckets: staticBuckets,
134
134
  hasDynamicBuckets: this.subqueries.length != 0,
135
- parameterQueryLookups: [...subqueryToLookups.values()].flatMap((f) => f),
136
135
  async queryDynamicBucketDescriptions(source) {
137
136
  // Evaluate subqueries
138
137
  const subqueryResults = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"variant.js","sourceRoot":"","sources":["../../src/streams/variant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"variant.js","sourceRoot":"","sources":["../../src/streams/variant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * An enumeration of all scalar SQL expressions supported by the sync service.
3
+ *
4
+ * Note that these expressions can be serialized, and the evaluation of serialized expressions must be stable.
5
+ *
6
+ * The `Data` type parameter encodes what external data references an {@link ExternalData} node may reference: Bucket
7
+ * data sources can only reference row data (e.g. to evaluate filters), while queriers can only reference connection
8
+ * data. Adding the parameter to expressions ensures the entire subtree can only reference expected sources.
9
+ */
10
+ export type SqlExpression<Data> = ExternalData<Data> | UnaryExpression<Data> | BinaryExpression<Data> | BetweenExpression<Data> | ScalarInExpression<Data> | CaseWhenExpression<Data> | CastExpression<Data> | ScalarFunctionCallExpression<Data> | LiteralExpression;
11
+ /**
12
+ * External data injected into the expression during evaluation.
13
+ *
14
+ * What kinds of external data is allowed depends on the expression. For instance, expressions for bucket data sources
15
+ * may only reference columns in the current row.
16
+ */
17
+ export type ExternalData<Data> = {
18
+ type: 'data';
19
+ source: Data;
20
+ };
21
+ export type UnaryOperator = 'not' | '~' | '+' | '-';
22
+ export type UnaryExpression<Data> = {
23
+ type: 'unary';
24
+ operand: SqlExpression<Data>;
25
+ operator: UnaryOperator;
26
+ };
27
+ export type BinaryOperator = 'or' | 'and' | '=' | 'is' | '<' | '<=' | '>' | '>=' | '&' | '|' | '<<' | '>>' | '+' | '-' | '*' | '/' | '%' | '||';
28
+ /**
29
+ * A binary expression in SQLite, `$left $op $right`.
30
+ *
31
+ * Note that the `LIKE`, `GLOB`, `REGEXP` and `MATCH`, `->` and `->>` operators are not represented as binary
32
+ * expressions but rather as the functions SQLite [would call for them](https://www.sqlite.org/lang_expr.html#the_like_glob_regexp_match_and_extract_operators).
33
+ * Also, note that negated operators (e.g. `!=` or `NOT IN`) are represented by wrapping the expression in a unary
34
+ * `NOT`. This makes transformations to DNF easier.
35
+ */
36
+ export type BinaryExpression<Data> = {
37
+ type: 'binary';
38
+ left: SqlExpression<Data>;
39
+ operator: BinaryOperator;
40
+ right: SqlExpression<Data>;
41
+ };
42
+ export type BetweenExpression<Data> = {
43
+ type: 'between';
44
+ value: SqlExpression<Data>;
45
+ low: SqlExpression<Data>;
46
+ high: SqlExpression<Data>;
47
+ };
48
+ /**
49
+ * An `expr IN ($in0, $in1, ..., $inN)` expression.
50
+ */
51
+ export type ScalarInExpression<Data> = {
52
+ type: 'scalar_in';
53
+ target: SqlExpression<Data>;
54
+ in: SqlExpression<Data>[];
55
+ };
56
+ /**
57
+ * A `CASE WHEN` expression as supported by SQLite.
58
+ */
59
+ export type CaseWhenExpression<Data> = {
60
+ type: 'case_when';
61
+ operand?: SqlExpression<Data>;
62
+ whens: {
63
+ when: SqlExpression<Data>;
64
+ then: SqlExpression<Data>;
65
+ }[];
66
+ else?: SqlExpression<Data>;
67
+ };
68
+ /**
69
+ * A `CAST` expression.
70
+ */
71
+ export type CastExpression<Data> = {
72
+ type: 'cast';
73
+ operand: SqlExpression<Data>;
74
+ cast_as: 'string' | 'numeric' | 'real' | 'integer' | 'blob';
75
+ };
76
+ /**
77
+ * A constant literal in SQL.
78
+ */
79
+ export type LiteralExpression = {
80
+ type: 'lit_null';
81
+ } | {
82
+ type: 'lit_double';
83
+ value: number;
84
+ } | {
85
+ type: 'lit_int';
86
+ /**
87
+ * The integer value as a base 10 string. We don't use the correct `bigint` type to be able to serialize and
88
+ * deserialize with the default JSON implementation.
89
+ */
90
+ base10: string;
91
+ } | {
92
+ type: 'lit_string';
93
+ value: string;
94
+ };
95
+ /**
96
+ * A scalar (non-aggregate, non-window, non-table-valued) function call in SQL.
97
+ */
98
+ export type ScalarFunctionCallExpression<Data> = {
99
+ type: 'function';
100
+ function: string;
101
+ parameters: SqlExpression<Data>[];
102
+ };
103
+ export type ArgumentCount = number | {
104
+ min: number;
105
+ max?: number;
106
+ mustBeEven?: boolean;
107
+ mustBeOdd?: boolean;
108
+ };
109
+ export declare const supportedFunctions: Record<string, ArgumentCount>;
@@ -0,0 +1,85 @@
1
+ export const supportedFunctions = {
2
+ // https://sqlite.org/lang_corefunc.html#list_of_core_functions
3
+ abs: 1,
4
+ char: { min: 0 },
5
+ coalesce: { min: 2 },
6
+ concat: { min: 1 },
7
+ concat_ws: { min: 2 },
8
+ format: { min: 1 },
9
+ glob: 2,
10
+ hex: 1,
11
+ ifnull: { min: 2 },
12
+ if: { min: 2 },
13
+ iif: { min: 2 },
14
+ instr: 2,
15
+ length: 1,
16
+ // TODO: Establish defaults for case sensitivity, changing escape characters, ICU support.
17
+ // We might just want to remove LIKE support since we don't seem to have it in sql_functions.ts
18
+ like: { min: 2, max: 3 },
19
+ // likelihood: 2,
20
+ // likely: 1,
21
+ lower: 1,
22
+ ltrim: { min: 1, max: 2 },
23
+ max: { min: 2 },
24
+ min: { min: 2 },
25
+ nullif: 2,
26
+ octet_length: 1,
27
+ printf: { min: 1 },
28
+ quote: 1,
29
+ replace: 3,
30
+ round: { min: 1, max: 2 },
31
+ rtrim: { min: 1, max: 2 },
32
+ sign: 1,
33
+ substr: { min: 2, max: 3 },
34
+ substring: { min: 2, max: 3 },
35
+ trim: { min: 1, max: 2 },
36
+ typeof: 1,
37
+ unhex: { min: 1, max: 2 },
38
+ unicode: 1,
39
+ unistr: 1,
40
+ unistr_quote: 1,
41
+ // unlikely: 1,
42
+ upper: 1,
43
+ zeroblob: 1,
44
+ // Scalar functions from https://sqlite.org/json1.html#overview
45
+ // We disallow jsonb functions because they're not implemented in sql_functions.ts and we want to preserve
46
+ // compatibility with that.
47
+ json: 1,
48
+ // jsonb: 1,
49
+ json_array: { min: 0 },
50
+ // jsonb_array: { min: 0 },
51
+ json_array_length: { min: 1, max: 2 },
52
+ json_error_position: 1,
53
+ json_extract: { min: 2 },
54
+ // jsonb_extract: { min: 2 },
55
+ json_insert: { min: 3, mustBeOdd: true },
56
+ // jsonb_insert: { min: 3, mustBeOdd: true },
57
+ json_object: { min: 0, mustBeEven: true },
58
+ // jsonb_object: { min: 0, mustBeEven: true },
59
+ json_patch: 2,
60
+ // jsonb_patch: 2,
61
+ json_pretty: 1,
62
+ json_remove: { min: 2 },
63
+ // jsonb_remove: { min: 2 },
64
+ json_replace: { min: 3, mustBeOdd: true },
65
+ // jsonb_replace: { min: 3, mustBeOdd: true },
66
+ json_set: { min: 3, mustBeOdd: true },
67
+ // jsonb_set: { min: 3, mustBeOdd: true },
68
+ json_type: { min: 1, max: 2 },
69
+ json_valid: { min: 1, max: 2 },
70
+ json_quote: { min: 1 },
71
+ // https://www.sqlite.org/lang_datefunc.html, but we only support datetime and unixepoch
72
+ // TODO: Ensure our support matches the current unixepoch behavior in sql_functions.ts, register as user-defined
73
+ // function to patch default if in doubt.
74
+ unixepoch: { min: 1 },
75
+ datetime: { min: 1 },
76
+ // PowerSync-specific, mentioned in https://docs.powersync.com/sync/rules/supported-sql#functions
77
+ base64: 1,
78
+ json_keys: 1,
79
+ uuid_blob: 1,
80
+ ST_AsGeoJSON: 1,
81
+ ST_AsText: 1,
82
+ ST_X: 1,
83
+ ST_: 1
84
+ };
85
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../src/sync_plan/expression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { BetweenExpression, BinaryExpression, CaseWhenExpression, CastExpression, LiteralExpression, ScalarFunctionCallExpression, ScalarInExpression, SqlExpression, UnaryExpression } from './expression.js';
2
+ import { ExpressionVisitor } from './expression_visitor.js';
3
+ /**
4
+ * Renders {@link SqlExpression}s into SQL text supported by SQLite.
5
+ */
6
+ export declare class ExpressionToSqlite<Data> implements ExpressionVisitor<Data, void, Precedence | 0> {
7
+ sql: string;
8
+ private needsSpace;
9
+ addExpression(expr: SqlExpression<Data>, precedence?: Precedence | 0): void;
10
+ private space;
11
+ private addLexeme;
12
+ private identifier;
13
+ private string;
14
+ private commaSeparated;
15
+ private parenthesis;
16
+ private maybeParenthesis;
17
+ visitExternalData(): void;
18
+ visitUnaryExpression(expr: UnaryExpression<Data>, outerPrecedence: Precedence | 0): void;
19
+ visitBinaryExpression(expr: BinaryExpression<Data>, outerPrecedence: Precedence | 0): void;
20
+ visitBetweenExpression(expr: BetweenExpression<Data>, outerPrecedence: 0 | Precedence): void;
21
+ visitScalarInExpression(expr: ScalarInExpression<Data>, arg: Precedence | 0): void;
22
+ visitCaseWhenExpression(expr: CaseWhenExpression<Data>, arg: Precedence | 0): void;
23
+ visitCastExpression(expr: CastExpression<Data>, arg: Precedence | 0): void;
24
+ visitScalarFunctionCallExpression(expr: ScalarFunctionCallExpression<Data>, arg: Precedence | 0): void;
25
+ visitLiteralExpression(expr: LiteralExpression, arg: Precedence | 0): void;
26
+ static toSqlite(expr: SqlExpression<unknown>): string;
27
+ }
28
+ declare enum Precedence {
29
+ or = 1,
30
+ and = 2,
31
+ not = 3,
32
+ equals = 4,
33
+ comparison = 5,
34
+ binary = 6,
35
+ addition = 7,
36
+ multiplication = 8,
37
+ concat = 9,
38
+ collate = 10,
39
+ unary = 11
40
+ }
41
+ export {};
@@ -0,0 +1,185 @@
1
+ import { visitExpr } from './expression_visitor.js';
2
+ /**
3
+ * Renders {@link SqlExpression}s into SQL text supported by SQLite.
4
+ */
5
+ export class ExpressionToSqlite {
6
+ sql = '';
7
+ needsSpace = false;
8
+ addExpression(expr, precedence = 0) {
9
+ visitExpr(this, expr, precedence);
10
+ }
11
+ space() {
12
+ this.sql += ' ';
13
+ }
14
+ addLexeme(text, options) {
15
+ const spaceLeft = options?.spaceLeft ?? true;
16
+ const spaceRight = options?.spaceRight ?? true;
17
+ if (this.needsSpace && spaceLeft) {
18
+ this.space();
19
+ }
20
+ const startOffset = this.sql.length;
21
+ this.sql += text;
22
+ this.needsSpace = spaceRight;
23
+ return startOffset;
24
+ }
25
+ identifier(name) {
26
+ this.addLexeme(`"${name.replaceAll('"', '""')}"`);
27
+ }
28
+ string(name) {
29
+ this.addLexeme(`'${name.replaceAll("'", "''")}'`);
30
+ }
31
+ commaSeparated(exprList) {
32
+ let first = true;
33
+ for (const expr of exprList) {
34
+ if (!first) {
35
+ this.addLexeme(',', { spaceLeft: false });
36
+ }
37
+ this.addExpression(expr);
38
+ first = false;
39
+ }
40
+ }
41
+ parenthesis(inner) {
42
+ this.addLexeme('(', { spaceRight: false });
43
+ inner();
44
+ this.addLexeme(')', { spaceLeft: false });
45
+ }
46
+ maybeParenthesis(outerPrecedence, innerPrecedence, inner) {
47
+ if (outerPrecedence > innerPrecedence) {
48
+ this.parenthesis(inner);
49
+ }
50
+ else {
51
+ inner();
52
+ }
53
+ }
54
+ visitExternalData() {
55
+ this.addLexeme('?');
56
+ }
57
+ visitUnaryExpression(expr, outerPrecedence) {
58
+ const innerPrecedence = unaryPrecedence[expr.operator];
59
+ this.maybeParenthesis(outerPrecedence, innerPrecedence, () => {
60
+ this.addLexeme(expr.operator);
61
+ this.addExpression(expr.operand, innerPrecedence);
62
+ });
63
+ }
64
+ visitBinaryExpression(expr, outerPrecedence) {
65
+ const innerPrecedence = binaryPrecedence[expr.operator];
66
+ this.maybeParenthesis(outerPrecedence, innerPrecedence, () => {
67
+ this.addExpression(expr.left, innerPrecedence);
68
+ this.addLexeme(expr.operator);
69
+ this.addExpression(expr.right, innerPrecedence);
70
+ });
71
+ }
72
+ visitBetweenExpression(expr, outerPrecedence) {
73
+ const innerPrecedence = Precedence.equals;
74
+ this.maybeParenthesis(outerPrecedence, innerPrecedence, () => {
75
+ this.addExpression(expr.value, Precedence.equals);
76
+ this.addLexeme('BETWEEN');
77
+ this.addExpression(expr.low, Precedence.equals);
78
+ this.addLexeme('AND');
79
+ this.addExpression(expr.high, Precedence.equals);
80
+ });
81
+ }
82
+ visitScalarInExpression(expr, arg) {
83
+ if (expr.in.length == 0) {
84
+ // x IN () is invalid, but it can't be true either way.
85
+ this.addLexeme('FALSE');
86
+ return;
87
+ }
88
+ this.maybeParenthesis(arg, Precedence.equals, () => {
89
+ this.addExpression(expr.target, Precedence.equals);
90
+ this.addLexeme('IN');
91
+ this.parenthesis(() => this.commaSeparated(expr.in));
92
+ });
93
+ }
94
+ visitCaseWhenExpression(expr, arg) {
95
+ this.addLexeme('CASE');
96
+ if (expr.operand) {
97
+ this.addExpression(expr.operand);
98
+ }
99
+ for (const when of expr.whens) {
100
+ this.addLexeme('WHEN');
101
+ this.addExpression(when.when);
102
+ this.addLexeme('THEN');
103
+ this.addExpression(when.then);
104
+ }
105
+ if (expr.else) {
106
+ this.addLexeme('ELSE');
107
+ this.addExpression(expr.else);
108
+ }
109
+ this.addLexeme('END');
110
+ }
111
+ visitCastExpression(expr, arg) {
112
+ this.addLexeme('CAST(', { spaceRight: false });
113
+ this.addExpression(expr.operand);
114
+ this.addLexeme('AS');
115
+ this.addLexeme(expr.cast_as);
116
+ this.addLexeme(')', { spaceLeft: false });
117
+ }
118
+ visitScalarFunctionCallExpression(expr, arg) {
119
+ this.identifier(expr.function);
120
+ this.addLexeme('(', { spaceLeft: false, spaceRight: false });
121
+ this.commaSeparated(expr.parameters);
122
+ this.addLexeme(')', { spaceLeft: false });
123
+ }
124
+ visitLiteralExpression(expr, arg) {
125
+ if (expr.type == 'lit_null') {
126
+ this.addLexeme('NULL');
127
+ }
128
+ else if (expr.type == 'lit_double') {
129
+ this.addLexeme(expr.value.toString());
130
+ }
131
+ else if (expr.type == 'lit_int') {
132
+ this.addLexeme(expr.base10);
133
+ }
134
+ else {
135
+ this.string(expr.value);
136
+ }
137
+ }
138
+ static toSqlite(expr) {
139
+ const visitor = new ExpressionToSqlite();
140
+ visitor.addExpression(expr);
141
+ return visitor.sql;
142
+ }
143
+ }
144
+ var Precedence;
145
+ (function (Precedence) {
146
+ Precedence[Precedence["or"] = 1] = "or";
147
+ Precedence[Precedence["and"] = 2] = "and";
148
+ Precedence[Precedence["not"] = 3] = "not";
149
+ Precedence[Precedence["equals"] = 4] = "equals";
150
+ Precedence[Precedence["comparison"] = 5] = "comparison";
151
+ Precedence[Precedence["binary"] = 6] = "binary";
152
+ Precedence[Precedence["addition"] = 7] = "addition";
153
+ Precedence[Precedence["multiplication"] = 8] = "multiplication";
154
+ Precedence[Precedence["concat"] = 9] = "concat";
155
+ Precedence[Precedence["collate"] = 10] = "collate";
156
+ Precedence[Precedence["unary"] = 11] = "unary";
157
+ })(Precedence || (Precedence = {}));
158
+ // https://www.sqlite.org/lang_expr.html#operators_and_parse_affecting_attributes
159
+ const binaryPrecedence = {
160
+ or: Precedence.or,
161
+ and: Precedence.and,
162
+ '=': Precedence.equals,
163
+ is: Precedence.equals,
164
+ '<': Precedence.comparison,
165
+ '>': Precedence.comparison,
166
+ '<=': Precedence.comparison,
167
+ '>=': Precedence.comparison,
168
+ '&': Precedence.binary,
169
+ '|': Precedence.binary,
170
+ '<<': Precedence.binary,
171
+ '>>': Precedence.binary,
172
+ '+': Precedence.addition,
173
+ '-': Precedence.addition,
174
+ '*': Precedence.multiplication,
175
+ '/': Precedence.multiplication,
176
+ '%': Precedence.multiplication,
177
+ '||': Precedence.concat
178
+ };
179
+ const unaryPrecedence = {
180
+ not: Precedence.not,
181
+ '~': Precedence.unary,
182
+ '+': Precedence.unary,
183
+ '-': Precedence.unary
184
+ };
185
+ //# sourceMappingURL=expression_to_sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression_to_sql.js","sourceRoot":"","sources":["../../src/sync_plan/expression_to_sql.ts"],"names":[],"mappings":"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"}