@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.
- package/dist/BucketParameterQuerier.d.ts +28 -5
- package/dist/BucketParameterQuerier.js +12 -4
- package/dist/BucketParameterQuerier.js.map +1 -1
- package/dist/SqlParameterQuery.js +0 -2
- package/dist/SqlParameterQuery.js.map +1 -1
- package/dist/StaticSqlParameterQuery.js +0 -1
- package/dist/StaticSqlParameterQuery.js.map +1 -1
- package/dist/TablePattern.d.ts +4 -1
- package/dist/TablePattern.js +11 -0
- package/dist/TablePattern.js.map +1 -1
- package/dist/TableValuedFunctionSqlParameterQuery.js +0 -1
- package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
- package/dist/compiler/bucket_resolver.d.ts +70 -0
- package/dist/compiler/bucket_resolver.js +131 -0
- package/dist/compiler/bucket_resolver.js.map +1 -0
- package/dist/compiler/compatibility.d.ts +16 -0
- package/dist/compiler/compatibility.js +12 -0
- package/dist/compiler/compatibility.js.map +1 -0
- package/dist/compiler/compiler.d.ts +91 -0
- package/dist/compiler/compiler.js +113 -0
- package/dist/compiler/compiler.js.map +1 -0
- package/dist/compiler/equality.d.ts +99 -0
- package/dist/compiler/equality.js +284 -0
- package/dist/compiler/equality.js.map +1 -0
- package/dist/compiler/expression.d.ts +77 -0
- package/dist/compiler/expression.js +122 -0
- package/dist/compiler/expression.js.map +1 -0
- package/dist/compiler/filter.d.ts +71 -0
- package/dist/compiler/filter.js +110 -0
- package/dist/compiler/filter.js.map +1 -0
- package/dist/compiler/filter_simplifier.d.ts +26 -0
- package/dist/compiler/filter_simplifier.js +119 -0
- package/dist/compiler/filter_simplifier.js.map +1 -0
- package/dist/compiler/ir_to_sync_plan.d.ts +37 -0
- package/dist/compiler/ir_to_sync_plan.js +163 -0
- package/dist/compiler/ir_to_sync_plan.js.map +1 -0
- package/dist/compiler/parser.d.ts +99 -0
- package/dist/compiler/parser.js +547 -0
- package/dist/compiler/parser.js.map +1 -0
- package/dist/compiler/querier_graph.d.ts +42 -0
- package/dist/compiler/querier_graph.js +365 -0
- package/dist/compiler/querier_graph.js.map +1 -0
- package/dist/compiler/rows.d.ts +113 -0
- package/dist/compiler/rows.js +156 -0
- package/dist/compiler/rows.js.map +1 -0
- package/dist/compiler/scope.d.ts +22 -0
- package/dist/compiler/scope.js +47 -0
- package/dist/compiler/scope.js.map +1 -0
- package/dist/compiler/sqlite.d.ts +77 -0
- package/dist/compiler/sqlite.js +394 -0
- package/dist/compiler/sqlite.js.map +1 -0
- package/dist/compiler/table.d.ts +50 -0
- package/dist/compiler/table.js +57 -0
- package/dist/compiler/table.js.map +1 -0
- package/dist/errors.d.ts +4 -2
- package/dist/errors.js +16 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/sql_functions.d.ts +1 -1
- package/dist/streams/variant.js +0 -1
- package/dist/streams/variant.js.map +1 -1
- package/dist/sync_plan/expression.d.ts +109 -0
- package/dist/sync_plan/expression.js +85 -0
- package/dist/sync_plan/expression.js.map +1 -0
- package/dist/sync_plan/expression_to_sql.d.ts +41 -0
- package/dist/sync_plan/expression_to_sql.js +185 -0
- package/dist/sync_plan/expression_to_sql.js.map +1 -0
- package/dist/sync_plan/expression_visitor.d.ts +57 -0
- package/dist/sync_plan/expression_visitor.js +171 -0
- package/dist/sync_plan/expression_visitor.js.map +1 -0
- package/dist/sync_plan/plan.d.ts +196 -0
- package/dist/sync_plan/plan.js +2 -0
- package/dist/sync_plan/plan.js.map +1 -0
- package/dist/sync_plan/serialize.d.ts +68 -0
- package/dist/sync_plan/serialize.js +110 -0
- package/dist/sync_plan/serialize.js.map +1 -0
- 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 {
|
|
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 |
|
|
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
|
|
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
|
}
|
package/dist/errors.js.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/sql_functions.d.ts
CHANGED
|
@@ -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<"
|
|
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;
|
package/dist/streams/variant.js
CHANGED
|
@@ -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":"AAMA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,aAAa;IACxB,EAAE,CAAS;IACX,UAAU,CAAoB;IAC9B,UAAU,CAAsB;IAEhC;;;;OAIG;IACH,oBAAoB,CAAiC;IAErD;;;;;OAKG;IACH,cAAc,CAAkB;IAEhC,YAAY,EAAU;QACpB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,mBAAmB,CAAC,UAAkB;QACpC,OAAO,GAAG,UAAU,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;IACpC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,OAAiB;QACtC,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;IACpG,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,OAAiB;QACpC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACnD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,gHAAgH;QAChH,0DAA0D;QAC1D,MAAM,uBAAuB,GAAwB,EAAE,CAAC;QACxD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACzB,+GAA+G;gBAC/G,+DAA+D;gBAC/D,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,8FAA8F;QAC9F,0BAA0B;QAC1B,OAAO,IAAI,CAAC,yCAAyC,CAAC,uBAAuB,CAAC,CAAC;IACjF,CAAC;IAED;;;;;;OAMG;IACK,yCAAyC,CAAC,cAAmC;QACnF,OAAO,CAAC,GAAG,gBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CACL,MAAkB,EAClB,MAA6B,EAC7B,MAAyB,EACzB,WAA4B,EAC5B,kBAAsC;QAEtC,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAOD,MAAM,qBAAqB,GAA4B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;QAC9G,MAAM,iBAAiB,GAA+B,EAAE,CAAC;QACzD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA8C,CAAC;QAEhF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAEhC,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;gBACpD,iBAAiB,CAAC,IAAI,CAAC;oBACrB,KAAK,EAAE,CAAC;oBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YACD,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,aAAa,GAAqB,EAAE,CAAC;QAC3C,IAAI,iBAAiB,CAAC,MAAM,IAAI,CAAC,IAAI,qBAAqB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvE,sFAAsF;YACtF,MAAM,cAAc,GAAG,IAAI,CAAC,yCAAyC,CAAC,aAAoC,CAAC,CAAC;YAC5G,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC;QACrB,OAAO;YACL,aAAa,EAAE,aAAa;YAC5B,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;YAC9C,
|
|
1
|
+
{"version":3,"file":"variant.js","sourceRoot":"","sources":["../../src/streams/variant.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,aAAa;IACxB,EAAE,CAAS;IACX,UAAU,CAAoB;IAC9B,UAAU,CAAsB;IAEhC;;;;OAIG;IACH,oBAAoB,CAAiC;IAErD;;;;;OAKG;IACH,cAAc,CAAkB;IAEhC,YAAY,EAAU;QACpB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,mBAAmB,CAAC,UAAkB;QACpC,OAAO,GAAG,UAAU,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;IACpC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,OAAiB;QACtC,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;IACpG,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,OAAiB;QACpC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACnD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,gHAAgH;QAChH,0DAA0D;QAC1D,MAAM,uBAAuB,GAAwB,EAAE,CAAC;QACxD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACzB,+GAA+G;gBAC/G,+DAA+D;gBAC/D,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,8FAA8F;QAC9F,0BAA0B;QAC1B,OAAO,IAAI,CAAC,yCAAyC,CAAC,uBAAuB,CAAC,CAAC;IACjF,CAAC;IAED;;;;;;OAMG;IACK,yCAAyC,CAAC,cAAmC;QACnF,OAAO,CAAC,GAAG,gBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CACL,MAAkB,EAClB,MAA6B,EAC7B,MAAyB,EACzB,WAA4B,EAC5B,kBAAsC;QAEtC,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAOD,MAAM,qBAAqB,GAA4B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;QAC9G,MAAM,iBAAiB,GAA+B,EAAE,CAAC;QACzD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA8C,CAAC;QAEhF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAEhC,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;gBACpD,iBAAiB,CAAC,IAAI,CAAC;oBACrB,KAAK,EAAE,CAAC;oBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YACD,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,aAAa,GAAqB,EAAE,CAAC;QAC3C,IAAI,iBAAiB,CAAC,MAAM,IAAI,CAAC,IAAI,qBAAqB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvE,sFAAsF;YACtF,MAAM,cAAc,GAAG,IAAI,CAAC,yCAAyC,CAAC,aAAoC,CAAC,CAAC;YAC5G,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC;QACrB,OAAO;YACL,aAAa,EAAE,aAAa;YAC5B,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;YAC9C,KAAK,CAAC,8BAA8B,CAAC,MAAM;gBACzC,sBAAsB;gBACtB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAwC,CAAC;gBACxE,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBACpD,kGAAkG;oBAClG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBACzC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACxC,CAAC;gBAED,sEAAsE;gBACtE,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE,CAAC;oBAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAE,CAAC,EAAE,CAAC;wBACnE,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC;gBAED,MAAM,yBAAyB,GAA4C,EAAE,CAAC;gBAC9E,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;oBACtC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC7B,6BAA6B;wBAC7B,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5C,CAAC;yBAAM,CAAC;wBACN,yCAAyC;wBACzC,yBAAyB,CAAC,IAAI,CAAC,CAAC,SAA4B,CAAC,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;oBACvC,yBAAyB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAE,CAAC;gBAClF,CAAC;gBAED,MAAM,OAAO,GAAG,OAAO,CAAC,yCAAyC,CAC/D,yBAAgD,CACjD,CAAC;gBAEF,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;YACpG,CAAC;SACF,CAAC;IACJ,CAAC;IAED,wBAAwB,CAAC,MAAyB;QAChD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,yCAAyC;QACnD,qGAAqG;QACrG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAwB,CAChE,CAAC;IACJ,CAAC;IAED,mBAAmB;QACjB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;aACpB,CAAC,CAAC;YACH,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,KAAK,EAAE,CAAC,CAAC,cAAc;aACxB,CAAC,CAAC;YACH,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;YACxD,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACxD,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,2BAA2B,CAAC,MAAyB;QAC3D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAA4C,EAAE,CAAC;QAClE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC/D,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACvB,6GAA6G;oBAC7G,oDAAoD;oBACpD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;;;OAOG;IACK,yBAAyB,CAAC,aAAgC;QAChE,IAAI,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACnD,MAAM,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,uBAAuB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC;IAEO,aAAa,CACnB,MAAkB,EAClB,aAAgC,EAChC,MAA6B,EAC7B,WAA4B;QAE5B,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,iBAAiB,EAAE,CAAC,MAAM,CAAC;YAC3B,MAAM,EAAE,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;YACnF,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;IAED,4BAA4B,CAC1B,MAA0B,EAC1B,MAAkB,EAClB,iBAAmC;QAEnC,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC7C,MAAM,WAAW,GAAG,cAAc,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QAE3E,MAAM,kBAAkB,GAAuB,IAAI,GAAG,CACpD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC,CAAC,CAC5E,CAAC;QAEF,OAAO;YACL,2BAA2B,EAAE,CAAC,MAAuB,EAAE,OAA0B,EAAQ,EAAE;gBACzF,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAEzD,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;oBAC3D,sFAAsF;oBACtF,OAAO;gBACT,CAAC;gBAED,IAAI,8BAA8B,GAAG,KAAK,CAAC;gBAC3C,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;oBACzC,IAAI,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC;oBAClD,IAAI,YAAY,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;wBACpC,kBAAkB,GAAG,kBAAkB,CAAC,yBAAyB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBAC7F,CAAC;yBAAM,CAAC;wBACN,8BAA8B,GAAG,IAAI,CAAC;oBACxC,CAAC;oBAED,IAAI,CAAC,uBAAuB,CAC1B,MAAM,EACN,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,kBAAkB,CACnB,CAAC;gBACJ,CAAC;gBAED,+GAA+G;gBAC/G,kDAAkD;gBAClD,IAAI,MAAM,CAAC,qBAAqB,IAAI,CAAC,8BAA8B,EAAE,CAAC;oBACpE,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;gBAChH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAC7B,MAAkB,EAClB,MAAuB,EACvB,YAAoC,EACpC,MAAyB,EACzB,WAA4B,EAC5B,kBAAsC;QAEtC,MAAM,MAAM,GAA0B,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAElH,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;YACtF,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,OAAO,EAAE,gCAAgC,CAAC,CAAC,OAAO,EAAE;gBACpD,YAAY,EAAE,YAAY,IAAI,SAAS;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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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"}
|