@powersync/service-sync-rules 0.0.0-dev-20250827091123 → 0.0.0-dev-20250828090417
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/BaseSqlDataQuery.d.ts +3 -2
- package/dist/BaseSqlDataQuery.js.map +1 -1
- package/dist/SqlBucketDescriptor.d.ts +4 -5
- package/dist/SqlBucketDescriptor.js +8 -11
- package/dist/SqlBucketDescriptor.js.map +1 -1
- package/dist/SqlDataQuery.d.ts +4 -3
- package/dist/SqlDataQuery.js +4 -3
- package/dist/SqlDataQuery.js.map +1 -1
- package/dist/SqlParameterQuery.d.ts +3 -3
- package/dist/SqlParameterQuery.js +5 -4
- package/dist/SqlParameterQuery.js.map +1 -1
- package/dist/SqlSyncRules.d.ts +12 -1
- package/dist/SqlSyncRules.js +29 -5
- package/dist/SqlSyncRules.js.map +1 -1
- package/dist/StaticSqlParameterQuery.d.ts +2 -2
- package/dist/StaticSqlParameterQuery.js +3 -2
- package/dist/StaticSqlParameterQuery.js.map +1 -1
- package/dist/TableValuedFunctionSqlParameterQuery.d.ts +2 -2
- package/dist/TableValuedFunctionSqlParameterQuery.js +10 -7
- package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
- package/dist/TableValuedFunctions.d.ts +2 -2
- package/dist/TableValuedFunctions.js +38 -35
- package/dist/TableValuedFunctions.js.map +1 -1
- package/dist/compatibility.d.ts +2 -0
- package/dist/compatibility.js +5 -1
- package/dist/compatibility.js.map +1 -1
- package/dist/events/SqlEventDescriptor.js +2 -3
- package/dist/events/SqlEventDescriptor.js.map +1 -1
- package/dist/events/SqlEventSourceQuery.d.ts +2 -1
- package/dist/events/SqlEventSourceQuery.js +3 -2
- package/dist/events/SqlEventSourceQuery.js.map +1 -1
- package/dist/request_functions.js +7 -7
- package/dist/request_functions.js.map +1 -1
- package/dist/sql_filters.d.ts +8 -1
- package/dist/sql_filters.js +8 -4
- package/dist/sql_filters.js.map +1 -1
- package/dist/sql_functions.d.ts +8 -29
- package/dist/sql_functions.js +159 -113
- package/dist/sql_functions.js.map +1 -1
- package/dist/streams/from_sql.js +3 -1
- package/dist/streams/from_sql.js.map +1 -1
- package/dist/streams/stream.d.ts +1 -3
- package/dist/streams/stream.js +8 -13
- package/dist/streams/stream.js.map +1 -1
- package/dist/streams/variant.d.ts +4 -3
- package/dist/streams/variant.js +10 -9
- package/dist/streams/variant.js.map +1 -1
- package/dist/types.d.ts +16 -2
- package/dist/utils.d.ts +4 -4
- package/dist/utils.js +17 -6
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
- package/schema/sync_rules.json +8 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SelectFromStatement } from 'pgsql-ast-parser';
|
|
2
2
|
import { BucketDescription, BucketPriority } from './BucketDescription.js';
|
|
3
3
|
import { SqlRuleError } from './errors.js';
|
|
4
|
-
import { ParameterValueClause, QueryParseOptions, RequestParameters } from './types.js';
|
|
4
|
+
import { BucketIdTransformer, ParameterValueClause, QueryParseOptions, RequestParameters } from './types.js';
|
|
5
5
|
export interface StaticSqlParameterQueryOptions {
|
|
6
6
|
sql: string;
|
|
7
7
|
parameterExtractors: Record<string, ParameterValueClause>;
|
|
@@ -57,7 +57,7 @@ export declare class StaticSqlParameterQuery {
|
|
|
57
57
|
readonly filter: ParameterValueClause | undefined;
|
|
58
58
|
readonly errors: SqlRuleError[];
|
|
59
59
|
constructor(options: StaticSqlParameterQueryOptions);
|
|
60
|
-
getStaticBucketDescriptions(parameters: RequestParameters): BucketDescription[];
|
|
60
|
+
getStaticBucketDescriptions(parameters: RequestParameters, transformer: BucketIdTransformer): BucketDescription[];
|
|
61
61
|
get hasAuthenticatedBucketParameters(): boolean;
|
|
62
62
|
get usesUnauthenticatedRequestParameters(): boolean;
|
|
63
63
|
get usesDangerousRequestParameters(): boolean;
|
|
@@ -17,6 +17,7 @@ export class StaticSqlParameterQuery {
|
|
|
17
17
|
table: undefined,
|
|
18
18
|
parameterTables: ['token_parameters', 'user_parameters'],
|
|
19
19
|
supportsParameterExpressions: true,
|
|
20
|
+
compatibilityContext: options.compatibility,
|
|
20
21
|
sql
|
|
21
22
|
});
|
|
22
23
|
const where = q.where;
|
|
@@ -111,7 +112,7 @@ export class StaticSqlParameterQuery {
|
|
|
111
112
|
this.filter = options.filter;
|
|
112
113
|
this.errors = options.errors ?? [];
|
|
113
114
|
}
|
|
114
|
-
getStaticBucketDescriptions(parameters) {
|
|
115
|
+
getStaticBucketDescriptions(parameters, transformer) {
|
|
115
116
|
if (this.filter == null) {
|
|
116
117
|
// Error in filter clause
|
|
117
118
|
return [];
|
|
@@ -134,7 +135,7 @@ export class StaticSqlParameterQuery {
|
|
|
134
135
|
}
|
|
135
136
|
return [
|
|
136
137
|
{
|
|
137
|
-
bucket: getBucketId(this.descriptorName, this.bucketParameters, result),
|
|
138
|
+
bucket: getBucketId(this.descriptorName, this.bucketParameters, result, transformer),
|
|
138
139
|
priority: this.priority
|
|
139
140
|
}
|
|
140
141
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticSqlParameterQuery.js","sourceRoot":"","sources":["../src/StaticSqlParameterQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAqC,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"StaticSqlParameterQuery.js","sourceRoot":"","sources":["../src/StaticSqlParameterQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FromCall, SelectFromStatement } from 'pgsql-ast-parser';
|
|
2
2
|
import { SqlRuleError } from './errors.js';
|
|
3
3
|
import { TableValuedFunction } from './TableValuedFunctions.js';
|
|
4
|
-
import { ParameterValueClause, QueryParseOptions, RequestParameters } from './types.js';
|
|
4
|
+
import { BucketIdTransformer, ParameterValueClause, QueryParseOptions, RequestParameters } from './types.js';
|
|
5
5
|
import { BucketDescription, BucketPriority } from './BucketDescription.js';
|
|
6
6
|
export interface TableValuedFunctionSqlParameterQueryOptions {
|
|
7
7
|
sql: string;
|
|
@@ -82,7 +82,7 @@ export declare class TableValuedFunctionSqlParameterQuery {
|
|
|
82
82
|
readonly callTableName: string;
|
|
83
83
|
readonly errors: SqlRuleError[];
|
|
84
84
|
constructor(options: TableValuedFunctionSqlParameterQueryOptions);
|
|
85
|
-
getStaticBucketDescriptions(parameters: RequestParameters): BucketDescription[];
|
|
85
|
+
getStaticBucketDescriptions(parameters: RequestParameters, transformer: BucketIdTransformer): BucketDescription[];
|
|
86
86
|
private getIndividualBucketDescription;
|
|
87
87
|
get hasAuthenticatedBucketParameters(): boolean;
|
|
88
88
|
get usesUnauthenticatedRequestParameters(): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SqlRuleError } from './errors.js';
|
|
2
2
|
import { SqlTools } from './sql_filters.js';
|
|
3
3
|
import { checkUnsupportedFeatures, isClauseError, isParameterValueClause, sqliteBool } from './sql_support.js';
|
|
4
|
-
import {
|
|
4
|
+
import { generateTableValuedFunctions } from './TableValuedFunctions.js';
|
|
5
5
|
import { getBucketId, isJsonValue } from './utils.js';
|
|
6
6
|
import { DEFAULT_BUCKET_PRIORITY } from './BucketDescription.js';
|
|
7
7
|
/**
|
|
@@ -15,9 +15,11 @@ import { DEFAULT_BUCKET_PRIORITY } from './BucketDescription.js';
|
|
|
15
15
|
*/
|
|
16
16
|
export class TableValuedFunctionSqlParameterQuery {
|
|
17
17
|
static fromSql(descriptorName, sql, call, q, options, queryId) {
|
|
18
|
+
const compatibility = options.compatibility;
|
|
18
19
|
let errors = [];
|
|
19
20
|
errors.push(...checkUnsupportedFeatures(sql, q));
|
|
20
|
-
|
|
21
|
+
const tableValuedFunctions = generateTableValuedFunctions(compatibility);
|
|
22
|
+
if (!(call.function.name in tableValuedFunctions)) {
|
|
21
23
|
throw new SqlRuleError(`Table-valued function ${call.function.name} is not defined.`, sql, call);
|
|
22
24
|
}
|
|
23
25
|
const callTable = call.alias?.name ?? call.function.name;
|
|
@@ -26,6 +28,7 @@ export class TableValuedFunctionSqlParameterQuery {
|
|
|
26
28
|
table: callTable,
|
|
27
29
|
parameterTables: ['token_parameters', 'user_parameters', callTable],
|
|
28
30
|
supportsParameterExpressions: true,
|
|
31
|
+
compatibilityContext: compatibility,
|
|
29
32
|
sql
|
|
30
33
|
});
|
|
31
34
|
const where = q.where;
|
|
@@ -33,7 +36,7 @@ export class TableValuedFunctionSqlParameterQuery {
|
|
|
33
36
|
const callClause = tools.compileParameterValueExtractor(callExpression);
|
|
34
37
|
const columns = q.columns ?? [];
|
|
35
38
|
const bucketParameters = columns.map((column) => tools.getOutputName(column));
|
|
36
|
-
const functionImpl =
|
|
39
|
+
const functionImpl = tableValuedFunctions[call.function.name];
|
|
37
40
|
let priority = options.priority;
|
|
38
41
|
let parameterExtractors = {};
|
|
39
42
|
for (let column of columns) {
|
|
@@ -140,7 +143,7 @@ export class TableValuedFunctionSqlParameterQuery {
|
|
|
140
143
|
this.callTableName = options.callTableName;
|
|
141
144
|
this.errors = options.errors;
|
|
142
145
|
}
|
|
143
|
-
getStaticBucketDescriptions(parameters) {
|
|
146
|
+
getStaticBucketDescriptions(parameters, transformer) {
|
|
144
147
|
if (this.filter == null || this.callClause == null) {
|
|
145
148
|
// Error in filter clause
|
|
146
149
|
return [];
|
|
@@ -149,14 +152,14 @@ export class TableValuedFunctionSqlParameterQuery {
|
|
|
149
152
|
const rows = this.function.call([valueString]);
|
|
150
153
|
let total = [];
|
|
151
154
|
for (let row of rows) {
|
|
152
|
-
const description = this.getIndividualBucketDescription(row, parameters);
|
|
155
|
+
const description = this.getIndividualBucketDescription(row, parameters, transformer);
|
|
153
156
|
if (description !== null) {
|
|
154
157
|
total.push(description);
|
|
155
158
|
}
|
|
156
159
|
}
|
|
157
160
|
return total;
|
|
158
161
|
}
|
|
159
|
-
getIndividualBucketDescription(row, parameters) {
|
|
162
|
+
getIndividualBucketDescription(row, parameters, transformer) {
|
|
160
163
|
const mergedParams = {
|
|
161
164
|
...parameters,
|
|
162
165
|
lookup: (table, column) => {
|
|
@@ -183,7 +186,7 @@ export class TableValuedFunctionSqlParameterQuery {
|
|
|
183
186
|
}
|
|
184
187
|
}
|
|
185
188
|
return {
|
|
186
|
-
bucket: getBucketId(this.descriptorName, this.bucketParameters, result),
|
|
189
|
+
bucket: getBucketId(this.descriptorName, this.bucketParameters, result, transformer),
|
|
187
190
|
priority: this.priority
|
|
188
191
|
};
|
|
189
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableValuedFunctionSqlParameterQuery.js","sourceRoot":"","sources":["../src/TableValuedFunctionSqlParameterQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC/G,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"TableValuedFunctionSqlParameterQuery.js","sourceRoot":"","sources":["../src/TableValuedFunctionSqlParameterQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CompatibilityContext } from './compatibility.js';
|
|
1
2
|
import { SqliteRow, SqliteValue } from './types.js';
|
|
2
3
|
export interface TableValuedFunction {
|
|
3
4
|
readonly name: string;
|
|
@@ -5,5 +6,4 @@ export interface TableValuedFunction {
|
|
|
5
6
|
detail: string;
|
|
6
7
|
documentation: string;
|
|
7
8
|
}
|
|
8
|
-
export declare
|
|
9
|
-
export declare const TABLE_VALUED_FUNCTIONS: Record<string, TableValuedFunction>;
|
|
9
|
+
export declare function generateTableValuedFunctions(compatibility: CompatibilityContext): Record<string, TableValuedFunction>;
|
|
@@ -1,37 +1,40 @@
|
|
|
1
|
+
import { CompatibilityOption } from './compatibility.js';
|
|
1
2
|
import { jsonValueToSqlite } from './utils.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
3
|
+
function jsonEachImplementation(fixedJsonBehavior) {
|
|
4
|
+
return {
|
|
5
|
+
name: 'json_each',
|
|
6
|
+
call(args) {
|
|
7
|
+
if (args.length != 1) {
|
|
8
|
+
throw new Error(`json_each expects 1 argument, got ${args.length}`);
|
|
9
|
+
}
|
|
10
|
+
const valueString = args[0];
|
|
11
|
+
if (valueString === null) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
else if (typeof valueString !== 'string') {
|
|
15
|
+
throw new Error(`Expected json_each to be called with a string, got ${valueString}`);
|
|
16
|
+
}
|
|
17
|
+
let values = [];
|
|
18
|
+
try {
|
|
19
|
+
values = JSON.parse(valueString);
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
throw new Error('Expected JSON string');
|
|
23
|
+
}
|
|
24
|
+
if (!Array.isArray(values)) {
|
|
25
|
+
throw new Error(`Expected an array, got ${valueString}`);
|
|
26
|
+
}
|
|
27
|
+
return values.map((v) => {
|
|
28
|
+
return {
|
|
29
|
+
value: jsonValueToSqlite(fixedJsonBehavior, v)
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
detail: 'Each element of a JSON array',
|
|
34
|
+
documentation: 'Returns each element of a JSON array as a separate row.'
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function generateTableValuedFunctions(compatibility) {
|
|
38
|
+
return { json_each: jsonEachImplementation(compatibility.isEnabled(CompatibilityOption.fixedJsonExtract)) };
|
|
39
|
+
}
|
|
37
40
|
//# sourceMappingURL=TableValuedFunctions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableValuedFunctions.js","sourceRoot":"","sources":["../src/TableValuedFunctions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TableValuedFunctions.js","sourceRoot":"","sources":["../src/TableValuedFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAS/C,SAAS,sBAAsB,CAAC,iBAA0B;IACxD,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,IAAI,CAAC,IAAmB;YACtB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,sDAAsD,WAAW,EAAE,CAAC,CAAC;YACvF,CAAC;YACD,IAAI,MAAM,GAAsB,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtB,OAAO;oBACL,KAAK,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,CAAC;iBAC/C,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,EAAE,8BAA8B;QACtC,aAAa,EAAE,yDAAyD;KACzE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,aAAmC;IAC9E,OAAO,EAAE,SAAS,EAAE,sBAAsB,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;AAC9G,CAAC"}
|
package/dist/compatibility.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export declare class CompatibilityOption {
|
|
|
14
14
|
readonly fixedIn: CompatibilityEdition;
|
|
15
15
|
private constructor();
|
|
16
16
|
static timestampsIso8601: CompatibilityOption;
|
|
17
|
+
static versionedBucketIds: CompatibilityOption;
|
|
18
|
+
static fixedJsonExtract: CompatibilityOption;
|
|
17
19
|
static byName: Record<string, CompatibilityOption>;
|
|
18
20
|
}
|
|
19
21
|
export declare class CompatibilityContext {
|
package/dist/compatibility.js
CHANGED
|
@@ -19,8 +19,12 @@ export class CompatibilityOption {
|
|
|
19
19
|
this.fixedIn = fixedIn;
|
|
20
20
|
}
|
|
21
21
|
static timestampsIso8601 = new CompatibilityOption('timestamps_iso8601', 'Consistently renders timestamps with an ISO 8601-compatible format (previous versions used a space instead of a T to separate date and time).', CompatibilityEdition.SYNC_STREAMS);
|
|
22
|
+
static versionedBucketIds = new CompatibilityOption('versioned_bucket_ids', 'Encode the version of sync rules in generated bucket ids, which avoids clients downloading data twice and improves client-side progress estimates.', CompatibilityEdition.SYNC_STREAMS);
|
|
23
|
+
static fixedJsonExtract = new CompatibilityOption('fixed_json_extract', "Old versions of the sync service used to treat `->> 'foo.bar'` as a two-element JSON path. With this compatibility option enabled, it follows modern SQLite and treats it as a single key. The `$.` prefix would be required to split on `.`.", CompatibilityEdition.SYNC_STREAMS);
|
|
22
24
|
static byName = Object.freeze({
|
|
23
|
-
timestamps_iso8601: this.timestampsIso8601
|
|
25
|
+
timestamps_iso8601: this.timestampsIso8601,
|
|
26
|
+
versioned_bucket_ids: this.versionedBucketIds,
|
|
27
|
+
fixed_json_extract: this.fixedJsonExtract
|
|
24
28
|
});
|
|
25
29
|
}
|
|
26
30
|
export class CompatibilityContext {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,mEAAU,CAAA;IACV,+EAAgB,CAAA;AAClB,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IAEnB;IACA;IACA;IAHX,YACW,IAAY,EACZ,WAAmB,EACnB,OAA6B;QAF7B,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAQ;QACnB,YAAO,GAAP,OAAO,CAAsB;IACrC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,GAAG,IAAI,mBAAmB,CAChD,oBAAoB,EACpB,+IAA+I,EAC/I,oBAAoB,CAAC,YAAY,CAClC,CAAC;IAEF,MAAM,CAAC,MAAM,GAAwC,MAAM,CAAC,MAAM,CAAC;QACjE,kBAAkB,EAAE,IAAI,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../src/compatibility.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,mEAAU,CAAA;IACV,+EAAgB,CAAA;AAClB,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IAEnB;IACA;IACA;IAHX,YACW,IAAY,EACZ,WAAmB,EACnB,OAA6B;QAF7B,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAQ;QACnB,YAAO,GAAP,OAAO,CAAsB;IACrC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,GAAG,IAAI,mBAAmB,CAChD,oBAAoB,EACpB,+IAA+I,EAC/I,oBAAoB,CAAC,YAAY,CAClC,CAAC;IAEF,MAAM,CAAC,kBAAkB,GAAG,IAAI,mBAAmB,CACjD,sBAAsB,EACtB,oJAAoJ,EACpJ,oBAAoB,CAAC,YAAY,CAClC,CAAC;IAEF,MAAM,CAAC,gBAAgB,GAAG,IAAI,mBAAmB,CAC/C,oBAAoB,EACpB,+OAA+O,EAC/O,oBAAoB,CAAC,YAAY,CAClC,CAAC;IAEF,MAAM,CAAC,MAAM,GAAwC,MAAM,CAAC,MAAM,CAAC;QACjE,kBAAkB,EAAE,IAAI,CAAC,iBAAiB;QAC1C,oBAAoB,EAAE,IAAI,CAAC,kBAAkB;QAC7C,kBAAkB,EAAE,IAAI,CAAC,gBAAgB;KAC1C,CAAC,CAAC;;AAGL,MAAM,OAAO,oBAAoB;IAC/B;;;;;OAKG;IACM,OAAO,CAAuB;IAEvC;;OAEG;IACM,SAAS,CAAoC;IAEtD,YAAY,OAA6B,EAAE,SAA6C;QACtF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,GAAG,EAAE,CAAC;IAC1C,CAAC;IAED,SAAS,CAAC,MAA2B;QACnC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,4BAA4B,GAAyB,IAAI,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { SqlRuleError } from '../errors.js';
|
|
2
|
-
import { applyRowContext } from '../utils.js';
|
|
3
2
|
import { SqlEventSourceQuery } from './SqlEventSourceQuery.js';
|
|
4
3
|
/**
|
|
5
4
|
* A sync rules event which is triggered from a SQL table change.
|
|
@@ -13,7 +12,7 @@ export class SqlEventDescriptor {
|
|
|
13
12
|
this.name = name;
|
|
14
13
|
}
|
|
15
14
|
addSourceQuery(sql, options) {
|
|
16
|
-
const source = SqlEventSourceQuery.fromSql(this.name, sql, options);
|
|
15
|
+
const source = SqlEventSourceQuery.fromSql(this.name, sql, options, this.compatibility);
|
|
17
16
|
// Each source query should be for a unique table
|
|
18
17
|
const existingSourceQuery = this.sourceQueries.find((q) => q.table == source.table);
|
|
19
18
|
if (existingSourceQuery) {
|
|
@@ -36,7 +35,7 @@ export class SqlEventDescriptor {
|
|
|
36
35
|
errors: [{ error: `No matching source query found for table ${options.sourceTable.name}` }]
|
|
37
36
|
};
|
|
38
37
|
}
|
|
39
|
-
return matchingQuery.evaluateRowWithErrors(options.sourceTable,
|
|
38
|
+
return matchingQuery.evaluateRowWithErrors(options.sourceTable, options.record);
|
|
40
39
|
}
|
|
41
40
|
getSourceTables() {
|
|
42
41
|
let result = new Set();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlEventDescriptor.js","sourceRoot":"","sources":["../../src/events/SqlEventDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"SqlEventDescriptor.js","sourceRoot":"","sources":["../../src/events/SqlEventDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAQ5C,OAAO,EAA+B,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE5F;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAMV;IALnB,IAAI,CAAS;IACb,aAAa,GAA0B,EAAE,CAAC;IAE1C,YACE,IAAY,EACK,aAAmC;QAAnC,kBAAa,GAAb,aAAa,CAAsB;QAEpD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,cAAc,CAAC,GAAW,EAAE,OAAyB;QACnD,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAExF,iDAAiD;QACjD,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QACpF,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,CAAC,IAAI,YAAY,CAAC,gDAAgD,EAAE,GAAG,CAAC,CAAC;aAClF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhC,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC;IAED,qBAAqB,CAAC,OAA2B;QAC/C,yDAAyD;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;gBACL,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,4CAA4C,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;aAC5F,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAClF,CAAC;IAED,eAAe;QACb,IAAI,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;QACrC,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAY,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kBAAkB,CAAC,KAA2B;QAC5C,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;CACF"}
|
|
@@ -2,6 +2,7 @@ import { BaseSqlDataQuery, BaseSqlDataQueryOptions } from '../BaseSqlDataQuery.j
|
|
|
2
2
|
import { SourceTableInterface } from '../SourceTableInterface.js';
|
|
3
3
|
import { SyncRulesOptions } from '../SqlSyncRules.js';
|
|
4
4
|
import { EvaluationError, SqliteJsonRow, SqliteRow } from '../types.js';
|
|
5
|
+
import { CompatibilityContext } from '../compatibility.js';
|
|
5
6
|
export type EvaluatedEventSourceRow = {
|
|
6
7
|
data: SqliteJsonRow;
|
|
7
8
|
};
|
|
@@ -13,7 +14,7 @@ export type EvaluatedEventRowWithErrors = {
|
|
|
13
14
|
* Defines how a Replicated Row is mapped to source parameters for events.
|
|
14
15
|
*/
|
|
15
16
|
export declare class SqlEventSourceQuery extends BaseSqlDataQuery {
|
|
16
|
-
static fromSql(descriptor_name: string, sql: string, options: SyncRulesOptions): SqlEventSourceQuery;
|
|
17
|
+
static fromSql(descriptor_name: string, sql: string, options: SyncRulesOptions, compatibility: CompatibilityContext): SqlEventSourceQuery;
|
|
17
18
|
constructor(options: BaseSqlDataQueryOptions);
|
|
18
19
|
evaluateRowWithErrors(table: SourceTableInterface, row: SqliteRow): EvaluatedEventRowWithErrors;
|
|
19
20
|
}
|
|
@@ -11,7 +11,7 @@ import { isSelectStatement } from '../utils.js';
|
|
|
11
11
|
* Defines how a Replicated Row is mapped to source parameters for events.
|
|
12
12
|
*/
|
|
13
13
|
export class SqlEventSourceQuery extends BaseSqlDataQuery {
|
|
14
|
-
static fromSql(descriptor_name, sql, options) {
|
|
14
|
+
static fromSql(descriptor_name, sql, options, compatibility) {
|
|
15
15
|
const parsed = parse(sql, { locationTracking: true });
|
|
16
16
|
const schema = options.schema;
|
|
17
17
|
if (parsed.length > 1) {
|
|
@@ -49,7 +49,8 @@ export class SqlEventSourceQuery extends BaseSqlDataQuery {
|
|
|
49
49
|
parameterTables: [],
|
|
50
50
|
valueTables: [alias],
|
|
51
51
|
sql,
|
|
52
|
-
schema: querySchema
|
|
52
|
+
schema: querySchema,
|
|
53
|
+
compatibilityContext: compatibility
|
|
53
54
|
});
|
|
54
55
|
let extractors = [];
|
|
55
56
|
for (let column of q.columns ?? []) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlEventSourceQuery.js","sourceRoot":"","sources":["../../src/events/SqlEventSourceQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAA8C,MAAM,wBAAwB,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"SqlEventSourceQuery.js","sourceRoot":"","sources":["../../src/events/SqlEventSourceQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAA8C,MAAM,wBAAwB,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAYhD;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,gBAAgB;IACvD,MAAM,CAAC,OAAO,CAAC,eAAuB,EAAE,GAAW,EAAE,OAAyB,EAAE,aAAmC;QACjH,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,YAAY,CAAC,6CAA6C,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,YAAY,CAAC,sCAAsC,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,MAAM,GAAmB,EAAE,CAAC;QAEhC,MAAM,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjD,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;YACtE,MAAM,IAAI,YAAY,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClC,IAAI,QAAQ,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,YAAY,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,KAAK,GAAW,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC;QAEtD,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9F,IAAI,WAAW,GAA4B,SAAS,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAG,IAAI,YAAY,CACxB,SAAS,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,YAAY,YAAY,EACnE,GAAG,EACH,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CACvB,CAAC;gBACF,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;gBAEnB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,IAAI,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC;YACzB,KAAK,EAAE,KAAK;YACZ,eAAe,EAAE,EAAE;YACnB,WAAW,EAAE,CAAC,KAAK,CAAC;YACpB,GAAG;YACH,MAAM,EAAE,WAAW;YACnB,oBAAoB,EAAE,aAAa;SACpC,CAAC,CAAC;QAEH,IAAI,UAAU,GAAwB,EAAE,CAAC;QACzC,KAAK,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3D,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,uBAAuB;oBACvB,SAAS;gBACX,CAAC;gBACD,UAAU,CAAC,IAAI,CAAC;oBACd,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;wBAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACzC,CAAC;oBACD,QAAQ,CAAC,MAAM,EAAE,IAAI;wBACnB,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;wBAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;oBACjG,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC;oBACd,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;wBAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC1B,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;4BACpB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gCACxB,SAAS;4BACX,CAAC;4BACD,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;wBAC3B,CAAC;oBACH,CAAC;oBACD,QAAQ,CAAC,MAAM,EAAE,IAAI;wBACnB,KAAK,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC;wBAC/B,CAAC;oBACH,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAE7B,OAAO,IAAI,mBAAmB,CAAC;YAC7B,WAAW;YACX,KAAK,EAAE,KAAK;YACZ,GAAG;YACH,cAAc,EAAE,eAAe;YAC/B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;YACxB,UAAU,EAAE,UAAU;YACtB,KAAK;YACL,gBAAgB,EAAE,EAAE;YACpB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAED,YAAY,OAAgC;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED,qBAAqB,CAAC,KAA2B,EAAE,GAAc;QAC/D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,KAAM,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YAExE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACvC,OAAO;gBACL,MAAM,EAAE;oBACN,IAAI;iBACL;gBACD,MAAM,EAAE,EAAE;aACX,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,8BAA8B,CAAC,EAAE,CAAC;QACnE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ExpressionType } from './ExpressionType.js';
|
|
2
|
-
import {
|
|
2
|
+
import { CompatibilityContext, CompatibilityEdition } from './compatibility.js';
|
|
3
|
+
import { generateSqlFunctions } from './sql_functions.js';
|
|
4
|
+
const jsonExtractFromRecord = generateSqlFunctions(new CompatibilityContext(CompatibilityEdition.SYNC_STREAMS)).jsonExtractFromRecord;
|
|
3
5
|
/**
|
|
4
6
|
* Defines a `parameters` function and a `parameter` function.
|
|
5
7
|
*
|
|
@@ -26,13 +28,11 @@ export function parameterFunctions(options) {
|
|
|
26
28
|
parameterCount: 1,
|
|
27
29
|
call(parameters, path) {
|
|
28
30
|
const parsed = options.extractJsonParsed(parameters);
|
|
31
|
+
// jsonExtractFromRecord uses the correct behavior of only splitting the path if it starts with $.
|
|
32
|
+
// This particular JSON extract function always had that behavior, so we don't need to take backwards
|
|
33
|
+
// compatibility into account.
|
|
29
34
|
if (typeof path == 'string') {
|
|
30
|
-
|
|
31
|
-
return jsonExtractFromRecord(parsed, path, '->>');
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
return parsed[path];
|
|
35
|
-
}
|
|
35
|
+
return jsonExtractFromRecord(parsed, path, '->>');
|
|
36
36
|
}
|
|
37
37
|
return null;
|
|
38
38
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request_functions.js","sourceRoot":"","sources":["../src/request_functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"request_functions.js","sourceRoot":"","sources":["../src/request_functions.ts"],"names":[],"mappings":"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"}
|
package/dist/sql_filters.d.ts
CHANGED
|
@@ -3,8 +3,9 @@ import { nil } from 'pgsql-ast-parser/src/utils.js';
|
|
|
3
3
|
import { BucketPriority } from './BucketDescription.js';
|
|
4
4
|
import { SqlRuleError } from './errors.js';
|
|
5
5
|
import { SqlParameterFunction } from './request_functions.js';
|
|
6
|
-
import { SqlFunction } from './sql_functions.js';
|
|
6
|
+
import { SqlFunction, generateSqlFunctions } from './sql_functions.js';
|
|
7
7
|
import { ClauseError, CompiledClause, InputParameter, ParameterMatchClause, ParameterValueClause, QueryParameters, QuerySchema, RowValueClause, StaticValueClause, TrueIfParametersMatch } from './types.js';
|
|
8
|
+
import { CompatibilityContext } from './compatibility.js';
|
|
8
9
|
export declare const MATCH_CONST_FALSE: TrueIfParametersMatch;
|
|
9
10
|
export declare const MATCH_CONST_TRUE: TrueIfParametersMatch;
|
|
10
11
|
export interface SqlToolsOptions {
|
|
@@ -50,6 +51,10 @@ export interface SqlToolsOptions {
|
|
|
50
51
|
* Schema for validations.
|
|
51
52
|
*/
|
|
52
53
|
schema?: QuerySchema;
|
|
54
|
+
/**
|
|
55
|
+
* Context controling how functions should behave if we've made backwards-incompatible change to them.
|
|
56
|
+
*/
|
|
57
|
+
compatibilityContext: CompatibilityContext;
|
|
53
58
|
}
|
|
54
59
|
export declare class SqlTools {
|
|
55
60
|
readonly defaultTable?: string;
|
|
@@ -64,6 +69,8 @@ export declare class SqlTools {
|
|
|
64
69
|
readonly supportsExpandingParameters: boolean;
|
|
65
70
|
readonly supportsParameterExpressions: boolean;
|
|
66
71
|
readonly parameterFunctions: Record<string, Record<string, SqlParameterFunction>>;
|
|
72
|
+
readonly compatibilityContext: CompatibilityContext;
|
|
73
|
+
readonly functions: ReturnType<typeof generateSqlFunctions>;
|
|
67
74
|
schema?: QuerySchema;
|
|
68
75
|
constructor(options: SqlToolsOptions);
|
|
69
76
|
error(message: string, expr: NodeLocation | Expr | undefined): ClauseError;
|
package/dist/sql_filters.js
CHANGED
|
@@ -3,7 +3,7 @@ import { isValidPriority } from './BucketDescription.js';
|
|
|
3
3
|
import { ExpressionType } from './ExpressionType.js';
|
|
4
4
|
import { SqlRuleError } from './errors.js';
|
|
5
5
|
import { REQUEST_FUNCTIONS } from './request_functions.js';
|
|
6
|
-
import { BASIC_OPERATORS, OPERATOR_IN, OPERATOR_IS_NOT_NULL, OPERATOR_IS_NULL,
|
|
6
|
+
import { BASIC_OPERATORS, OPERATOR_IN, OPERATOR_IS_NOT_NULL, OPERATOR_IS_NULL, OPERATOR_NOT, OPERATOR_OVERLAP, castOperator, generateSqlFunctions, getOperatorFunction, sqliteTypeOf } from './sql_functions.js';
|
|
7
7
|
import { SQLITE_FALSE, SQLITE_TRUE, andFilters, compileStaticOperator, isClauseError, isParameterMatchClause, isParameterValueClause, isRowValueClause, isStaticValueClause, orFilters, toBooleanParameterSetClause } from './sql_support.js';
|
|
8
8
|
import { isJsonValue } from './utils.js';
|
|
9
9
|
export const MATCH_CONST_FALSE = [];
|
|
@@ -23,6 +23,8 @@ export class SqlTools {
|
|
|
23
23
|
supportsExpandingParameters;
|
|
24
24
|
supportsParameterExpressions;
|
|
25
25
|
parameterFunctions;
|
|
26
|
+
compatibilityContext;
|
|
27
|
+
functions;
|
|
26
28
|
schema;
|
|
27
29
|
constructor(options) {
|
|
28
30
|
this.defaultTable = options.table;
|
|
@@ -41,6 +43,8 @@ export class SqlTools {
|
|
|
41
43
|
this.supportsExpandingParameters = options.supportsExpandingParameters ?? false;
|
|
42
44
|
this.supportsParameterExpressions = options.supportsParameterExpressions ?? false;
|
|
43
45
|
this.parameterFunctions = options.parameterFunctions ?? { request: REQUEST_FUNCTIONS };
|
|
46
|
+
this.compatibilityContext = options.compatibilityContext;
|
|
47
|
+
this.functions = generateSqlFunctions(this.compatibilityContext);
|
|
44
48
|
}
|
|
45
49
|
error(message, expr) {
|
|
46
50
|
this.errors.push(new SqlRuleError(message, this.sql, expr));
|
|
@@ -222,7 +226,7 @@ export class SqlTools {
|
|
|
222
226
|
const fn = expr.function.name;
|
|
223
227
|
if (schema == null) {
|
|
224
228
|
// Just fn()
|
|
225
|
-
const fnImpl =
|
|
229
|
+
const fnImpl = this.functions.named[fn];
|
|
226
230
|
if (fnImpl == null) {
|
|
227
231
|
return this.error(`Function '${fn}' is not defined`, expr);
|
|
228
232
|
}
|
|
@@ -276,10 +280,10 @@ export class SqlTools {
|
|
|
276
280
|
const debugArgs = [expr.operand, expr];
|
|
277
281
|
const args = [operand, staticValueClause(expr.member)];
|
|
278
282
|
if (expr.op == '->') {
|
|
279
|
-
return this.composeFunction(
|
|
283
|
+
return this.composeFunction(this.functions.operatorJsonExtractJson, args, debugArgs);
|
|
280
284
|
}
|
|
281
285
|
else {
|
|
282
|
-
return this.composeFunction(
|
|
286
|
+
return this.composeFunction(this.functions.operatorJsonExtractSql, args, debugArgs);
|
|
283
287
|
}
|
|
284
288
|
}
|
|
285
289
|
else if (expr.type == 'cast') {
|