@webda/postgres 4.0.0-beta.5 → 4.0.0-beta.6
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/lib/postgresstore.service.d.ts +15 -0
- package/lib/postgresstore.service.d.ts.map +1 -1
- package/lib/postgresstore.service.js +34 -1
- package/lib/postgresstore.service.js.map +1 -1
- package/lib/sqlstore.d.ts +127 -11
- package/lib/sqlstore.d.ts.map +1 -1
- package/lib/sqlstore.js +375 -28
- package/lib/sqlstore.js.map +1 -1
- package/package.json +6 -6
- package/webda.module.json +16 -0
|
@@ -97,6 +97,21 @@ export declare class PostgresStore<K extends PostgresParameters = PostgresParame
|
|
|
97
97
|
* @returns the table name
|
|
98
98
|
*/
|
|
99
99
|
resolveTable(model: ModelClass): string;
|
|
100
|
+
/**
|
|
101
|
+
* The model a table was declared for, owner of the rows written before `__type` stamping:
|
|
102
|
+
* the configured model of a single-model `table`, otherwise the model itself (its own or explicit table)
|
|
103
|
+
* @param model - the model class
|
|
104
|
+
* @returns the model identifier
|
|
105
|
+
*/
|
|
106
|
+
resolveTableModel(model: ModelClass): string | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Stamp `__type` on the rows written before stamping, with the model each table was declared for
|
|
109
|
+
*
|
|
110
|
+
* Idempotent: run it once after upgrading, before relying on the class filter of shared tables (rows without
|
|
111
|
+
* `__type` are read as the table model until then).
|
|
112
|
+
* @returns the number of rows stamped
|
|
113
|
+
*/
|
|
114
|
+
backfillTypes(): Promise<number>;
|
|
100
115
|
/**
|
|
101
116
|
* Ensure all managed model tables exist (one per model in the hierarchy).
|
|
102
117
|
* When `autoCreateTable` is false, this is a no-op.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresstore.service.d.ts","sourceRoot":"","sources":["../src/postgresstore.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAcjF;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,gBAAgB,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAC7C;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB;;;;OAIG;IACH,MAAM,CAAC,EAAE;QAAE,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAE/C;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAQtB;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAC/F,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;IAC5B;;;OAGG;IACH,SAAS,CAAC,QAAQ,UAAS;IAC3B;;;OAGG;IACH,SAAS,CAAC,WAAW,6BAAoC;IAEzD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB1B;IAED;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAY1B;IAED;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAmBtC;IAED;;;OAGG;IACG,UAAU,kBASf;IAED;;;;;;OAMG;IACG,WAAW,CAAC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9D;IAED;;;OAGG;IACH,SAAS,4CAER;IAED;;;;;;;;OAQG;IAEH,aAAa,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"postgresstore.service.d.ts","sourceRoot":"","sources":["../src/postgresstore.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAcjF;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,gBAAgB,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAC7C;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB;;;;OAIG;IACH,MAAM,CAAC,EAAE;QAAE,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAE/C;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAQtB;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAC/F,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;IAC5B;;;OAGG;IACH,SAAS,CAAC,QAAQ,UAAS;IAC3B;;;OAGG;IACH,SAAS,CAAC,WAAW,6BAAoC;IAEzD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB1B;IAED;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAY1B;IAED;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAmBtC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAcvD;IAED;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAMrC;IAED;;;OAGG;IACG,UAAU,kBASf;IAED;;;;;;OAMG;IACG,WAAW,CAAC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9D;IAED;;;OAGG;IACH,SAAS,4CAER;IAED;;;;;;;;OAQG;IAEH,aAAa,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAe3D;IAED;;;;OAIG;IACH,eAAe,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAgB3C;IAED;;;;;OAKG;IACG,WAAW,kBA6DhB;IAED;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAe7B;CACF;eAEc,aAAa"}
|
|
@@ -168,6 +168,39 @@ let PostgresStore = (() => {
|
|
|
168
168
|
// Default derivation
|
|
169
169
|
return meta.Identifier.toLowerCase().replace(/\//g, "_");
|
|
170
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* The model a table was declared for, owner of the rows written before `__type` stamping:
|
|
173
|
+
* the configured model of a single-model `table`, otherwise the model itself (its own or explicit table)
|
|
174
|
+
* @param model - the model class
|
|
175
|
+
* @returns the model identifier
|
|
176
|
+
*/
|
|
177
|
+
resolveTableModel(model) {
|
|
178
|
+
const meta = useModelMetadata(model);
|
|
179
|
+
if (!meta) {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
if (!this.parameters.tables?.[meta.Identifier] &&
|
|
183
|
+
this.parameters.models?.length === 1 &&
|
|
184
|
+
this.parameters.table &&
|
|
185
|
+
(this.parameters.models[0] === meta.Identifier || this.handleModel(model) >= 0)) {
|
|
186
|
+
return this.parameters.models[0];
|
|
187
|
+
}
|
|
188
|
+
return meta.Identifier;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Stamp `__type` on the rows written before stamping, with the model each table was declared for
|
|
192
|
+
*
|
|
193
|
+
* Idempotent: run it once after upgrading, before relying on the class filter of shared tables (rows without
|
|
194
|
+
* `__type` are read as the table model until then).
|
|
195
|
+
* @returns the number of rows stamped
|
|
196
|
+
*/
|
|
197
|
+
async backfillTypes() {
|
|
198
|
+
let count = 0;
|
|
199
|
+
for (const repo of this.getRepositories()) {
|
|
200
|
+
count += await repo.backfillTypes();
|
|
201
|
+
}
|
|
202
|
+
return count;
|
|
203
|
+
}
|
|
171
204
|
/**
|
|
172
205
|
* Ensure all managed model tables exist (one per model in the hierarchy).
|
|
173
206
|
* When `autoCreateTable` is false, this is a no-op.
|
|
@@ -222,7 +255,7 @@ let PostgresStore = (() => {
|
|
|
222
255
|
getRepository(model) {
|
|
223
256
|
const meta = useModelMetadata(model);
|
|
224
257
|
const table = this.resolveTable(model);
|
|
225
|
-
const inner = new PostgresRepository(model, meta.PrimaryKey, this.client, table, meta.PrimaryKeySeparator, () => this.ensureTable(inner));
|
|
258
|
+
const inner = new PostgresRepository(model, meta.PrimaryKey, this.client, table, meta.PrimaryKeySeparator, () => this.ensureTable(inner), this.resolveTableModel(model));
|
|
226
259
|
// Wrap in EventRepository so typed CRUD events fire; consumers reach them
|
|
227
260
|
// via useRepository(model).on(...).
|
|
228
261
|
return new EventRepository(model, meta.PrimaryKey, inner, meta.PrimaryKeySeparator);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresstore.service.js","sourceRoot":"","sources":["../src/postgresstore.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGlH,OAAO,EAAgC,MAAM,IAAI,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,kBAAkB;IAqCxD;;;;OAIG;IACH,IAAI,CAAC,MAAW;QACd,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,CAAC,eAAe,KAApB,IAAI,CAAC,eAAe,GAAK,IAAI,EAAC;QAC9B,IAAI,CAAC,OAAO,KAAZ,IAAI,CAAC,OAAO,GAAK,KAAK,EAAC;QACvB,IAAI,CAAC,UAAU,KAAf,IAAI,CAAC,UAAU,GAAK,EAAE,EAAC;QACvB,IAAI,CAAC,KAAK,KAAV,IAAI,CAAC,KAAK,GAAK,CAAC,IAAI,CAAC,EAAC;QACtB,IAAI,CAAC,MAAM,KAAX,IAAI,CAAC,MAAM,GAAK,EAAE,EAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;;;;;;;;;;;;;;GAeG;IACU,aAAa;;sBAA4D,QAAQ;;;sBAAjF,aAAiE,SAAQ,WAAW;;;gBAC/F,WAAM,GADK,mDAAa,CACI;gBAC5B;;;mBAGG;gBACO,aAAQ,GAAG,KAAK,CAAC;gBAC3B;;;mBAGG;gBACO,gBAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"postgresstore.service.js","sourceRoot":"","sources":["../src/postgresstore.service.ts"],"names":[],"mappings":"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"}
|
package/lib/sqlstore.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MemoryRepository, Store, StoreParameters } from "@webda/core";
|
|
2
2
|
import type { ModelClass, Repository } from "@webda/core";
|
|
3
3
|
import * as WebdaQL from "@webda/ql";
|
|
4
|
+
import type { AggregationQuery, AggregationResult } from "@webda/ql";
|
|
4
5
|
/** Database connection metadata */
|
|
5
6
|
export interface SQLDatabase {
|
|
6
7
|
name: string;
|
|
@@ -28,23 +29,41 @@ export interface SQLResult<T> {
|
|
|
28
29
|
rows: T[];
|
|
29
30
|
rowCount: number;
|
|
30
31
|
}
|
|
31
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Extends ComparisonExpression to emit SQL for JSONB comparisons
|
|
34
|
+
*
|
|
35
|
+
* With the JSON path of the attribute (`jsonAttribute`), comparisons follow the in-memory semantics:
|
|
36
|
+
* - a number or a boolean only matches a JSON number or boolean: a missing field, a null or another type never
|
|
37
|
+
* matches, and never raises a cast error;
|
|
38
|
+
* - `!=` matches a missing field, a null or another type (`IS DISTINCT FROM`);
|
|
39
|
+
* - strings compare the text of the value, so a number field equals its text (`n = '1'`), as the loose `==` does;
|
|
40
|
+
* - `CONTAINS` only matches an array holding the value.
|
|
41
|
+
*/
|
|
32
42
|
export declare class SQLComparisonExpression extends WebdaQL.ComparisonExpression {
|
|
43
|
+
protected readonly jsonAttribute?: string;
|
|
44
|
+
/**
|
|
45
|
+
* @param operator - the comparison operator
|
|
46
|
+
* @param attribute - the SQL text of the attribute (`data#>>'{a,b}'`)
|
|
47
|
+
* @param value - the value
|
|
48
|
+
* @param jsonAttribute - the SQL JSON of the attribute (`data#>'{a,b}'`), for typed comparisons
|
|
49
|
+
*/
|
|
50
|
+
constructor(operator: WebdaQL.ComparisonOperator, attribute: string, value: any, jsonAttribute?: string);
|
|
33
51
|
/**
|
|
34
|
-
* Single quotes are doubled so a value can never close the literal. Backslashes stay
|
|
35
|
-
* literal: with `standard_conforming_strings` (PostgreSQL default) `\\` is not an
|
|
36
|
-
* escape character in '...' strings — only LIKE gives it a meaning.
|
|
37
|
-
*
|
|
38
52
|
* @override
|
|
39
53
|
* @param value - the value to stringify
|
|
40
|
-
* @returns SQL-compatible
|
|
54
|
+
* @returns SQL-compatible literal
|
|
41
55
|
*/
|
|
42
56
|
toStringValue(value: (string | number | boolean) | (string | number | boolean)[]): string;
|
|
43
57
|
/**
|
|
44
58
|
* @override
|
|
45
|
-
* @returns SQL attribute expression
|
|
59
|
+
* @returns SQL attribute expression, typed when the value is a number or a boolean
|
|
46
60
|
*/
|
|
47
61
|
toStringAttribute(): string;
|
|
62
|
+
/**
|
|
63
|
+
* @override
|
|
64
|
+
* @returns the SQL condition
|
|
65
|
+
*/
|
|
66
|
+
toString(): string;
|
|
48
67
|
}
|
|
49
68
|
/**
|
|
50
69
|
* PostgreSQL-backed repository for a single model class.
|
|
@@ -73,8 +92,28 @@ export declare class PostgresRepository<T extends ModelClass> extends MemoryRepo
|
|
|
73
92
|
* @param table - the table name
|
|
74
93
|
* @param separator - composite key separator
|
|
75
94
|
* @param prepare - awaited before every statement (e.g. to ensure the table exists)
|
|
95
|
+
* @param tableModel - identifier of the model the table was declared for: rows without `__type` (written before
|
|
96
|
+
* stamping) belong to it. Defaults to the topmost ancestor of `model` carrying metadata.
|
|
97
|
+
*/
|
|
98
|
+
constructor(model: T, pks: string[], client: SQLClient, table: string, separator?: string, prepare?: () => Promise<void>, tableModel?: string);
|
|
99
|
+
/**
|
|
100
|
+
* Identifier of the model the table was declared for: unstamped rows belong to it
|
|
76
101
|
*/
|
|
77
|
-
|
|
102
|
+
protected readonly tableModel?: string;
|
|
103
|
+
/**
|
|
104
|
+
* @param model - a model class
|
|
105
|
+
* @returns the identifier of its topmost ancestor (itself included) carrying metadata
|
|
106
|
+
*/
|
|
107
|
+
static rootIdentifier(model: any): string | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* Stamp the rows written before `__type` stamping with the table model: they keep belonging to it, and a later
|
|
110
|
+
* change of the table model cannot reassign them
|
|
111
|
+
*
|
|
112
|
+
* Idempotent; only the repository of the table model writes. Equivalent SQL:
|
|
113
|
+
* `UPDATE <table> SET data = data || jsonb_build_object('__type', '<table model>') WHERE data->>'__type' IS NULL`.
|
|
114
|
+
* @returns the number of rows stamped
|
|
115
|
+
*/
|
|
116
|
+
backfillTypes(): Promise<number>;
|
|
78
117
|
/**
|
|
79
118
|
* The backing table name for this repository's model.
|
|
80
119
|
* @returns the table name
|
|
@@ -103,6 +142,39 @@ export declare class PostgresRepository<T extends ModelClass> extends MemoryRepo
|
|
|
103
142
|
* @returns the JSONB path expression
|
|
104
143
|
*/
|
|
105
144
|
mapExpressionAttribute(attribute: string[]): string;
|
|
145
|
+
/**
|
|
146
|
+
* Map an expression attribute path array to its JSONB value (not its text)
|
|
147
|
+
* @param attribute - the attribute path
|
|
148
|
+
* @returns the JSONB path expression
|
|
149
|
+
*/
|
|
150
|
+
mapJsonAttribute(attribute: string[]): string;
|
|
151
|
+
/**
|
|
152
|
+
* Check the segments of a path written inside a SQL literal: letters, digits and `_`, like WebdaQL identifiers
|
|
153
|
+
* @param attribute - the attribute path
|
|
154
|
+
* @returns the segments, comma separated
|
|
155
|
+
* @throws Error for any other character
|
|
156
|
+
*/
|
|
157
|
+
protected checkPath(attribute: string[]): string;
|
|
158
|
+
/**
|
|
159
|
+
* SQL condition restricting rows to this model and its subclasses, as `__type` stamps them; rows without a stamp
|
|
160
|
+
* (written before stamping) belong to every model of the table
|
|
161
|
+
* @returns the condition, undefined for a model without metadata
|
|
162
|
+
*/
|
|
163
|
+
protected getClassCondition(): string | undefined;
|
|
164
|
+
/**
|
|
165
|
+
* The type an object written by the application declares: the `__type` its row was read with (non-enumerable,
|
|
166
|
+
* set by {@link fromJSON}), else the identifier of its class. Plain data declares none, whatever its keys.
|
|
167
|
+
* @param item - the object
|
|
168
|
+
* @returns the model identifier, undefined for plain data
|
|
169
|
+
*/
|
|
170
|
+
protected declaredType(item: any): string | undefined;
|
|
171
|
+
/**
|
|
172
|
+
* The JSON stored for an object: its fields, and its declared type in `__type` (see {@link declaredType})
|
|
173
|
+
* @param item - the object
|
|
174
|
+
* @param fallbackType - the type to stamp when the object declares none
|
|
175
|
+
* @returns the JSON text
|
|
176
|
+
*/
|
|
177
|
+
protected toStoredJSON(item: any, fallbackType?: string): string;
|
|
106
178
|
/**
|
|
107
179
|
* Build a SQL WHERE sub-expression from a write-condition.
|
|
108
180
|
* @param writeCondition - the expected value
|
|
@@ -123,10 +195,10 @@ export declare class PostgresRepository<T extends ModelClass> extends MemoryRepo
|
|
|
123
195
|
}>;
|
|
124
196
|
/**
|
|
125
197
|
* Deserialize a raw JSON object from the database into a model instance.
|
|
126
|
-
* @param
|
|
198
|
+
* @param stored - the raw JSON object from the JSONB column; its `__type` stamp becomes a non-enumerable property
|
|
127
199
|
* @returns the model instance
|
|
128
200
|
*/
|
|
129
|
-
protected fromJSON(
|
|
201
|
+
protected fromJSON(stored: any): InstanceType<T>;
|
|
130
202
|
/** @override */
|
|
131
203
|
get(primaryKey: any): Promise<any>;
|
|
132
204
|
/** @override */
|
|
@@ -154,10 +226,54 @@ export declare class PostgresRepository<T extends ModelClass> extends MemoryRepo
|
|
|
154
226
|
*/
|
|
155
227
|
duplicateExpression(expression: WebdaQL.Expression): WebdaQL.Expression;
|
|
156
228
|
/** @override — use SQL WHERE clause instead of in-memory scan */
|
|
157
|
-
query(queryStr: string): Promise<{
|
|
229
|
+
query(queryStr: string | any): Promise<{
|
|
158
230
|
results: InstanceType<T>[];
|
|
159
231
|
continuationToken?: string;
|
|
160
232
|
}>;
|
|
233
|
+
/**
|
|
234
|
+
* JSONB expression of a dotted path, JSON null folded into SQL NULL
|
|
235
|
+
* @param path - validated dotted path
|
|
236
|
+
* @returns the SQL expression
|
|
237
|
+
*/
|
|
238
|
+
protected jsonPath(path: string): string;
|
|
239
|
+
/**
|
|
240
|
+
* Translate an aggregation to SQL
|
|
241
|
+
*
|
|
242
|
+
* The query is validated again here and paths are checked once more, so they are safe to interpolate.
|
|
243
|
+
* Columns get positional names (`gN` per group path, `mN` / `nN` / `sN` per metric index), mapped back to
|
|
244
|
+
* the aliases by decode: alias length or shared prefixes never meet PostgreSQL's 63-byte identifier limit.
|
|
245
|
+
* MIN / MAX select a numeric and a text candidate, merged by decode.
|
|
246
|
+
* @param query - the aggregation
|
|
247
|
+
* @param where - extra WHERE condition (class condition), optional
|
|
248
|
+
* @returns the statement and the row decoder
|
|
249
|
+
*/
|
|
250
|
+
buildAggregationSQL(query: AggregationQuery, where?: string): {
|
|
251
|
+
sql: string;
|
|
252
|
+
decode: (row: any) => any;
|
|
253
|
+
};
|
|
254
|
+
/** @override GROUP BY over the data jsonb column */
|
|
255
|
+
protected executeAggregation(query: AggregationQuery): Promise<AggregationResult<any>>;
|
|
256
|
+
/**
|
|
257
|
+
* SQL condition selecting the rows a statement targets: its WHERE, restricted to the first LIMIT rows when the
|
|
258
|
+
* statement has a LIMIT (PostgreSQL DELETE and UPDATE have none)
|
|
259
|
+
* @param statement - the parsed statement
|
|
260
|
+
* @returns the condition
|
|
261
|
+
*/
|
|
262
|
+
protected getStatementCondition(statement: WebdaQL.Query): string;
|
|
263
|
+
/**
|
|
264
|
+
* Delete in bulk with one `DELETE ... WHERE`: no per-object event (see `Repository.deleteMany`)
|
|
265
|
+
* @override
|
|
266
|
+
*/
|
|
267
|
+
deleteMany(statement: string | WebdaQL.Query, params?: WebdaQL.QueryParameters): Promise<number>;
|
|
268
|
+
/**
|
|
269
|
+
* Update in bulk with one `UPDATE ... SET data = jsonb_set(...) WHERE`: no per-object event (see
|
|
270
|
+
* `Repository.updateMany`)
|
|
271
|
+
*
|
|
272
|
+
* SET paths and values are bound parameters (the statement went through the grammar, see `parseStatement`); the
|
|
273
|
+
* parents of a dotted target are created when missing, an existing array parent is indexed.
|
|
274
|
+
* @override
|
|
275
|
+
*/
|
|
276
|
+
updateMany(statement: string | WebdaQL.Query, params?: WebdaQL.QueryParameters): Promise<number>;
|
|
161
277
|
/** @override — iterate via paginated SQL queries */
|
|
162
278
|
iterate(queryStr: string): AsyncGenerator<InstanceType<T>, any, any>;
|
|
163
279
|
/**
|
package/lib/sqlstore.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlstore.d.ts","sourceRoot":"","sources":["../src/sqlstore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAsB,eAAe,EAA4B,MAAM,aAAa,CAAC;AACrH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlstore.d.ts","sourceRoot":"","sources":["../src/sqlstore.ts"],"names":[],"mappings":"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"}
|
package/lib/sqlstore.js
CHANGED
|
@@ -12,36 +12,75 @@ export class SQLStoreParameters extends StoreParameters {
|
|
|
12
12
|
return this;
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Quote a string as a SQL literal: single quotes are doubled so a value can never close the literal. Backslashes
|
|
17
|
+
* stay literal: with `standard_conforming_strings` (PostgreSQL default) `\\` is not an escape character in '...'
|
|
18
|
+
* strings — only LIKE gives it a meaning.
|
|
19
|
+
* @param value - the string
|
|
20
|
+
* @returns the SQL literal
|
|
21
|
+
*/
|
|
22
|
+
function sqlString(value) {
|
|
23
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Extends ComparisonExpression to emit SQL for JSONB comparisons
|
|
27
|
+
*
|
|
28
|
+
* With the JSON path of the attribute (`jsonAttribute`), comparisons follow the in-memory semantics:
|
|
29
|
+
* - a number or a boolean only matches a JSON number or boolean: a missing field, a null or another type never
|
|
30
|
+
* matches, and never raises a cast error;
|
|
31
|
+
* - `!=` matches a missing field, a null or another type (`IS DISTINCT FROM`);
|
|
32
|
+
* - strings compare the text of the value, so a number field equals its text (`n = '1'`), as the loose `==` does;
|
|
33
|
+
* - `CONTAINS` only matches an array holding the value.
|
|
34
|
+
*/
|
|
16
35
|
export class SQLComparisonExpression extends WebdaQL.ComparisonExpression {
|
|
17
36
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
37
|
+
* @param operator - the comparison operator
|
|
38
|
+
* @param attribute - the SQL text of the attribute (`data#>>'{a,b}'`)
|
|
39
|
+
* @param value - the value
|
|
40
|
+
* @param jsonAttribute - the SQL JSON of the attribute (`data#>'{a,b}'`), for typed comparisons
|
|
41
|
+
*/
|
|
42
|
+
constructor(operator, attribute, value, jsonAttribute) {
|
|
43
|
+
super(operator, attribute, value);
|
|
44
|
+
this.jsonAttribute = jsonAttribute;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
22
47
|
* @override
|
|
23
48
|
* @param value - the value to stringify
|
|
24
|
-
* @returns SQL-compatible
|
|
49
|
+
* @returns SQL-compatible literal
|
|
25
50
|
*/
|
|
26
51
|
toStringValue(value) {
|
|
27
52
|
if (typeof value === "string") {
|
|
28
|
-
return
|
|
53
|
+
return sqlString(value);
|
|
29
54
|
}
|
|
30
55
|
return super.toStringValue(value);
|
|
31
56
|
}
|
|
32
57
|
/**
|
|
33
58
|
* @override
|
|
34
|
-
* @returns SQL attribute expression
|
|
59
|
+
* @returns SQL attribute expression, typed when the value is a number or a boolean
|
|
35
60
|
*/
|
|
36
61
|
toStringAttribute() {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return `COALESCE(${this.attribute[0]}, 0) AS bigint`;
|
|
42
|
-
default:
|
|
43
|
-
return this.attribute[0];
|
|
62
|
+
const text = this.attribute.join(".");
|
|
63
|
+
if (this.jsonAttribute && (typeof this.value === "number" || typeof this.value === "boolean")) {
|
|
64
|
+
const type = typeof this.value;
|
|
65
|
+
return `(CASE WHEN jsonb_typeof(${this.jsonAttribute}) = '${type}' THEN (${text})::${type === "number" ? "numeric" : "boolean"} END)`;
|
|
44
66
|
}
|
|
67
|
+
return text;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @override
|
|
71
|
+
* @returns the SQL condition
|
|
72
|
+
*/
|
|
73
|
+
toString() {
|
|
74
|
+
if (WebdaQL.UNARY_COMPARISON_OPERATORS.includes(this.operator)) {
|
|
75
|
+
return `${this.attribute.join(".")} ${this.operator}`;
|
|
76
|
+
}
|
|
77
|
+
if (this.operator === "CONTAINS" && this.jsonAttribute) {
|
|
78
|
+
return `(CASE WHEN jsonb_typeof(${this.jsonAttribute}) = 'array' THEN ${this.jsonAttribute} END) @> ${sqlString(JSON.stringify([this.value]))}::jsonb`;
|
|
79
|
+
}
|
|
80
|
+
if (this.operator === "!=") {
|
|
81
|
+
return `${this.toStringAttribute()} IS DISTINCT FROM ${this.toStringValue(this.value)}`;
|
|
82
|
+
}
|
|
83
|
+
return super.toString();
|
|
45
84
|
}
|
|
46
85
|
}
|
|
47
86
|
/**
|
|
@@ -68,13 +107,44 @@ export class PostgresRepository extends MemoryRepository {
|
|
|
68
107
|
* @param table - the table name
|
|
69
108
|
* @param separator - composite key separator
|
|
70
109
|
* @param prepare - awaited before every statement (e.g. to ensure the table exists)
|
|
110
|
+
* @param tableModel - identifier of the model the table was declared for: rows without `__type` (written before
|
|
111
|
+
* stamping) belong to it. Defaults to the topmost ancestor of `model` carrying metadata.
|
|
71
112
|
*/
|
|
72
|
-
constructor(model, pks, client, table, separator, prepare) {
|
|
113
|
+
constructor(model, pks, client, table, separator, prepare, tableModel) {
|
|
73
114
|
// Pass an empty Map — we do NOT use in-memory storage
|
|
74
115
|
super(model, pks, separator, new Map());
|
|
75
116
|
this.client = client;
|
|
76
117
|
this.table = table;
|
|
77
118
|
this.prepare = prepare;
|
|
119
|
+
this.tableModel = tableModel ?? PostgresRepository.rootIdentifier(model);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* @param model - a model class
|
|
123
|
+
* @returns the identifier of its topmost ancestor (itself included) carrying metadata
|
|
124
|
+
*/
|
|
125
|
+
static rootIdentifier(model) {
|
|
126
|
+
let root;
|
|
127
|
+
for (let clazz = model; clazz && clazz !== Function.prototype; clazz = Object.getPrototypeOf(clazz)) {
|
|
128
|
+
if (Object.prototype.hasOwnProperty.call(clazz, "Metadata") && clazz.Metadata?.Identifier) {
|
|
129
|
+
root = clazz.Metadata.Identifier;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return root;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Stamp the rows written before `__type` stamping with the table model: they keep belonging to it, and a later
|
|
136
|
+
* change of the table model cannot reassign them
|
|
137
|
+
*
|
|
138
|
+
* Idempotent; only the repository of the table model writes. Equivalent SQL:
|
|
139
|
+
* `UPDATE <table> SET data = data || jsonb_build_object('__type', '<table model>') WHERE data->>'__type' IS NULL`.
|
|
140
|
+
* @returns the number of rows stamped
|
|
141
|
+
*/
|
|
142
|
+
async backfillTypes() {
|
|
143
|
+
const own = this.model?.Metadata?.Identifier;
|
|
144
|
+
if (!own || own !== this.tableModel) {
|
|
145
|
+
return 0;
|
|
146
|
+
}
|
|
147
|
+
return (await this.execute(`UPDATE ${this.table} SET data = data || jsonb_build_object('__type', $1::text) WHERE data->>'__type' IS NULL`, [own])).rowCount;
|
|
78
148
|
}
|
|
79
149
|
/**
|
|
80
150
|
* The backing table name for this repository's model.
|
|
@@ -108,7 +178,74 @@ export class PostgresRepository extends MemoryRepository {
|
|
|
108
178
|
* @returns the JSONB path expression
|
|
109
179
|
*/
|
|
110
180
|
mapExpressionAttribute(attribute) {
|
|
111
|
-
return `data#>>'{${
|
|
181
|
+
return `data#>>'{${this.checkPath(attribute)}}'`;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Map an expression attribute path array to its JSONB value (not its text)
|
|
185
|
+
* @param attribute - the attribute path
|
|
186
|
+
* @returns the JSONB path expression
|
|
187
|
+
*/
|
|
188
|
+
mapJsonAttribute(attribute) {
|
|
189
|
+
return `data#>'{${this.checkPath(attribute)}}'`;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Check the segments of a path written inside a SQL literal: letters, digits and `_`, like WebdaQL identifiers
|
|
193
|
+
* @param attribute - the attribute path
|
|
194
|
+
* @returns the segments, comma separated
|
|
195
|
+
* @throws Error for any other character
|
|
196
|
+
*/
|
|
197
|
+
checkPath(attribute) {
|
|
198
|
+
if (attribute.some(segment => !/^[A-Za-z0-9_]+$/.test(segment))) {
|
|
199
|
+
throw new Error(`Invalid attribute path: ${JSON.stringify(attribute)}`);
|
|
200
|
+
}
|
|
201
|
+
return attribute.join(",");
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* SQL condition restricting rows to this model and its subclasses, as `__type` stamps them; rows without a stamp
|
|
205
|
+
* (written before stamping) belong to every model of the table
|
|
206
|
+
* @returns the condition, undefined for a model without metadata
|
|
207
|
+
*/
|
|
208
|
+
getClassCondition() {
|
|
209
|
+
const ids = this.buildClassFilterIdentifiers();
|
|
210
|
+
if (!ids) {
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
213
|
+
const typed = `data->>'__type' IN (${ids.map(sqlString).join(", ")})`;
|
|
214
|
+
// Unstamped rows belong to the table model: its repository and its ancestors' see them, a subclass never does
|
|
215
|
+
return this.tableModel && ids.includes(this.tableModel) ? `(${typed} OR data->>'__type' IS NULL)` : `(${typed})`;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* The type an object written by the application declares: the `__type` its row was read with (non-enumerable,
|
|
219
|
+
* set by {@link fromJSON}), else the identifier of its class. Plain data declares none, whatever its keys.
|
|
220
|
+
* @param item - the object
|
|
221
|
+
* @returns the model identifier, undefined for plain data
|
|
222
|
+
*/
|
|
223
|
+
declaredType(item) {
|
|
224
|
+
if (!item || typeof item !== "object") {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
const own = Object.getOwnPropertyDescriptor(item, "__type");
|
|
228
|
+
if (own && !own.enumerable && typeof own.value === "string") {
|
|
229
|
+
return own.value;
|
|
230
|
+
}
|
|
231
|
+
const clazz = Object.getPrototypeOf(item)?.constructor;
|
|
232
|
+
return clazz && clazz !== Object ? clazz.Metadata?.Identifier : undefined;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* The JSON stored for an object: its fields, and its declared type in `__type` (see {@link declaredType})
|
|
236
|
+
* @param item - the object
|
|
237
|
+
* @param fallbackType - the type to stamp when the object declares none
|
|
238
|
+
* @returns the JSON text
|
|
239
|
+
*/
|
|
240
|
+
toStoredJSON(item, fallbackType) {
|
|
241
|
+
const data = JSON.parse(JSON.stringify(item));
|
|
242
|
+
// An enumerable `__type` key of plain data is never trusted
|
|
243
|
+
delete data.__type;
|
|
244
|
+
const type = this.declaredType(item) ?? fallbackType;
|
|
245
|
+
if (type) {
|
|
246
|
+
data.__type = type;
|
|
247
|
+
}
|
|
248
|
+
return JSON.stringify(data);
|
|
112
249
|
}
|
|
113
250
|
/**
|
|
114
251
|
* Build a SQL WHERE sub-expression from a write-condition.
|
|
@@ -136,10 +273,11 @@ export class PostgresRepository extends MemoryRepository {
|
|
|
136
273
|
}
|
|
137
274
|
/**
|
|
138
275
|
* Deserialize a raw JSON object from the database into a model instance.
|
|
139
|
-
* @param
|
|
276
|
+
* @param stored - the raw JSON object from the JSONB column; its `__type` stamp becomes a non-enumerable property
|
|
140
277
|
* @returns the model instance
|
|
141
278
|
*/
|
|
142
|
-
fromJSON(
|
|
279
|
+
fromJSON(stored) {
|
|
280
|
+
const { __type, ...data } = stored ?? {};
|
|
143
281
|
const instance = new this.model({});
|
|
144
282
|
if (typeof instance.load === "function") {
|
|
145
283
|
instance.load(data);
|
|
@@ -147,6 +285,14 @@ export class PostgresRepository extends MemoryRepository {
|
|
|
147
285
|
else {
|
|
148
286
|
Object.assign(instance, data);
|
|
149
287
|
}
|
|
288
|
+
if (__type !== undefined) {
|
|
289
|
+
Object.defineProperty(instance, "__type", {
|
|
290
|
+
value: __type,
|
|
291
|
+
enumerable: false,
|
|
292
|
+
configurable: true,
|
|
293
|
+
writable: true
|
|
294
|
+
});
|
|
295
|
+
}
|
|
150
296
|
return instance;
|
|
151
297
|
}
|
|
152
298
|
/** @override */
|
|
@@ -165,7 +311,10 @@ export class PostgresRepository extends MemoryRepository {
|
|
|
165
311
|
const item = this.buildItem(data);
|
|
166
312
|
const key = this.getPrimaryKey(item).toString();
|
|
167
313
|
try {
|
|
168
|
-
await this.execute(`INSERT INTO ${this.table}(uuid,data) VALUES($1, $2)`, [
|
|
314
|
+
await this.execute(`INSERT INTO ${this.table}(uuid,data) VALUES($1, $2)`, [
|
|
315
|
+
key,
|
|
316
|
+
this.toStoredJSON(item, this.model.Metadata?.Identifier)
|
|
317
|
+
]);
|
|
169
318
|
}
|
|
170
319
|
catch (err) {
|
|
171
320
|
// unique_violation on the primary key: the object exists, never overwrite it
|
|
@@ -179,8 +328,11 @@ export class PostgresRepository extends MemoryRepository {
|
|
|
179
328
|
/** @override */
|
|
180
329
|
async update(data, conditionField, condition) {
|
|
181
330
|
const key = this.getPrimaryKey(data).toString();
|
|
182
|
-
const args = [
|
|
183
|
-
|
|
331
|
+
const args = [this.toStoredJSON(data), key];
|
|
332
|
+
// Plain data keeps the stored type: a write through a parent repository never re-types a subclass row
|
|
333
|
+
let q = this.declaredType(data)
|
|
334
|
+
? `UPDATE ${this.table} SET data=$1 WHERE uuid=$2`
|
|
335
|
+
: `UPDATE ${this.table} SET data = CASE WHEN data ? '__type' THEN $1::jsonb || jsonb_build_object('__type', data->'__type') ELSE $1::jsonb END WHERE uuid=$2`;
|
|
184
336
|
if (conditionField) {
|
|
185
337
|
q += this.getQueryCondition(condition, conditionField, args);
|
|
186
338
|
}
|
|
@@ -335,21 +487,26 @@ export class PostgresRepository extends MemoryRepository {
|
|
|
335
487
|
else if (expression instanceof WebdaQL.ComparisonExpression) {
|
|
336
488
|
if (expression.operator === "IN") {
|
|
337
489
|
const attr = this.mapExpressionAttribute(expression.attribute);
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
if (expression.operator === "CONTAINS") {
|
|
341
|
-
return new SQLComparisonExpression("?", "(" + this.mapExpressionAttribute(expression.attribute) + ")::jsonb", expression.value);
|
|
490
|
+
const json = this.mapJsonAttribute(expression.attribute);
|
|
491
|
+
return new WebdaQL.OrExpression(expression.value.map(v => new SQLComparisonExpression("=", attr, v, json)));
|
|
342
492
|
}
|
|
343
493
|
// IS NULL / IS NOT NULL map natively: `data#>>'{a}'` is NULL for a missing key and a JSON null
|
|
344
|
-
return new SQLComparisonExpression(expression.operator, this.mapExpressionAttribute(expression.attribute), expression.value);
|
|
494
|
+
return new SQLComparisonExpression(expression.operator, this.mapExpressionAttribute(expression.attribute), expression.value, this.mapJsonAttribute(expression.attribute));
|
|
345
495
|
}
|
|
346
496
|
return expression;
|
|
347
497
|
}
|
|
348
498
|
/** @override — use SQL WHERE clause instead of in-memory scan */
|
|
349
499
|
async query(queryStr) {
|
|
350
500
|
const WebdaQLMod = await import("@webda/ql");
|
|
351
|
-
|
|
501
|
+
// A query object built or changed by code goes back through the grammar before any SQL is written
|
|
502
|
+
const parsed = typeof queryStr === "string" ? WebdaQLMod.parse(queryStr) : WebdaQLMod.normalizeQuery(queryStr);
|
|
503
|
+
// DELETE / UPDATE go to deleteMany / updateMany; a field list is not a projection here
|
|
504
|
+
WebdaQLMod.assertFilterQuery(parsed);
|
|
352
505
|
let sql = this.duplicateExpression(parsed.filter).toString();
|
|
506
|
+
const classCondition = this.getClassCondition();
|
|
507
|
+
if (classCondition) {
|
|
508
|
+
sql = `(${sql}) AND ${classCondition}`;
|
|
509
|
+
}
|
|
353
510
|
const offset = parseInt(parsed.continuationToken || "0", 10);
|
|
354
511
|
if (parsed.orderBy && parsed.orderBy.length) {
|
|
355
512
|
sql +=
|
|
@@ -370,10 +527,200 @@ export class PostgresRepository extends MemoryRepository {
|
|
|
370
527
|
continuationToken: limit <= results.length ? (offset + limit).toString() : undefined
|
|
371
528
|
};
|
|
372
529
|
}
|
|
530
|
+
/**
|
|
531
|
+
* JSONB expression of a dotted path, JSON null folded into SQL NULL
|
|
532
|
+
* @param path - validated dotted path
|
|
533
|
+
* @returns the SQL expression
|
|
534
|
+
*/
|
|
535
|
+
jsonPath(path) {
|
|
536
|
+
return `NULLIF(data #> '{${this.checkPath(path.split("."))}}', 'null'::jsonb)`;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Translate an aggregation to SQL
|
|
540
|
+
*
|
|
541
|
+
* The query is validated again here and paths are checked once more, so they are safe to interpolate.
|
|
542
|
+
* Columns get positional names (`gN` per group path, `mN` / `nN` / `sN` per metric index), mapped back to
|
|
543
|
+
* the aliases by decode: alias length or shared prefixes never meet PostgreSQL's 63-byte identifier limit.
|
|
544
|
+
* MIN / MAX select a numeric and a text candidate, merged by decode.
|
|
545
|
+
* @param query - the aggregation
|
|
546
|
+
* @param where - extra WHERE condition (class condition), optional
|
|
547
|
+
* @returns the statement and the row decoder
|
|
548
|
+
*/
|
|
549
|
+
buildAggregationSQL(query, where) {
|
|
550
|
+
WebdaQL.validateAggregation(query);
|
|
551
|
+
const metrics = Object.entries(query.metrics);
|
|
552
|
+
const columns = [];
|
|
553
|
+
const groupColumns = [];
|
|
554
|
+
// Sort keys of each groupBy path / metric alias: type rank, then number, then text in code unit order, then jsonb
|
|
555
|
+
const sortKeys = {};
|
|
556
|
+
const num = (x) => `CASE WHEN jsonb_typeof(${x}) = 'number' THEN (${x})::numeric END`;
|
|
557
|
+
const str = (x) => `(CASE WHEN jsonb_typeof(${x}) = 'string' THEN ${x} #>> '{}' END) COLLATE "C"`;
|
|
558
|
+
query.groupBy.forEach((path, i) => {
|
|
559
|
+
const x = this.jsonPath(path);
|
|
560
|
+
columns.push(`${x} AS "g${i}"`);
|
|
561
|
+
groupColumns.push(String(i + 1));
|
|
562
|
+
sortKeys[path] = [
|
|
563
|
+
`CASE WHEN ${x} IS NULL THEN NULL WHEN jsonb_typeof(${x}) = 'number' THEN 1 WHEN jsonb_typeof(${x}) = 'string' THEN 2 ELSE 3 END`,
|
|
564
|
+
num(x),
|
|
565
|
+
str(x),
|
|
566
|
+
x
|
|
567
|
+
];
|
|
568
|
+
});
|
|
569
|
+
metrics.forEach(([alias, metric], i) => {
|
|
570
|
+
const x = metric.field ? this.jsonPath(metric.field) : "";
|
|
571
|
+
switch (metric.fn) {
|
|
572
|
+
case "COUNT":
|
|
573
|
+
columns.push(`${metric.field ? `COUNT(${x})` : "COUNT(*)"} AS "m${i}"`);
|
|
574
|
+
break;
|
|
575
|
+
case "COUNT_DISTINCT":
|
|
576
|
+
columns.push(`COUNT(DISTINCT ${x}) AS "m${i}"`);
|
|
577
|
+
break;
|
|
578
|
+
case "SUM":
|
|
579
|
+
columns.push(`COALESCE(SUM(${num(x)}), 0) AS "m${i}"`);
|
|
580
|
+
break;
|
|
581
|
+
case "AVG":
|
|
582
|
+
columns.push(`AVG(${num(x)}) AS "m${i}"`);
|
|
583
|
+
break;
|
|
584
|
+
case "MIN":
|
|
585
|
+
case "MAX": {
|
|
586
|
+
const n = `${metric.fn}(${num(x)})`;
|
|
587
|
+
const t = `${metric.fn}(${str(x)})`;
|
|
588
|
+
columns.push(`${n} AS "n${i}"`, `${t} AS "s${i}"`);
|
|
589
|
+
// The rank follows the type of the decoded value (number 1 < string 2), not the preference:
|
|
590
|
+
// MIN prefers a number, MAX prefers a string. The other candidate only matters when it is the result.
|
|
591
|
+
sortKeys[alias] =
|
|
592
|
+
metric.fn === "MIN"
|
|
593
|
+
? [
|
|
594
|
+
`CASE WHEN ${n} IS NOT NULL THEN 1 WHEN ${t} IS NOT NULL THEN 2 END`,
|
|
595
|
+
n,
|
|
596
|
+
`CASE WHEN ${n} IS NULL THEN ${t} END`
|
|
597
|
+
]
|
|
598
|
+
: [
|
|
599
|
+
`CASE WHEN ${t} IS NOT NULL THEN 2 WHEN ${n} IS NOT NULL THEN 1 END`,
|
|
600
|
+
`CASE WHEN ${t} IS NULL THEN ${n} END`,
|
|
601
|
+
t
|
|
602
|
+
];
|
|
603
|
+
break;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
sortKeys[alias] ?? (sortKeys[alias] = [`"m${i}"`]);
|
|
607
|
+
});
|
|
608
|
+
const filter = this.duplicateExpression(query.filter).toString();
|
|
609
|
+
let sql = `SELECT ${columns.join(", ")} FROM ${this.table} WHERE ${where ? `${where} AND (${filter})` : filter}`;
|
|
610
|
+
if (groupColumns.length) {
|
|
611
|
+
sql += ` GROUP BY ${groupColumns.join(", ")}`;
|
|
612
|
+
}
|
|
613
|
+
const order = (keys, direction) => keys.map(key => `${key} ${direction} NULLS ${direction === "ASC" ? "FIRST" : "LAST"}`);
|
|
614
|
+
const orders = (query.orderBy ?? []).flatMap(o => order(sortKeys[o.key], o.direction));
|
|
615
|
+
if (!orders.length) {
|
|
616
|
+
orders.push(...query.groupBy.flatMap(path => order(sortKeys[path], "ASC")));
|
|
617
|
+
}
|
|
618
|
+
if (orders.length) {
|
|
619
|
+
sql += ` ORDER BY ${orders.join(", ")}`;
|
|
620
|
+
}
|
|
621
|
+
const limit = query.limit ?? (query.groupBy.length ? this.aggregationOptions.maxGroups + 1 : undefined);
|
|
622
|
+
if (limit) {
|
|
623
|
+
sql += ` LIMIT ${limit}`;
|
|
624
|
+
}
|
|
625
|
+
const decode = (row) => {
|
|
626
|
+
const out = {};
|
|
627
|
+
query.groupBy.forEach((path, i) => (out[path] = row[`g${i}`] ?? null));
|
|
628
|
+
metrics.forEach(([alias, metric], i) => {
|
|
629
|
+
if (metric.fn === "MIN" || metric.fn === "MAX") {
|
|
630
|
+
const raw = row[`n${i}`];
|
|
631
|
+
const n = raw === null || raw === undefined ? null : Number(raw);
|
|
632
|
+
const t = row[`s${i}`] ?? null;
|
|
633
|
+
out[alias] = metric.fn === "MIN" ? (n ?? t) : (t ?? n);
|
|
634
|
+
}
|
|
635
|
+
else {
|
|
636
|
+
const v = row[`m${i}`];
|
|
637
|
+
out[alias] = v === null || v === undefined ? null : Number(v);
|
|
638
|
+
}
|
|
639
|
+
});
|
|
640
|
+
return out;
|
|
641
|
+
};
|
|
642
|
+
return { sql, decode };
|
|
643
|
+
}
|
|
644
|
+
/** @override GROUP BY over the data jsonb column */
|
|
645
|
+
async executeAggregation(query) {
|
|
646
|
+
const { sql, decode } = this.buildAggregationSQL(query, this.getClassCondition());
|
|
647
|
+
const res = await this.execute(sql);
|
|
648
|
+
if (query.limit === undefined && res.rows.length > this.aggregationOptions.maxGroups) {
|
|
649
|
+
const { AggregationError } = await import("@webda/ql");
|
|
650
|
+
throw new AggregationError("AGGREGATION_TOO_MANY_GROUPS", `Aggregation exceeds ${this.aggregationOptions.maxGroups} groups`);
|
|
651
|
+
}
|
|
652
|
+
return { rows: res.rows.map(decode), native: true };
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* SQL condition selecting the rows a statement targets: its WHERE, restricted to the first LIMIT rows when the
|
|
656
|
+
* statement has a LIMIT (PostgreSQL DELETE and UPDATE have none)
|
|
657
|
+
* @param statement - the parsed statement
|
|
658
|
+
* @returns the condition
|
|
659
|
+
*/
|
|
660
|
+
getStatementCondition(statement) {
|
|
661
|
+
let where = `(${this.duplicateExpression(statement.filter).toString()})`;
|
|
662
|
+
const classCondition = this.getClassCondition();
|
|
663
|
+
if (classCondition) {
|
|
664
|
+
where += ` AND ${classCondition}`;
|
|
665
|
+
}
|
|
666
|
+
if (statement.limit === undefined) {
|
|
667
|
+
return where;
|
|
668
|
+
}
|
|
669
|
+
if (!Number.isSafeInteger(statement.limit) || statement.limit < 0) {
|
|
670
|
+
throw new Error(`Invalid LIMIT: ${statement.limit}`);
|
|
671
|
+
}
|
|
672
|
+
// The WHERE is kept on the outer statement: a row that stopped matching since the sub-select is left alone
|
|
673
|
+
return `${where} AND uuid IN (SELECT uuid FROM ${this.table} WHERE ${where} LIMIT ${statement.limit})`;
|
|
674
|
+
}
|
|
675
|
+
/**
|
|
676
|
+
* Delete in bulk with one `DELETE ... WHERE`: no per-object event (see `Repository.deleteMany`)
|
|
677
|
+
* @override
|
|
678
|
+
*/
|
|
679
|
+
async deleteMany(statement, params) {
|
|
680
|
+
const parsed = await this.parseStatement("DELETE", statement, params);
|
|
681
|
+
return (await this.execute(`DELETE FROM ${this.table} WHERE ${this.getStatementCondition(parsed)}`, [])).rowCount;
|
|
682
|
+
}
|
|
683
|
+
/**
|
|
684
|
+
* Update in bulk with one `UPDATE ... SET data = jsonb_set(...) WHERE`: no per-object event (see
|
|
685
|
+
* `Repository.updateMany`)
|
|
686
|
+
*
|
|
687
|
+
* SET paths and values are bound parameters (the statement went through the grammar, see `parseStatement`); the
|
|
688
|
+
* parents of a dotted target are created when missing, an existing array parent is indexed.
|
|
689
|
+
* @override
|
|
690
|
+
*/
|
|
691
|
+
async updateMany(statement, params) {
|
|
692
|
+
const parsed = await this.parseStatement("UPDATE", statement, params);
|
|
693
|
+
const values = [];
|
|
694
|
+
// One step per jsonb_set, each reading the previous one (d0 is the row data): the SQL stays linear in size
|
|
695
|
+
const steps = [];
|
|
696
|
+
const ensured = new Set();
|
|
697
|
+
for (const { field, value } of parsed.assignments) {
|
|
698
|
+
const segments = field.split(".");
|
|
699
|
+
// Make every parent of a dotted target an object, keeping an existing object or array (a numeric segment
|
|
700
|
+
// then indexes the array)
|
|
701
|
+
for (let i = 1; i < segments.length; i++) {
|
|
702
|
+
const parent = segments.slice(0, i);
|
|
703
|
+
if (ensured.has(parent.join(".")))
|
|
704
|
+
continue;
|
|
705
|
+
ensured.add(parent.join("."));
|
|
706
|
+
values.push(parent);
|
|
707
|
+
const d = `d${steps.length}`;
|
|
708
|
+
const path = `$${values.length}::text[]`;
|
|
709
|
+
steps.push(`jsonb_set(${d}, ${path}, CASE WHEN jsonb_typeof(${d} #> ${path}) IN ('object', 'array') THEN ${d} #> ${path} ELSE '{}'::jsonb END, true)`);
|
|
710
|
+
}
|
|
711
|
+
values.push(segments, JSON.stringify(value));
|
|
712
|
+
steps.push(`jsonb_set(d${steps.length}, $${values.length - 1}::text[], $${values.length}::jsonb, true)`);
|
|
713
|
+
}
|
|
714
|
+
const data = `(SELECT d${steps.length} FROM (SELECT ${this.table}.data AS d0) s0${steps
|
|
715
|
+
.map((step, i) => ` CROSS JOIN LATERAL (SELECT ${step} AS d${i + 1}) s${i + 1}`)
|
|
716
|
+
.join("")})`;
|
|
717
|
+
return (await this.execute(`UPDATE ${this.table} SET data = ${data} WHERE ${this.getStatementCondition(parsed)}`, values)).rowCount;
|
|
718
|
+
}
|
|
373
719
|
/** @override — iterate via paginated SQL queries */
|
|
374
720
|
async *iterate(queryStr) {
|
|
375
721
|
const WebdaQLMod = await import("@webda/ql");
|
|
376
722
|
const parsed = WebdaQLMod.parse(queryStr);
|
|
723
|
+
WebdaQLMod.assertFilterQuery(parsed);
|
|
377
724
|
if (!parsed.limit) {
|
|
378
725
|
parsed.limit = 100;
|
|
379
726
|
}
|
package/lib/sqlstore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlstore.js","sourceRoot":"","sources":["../src/sqlstore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sqlstore.js","sourceRoot":"","sources":["../src/sqlstore.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webda/postgres",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.6",
|
|
4
4
|
"description": "Implements Postgres on webda",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"postgres",
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"typings": "lib/index.d.ts",
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"pg": "^8.20.0",
|
|
19
|
-
"@webda/
|
|
20
|
-
"@webda/
|
|
21
|
-
"@webda/utils": "4.0.0-beta.
|
|
19
|
+
"@webda/ql": "4.0.0-beta.6",
|
|
20
|
+
"@webda/core": "4.0.0-beta.6",
|
|
21
|
+
"@webda/utils": "4.0.0-beta.6",
|
|
22
22
|
"@webda/workout": "4.0.0-beta.5"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"typescript": "7.1.0-dev.20260929.1",
|
|
44
44
|
"vite": "^6.0.0",
|
|
45
45
|
"vitest": "^4.1.2",
|
|
46
|
-
"@webda/
|
|
47
|
-
"@webda/
|
|
46
|
+
"@webda/test": "4.0.0-beta.6",
|
|
47
|
+
"@webda/compiler": "^4.0.0-beta.6"
|
|
48
48
|
},
|
|
49
49
|
"type": "module",
|
|
50
50
|
"engines": {
|
package/webda.module.json
CHANGED
|
@@ -2288,6 +2288,16 @@
|
|
|
2288
2288
|
}
|
|
2289
2289
|
},
|
|
2290
2290
|
"properties": {
|
|
2291
|
+
"aggregationFallback": {
|
|
2292
|
+
"default": "warn",
|
|
2293
|
+
"description": "What to do when an aggregation on this store cannot run natively and must\nstream every matching object through memory",
|
|
2294
|
+
"enum": [
|
|
2295
|
+
"allow",
|
|
2296
|
+
"warn",
|
|
2297
|
+
"deny"
|
|
2298
|
+
],
|
|
2299
|
+
"type": "string"
|
|
2300
|
+
},
|
|
2291
2301
|
"autoCreateTable": {
|
|
2292
2302
|
"default": true,
|
|
2293
2303
|
"description": "Auto create table if not exists",
|
|
@@ -2306,6 +2316,12 @@
|
|
|
2306
2316
|
"description": "If set, Store will ignore the __type",
|
|
2307
2317
|
"type": "boolean"
|
|
2308
2318
|
},
|
|
2319
|
+
"maxGroups": {
|
|
2320
|
+
"default": 10000,
|
|
2321
|
+
"description": "Maximum number of groups an aggregation may produce without LIMIT (or in memory)",
|
|
2322
|
+
"minimum": 1,
|
|
2323
|
+
"type": "number"
|
|
2324
|
+
},
|
|
2309
2325
|
"modelAliases": {
|
|
2310
2326
|
"$ref": "#/definitions/modelAliases",
|
|
2311
2327
|
"description": "Model Aliases to allow easier rename of Model"
|