@powersync/service-sync-rules 0.17.10
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/LICENSE +67 -0
- package/README.md +3 -0
- package/dist/DartSchemaGenerator.d.ts +12 -0
- package/dist/DartSchemaGenerator.js +39 -0
- package/dist/DartSchemaGenerator.js.map +1 -0
- package/dist/ExpressionType.d.ts +33 -0
- package/dist/ExpressionType.js +61 -0
- package/dist/ExpressionType.js.map +1 -0
- package/dist/IdSequence.d.ts +4 -0
- package/dist/IdSequence.js +9 -0
- package/dist/IdSequence.js.map +1 -0
- package/dist/JsSchemaGenerator.d.ts +12 -0
- package/dist/JsSchemaGenerator.js +42 -0
- package/dist/JsSchemaGenerator.js.map +1 -0
- package/dist/SchemaGenerator.d.ts +14 -0
- package/dist/SchemaGenerator.js +26 -0
- package/dist/SchemaGenerator.js.map +1 -0
- package/dist/SourceTableInterface.d.ts +5 -0
- package/dist/SourceTableInterface.js +2 -0
- package/dist/SourceTableInterface.js.map +1 -0
- package/dist/SqlBucketDescriptor.d.ts +37 -0
- package/dist/SqlBucketDescriptor.js +111 -0
- package/dist/SqlBucketDescriptor.js.map +1 -0
- package/dist/SqlDataQuery.d.ts +39 -0
- package/dist/SqlDataQuery.js +237 -0
- package/dist/SqlDataQuery.js.map +1 -0
- package/dist/SqlParameterQuery.d.ts +43 -0
- package/dist/SqlParameterQuery.js +238 -0
- package/dist/SqlParameterQuery.js.map +1 -0
- package/dist/SqlSyncRules.d.ts +52 -0
- package/dist/SqlSyncRules.js +247 -0
- package/dist/SqlSyncRules.js.map +1 -0
- package/dist/StaticSchema.d.ts +26 -0
- package/dist/StaticSchema.js +61 -0
- package/dist/StaticSchema.js.map +1 -0
- package/dist/StaticSqlParameterQuery.d.ts +24 -0
- package/dist/StaticSqlParameterQuery.js +66 -0
- package/dist/StaticSqlParameterQuery.js.map +1 -0
- package/dist/TablePattern.d.ts +17 -0
- package/dist/TablePattern.js +56 -0
- package/dist/TablePattern.js.map +1 -0
- package/dist/TableQuerySchema.d.ts +9 -0
- package/dist/TableQuerySchema.js +34 -0
- package/dist/TableQuerySchema.js.map +1 -0
- package/dist/errors.d.ts +22 -0
- package/dist/errors.js +58 -0
- package/dist/errors.js.map +1 -0
- package/dist/generators.d.ts +6 -0
- package/dist/generators.js +7 -0
- package/dist/generators.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/json_schema.d.ts +3 -0
- package/dist/json_schema.js +48 -0
- package/dist/json_schema.js.map +1 -0
- package/dist/sql_filters.d.ts +91 -0
- package/dist/sql_filters.js +506 -0
- package/dist/sql_filters.js.map +1 -0
- package/dist/sql_functions.d.ts +54 -0
- package/dist/sql_functions.js +773 -0
- package/dist/sql_functions.js.map +1 -0
- package/dist/sql_support.d.ts +22 -0
- package/dist/sql_support.js +213 -0
- package/dist/sql_support.js.map +1 -0
- package/dist/types.d.ts +174 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +45 -0
- package/dist/utils.js +173 -0
- package/dist/utils.js.map +1 -0
- package/package.json +29 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql_functions.js","sourceRoot":"","sources":["../src/sql_functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ClauseError, CompiledClause, ParameterMatchClause, ParameterValueClause, SqliteValue, StaticRowValueClause } from './types.js';
|
|
2
|
+
import { SelectFromStatement } from 'pgsql-ast-parser';
|
|
3
|
+
import { SqlRuleError } from './errors.js';
|
|
4
|
+
export declare function isParameterMatchClause(clause: CompiledClause): clause is ParameterMatchClause;
|
|
5
|
+
export declare function isStaticRowValueClause(clause: CompiledClause): clause is StaticRowValueClause;
|
|
6
|
+
export declare function isParameterValueClause(clause: CompiledClause): clause is ParameterValueClause;
|
|
7
|
+
export declare function isClauseError(clause: CompiledClause): clause is ClauseError;
|
|
8
|
+
export declare const SQLITE_TRUE = 1n;
|
|
9
|
+
export declare const SQLITE_FALSE = 0n;
|
|
10
|
+
export declare function sqliteBool(value: SqliteValue | boolean): 1n | 0n;
|
|
11
|
+
export declare function sqliteNot(value: SqliteValue | boolean): 0n | 1n;
|
|
12
|
+
export declare function compileStaticOperator(op: string, left: StaticRowValueClause, right: StaticRowValueClause): StaticRowValueClause;
|
|
13
|
+
export declare function andFilters(a: CompiledClause, b: CompiledClause): CompiledClause;
|
|
14
|
+
export declare function orFilters(a: CompiledClause, b: CompiledClause): CompiledClause;
|
|
15
|
+
export declare function orParameterSetClauses(a: ParameterMatchClause, b: ParameterMatchClause): ParameterMatchClause;
|
|
16
|
+
/**
|
|
17
|
+
* Given any CompiledClause, convert it into a ParameterMatchClause.
|
|
18
|
+
*
|
|
19
|
+
* @param clause
|
|
20
|
+
*/
|
|
21
|
+
export declare function toBooleanParameterSetClause(clause: CompiledClause): ParameterMatchClause;
|
|
22
|
+
export declare function checkUnsupportedFeatures(sql: string, q: SelectFromStatement): SqlRuleError[];
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { MATCH_CONST_FALSE, MATCH_CONST_TRUE } from './sql_filters.js';
|
|
2
|
+
import { evaluateOperator, getOperatorReturnType } from './sql_functions.js';
|
|
3
|
+
import { SqlRuleError } from './errors.js';
|
|
4
|
+
import { ExpressionType } from './ExpressionType.js';
|
|
5
|
+
export function isParameterMatchClause(clause) {
|
|
6
|
+
return Array.isArray(clause.bucketParameters);
|
|
7
|
+
}
|
|
8
|
+
export function isStaticRowValueClause(clause) {
|
|
9
|
+
return typeof clause.evaluate == 'function';
|
|
10
|
+
}
|
|
11
|
+
export function isParameterValueClause(clause) {
|
|
12
|
+
// noinspection SuspiciousTypeOfGuard
|
|
13
|
+
return typeof clause.bucketParameter == 'string';
|
|
14
|
+
}
|
|
15
|
+
export function isClauseError(clause) {
|
|
16
|
+
return clause.error === true;
|
|
17
|
+
}
|
|
18
|
+
export const SQLITE_TRUE = 1n;
|
|
19
|
+
export const SQLITE_FALSE = 0n;
|
|
20
|
+
export function sqliteBool(value) {
|
|
21
|
+
if (value == null) {
|
|
22
|
+
return SQLITE_FALSE;
|
|
23
|
+
}
|
|
24
|
+
else if (typeof value == 'boolean' || typeof value == 'number') {
|
|
25
|
+
return value ? SQLITE_TRUE : SQLITE_FALSE;
|
|
26
|
+
}
|
|
27
|
+
else if (typeof value == 'bigint') {
|
|
28
|
+
return value != 0n ? SQLITE_TRUE : SQLITE_FALSE;
|
|
29
|
+
}
|
|
30
|
+
else if (typeof value == 'string') {
|
|
31
|
+
return parseInt(value) ? SQLITE_TRUE : SQLITE_FALSE;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return SQLITE_FALSE;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function sqliteNot(value) {
|
|
38
|
+
return sqliteBool(!sqliteBool(value));
|
|
39
|
+
}
|
|
40
|
+
export function compileStaticOperator(op, left, right) {
|
|
41
|
+
return {
|
|
42
|
+
evaluate: (tables) => {
|
|
43
|
+
const leftValue = left.evaluate(tables);
|
|
44
|
+
const rightValue = right.evaluate(tables);
|
|
45
|
+
return evaluateOperator(op, leftValue, rightValue);
|
|
46
|
+
},
|
|
47
|
+
getType(schema) {
|
|
48
|
+
const typeLeft = left.getType(schema);
|
|
49
|
+
const typeRight = right.getType(schema);
|
|
50
|
+
return getOperatorReturnType(op, typeLeft, typeRight);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function andFilters(a, b) {
|
|
55
|
+
if (isStaticRowValueClause(a) && isStaticRowValueClause(b)) {
|
|
56
|
+
// Optimization
|
|
57
|
+
return {
|
|
58
|
+
evaluate(tables) {
|
|
59
|
+
const aValue = sqliteBool(a.evaluate(tables));
|
|
60
|
+
const bValue = sqliteBool(b.evaluate(tables));
|
|
61
|
+
return sqliteBool(aValue && bValue);
|
|
62
|
+
},
|
|
63
|
+
getType() {
|
|
64
|
+
return ExpressionType.INTEGER;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const aFilter = toBooleanParameterSetClause(a);
|
|
69
|
+
const bFilter = toBooleanParameterSetClause(b);
|
|
70
|
+
const aParams = aFilter.bucketParameters;
|
|
71
|
+
const bParams = bFilter.bucketParameters;
|
|
72
|
+
if (aFilter.unbounded && bFilter.unbounded) {
|
|
73
|
+
// This could explode the number of buckets for the row
|
|
74
|
+
throw new Error('Cannot have multiple IN expressions on bucket parameters');
|
|
75
|
+
}
|
|
76
|
+
const combined = new Set([...aParams, ...bParams]);
|
|
77
|
+
return {
|
|
78
|
+
error: aFilter.error || bFilter.error,
|
|
79
|
+
bucketParameters: [...combined],
|
|
80
|
+
unbounded: aFilter.unbounded || bFilter.unbounded,
|
|
81
|
+
filter: (tables) => {
|
|
82
|
+
const aResult = aFilter.filter(tables);
|
|
83
|
+
const bResult = bFilter.filter(tables);
|
|
84
|
+
let results = [];
|
|
85
|
+
for (let result1 of aResult) {
|
|
86
|
+
for (let result2 of bResult) {
|
|
87
|
+
let combined = { ...result1 };
|
|
88
|
+
let valid = true;
|
|
89
|
+
for (let key in result2) {
|
|
90
|
+
if (key in combined && combined[key] != result2[key]) {
|
|
91
|
+
valid = false;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
combined[key] = result2[key];
|
|
95
|
+
}
|
|
96
|
+
results.push(combined);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return results;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export function orFilters(a, b) {
|
|
104
|
+
if (isStaticRowValueClause(a) && isStaticRowValueClause(b)) {
|
|
105
|
+
// Optimization
|
|
106
|
+
return {
|
|
107
|
+
evaluate(tables) {
|
|
108
|
+
const aValue = sqliteBool(a.evaluate(tables));
|
|
109
|
+
const bValue = sqliteBool(b.evaluate(tables));
|
|
110
|
+
return sqliteBool(aValue || bValue);
|
|
111
|
+
},
|
|
112
|
+
getType() {
|
|
113
|
+
return ExpressionType.INTEGER;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const aFilter = toBooleanParameterSetClause(a);
|
|
118
|
+
const bFilter = toBooleanParameterSetClause(b);
|
|
119
|
+
return orParameterSetClauses(aFilter, bFilter);
|
|
120
|
+
}
|
|
121
|
+
export function orParameterSetClauses(a, b) {
|
|
122
|
+
const aParams = a.bucketParameters;
|
|
123
|
+
const bParams = b.bucketParameters;
|
|
124
|
+
// This gives the guaranteed set of parameters matched against.
|
|
125
|
+
const allParams = new Set([...aParams, ...bParams]);
|
|
126
|
+
if (allParams.size != aParams.length || allParams.size != bParams.length) {
|
|
127
|
+
throw new Error(`Left and right sides of OR must use the same parameters, or split into separate queries. ${JSON.stringify(aParams)} != ${JSON.stringify(bParams)}`);
|
|
128
|
+
}
|
|
129
|
+
const parameters = [...allParams];
|
|
130
|
+
// assets.region_id = bucket.region_id AND bucket.user_id IN assets.user_ids
|
|
131
|
+
// OR bucket.region_id IN assets.region_ids AND bucket.user_id = assets.user_id
|
|
132
|
+
const unbounded = a.unbounded || b.unbounded;
|
|
133
|
+
return {
|
|
134
|
+
error: a.error || b.error,
|
|
135
|
+
bucketParameters: parameters,
|
|
136
|
+
unbounded,
|
|
137
|
+
filter: (tables) => {
|
|
138
|
+
const aResult = a.filter(tables);
|
|
139
|
+
const bResult = b.filter(tables);
|
|
140
|
+
let results = [...aResult, ...bResult];
|
|
141
|
+
return results;
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Given any CompiledClause, convert it into a ParameterMatchClause.
|
|
147
|
+
*
|
|
148
|
+
* @param clause
|
|
149
|
+
*/
|
|
150
|
+
export function toBooleanParameterSetClause(clause) {
|
|
151
|
+
if (isParameterMatchClause(clause)) {
|
|
152
|
+
return clause;
|
|
153
|
+
}
|
|
154
|
+
else if (isStaticRowValueClause(clause)) {
|
|
155
|
+
return {
|
|
156
|
+
error: false,
|
|
157
|
+
bucketParameters: [],
|
|
158
|
+
unbounded: false,
|
|
159
|
+
filter(tables) {
|
|
160
|
+
const value = sqliteBool(clause.evaluate(tables));
|
|
161
|
+
return value ? MATCH_CONST_TRUE : MATCH_CONST_FALSE;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
else if (isClauseError(clause)) {
|
|
166
|
+
return {
|
|
167
|
+
error: true,
|
|
168
|
+
bucketParameters: [],
|
|
169
|
+
unbounded: false,
|
|
170
|
+
filter(tables) {
|
|
171
|
+
throw new Error('invalid clause');
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
// Equivalent to `bucket.param = true`
|
|
177
|
+
const param = clause.bucketParameter;
|
|
178
|
+
return {
|
|
179
|
+
error: false,
|
|
180
|
+
bucketParameters: [param],
|
|
181
|
+
unbounded: false,
|
|
182
|
+
filter(tables) {
|
|
183
|
+
return [{ [param]: SQLITE_TRUE }];
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
export function checkUnsupportedFeatures(sql, q) {
|
|
189
|
+
let errors = [];
|
|
190
|
+
if (q.limit != null) {
|
|
191
|
+
errors.push(new SqlRuleError('LIMIT is not supported', sql, q.limit._location));
|
|
192
|
+
}
|
|
193
|
+
if (q.orderBy != null) {
|
|
194
|
+
errors.push(new SqlRuleError('ORDER BY is not supported', sql, q.orderBy[0]?._location));
|
|
195
|
+
}
|
|
196
|
+
if (q.skip != null) {
|
|
197
|
+
errors.push(new SqlRuleError('SKIP is not supported', sql, q.skip._location));
|
|
198
|
+
}
|
|
199
|
+
if (q.having != null) {
|
|
200
|
+
errors.push(new SqlRuleError('HAVING is not supported', sql, q.having._location));
|
|
201
|
+
}
|
|
202
|
+
if (q.groupBy != null) {
|
|
203
|
+
errors.push(new SqlRuleError('GROUP BY is not supported', sql, q.groupBy[0]?._location));
|
|
204
|
+
}
|
|
205
|
+
if (q.distinct != null) {
|
|
206
|
+
errors.push(new SqlRuleError('DISTINCT is not supported', sql));
|
|
207
|
+
}
|
|
208
|
+
if (q.for != null) {
|
|
209
|
+
errors.push(new SqlRuleError('SELECT FOR is not supported', sql, q.for._location));
|
|
210
|
+
}
|
|
211
|
+
return errors;
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=sql_support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql_support.js","sourceRoot":"","sources":["../src/sql_support.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { JsonContainer } from '@powersync/service-jsonbig';
|
|
2
|
+
import { SourceTableInterface } from './SourceTableInterface.js';
|
|
3
|
+
import { ColumnDefinition, ExpressionType } from './ExpressionType.js';
|
|
4
|
+
import { TablePattern } from './TablePattern.js';
|
|
5
|
+
export interface SyncRules {
|
|
6
|
+
evaluateRow(options: EvaluateRowOptions): EvaluationResult[];
|
|
7
|
+
evaluateParameterRow(table: SourceTableInterface, row: SqliteRow): EvaluatedParametersResult[];
|
|
8
|
+
}
|
|
9
|
+
export interface EvaluatedParameters {
|
|
10
|
+
lookup: SqliteJsonValue[];
|
|
11
|
+
/**
|
|
12
|
+
* Parameters used to generate bucket id. May be incomplete.
|
|
13
|
+
*
|
|
14
|
+
* JSON-serializable.
|
|
15
|
+
*/
|
|
16
|
+
bucket_parameters: Record<string, SqliteJsonValue>[];
|
|
17
|
+
}
|
|
18
|
+
export type EvaluatedParametersResult = EvaluatedParameters | EvaluationError;
|
|
19
|
+
export interface EvaluatedRow {
|
|
20
|
+
bucket: string;
|
|
21
|
+
/** Output table - may be different from input table. */
|
|
22
|
+
table: string;
|
|
23
|
+
/**
|
|
24
|
+
* Convenience attribute. Must match data.id.
|
|
25
|
+
*/
|
|
26
|
+
id: string;
|
|
27
|
+
/** Must be JSON-serializable. */
|
|
28
|
+
data: SqliteJsonRow;
|
|
29
|
+
/** For debugging purposes only. */
|
|
30
|
+
ruleId?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface EvaluationError {
|
|
33
|
+
error: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function isEvaluationError(e: any): e is EvaluationError;
|
|
36
|
+
export declare function isEvaluatedRow(e: EvaluationResult): e is EvaluatedRow;
|
|
37
|
+
export declare function isEvaluatedParameters(e: EvaluatedParametersResult): e is EvaluatedParameters;
|
|
38
|
+
export type EvaluationResult = EvaluatedRow | EvaluationError;
|
|
39
|
+
export interface SyncParameters {
|
|
40
|
+
token_parameters: SqliteJsonRow;
|
|
41
|
+
user_parameters: SqliteJsonRow;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* A value that is both SQLite and JSON-compatible.
|
|
45
|
+
*
|
|
46
|
+
* Uint8Array is not supported.
|
|
47
|
+
*/
|
|
48
|
+
export type SqliteJsonValue = number | string | bigint | null;
|
|
49
|
+
/**
|
|
50
|
+
* A value supported by the SQLite type system.
|
|
51
|
+
*/
|
|
52
|
+
export type SqliteValue = number | string | null | bigint | Uint8Array;
|
|
53
|
+
/**
|
|
54
|
+
* A set of values that are both SQLite and JSON-compatible.
|
|
55
|
+
*
|
|
56
|
+
* This is a flat object -> no nested arrays or objects.
|
|
57
|
+
*/
|
|
58
|
+
export type SqliteJsonRow = {
|
|
59
|
+
[column: string]: SqliteJsonValue;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* SQLite-compatible row (NULL, TEXT, INTEGER, REAL, BLOB).
|
|
63
|
+
* JSON is represented as TEXT.
|
|
64
|
+
*/
|
|
65
|
+
export type SqliteRow = {
|
|
66
|
+
[column: string]: SqliteValue;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* SQLite-compatible row (NULL, TEXT, INTEGER, REAL, BLOB).
|
|
70
|
+
* JSON is represented as TEXT.
|
|
71
|
+
*
|
|
72
|
+
* Toasted values are `undefined`.
|
|
73
|
+
*/
|
|
74
|
+
export type ToastableSqliteRow = {
|
|
75
|
+
[column: string]: SqliteValue | undefined;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* A value as received from the database.
|
|
79
|
+
*/
|
|
80
|
+
export type DatabaseInputValue = SqliteValue | boolean | DatabaseInputValue[] | JsonContainer | {
|
|
81
|
+
[key: string]: DatabaseInputValue;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Database input row. Can contain nested arrays and objects.
|
|
85
|
+
*/
|
|
86
|
+
export type DatabaseInputRow = {
|
|
87
|
+
[column: string]: DatabaseInputValue;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* A set of known parameters that a query is evaluated on.
|
|
91
|
+
*/
|
|
92
|
+
export type QueryParameters = {
|
|
93
|
+
[table: string]: SqliteRow;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* A single set of parameters that would make a WHERE filter true.
|
|
97
|
+
*
|
|
98
|
+
* Each parameter is prefixed with a table name, e.g. 'bucket.param'.
|
|
99
|
+
*/
|
|
100
|
+
export type FilterParameters = {
|
|
101
|
+
[parameter: string]: SqliteJsonValue;
|
|
102
|
+
};
|
|
103
|
+
export interface EvaluateRowOptions {
|
|
104
|
+
sourceTable: SourceTableInterface;
|
|
105
|
+
record: SqliteRow;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Given a row, produces a set of parameters that would make the clause evaluate to true.
|
|
109
|
+
*/
|
|
110
|
+
export interface ParameterMatchClause {
|
|
111
|
+
error: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* The parameter fields that are used for this filter, for example:
|
|
114
|
+
* * ['bucket.region_id'] for a data query
|
|
115
|
+
* * ['token_parameters.user_id'] for a parameter query
|
|
116
|
+
*
|
|
117
|
+
* These parameters are always matched by this clause, and no additional parameters are matched.
|
|
118
|
+
*/
|
|
119
|
+
bucketParameters: string[];
|
|
120
|
+
/**
|
|
121
|
+
* True if the filter depends on an unbounded array column.
|
|
122
|
+
*
|
|
123
|
+
* We restrict filters to only allow a single unbounded column for bucket parameters, otherwise the number of
|
|
124
|
+
* bucketParameter combinations could grow too much.
|
|
125
|
+
*/
|
|
126
|
+
unbounded: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Given a data row, give a set of filter parameters that would make the filter be true.
|
|
129
|
+
*
|
|
130
|
+
* @param tables - {table => row}
|
|
131
|
+
* @return The filter parameters
|
|
132
|
+
*/
|
|
133
|
+
filter(tables: QueryParameters): TrueIfParametersMatch;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Given a row, produces a set of parameters that would make the clause evaluate to true.
|
|
137
|
+
*/
|
|
138
|
+
export interface ParameterValueClause {
|
|
139
|
+
/**
|
|
140
|
+
* The parameter fields used for this, e.g. 'bucket.region_id'
|
|
141
|
+
*/
|
|
142
|
+
bucketParameter: string;
|
|
143
|
+
}
|
|
144
|
+
export interface QuerySchema {
|
|
145
|
+
getType(table: string, column: string): ExpressionType;
|
|
146
|
+
getColumns(table: string): ColumnDefinition[];
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Only needs row values as input, producing a static value as output.
|
|
150
|
+
*/
|
|
151
|
+
export interface StaticRowValueClause {
|
|
152
|
+
evaluate(tables: QueryParameters): SqliteValue;
|
|
153
|
+
getType(schema: QuerySchema): ExpressionType;
|
|
154
|
+
}
|
|
155
|
+
export interface ClauseError {
|
|
156
|
+
error: true;
|
|
157
|
+
}
|
|
158
|
+
export type CompiledClause = StaticRowValueClause | ParameterMatchClause | ParameterValueClause | ClauseError;
|
|
159
|
+
/**
|
|
160
|
+
* true if any of the filter parameter sets match
|
|
161
|
+
*/
|
|
162
|
+
export type TrueIfParametersMatch = FilterParameters[];
|
|
163
|
+
export interface QueryBucketIdOptions {
|
|
164
|
+
getParameterSets: (lookups: SqliteJsonValue[][]) => Promise<SqliteJsonRow[]>;
|
|
165
|
+
parameters: SyncParameters;
|
|
166
|
+
}
|
|
167
|
+
export interface SourceSchemaTable {
|
|
168
|
+
table: string;
|
|
169
|
+
getType(column: string): ExpressionType | undefined;
|
|
170
|
+
getColumns(): ColumnDefinition[];
|
|
171
|
+
}
|
|
172
|
+
export interface SourceSchema {
|
|
173
|
+
getTables(sourceTable: TablePattern): SourceSchemaTable[];
|
|
174
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function isEvaluationError(e) {
|
|
2
|
+
return typeof e.error == 'string';
|
|
3
|
+
}
|
|
4
|
+
export function isEvaluatedRow(e) {
|
|
5
|
+
return typeof e.bucket == 'string';
|
|
6
|
+
}
|
|
7
|
+
export function isEvaluatedParameters(e) {
|
|
8
|
+
return Array.isArray(e.lookup);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA8CA,MAAM,UAAU,iBAAiB,CAAC,CAAM;IACtC,OAAO,OAAO,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAmB;IAChD,OAAO,OAAQ,CAAkB,CAAC,MAAM,IAAI,QAAQ,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,CAA4B;IAChE,OAAO,KAAK,CAAC,OAAO,CAAE,CAAS,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Statement, SelectFromStatement } from 'pgsql-ast-parser';
|
|
2
|
+
import { DatabaseInputRow, SqliteRow, SqliteJsonRow, SqliteJsonValue, SqliteValue, SyncParameters } from './types.js';
|
|
3
|
+
import { Replacer } from '@powersync/service-jsonbig';
|
|
4
|
+
export declare function isSelectStatement(q: Statement): q is SelectFromStatement;
|
|
5
|
+
export declare function getBucketId(descriptor_id: string, bucket_parameters: string[], params: Record<string, SqliteJsonValue>): string;
|
|
6
|
+
/**
|
|
7
|
+
* SqliteRow -> SqliteJsonRow.
|
|
8
|
+
*
|
|
9
|
+
* Use wherever data should be persisted.
|
|
10
|
+
*
|
|
11
|
+
* Basically just removes Uint8Array.
|
|
12
|
+
*/
|
|
13
|
+
export declare function filterJsonRow(data: SqliteRow): SqliteJsonRow;
|
|
14
|
+
/**
|
|
15
|
+
* Convert a parsed JSON scalar value to SqliteValue.
|
|
16
|
+
*
|
|
17
|
+
* Types specifically not supported in output are `boolean` and `undefined`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function jsonValueToSqlite(value: null | undefined | string | number | bigint | boolean): SqliteValue;
|
|
20
|
+
export declare function isJsonValue(value: SqliteValue): value is SqliteJsonValue;
|
|
21
|
+
/**
|
|
22
|
+
* Map database row to SqliteRow for use in sync rules.
|
|
23
|
+
*/
|
|
24
|
+
export declare function toSyncRulesRow(row: DatabaseInputRow): SqliteRow;
|
|
25
|
+
/**
|
|
26
|
+
* Convert parameter query input to a SqliteJsonRow.
|
|
27
|
+
*
|
|
28
|
+
* @param parameters Generic JSON input
|
|
29
|
+
*/
|
|
30
|
+
export declare function toSyncRulesParameters(parameters: Record<string, any>): SqliteJsonRow;
|
|
31
|
+
/**
|
|
32
|
+
* Convert to a SQLITE-equivalent value: NULL, TEXT, INTEGER, REAL or BLOB.
|
|
33
|
+
*
|
|
34
|
+
* Any object or array is converted to JSON TEXT.
|
|
35
|
+
*/
|
|
36
|
+
export declare function toSyncRulesValue(data: any, autoBigNum?: boolean, keepUndefined?: boolean): SqliteValue;
|
|
37
|
+
export declare function normalizeTokenParameters(token_parameters: Record<string, any>, user_parameters?: Record<string, any>): SyncParameters;
|
|
38
|
+
/**
|
|
39
|
+
* Only use this for serializing bucket names. Bucket names should never be parsed except perhaps for debug purposes.
|
|
40
|
+
*
|
|
41
|
+
* Important: REAL and INTEGER values matching the same number needs the same representation in the bucket name.
|
|
42
|
+
*/
|
|
43
|
+
export declare const JSONBucketNameSerialize: {
|
|
44
|
+
stringify(value: any, replacer?: Replacer, space?: string | number): string;
|
|
45
|
+
};
|