@powersync/service-sync-rules 0.26.1 → 0.28.0
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 +53 -12
- package/dist/BaseSqlDataQuery.js +49 -9
- package/dist/BaseSqlDataQuery.js.map +1 -1
- package/dist/BucketDescription.d.ts +1 -1
- package/dist/BucketDescription.js +1 -1
- package/dist/BucketDescription.js.map +1 -1
- package/dist/SourceTableInterface.d.ts +1 -1
- package/dist/SqlBucketDescriptor.d.ts +6 -6
- package/dist/SqlBucketDescriptor.js +24 -28
- package/dist/SqlBucketDescriptor.js.map +1 -1
- package/dist/SqlDataQuery.d.ts +14 -3
- package/dist/SqlDataQuery.js +41 -27
- package/dist/SqlDataQuery.js.map +1 -1
- package/dist/SqlParameterQuery.d.ts +82 -26
- package/dist/SqlParameterQuery.js +135 -77
- package/dist/SqlParameterQuery.js.map +1 -1
- package/dist/SqlSyncRules.d.ts +3 -5
- package/dist/SqlSyncRules.js +20 -23
- package/dist/SqlSyncRules.js.map +1 -1
- package/dist/StaticSchema.js +2 -2
- package/dist/StaticSchema.js.map +1 -1
- package/dist/StaticSqlParameterQuery.d.ts +50 -15
- package/dist/StaticSqlParameterQuery.js +74 -36
- package/dist/StaticSqlParameterQuery.js.map +1 -1
- package/dist/TablePattern.js +2 -2
- package/dist/TablePattern.js.map +1 -1
- package/dist/TableValuedFunctionSqlParameterQuery.d.ts +70 -17
- package/dist/TableValuedFunctionSqlParameterQuery.js +98 -43
- package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
- package/dist/events/SqlEventDescriptor.d.ts +2 -4
- package/dist/events/SqlEventDescriptor.js +8 -11
- package/dist/events/SqlEventDescriptor.js.map +1 -1
- package/dist/events/SqlEventSourceQuery.d.ts +2 -2
- package/dist/events/SqlEventSourceQuery.js +24 -17
- package/dist/events/SqlEventSourceQuery.js.map +1 -1
- package/dist/request_functions.js +3 -3
- package/dist/request_functions.js.map +1 -1
- package/dist/schema-generators/SchemaGenerator.js +2 -2
- package/dist/schema-generators/SchemaGenerator.js.map +1 -1
- package/dist/sql_filters.d.ts +12 -12
- package/dist/sql_filters.js +24 -24
- package/dist/sql_filters.js.map +1 -1
- package/dist/types.d.ts +10 -12
- package/dist/types.js +13 -13
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -9,19 +9,60 @@ export interface RowValueExtractor {
|
|
|
9
9
|
extract(tables: QueryParameters, into: SqliteRow): void;
|
|
10
10
|
getTypes(schema: QuerySchema, into: Record<string, ColumnDefinition>): void;
|
|
11
11
|
}
|
|
12
|
-
export
|
|
13
|
-
sourceTable
|
|
14
|
-
table
|
|
15
|
-
sql
|
|
16
|
-
columns
|
|
12
|
+
export interface BaseSqlDataQueryOptions {
|
|
13
|
+
sourceTable: TablePattern;
|
|
14
|
+
table: string;
|
|
15
|
+
sql: string;
|
|
16
|
+
columns: SelectedColumn[];
|
|
17
17
|
extractors: RowValueExtractor[];
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
tools
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
descriptorName: string;
|
|
19
|
+
bucketParameters: string[];
|
|
20
|
+
tools: SqlTools;
|
|
21
|
+
errors?: SqlRuleError[];
|
|
22
|
+
}
|
|
23
|
+
export declare class BaseSqlDataQuery {
|
|
24
|
+
/**
|
|
25
|
+
* Source table or table pattern.
|
|
26
|
+
*/
|
|
27
|
+
readonly sourceTable: TablePattern;
|
|
28
|
+
/**
|
|
29
|
+
* The table name or alias used in the query.
|
|
30
|
+
*
|
|
31
|
+
* This is used for the output table name.
|
|
32
|
+
*/
|
|
33
|
+
readonly table: string;
|
|
34
|
+
/**
|
|
35
|
+
* The source SQL query, for debugging purposes.
|
|
36
|
+
*/
|
|
37
|
+
readonly sql: string;
|
|
38
|
+
/**
|
|
39
|
+
* Query columns, for debugging purposes.
|
|
40
|
+
*/
|
|
41
|
+
readonly columns: SelectedColumn[];
|
|
42
|
+
/**
|
|
43
|
+
* Extracts input row into output row. This is the column list in the SELECT part of the query.
|
|
44
|
+
*
|
|
45
|
+
* This may include plain column names, wildcards, and basic expressions.
|
|
46
|
+
*/
|
|
47
|
+
readonly extractors: RowValueExtractor[];
|
|
48
|
+
/**
|
|
49
|
+
* Bucket definition name.
|
|
50
|
+
*/
|
|
51
|
+
readonly descriptorName: string;
|
|
52
|
+
/**
|
|
53
|
+
* Bucket parameter names, without the `bucket.` prefix.
|
|
54
|
+
*
|
|
55
|
+
* These are received from the associated parameter query (if any), and must match the filters
|
|
56
|
+
* used in the data query.
|
|
57
|
+
*/
|
|
58
|
+
readonly bucketParameters: string[];
|
|
59
|
+
/**
|
|
60
|
+
* Used to generate debugging info.
|
|
61
|
+
*/
|
|
62
|
+
private readonly tools;
|
|
63
|
+
readonly errors: SqlRuleError[];
|
|
64
|
+
constructor(options: BaseSqlDataQueryOptions);
|
|
65
|
+
applies(table: SourceTableInterface): boolean;
|
|
25
66
|
addSpecialParameters(table: SourceTableInterface, row: SqliteRow): SqliteRow;
|
|
26
67
|
getOutputName(sourceTable: string): string;
|
|
27
68
|
isUnaliasedWildcard(): boolean;
|
package/dist/BaseSqlDataQuery.js
CHANGED
|
@@ -1,24 +1,64 @@
|
|
|
1
1
|
import { filterJsonRow } from './utils.js';
|
|
2
2
|
export class BaseSqlDataQuery {
|
|
3
|
+
/**
|
|
4
|
+
* Source table or table pattern.
|
|
5
|
+
*/
|
|
3
6
|
sourceTable;
|
|
7
|
+
/**
|
|
8
|
+
* The table name or alias used in the query.
|
|
9
|
+
*
|
|
10
|
+
* This is used for the output table name.
|
|
11
|
+
*/
|
|
4
12
|
table;
|
|
13
|
+
/**
|
|
14
|
+
* The source SQL query, for debugging purposes.
|
|
15
|
+
*/
|
|
5
16
|
sql;
|
|
17
|
+
/**
|
|
18
|
+
* Query columns, for debugging purposes.
|
|
19
|
+
*/
|
|
6
20
|
columns;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Extracts input row into output row. This is the column list in the SELECT part of the query.
|
|
23
|
+
*
|
|
24
|
+
* This may include plain column names, wildcards, and basic expressions.
|
|
25
|
+
*/
|
|
26
|
+
extractors;
|
|
27
|
+
/**
|
|
28
|
+
* Bucket definition name.
|
|
29
|
+
*/
|
|
30
|
+
descriptorName;
|
|
31
|
+
/**
|
|
32
|
+
* Bucket parameter names, without the `bucket.` prefix.
|
|
33
|
+
*
|
|
34
|
+
* These are received from the associated parameter query (if any), and must match the filters
|
|
35
|
+
* used in the data query.
|
|
36
|
+
*/
|
|
37
|
+
bucketParameters;
|
|
38
|
+
/**
|
|
39
|
+
* Used to generate debugging info.
|
|
40
|
+
*/
|
|
10
41
|
tools;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
42
|
+
errors;
|
|
43
|
+
constructor(options) {
|
|
44
|
+
this.sourceTable = options.sourceTable;
|
|
45
|
+
this.table = options.table;
|
|
46
|
+
this.sql = options.sql;
|
|
47
|
+
this.columns = options.columns;
|
|
48
|
+
this.extractors = options.extractors;
|
|
49
|
+
this.descriptorName = options.descriptorName;
|
|
50
|
+
this.bucketParameters = options.bucketParameters;
|
|
51
|
+
this.tools = options.tools;
|
|
52
|
+
this.errors = options.errors ?? [];
|
|
53
|
+
}
|
|
14
54
|
applies(table) {
|
|
15
|
-
return this.sourceTable
|
|
55
|
+
return this.sourceTable.matches(table);
|
|
16
56
|
}
|
|
17
57
|
addSpecialParameters(table, row) {
|
|
18
58
|
if (this.sourceTable.isWildcard) {
|
|
19
59
|
return {
|
|
20
60
|
...row,
|
|
21
|
-
_table_suffix: this.sourceTable.suffix(table.
|
|
61
|
+
_table_suffix: this.sourceTable.suffix(table.name)
|
|
22
62
|
};
|
|
23
63
|
}
|
|
24
64
|
else {
|
|
@@ -50,7 +90,7 @@ export class BaseSqlDataQuery {
|
|
|
50
90
|
let output = {};
|
|
51
91
|
this.getColumnOutputsFor(schemaTable, output);
|
|
52
92
|
result.push({
|
|
53
|
-
name: this.getOutputName(schemaTable.
|
|
93
|
+
name: this.getOutputName(schemaTable.name),
|
|
54
94
|
columns: Object.values(output)
|
|
55
95
|
});
|
|
56
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseSqlDataQuery.js","sourceRoot":"","sources":["../src/BaseSqlDataQuery.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseSqlDataQuery.js","sourceRoot":"","sources":["../src/BaseSqlDataQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* have data in their upload queue.
|
|
13
13
|
*/
|
|
14
14
|
export type BucketPriority = 0 | 1 | 2 | 3;
|
|
15
|
-
export declare const
|
|
15
|
+
export declare const DEFAULT_BUCKET_PRIORITY: BucketPriority;
|
|
16
16
|
export declare const isValidPriority: (i: number) => i is BucketPriority;
|
|
17
17
|
export interface BucketDescription {
|
|
18
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BucketDescription.js","sourceRoot":"","sources":["../src/BucketDescription.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"BucketDescription.js","sourceRoot":"","sources":["../src/BucketDescription.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,uBAAuB,GAAmB,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAS,EAAuB,EAAE;IAChE,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { SqlParameterQuery } from './SqlParameterQuery.js';
|
|
|
7
7
|
import { SyncRulesOptions } from './SqlSyncRules.js';
|
|
8
8
|
import { StaticSqlParameterQuery } from './StaticSqlParameterQuery.js';
|
|
9
9
|
import { TablePattern } from './TablePattern.js';
|
|
10
|
+
import { TableValuedFunctionSqlParameterQuery } from './TableValuedFunctionSqlParameterQuery.js';
|
|
10
11
|
import { SqlRuleError } from './errors.js';
|
|
11
12
|
import { EvaluatedParametersResult, EvaluateRowOptions, EvaluationResult, QueryParseOptions, RequestParameters, SqliteRow } from './types.js';
|
|
12
13
|
export interface QueryParseResult {
|
|
@@ -17,16 +18,15 @@ export interface QueryParseResult {
|
|
|
17
18
|
errors: SqlRuleError[];
|
|
18
19
|
}
|
|
19
20
|
export declare class SqlBucketDescriptor {
|
|
20
|
-
idSequence: IdSequence;
|
|
21
21
|
name: string;
|
|
22
|
-
|
|
23
|
-
constructor(name: string
|
|
22
|
+
bucketParameters?: string[];
|
|
23
|
+
constructor(name: string);
|
|
24
24
|
/**
|
|
25
25
|
* source table -> queries
|
|
26
26
|
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
dataQueries: SqlDataQuery[];
|
|
28
|
+
parameterQueries: SqlParameterQuery[];
|
|
29
|
+
globalParameterQueries: (StaticSqlParameterQuery | TableValuedFunctionSqlParameterQuery)[];
|
|
30
30
|
parameterIdSequence: IdSequence;
|
|
31
31
|
addDataQuery(sql: string, options: SyncRulesOptions): QueryParseResult;
|
|
32
32
|
addParameterQuery(sql: string, options: QueryParseOptions): QueryParseResult;
|
|
@@ -3,48 +3,44 @@ import { IdSequence } from './IdSequence.js';
|
|
|
3
3
|
import { SqlDataQuery } from './SqlDataQuery.js';
|
|
4
4
|
import { SqlParameterQuery } from './SqlParameterQuery.js';
|
|
5
5
|
export class SqlBucketDescriptor {
|
|
6
|
-
idSequence;
|
|
7
6
|
name;
|
|
8
|
-
|
|
9
|
-
constructor(name
|
|
10
|
-
this.idSequence = idSequence;
|
|
7
|
+
bucketParameters;
|
|
8
|
+
constructor(name) {
|
|
11
9
|
this.name = name;
|
|
12
10
|
}
|
|
13
11
|
/**
|
|
14
12
|
* source table -> queries
|
|
15
13
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
dataQueries = [];
|
|
15
|
+
parameterQueries = [];
|
|
16
|
+
globalParameterQueries = [];
|
|
19
17
|
parameterIdSequence = new IdSequence();
|
|
20
18
|
addDataQuery(sql, options) {
|
|
21
|
-
if (this.
|
|
19
|
+
if (this.bucketParameters == null) {
|
|
22
20
|
throw new Error('Bucket parameters must be defined');
|
|
23
21
|
}
|
|
24
|
-
const dataRows = SqlDataQuery.fromSql(this.name, this.
|
|
25
|
-
|
|
26
|
-
this.data_queries.push(dataRows);
|
|
22
|
+
const dataRows = SqlDataQuery.fromSql(this.name, this.bucketParameters, sql, options);
|
|
23
|
+
this.dataQueries.push(dataRows);
|
|
27
24
|
return {
|
|
28
25
|
parsed: true,
|
|
29
26
|
errors: dataRows.errors
|
|
30
27
|
};
|
|
31
28
|
}
|
|
32
29
|
addParameterQuery(sql, options) {
|
|
33
|
-
const parameterQuery = SqlParameterQuery.fromSql(this.name, sql, options);
|
|
34
|
-
if (this.
|
|
35
|
-
this.
|
|
30
|
+
const parameterQuery = SqlParameterQuery.fromSql(this.name, sql, options, this.parameterIdSequence.nextId());
|
|
31
|
+
if (this.bucketParameters == null) {
|
|
32
|
+
this.bucketParameters = parameterQuery.bucketParameters;
|
|
36
33
|
}
|
|
37
34
|
else {
|
|
38
|
-
if (new Set([...parameterQuery.
|
|
35
|
+
if (new Set([...parameterQuery.bucketParameters, ...this.bucketParameters]).size != this.bucketParameters.length) {
|
|
39
36
|
throw new Error('Bucket parameters must match for each parameter query within a bucket');
|
|
40
37
|
}
|
|
41
38
|
}
|
|
42
|
-
parameterQuery.id = this.parameterIdSequence.nextId();
|
|
43
39
|
if (parameterQuery instanceof SqlParameterQuery) {
|
|
44
|
-
this.
|
|
40
|
+
this.parameterQueries.push(parameterQuery);
|
|
45
41
|
}
|
|
46
42
|
else {
|
|
47
|
-
this.
|
|
43
|
+
this.globalParameterQueries.push(parameterQuery);
|
|
48
44
|
}
|
|
49
45
|
return {
|
|
50
46
|
parsed: true,
|
|
@@ -53,7 +49,7 @@ export class SqlBucketDescriptor {
|
|
|
53
49
|
}
|
|
54
50
|
evaluateRow(options) {
|
|
55
51
|
let results = [];
|
|
56
|
-
for (let query of this.
|
|
52
|
+
for (let query of this.dataQueries) {
|
|
57
53
|
if (!query.applies(options.sourceTable)) {
|
|
58
54
|
continue;
|
|
59
55
|
}
|
|
@@ -63,7 +59,7 @@ export class SqlBucketDescriptor {
|
|
|
63
59
|
}
|
|
64
60
|
evaluateParameterRow(sourceTable, row) {
|
|
65
61
|
let results = [];
|
|
66
|
-
for (let query of this.
|
|
62
|
+
for (let query of this.parameterQueries) {
|
|
67
63
|
if (query.applies(sourceTable)) {
|
|
68
64
|
results.push(...query.evaluateParameterRow(row));
|
|
69
65
|
}
|
|
@@ -78,35 +74,35 @@ export class SqlBucketDescriptor {
|
|
|
78
74
|
parameterQueryLookups: [],
|
|
79
75
|
queryDynamicBucketDescriptions: async () => []
|
|
80
76
|
};
|
|
81
|
-
if (this.
|
|
77
|
+
if (this.parameterQueries.length == 0) {
|
|
82
78
|
return staticQuerier;
|
|
83
79
|
}
|
|
84
|
-
const dynamicQueriers = this.
|
|
80
|
+
const dynamicQueriers = this.parameterQueries.map((query) => query.getBucketParameterQuerier(parameters));
|
|
85
81
|
return mergeBucketParameterQueriers([staticQuerier, ...dynamicQueriers]);
|
|
86
82
|
}
|
|
87
83
|
getStaticBucketDescriptions(parameters) {
|
|
88
84
|
let results = [];
|
|
89
|
-
for (let query of this.
|
|
85
|
+
for (let query of this.globalParameterQueries) {
|
|
90
86
|
results.push(...query.getStaticBucketDescriptions(parameters));
|
|
91
87
|
}
|
|
92
88
|
return results;
|
|
93
89
|
}
|
|
94
90
|
hasDynamicBucketQueries() {
|
|
95
|
-
return this.
|
|
91
|
+
return this.parameterQueries.length > 0;
|
|
96
92
|
}
|
|
97
93
|
getSourceTables() {
|
|
98
94
|
let result = new Set();
|
|
99
|
-
for (let query of this.
|
|
95
|
+
for (let query of this.parameterQueries) {
|
|
100
96
|
result.add(query.sourceTable);
|
|
101
97
|
}
|
|
102
|
-
for (let query of this.
|
|
98
|
+
for (let query of this.dataQueries) {
|
|
103
99
|
result.add(query.sourceTable);
|
|
104
100
|
}
|
|
105
101
|
// Note: No physical tables for global_parameter_queries
|
|
106
102
|
return result;
|
|
107
103
|
}
|
|
108
104
|
tableSyncsData(table) {
|
|
109
|
-
for (let query of this.
|
|
105
|
+
for (let query of this.dataQueries) {
|
|
110
106
|
if (query.applies(table)) {
|
|
111
107
|
return true;
|
|
112
108
|
}
|
|
@@ -114,7 +110,7 @@ export class SqlBucketDescriptor {
|
|
|
114
110
|
return false;
|
|
115
111
|
}
|
|
116
112
|
tableSyncsParameters(table) {
|
|
117
|
-
for (let query of this.
|
|
113
|
+
for (let query of this.parameterQueries) {
|
|
118
114
|
if (query.applies(table)) {
|
|
119
115
|
return true;
|
|
120
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlBucketDescriptor.js","sourceRoot":"","sources":["../src/SqlBucketDescriptor.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"SqlBucketDescriptor.js","sourceRoot":"","sources":["../src/SqlBucketDescriptor.ts"],"names":[],"mappings":"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"}
|
package/dist/SqlDataQuery.d.ts
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
import { BaseSqlDataQuery } from './BaseSqlDataQuery.js';
|
|
1
|
+
import { BaseSqlDataQuery, BaseSqlDataQueryOptions } from './BaseSqlDataQuery.js';
|
|
2
2
|
import { SourceTableInterface } from './SourceTableInterface.js';
|
|
3
3
|
import { SyncRulesOptions } from './SqlSyncRules.js';
|
|
4
4
|
import { EvaluationResult, ParameterMatchClause, SqliteRow } from './types.js';
|
|
5
|
+
export interface SqlDataQueryOptions extends BaseSqlDataQueryOptions {
|
|
6
|
+
filter: ParameterMatchClause;
|
|
7
|
+
}
|
|
5
8
|
export declare class SqlDataQuery extends BaseSqlDataQuery {
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
static fromSql(descriptorName: string, bucketParameters: string[], sql: string, options: SyncRulesOptions): SqlDataQuery;
|
|
10
|
+
/**
|
|
11
|
+
* The query WHERE clause.
|
|
12
|
+
*
|
|
13
|
+
* For a given row, this returns a set of bucket parameter values that could cause the filter to match.
|
|
14
|
+
*
|
|
15
|
+
* We use this to determine the buckets that a data row belong to.
|
|
16
|
+
*/
|
|
17
|
+
readonly filter: ParameterMatchClause;
|
|
18
|
+
constructor(options: SqlDataQueryOptions);
|
|
8
19
|
evaluateRow(table: SourceTableInterface, row: SqliteRow): EvaluationResult[];
|
|
9
20
|
}
|
package/dist/SqlDataQuery.js
CHANGED
|
@@ -10,11 +10,10 @@ import { TablePattern } from './TablePattern.js';
|
|
|
10
10
|
import { TableQuerySchema } from './TableQuerySchema.js';
|
|
11
11
|
import { getBucketId, isSelectStatement } from './utils.js';
|
|
12
12
|
export class SqlDataQuery extends BaseSqlDataQuery {
|
|
13
|
-
|
|
14
|
-
static fromSql(descriptor_name, bucket_parameters, sql, options) {
|
|
13
|
+
static fromSql(descriptorName, bucketParameters, sql, options) {
|
|
15
14
|
const parsed = parse(sql, { locationTracking: true });
|
|
16
|
-
const rows = new SqlDataQuery();
|
|
17
15
|
const schema = options.schema;
|
|
16
|
+
let errors = [];
|
|
18
17
|
if (parsed.length > 1) {
|
|
19
18
|
throw new SqlRuleError('Only a single SELECT statement is supported', sql, parsed[1]?._location);
|
|
20
19
|
}
|
|
@@ -22,7 +21,7 @@ export class SqlDataQuery extends BaseSqlDataQuery {
|
|
|
22
21
|
if (!isSelectStatement(q)) {
|
|
23
22
|
throw new SqlRuleError('Only SELECT statements are supported', sql, q._location);
|
|
24
23
|
}
|
|
25
|
-
|
|
24
|
+
errors.push(...checkUnsupportedFeatures(sql, q));
|
|
26
25
|
if (q.from == null || q.from.length != 1 || q.from[0].type != 'table') {
|
|
27
26
|
throw new SqlRuleError('Must SELECT from a single table', sql, q.from?.[0]._location);
|
|
28
27
|
}
|
|
@@ -38,7 +37,7 @@ export class SqlDataQuery extends BaseSqlDataQuery {
|
|
|
38
37
|
if (tables.length == 0) {
|
|
39
38
|
const e = new SqlRuleError(`Table ${sourceTable.schema}.${sourceTable.tablePattern} not found`, sql, q.from?.[0]?._location);
|
|
40
39
|
e.type = 'warning';
|
|
41
|
-
|
|
40
|
+
errors.push(e);
|
|
42
41
|
}
|
|
43
42
|
else {
|
|
44
43
|
querySchema = new TableQuerySchema(tables, alias);
|
|
@@ -47,30 +46,23 @@ export class SqlDataQuery extends BaseSqlDataQuery {
|
|
|
47
46
|
const where = q.where;
|
|
48
47
|
const tools = new SqlTools({
|
|
49
48
|
table: alias,
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
parameterTables: ['bucket'],
|
|
50
|
+
valueTables: [alias],
|
|
52
51
|
sql,
|
|
53
52
|
schema: querySchema
|
|
54
53
|
});
|
|
55
54
|
tools.checkSpecificNameCase(tableRef);
|
|
56
55
|
const filter = tools.compileWhereClause(where);
|
|
57
56
|
const inputParameterNames = filter.inputParameters.map((p) => p.key);
|
|
58
|
-
const bucketParameterNames =
|
|
57
|
+
const bucketParameterNames = bucketParameters.map((p) => `bucket.${p}`);
|
|
59
58
|
const allParams = new Set([...inputParameterNames, ...bucketParameterNames]);
|
|
60
59
|
if ((!filter.error && allParams.size != filter.inputParameters.length) ||
|
|
61
|
-
allParams.size !=
|
|
62
|
-
|
|
60
|
+
allParams.size != bucketParameters.length) {
|
|
61
|
+
errors.push(new SqlRuleError(`Query must cover all bucket parameters. Expected: ${JSONBig.stringify(bucketParameterNames)} Got: ${JSONBig.stringify(inputParameterNames)}`, sql, q._location));
|
|
63
62
|
}
|
|
64
|
-
rows.sourceTable = sourceTable;
|
|
65
|
-
rows.table = alias;
|
|
66
|
-
rows.sql = sql;
|
|
67
|
-
rows.filter = filter;
|
|
68
|
-
rows.descriptor_name = descriptor_name;
|
|
69
|
-
rows.bucket_parameters = bucket_parameters;
|
|
70
|
-
rows.columns = q.columns ?? [];
|
|
71
|
-
rows.tools = tools;
|
|
72
63
|
let hasId = false;
|
|
73
64
|
let hasWildcard = false;
|
|
65
|
+
let extractors = [];
|
|
74
66
|
for (let column of q.columns ?? []) {
|
|
75
67
|
const name = tools.getOutputName(column);
|
|
76
68
|
if (name != '*') {
|
|
@@ -79,7 +71,7 @@ export class SqlDataQuery extends BaseSqlDataQuery {
|
|
|
79
71
|
// Error logged already
|
|
80
72
|
continue;
|
|
81
73
|
}
|
|
82
|
-
|
|
74
|
+
extractors.push({
|
|
83
75
|
extract: (tables, output) => {
|
|
84
76
|
output[name] = clause.evaluate(tables);
|
|
85
77
|
},
|
|
@@ -90,7 +82,7 @@ export class SqlDataQuery extends BaseSqlDataQuery {
|
|
|
90
82
|
});
|
|
91
83
|
}
|
|
92
84
|
else {
|
|
93
|
-
|
|
85
|
+
extractors.push({
|
|
94
86
|
extract: (tables, output) => {
|
|
95
87
|
const row = tables[alias];
|
|
96
88
|
for (let key in row) {
|
|
@@ -130,16 +122,39 @@ export class SqlDataQuery extends BaseSqlDataQuery {
|
|
|
130
122
|
// Schema-based validations are always warnings
|
|
131
123
|
error.type = 'warning';
|
|
132
124
|
}
|
|
133
|
-
|
|
125
|
+
errors.push(error);
|
|
134
126
|
}
|
|
135
|
-
|
|
136
|
-
return
|
|
127
|
+
errors.push(...tools.errors);
|
|
128
|
+
return new SqlDataQuery({
|
|
129
|
+
sourceTable,
|
|
130
|
+
table: alias,
|
|
131
|
+
sql,
|
|
132
|
+
filter,
|
|
133
|
+
columns: q.columns ?? [],
|
|
134
|
+
descriptorName,
|
|
135
|
+
bucketParameters,
|
|
136
|
+
tools,
|
|
137
|
+
errors,
|
|
138
|
+
extractors
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* The query WHERE clause.
|
|
143
|
+
*
|
|
144
|
+
* For a given row, this returns a set of bucket parameter values that could cause the filter to match.
|
|
145
|
+
*
|
|
146
|
+
* We use this to determine the buckets that a data row belong to.
|
|
147
|
+
*/
|
|
148
|
+
filter;
|
|
149
|
+
constructor(options) {
|
|
150
|
+
super(options);
|
|
151
|
+
this.filter = options.filter;
|
|
137
152
|
}
|
|
138
153
|
evaluateRow(table, row) {
|
|
139
154
|
try {
|
|
140
155
|
const tables = { [this.table]: this.addSpecialParameters(table, row) };
|
|
141
156
|
const bucketParameters = this.filter.filterRow(tables);
|
|
142
|
-
const bucketIds = bucketParameters.map((params) => getBucketId(this.
|
|
157
|
+
const bucketIds = bucketParameters.map((params) => getBucketId(this.descriptorName, this.bucketParameters, params));
|
|
143
158
|
const data = this.transformRow(tables);
|
|
144
159
|
let id = data.id;
|
|
145
160
|
if (typeof id != 'string') {
|
|
@@ -151,14 +166,13 @@ export class SqlDataQuery extends BaseSqlDataQuery {
|
|
|
151
166
|
// anything.
|
|
152
167
|
id = castAsText(id) ?? '';
|
|
153
168
|
}
|
|
154
|
-
const outputTable = this.getOutputName(table.
|
|
169
|
+
const outputTable = this.getOutputName(table.name);
|
|
155
170
|
return bucketIds.map((bucketId) => {
|
|
156
171
|
return {
|
|
157
172
|
bucket: bucketId,
|
|
158
173
|
table: outputTable,
|
|
159
174
|
id: id,
|
|
160
|
-
data
|
|
161
|
-
ruleId: this.ruleId
|
|
175
|
+
data
|
|
162
176
|
};
|
|
163
177
|
});
|
|
164
178
|
}
|
package/dist/SqlDataQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlDataQuery.js","sourceRoot":"","sources":["../src/SqlDataQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"SqlDataQuery.js","sourceRoot":"","sources":["../src/SqlDataQuery.ts"],"names":[],"mappings":"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"}
|