@webda/postgres 4.0.0-beta.2 → 4.0.0-beta.4
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/README.md +125 -0
- package/lib/index.d.ts +3 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/pgpool.d.ts +40 -0
- package/lib/pgpool.d.ts.map +1 -0
- package/lib/pgpool.js +101 -0
- package/lib/pgpool.js.map +1 -0
- package/lib/postgrespubsub.service.d.ts +131 -0
- package/lib/postgrespubsub.service.d.ts.map +1 -0
- package/lib/postgrespubsub.service.js +208 -0
- package/lib/postgrespubsub.service.js.map +1 -0
- package/lib/postgresqueue.service.d.ts +144 -0
- package/lib/postgresqueue.service.d.ts.map +1 -0
- package/lib/postgresqueue.service.js +210 -0
- package/lib/postgresqueue.service.js.map +1 -0
- package/lib/postgresstore.service.d.ts +147 -0
- package/lib/postgresstore.service.d.ts.map +1 -0
- package/lib/postgresstore.service.js +352 -0
- package/lib/postgresstore.service.js.map +1 -0
- package/lib/sqlstore.d.ts +130 -37
- package/lib/sqlstore.d.ts.map +1 -1
- package/lib/sqlstore.js +325 -103
- package/lib/sqlstore.js.map +1 -1
- package/package.json +32 -34
- package/test/config.json +5 -0
- package/webda.module.json +2389 -2360
- package/lib/postgresstore.d.ts +0 -115
- package/lib/postgresstore.d.ts.map +0 -1
- package/lib/postgresstore.js +0 -271
- package/lib/postgresstore.js.map +0 -1
- package/lib/postgresstore.spec.d.ts +0 -14
- package/lib/postgresstore.spec.d.ts.map +0 -1
- package/lib/postgresstore.spec.js +0 -130
- package/lib/postgresstore.spec.js.map +0 -1
package/lib/sqlstore.js
CHANGED
|
@@ -1,61 +1,322 @@
|
|
|
1
|
-
import { Store, StoreNotFoundError, StoreParameters, UpdateConditionFailError } from "@webda/core";
|
|
1
|
+
import { MemoryRepository, Store, StoreNotFoundError, StoreParameters, UpdateConditionFailError } from "@webda/core";
|
|
2
2
|
import * as WebdaQL from "@webda/ql";
|
|
3
|
+
/** Base parameters for SQL-backed stores */
|
|
3
4
|
export class SQLStoreParameters extends StoreParameters {
|
|
5
|
+
/**
|
|
6
|
+
* @override
|
|
7
|
+
* @param params - raw parameters
|
|
8
|
+
* @returns this
|
|
9
|
+
*/
|
|
10
|
+
load(params) {
|
|
11
|
+
super.load(params);
|
|
12
|
+
return this;
|
|
13
|
+
}
|
|
4
14
|
}
|
|
15
|
+
/** Extends ComparisonExpression to emit SQL-compatible string literals for JSONB comparisons */
|
|
5
16
|
export class SQLComparisonExpression extends WebdaQL.ComparisonExpression {
|
|
17
|
+
/**
|
|
18
|
+
* Single quotes are doubled so a value can never close the literal. Backslashes stay
|
|
19
|
+
* literal: with `standard_conforming_strings` (PostgreSQL default) `\\` is not an
|
|
20
|
+
* escape character in '...' strings — only LIKE gives it a meaning.
|
|
21
|
+
*
|
|
22
|
+
* @override
|
|
23
|
+
* @param value - the value to stringify
|
|
24
|
+
* @returns SQL-compatible string literal
|
|
25
|
+
*/
|
|
6
26
|
toStringValue(value) {
|
|
7
27
|
if (typeof value === "string") {
|
|
8
|
-
return `'${value}'`;
|
|
28
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
9
29
|
}
|
|
10
30
|
return super.toStringValue(value);
|
|
11
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* @override
|
|
34
|
+
* @returns SQL attribute expression with type cast
|
|
35
|
+
*/
|
|
12
36
|
toStringAttribute() {
|
|
13
37
|
switch (typeof this.value) {
|
|
14
38
|
case "boolean":
|
|
15
|
-
return `
|
|
39
|
+
return `COALESCE(${this.attribute[0]}, false) AS boolean`;
|
|
16
40
|
case "number":
|
|
17
|
-
|
|
18
|
-
return `CAST(${this.attribute[0]} AS bigint)`;
|
|
41
|
+
return `COALESCE(${this.attribute[0]}, 0) AS bigint`;
|
|
19
42
|
default:
|
|
20
43
|
return this.attribute[0];
|
|
21
44
|
}
|
|
22
45
|
}
|
|
23
46
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
47
|
+
/**
|
|
48
|
+
* PostgreSQL-backed repository for a single model class.
|
|
49
|
+
*
|
|
50
|
+
* Stores every object as a JSONB `data` column alongside a `uuid` primary-key
|
|
51
|
+
* column. All CRUD operations hit the pg client; the inherited MemoryRepository
|
|
52
|
+
* serialize/deserialize helpers are reused for JSON ↔ model-instance
|
|
53
|
+
* conversion.
|
|
54
|
+
*/
|
|
55
|
+
/**
|
|
56
|
+
* PostgreSQL-backed repository for a single model class.
|
|
57
|
+
*
|
|
58
|
+
* Stores every object as a JSONB `data` column alongside a `uuid` primary-key
|
|
59
|
+
* column. All CRUD operations hit the pg client; the inherited MemoryRepository
|
|
60
|
+
* serialize/deserialize helpers are reused for JSON to model-instance conversion.
|
|
61
|
+
*/
|
|
62
|
+
export class PostgresRepository extends MemoryRepository {
|
|
63
|
+
/**
|
|
64
|
+
* Create a new PostgresRepository.
|
|
65
|
+
* @param model - the model class
|
|
66
|
+
* @param pks - primary key field names
|
|
67
|
+
* @param client - the pg client or pool
|
|
68
|
+
* @param table - the table name
|
|
69
|
+
* @param separator - composite key separator
|
|
70
|
+
* @param prepare - awaited before every statement (e.g. to ensure the table exists)
|
|
71
|
+
*/
|
|
72
|
+
constructor(model, pks, client, table, separator, prepare) {
|
|
73
|
+
// Pass an empty Map — we do NOT use in-memory storage
|
|
74
|
+
super(model, pks, separator, new Map());
|
|
75
|
+
this.client = client;
|
|
76
|
+
this.table = table;
|
|
77
|
+
this.prepare = prepare;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The backing table name for this repository's model.
|
|
81
|
+
* @returns the table name
|
|
82
|
+
* @internal Not part of the @webda/models Repository interface.
|
|
83
|
+
*/
|
|
84
|
+
getTable() {
|
|
85
|
+
return this.table;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Ensure the backing table for this repository's model exists.
|
|
89
|
+
* Owns the per-model DDL previously held by PostgresStore.checkTable().
|
|
90
|
+
* @internal Not part of the @webda/models Repository interface.
|
|
91
|
+
*/
|
|
92
|
+
async setupTable() {
|
|
93
|
+
await this.client.query(`CREATE TABLE IF NOT EXISTS ${this.table} (uuid VARCHAR(255) NOT NULL, data jsonb, CONSTRAINT ${this.table}_pkey PRIMARY KEY (uuid))`);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Run a statement against the client once {@link prepare} has resolved.
|
|
97
|
+
* @param q - the SQL statement
|
|
98
|
+
* @param values - the statement parameters
|
|
99
|
+
* @returns the raw pg query result
|
|
100
|
+
*/
|
|
101
|
+
async execute(q, values) {
|
|
102
|
+
await this.prepare?.();
|
|
103
|
+
return this.client.query(q, values);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Map an expression attribute path array to a JSONB path expression.
|
|
107
|
+
* @param attribute - the attribute path
|
|
108
|
+
* @returns the JSONB path expression
|
|
109
|
+
*/
|
|
110
|
+
mapExpressionAttribute(attribute) {
|
|
111
|
+
return `data#>>'{${attribute.join(",")}}'`;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Build a SQL WHERE sub-expression from a write-condition.
|
|
115
|
+
* @param writeCondition - the expected value
|
|
116
|
+
* @param writeConditionField - the field to check
|
|
117
|
+
* @param params - the existing params array (will be extended in place)
|
|
118
|
+
* @returns the SQL AND clause
|
|
119
|
+
*/
|
|
120
|
+
getQueryCondition(writeCondition, writeConditionField, params) {
|
|
121
|
+
const condition = writeCondition instanceof Date ? writeCondition.toISOString() : writeCondition;
|
|
122
|
+
params.push(condition);
|
|
123
|
+
return ` AND data->>'${writeConditionField}'=$${params.length}`;
|
|
28
124
|
}
|
|
29
125
|
/**
|
|
30
|
-
*
|
|
31
|
-
* @param q query
|
|
32
|
-
* @
|
|
126
|
+
* Run a raw SQL query and return typed results.
|
|
127
|
+
* @param q - the SQL query (WHERE clause or full query)
|
|
128
|
+
* @param values - the query parameters
|
|
129
|
+
* @returns the raw pg query result
|
|
33
130
|
*/
|
|
34
|
-
|
|
35
|
-
// Should add the INNER JOIN from map
|
|
36
|
-
// this.parameters.map
|
|
37
|
-
// SELECT * FROM table as t1 LEFT JOIN table2 as t2 ON t2.target = t1.uuid
|
|
38
|
-
// if not same db: table2 is map_${name}_external
|
|
131
|
+
async sqlQuery(q, values = []) {
|
|
39
132
|
if (!q.startsWith("DELETE") && !q.startsWith("INSERT") && !q.startsWith("SELECT") && !q.startsWith("UPDATE")) {
|
|
40
|
-
|
|
133
|
+
q = `SELECT * FROM ${this.table} WHERE ${q}`;
|
|
41
134
|
}
|
|
42
|
-
return q;
|
|
135
|
+
return this.execute(q, values);
|
|
43
136
|
}
|
|
44
137
|
/**
|
|
45
|
-
*
|
|
138
|
+
* Deserialize a raw JSON object from the database into a model instance.
|
|
139
|
+
* @param data - the raw JSON object from the JSONB column
|
|
140
|
+
* @returns the model instance
|
|
46
141
|
*/
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
142
|
+
fromJSON(data) {
|
|
143
|
+
const instance = new this.model({});
|
|
144
|
+
if (typeof instance.load === "function") {
|
|
145
|
+
instance.load(data);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
Object.assign(instance, data);
|
|
149
|
+
}
|
|
150
|
+
return instance;
|
|
151
|
+
}
|
|
152
|
+
/** @override */
|
|
153
|
+
async get(primaryKey) {
|
|
154
|
+
const key = this.getPrimaryKey(primaryKey).toString();
|
|
155
|
+
const res = await this.sqlQuery(`SELECT data FROM ${this.table} WHERE uuid=$1`, [key]);
|
|
156
|
+
if (res.rowCount === 0) {
|
|
157
|
+
throw new Error(`Not found: ${key}`);
|
|
158
|
+
}
|
|
159
|
+
return this.fromJSON(res.rows[0].data);
|
|
160
|
+
}
|
|
161
|
+
/** @override */
|
|
162
|
+
async create(data, _save = true) {
|
|
163
|
+
// Persist the built item: a primary key generated by the model (e.g. UuidModel)
|
|
164
|
+
// must be the one stored in the row, not only the one used as key
|
|
165
|
+
const item = this.buildItem(data);
|
|
166
|
+
const key = this.getPrimaryKey(item).toString();
|
|
167
|
+
await this.execute(`INSERT INTO ${this.table}(uuid,data) VALUES($1, $2)`, [key, JSON.stringify(item)]);
|
|
168
|
+
return item;
|
|
169
|
+
}
|
|
170
|
+
/** @override */
|
|
171
|
+
async update(data, conditionField, condition) {
|
|
172
|
+
const key = this.getPrimaryKey(data).toString();
|
|
173
|
+
const args = [JSON.stringify(data), key];
|
|
174
|
+
let q = `UPDATE ${this.table} SET data=$1 WHERE uuid=$2`;
|
|
175
|
+
if (conditionField) {
|
|
176
|
+
q += this.getQueryCondition(condition, conditionField, args);
|
|
177
|
+
}
|
|
178
|
+
const res = await this.execute(q, args);
|
|
179
|
+
if (res.rowCount === 0) {
|
|
180
|
+
throw new UpdateConditionFailError(key, conditionField, condition);
|
|
52
181
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
182
|
+
}
|
|
183
|
+
/** @override */
|
|
184
|
+
async patch(primaryKey, data, conditionField, condition) {
|
|
185
|
+
const key = this.getPrimaryKey(primaryKey).toString();
|
|
186
|
+
const args = [JSON.stringify(data), key];
|
|
187
|
+
let q = `UPDATE ${this.table} SET data = data || $1::jsonb WHERE uuid=$2`;
|
|
188
|
+
if (conditionField) {
|
|
189
|
+
q += this.getQueryCondition(condition, conditionField, args);
|
|
190
|
+
}
|
|
191
|
+
const res = await this.execute(q, args);
|
|
192
|
+
if (res.rowCount === 0) {
|
|
193
|
+
throw new UpdateConditionFailError(key, conditionField, condition);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/** @override */
|
|
197
|
+
async delete(primaryKey, conditionField, condition) {
|
|
198
|
+
const key = this.getPrimaryKey(primaryKey).toString();
|
|
199
|
+
const args = [key];
|
|
200
|
+
let q = `DELETE FROM ${this.table} WHERE uuid=$1`;
|
|
201
|
+
if (conditionField) {
|
|
202
|
+
q += this.getQueryCondition(condition, conditionField, args);
|
|
203
|
+
const res = await this.execute(q, args);
|
|
204
|
+
if (res.rowCount === 0) {
|
|
205
|
+
throw new UpdateConditionFailError(key, conditionField, condition);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
await this.execute(q, args);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/** @override */
|
|
213
|
+
async exists(primaryKey) {
|
|
214
|
+
const key = this.getPrimaryKey(primaryKey).toString();
|
|
215
|
+
const res = await this.execute(`SELECT uuid FROM ${this.table} WHERE uuid=$1`, [key]);
|
|
216
|
+
return res.rowCount === 1;
|
|
217
|
+
}
|
|
218
|
+
/** @override */
|
|
219
|
+
async removeAttribute(primaryKey, attribute, conditionField, condition) {
|
|
220
|
+
const key = this.getPrimaryKey(primaryKey).toString();
|
|
221
|
+
const args = [String(attribute), key];
|
|
222
|
+
let q = `UPDATE ${this.table} SET data = data - $1 WHERE uuid=$2`;
|
|
223
|
+
if (conditionField) {
|
|
224
|
+
q += this.getQueryCondition(condition, conditionField, args);
|
|
225
|
+
}
|
|
226
|
+
const res = await this.execute(q, args);
|
|
227
|
+
if (res.rowCount === 0) {
|
|
228
|
+
if (conditionField) {
|
|
229
|
+
throw new UpdateConditionFailError(key, conditionField, condition);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
throw new StoreNotFoundError(key, this.table);
|
|
233
|
+
}
|
|
56
234
|
}
|
|
57
235
|
}
|
|
236
|
+
/** @override */
|
|
237
|
+
async incrementAttributes(primaryKey, info, _conditionField, _condition) {
|
|
238
|
+
const key = this.getPrimaryKey(primaryKey).toString();
|
|
239
|
+
const updateDate = new Date();
|
|
240
|
+
const args = [key];
|
|
241
|
+
let data = "data";
|
|
242
|
+
const entries = Array.isArray(info)
|
|
243
|
+
? info.map((e) => typeof e === "string" ? { property: e, value: 1 } : { property: e.property, value: e.value ?? 1 })
|
|
244
|
+
: Object.entries(info).map(([property, value]) => ({ property: String(property), value: value }));
|
|
245
|
+
entries.forEach((p, index) => {
|
|
246
|
+
args.push(p.value);
|
|
247
|
+
data = `jsonb_set(${data}, '{${p.property}}', (COALESCE(data->>'${p.property}','0')::int + $${index + 2})::text::jsonb)::jsonb`;
|
|
248
|
+
});
|
|
249
|
+
const q = `UPDATE ${this.table} SET data = jsonb_set(${data}, '{_lastUpdate}', '"${updateDate.toISOString()}"'::jsonb) WHERE uuid=$1`;
|
|
250
|
+
const res = await this.execute(q, args);
|
|
251
|
+
if (res.rowCount === 0) {
|
|
252
|
+
throw new StoreNotFoundError(key, this.table);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/** @override */
|
|
256
|
+
async upsertItemToCollection(primaryKey, collection, item, index, itemWriteConditionField, itemWriteCondition) {
|
|
257
|
+
const key = this.getPrimaryKey(primaryKey).toString();
|
|
258
|
+
const attr = String(collection);
|
|
259
|
+
const updateDate = new Date();
|
|
260
|
+
const args = [key];
|
|
261
|
+
let q = `UPDATE ${this.table} SET data = jsonb_set(jsonb_set(data::jsonb, array['${attr}'],`;
|
|
262
|
+
if (index === undefined) {
|
|
263
|
+
q += `COALESCE((data->'${attr}')::jsonb, '[]'::jsonb) || '[${JSON.stringify(item)}]'::jsonb)::jsonb`;
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
q += `jsonb_set(COALESCE((data->'${attr}')::jsonb, '[]'::jsonb), '{${index}}', '${JSON.stringify(item)}'::jsonb)::jsonb)`;
|
|
267
|
+
}
|
|
268
|
+
q += `, '{_lastUpdate}', '"${updateDate.toISOString()}"'::jsonb) WHERE uuid=$1`;
|
|
269
|
+
if (itemWriteCondition !== undefined) {
|
|
270
|
+
args.push(itemWriteCondition);
|
|
271
|
+
q += ` AND (data#>>'{${attr}, ${index}}')::jsonb->>'${String(itemWriteConditionField)}'=$${args.length}`;
|
|
272
|
+
}
|
|
273
|
+
const res = await this.execute(q, args);
|
|
274
|
+
if (res.rowCount === 0) {
|
|
275
|
+
if (itemWriteCondition !== undefined) {
|
|
276
|
+
throw new UpdateConditionFailError(key, String(itemWriteConditionField), itemWriteCondition);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
throw new StoreNotFoundError(key, this.table);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/** @override */
|
|
284
|
+
async deleteItemFromCollection(primaryKey, collection, index, itemWriteConditionField, itemWriteCondition) {
|
|
285
|
+
const key = this.getPrimaryKey(primaryKey).toString();
|
|
286
|
+
const attr = String(collection);
|
|
287
|
+
const updateDate = new Date();
|
|
288
|
+
const args = [key];
|
|
289
|
+
let q = `UPDATE ${this.table} SET data = jsonb_set(jsonb_set(data::jsonb, array['${attr}'], COALESCE(`;
|
|
290
|
+
q += `((data->'${attr}')::jsonb - ${index})`;
|
|
291
|
+
q += `, '[]'::jsonb))::jsonb, '{_lastUpdate}', '"${updateDate.toISOString()}"'::jsonb) WHERE uuid=$1`;
|
|
292
|
+
if (itemWriteCondition !== undefined) {
|
|
293
|
+
args.push(itemWriteCondition);
|
|
294
|
+
q += ` AND (data#>>'{${attr}, ${index}}')::jsonb->>'${String(itemWriteConditionField)}'=$2`;
|
|
295
|
+
}
|
|
296
|
+
const res = await this.execute(q, args);
|
|
297
|
+
if (res.rowCount === 0) {
|
|
298
|
+
if (itemWriteCondition !== undefined) {
|
|
299
|
+
throw new UpdateConditionFailError(key, String(itemWriteConditionField), itemWriteCondition);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
throw new StoreNotFoundError(key, this.table);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Duplicate and translate a WebdaQL expression into SQL-friendly JSONB path expressions.
|
|
308
|
+
* @param expression - the WebdaQL expression
|
|
309
|
+
* @returns the translated expression
|
|
310
|
+
*/
|
|
58
311
|
duplicateExpression(expression) {
|
|
312
|
+
if (expression instanceof WebdaQL.LogicalExpression && expression.children.length === 0) {
|
|
313
|
+
// An empty AND / OR matches everything: emit an explicit SQL TRUE (not "( )")
|
|
314
|
+
return new WebdaQL.BooleanExpression(true);
|
|
315
|
+
}
|
|
316
|
+
if (expression instanceof WebdaQL.BooleanExpression) {
|
|
317
|
+
// TRUE / FALSE are valid SQL booleans
|
|
318
|
+
return new WebdaQL.BooleanExpression(expression.value);
|
|
319
|
+
}
|
|
59
320
|
if (expression instanceof WebdaQL.AndExpression) {
|
|
60
321
|
return new WebdaQL.AndExpression(expression.children.map(exp => this.duplicateExpression(exp)));
|
|
61
322
|
}
|
|
@@ -68,100 +329,61 @@ export class SQLStore extends Store {
|
|
|
68
329
|
return new WebdaQL.OrExpression(expression.value.map(v => new SQLComparisonExpression("=", attr, v)));
|
|
69
330
|
}
|
|
70
331
|
if (expression.operator === "CONTAINS") {
|
|
71
|
-
return new SQLComparisonExpression(
|
|
72
|
-
// Small hack
|
|
73
|
-
"?", "(" + this.mapExpressionAttribute(expression.attribute) + ")::jsonb", expression.value);
|
|
332
|
+
return new SQLComparisonExpression("?", "(" + this.mapExpressionAttribute(expression.attribute) + ")::jsonb", expression.value);
|
|
74
333
|
}
|
|
334
|
+
// IS NULL / IS NOT NULL map natively: `data#>>'{a}'` is NULL for a missing key and a JSON null
|
|
75
335
|
return new SQLComparisonExpression(expression.operator, this.mapExpressionAttribute(expression.attribute), expression.value);
|
|
76
336
|
}
|
|
337
|
+
return expression;
|
|
77
338
|
}
|
|
78
|
-
/**
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
offset = parseInt(query.continuationToken || "0", 10);
|
|
86
|
-
if (query.orderBy && query.orderBy.length) {
|
|
339
|
+
/** @override — use SQL WHERE clause instead of in-memory scan */
|
|
340
|
+
async query(queryStr) {
|
|
341
|
+
const WebdaQLMod = await import("@webda/ql");
|
|
342
|
+
const parsed = WebdaQLMod.parse(queryStr);
|
|
343
|
+
let sql = this.duplicateExpression(parsed.filter).toString();
|
|
344
|
+
const offset = parseInt(parsed.continuationToken || "0", 10);
|
|
345
|
+
if (parsed.orderBy && parsed.orderBy.length) {
|
|
87
346
|
sql +=
|
|
88
347
|
" ORDER BY " +
|
|
89
|
-
|
|
348
|
+
parsed.orderBy
|
|
349
|
+
.map((c) => `${this.mapExpressionAttribute(c.field.split("."))} ${c.direction}`)
|
|
350
|
+
.join(", ");
|
|
90
351
|
}
|
|
91
|
-
|
|
352
|
+
const limit = parsed.limit || 1000;
|
|
353
|
+
sql += ` LIMIT ${limit}`;
|
|
92
354
|
if (offset) {
|
|
93
355
|
sql += ` OFFSET ${offset}`;
|
|
94
356
|
}
|
|
95
|
-
const
|
|
357
|
+
const res = await this.sqlQuery(sql, []);
|
|
358
|
+
const results = res.rows.map(r => this.fromJSON(r.data));
|
|
96
359
|
return {
|
|
97
360
|
results,
|
|
98
|
-
continuationToken:
|
|
99
|
-
filter: new WebdaQL.AndExpression([])
|
|
361
|
+
continuationToken: limit <= results.length ? (offset + limit).toString() : undefined
|
|
100
362
|
};
|
|
101
363
|
}
|
|
102
|
-
/**
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* @override
|
|
111
|
-
*/
|
|
112
|
-
async _get(uid, raiseIfNotFound) {
|
|
113
|
-
const res = await this.sqlQuery(`${this.getModel().getUuidField()} = $1`, [this.getUuid(uid)]);
|
|
114
|
-
if (res.rowCount === 0 && raiseIfNotFound) {
|
|
115
|
-
throw new StoreNotFoundError(uid, this.getName());
|
|
116
|
-
}
|
|
117
|
-
return res.rows.shift();
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* @override
|
|
121
|
-
*/
|
|
122
|
-
async getAll(list) {
|
|
123
|
-
if (list) {
|
|
124
|
-
return (await this.sqlQuery(list.map((_, index) => `uuid=$${index + 1}`).join(" OR "), list)).rows;
|
|
364
|
+
/** @override — iterate via paginated SQL queries */
|
|
365
|
+
async *iterate(queryStr) {
|
|
366
|
+
const WebdaQLMod = await import("@webda/ql");
|
|
367
|
+
const parsed = WebdaQLMod.parse(queryStr);
|
|
368
|
+
if (!parsed.limit) {
|
|
369
|
+
parsed.limit = 100;
|
|
125
370
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const args = [object.toStoredJSON(true), this.getUuid(uid)];
|
|
134
|
-
if (itemWriteCondition) {
|
|
135
|
-
q += this.getQueryCondition(itemWriteCondition, itemWriteConditionField, args);
|
|
136
|
-
}
|
|
137
|
-
const res = await this.sqlQuery(q, args);
|
|
138
|
-
if (res.rowCount === 0) {
|
|
139
|
-
throw new UpdateConditionFailError(uid, itemWriteConditionField, itemWriteCondition);
|
|
140
|
-
}
|
|
141
|
-
return object;
|
|
142
|
-
}
|
|
143
|
-
getUuid(object) {
|
|
144
|
-
let id;
|
|
145
|
-
if (typeof object === "string") {
|
|
146
|
-
id = object;
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
id = object.getUuid();
|
|
150
|
-
}
|
|
151
|
-
return id;
|
|
371
|
+
do {
|
|
372
|
+
const res = await this.query(parsed.toString?.() ?? queryStr);
|
|
373
|
+
for (const item of res.results) {
|
|
374
|
+
yield item;
|
|
375
|
+
}
|
|
376
|
+
parsed.continuationToken = res.continuationToken;
|
|
377
|
+
} while (parsed.continuationToken);
|
|
152
378
|
}
|
|
153
379
|
/**
|
|
154
|
-
*
|
|
380
|
+
* Delete all rows from the table (used in tests).
|
|
155
381
|
*/
|
|
156
|
-
async _save(object) {
|
|
157
|
-
await this.sqlQuery(`INSERT INTO ${this.parameters.table}(uuid,data) VALUES($1, $2)`, [
|
|
158
|
-
this.getUuid(object),
|
|
159
|
-
object.toStoredJSON(true)
|
|
160
|
-
]);
|
|
161
|
-
return object;
|
|
162
|
-
}
|
|
163
382
|
async __clean() {
|
|
164
|
-
await this.
|
|
383
|
+
await this.execute(`DELETE FROM ${this.table}`, []);
|
|
165
384
|
}
|
|
166
385
|
}
|
|
386
|
+
/** Abstract base class for SQL-backed stores */
|
|
387
|
+
export class SQLStore extends Store {
|
|
388
|
+
}
|
|
167
389
|
//# sourceMappingURL=sqlstore.js.map
|
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.4",
|
|
4
4
|
"description": "Implements Postgres on webda",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"postgres",
|
|
@@ -10,38 +10,18 @@
|
|
|
10
10
|
"repository": "git://github.com/loopingz/webda.io.git",
|
|
11
11
|
"main": "lib/index.js",
|
|
12
12
|
"typings": "lib/index.d.ts",
|
|
13
|
-
"scripts": {
|
|
14
|
-
"build": "webda build",
|
|
15
|
-
"build:watch": "webda build --watch",
|
|
16
|
-
"pretest": "npm run build",
|
|
17
|
-
"lint": "eslint",
|
|
18
|
-
"lint:fix": "eslint --fix",
|
|
19
|
-
"test": "c8 mocha",
|
|
20
|
-
"format": "prettier --check src/**/*",
|
|
21
|
-
"format:fix": "prettier --write src/**/*"
|
|
22
|
-
},
|
|
23
13
|
"dependencies": {
|
|
24
|
-
"
|
|
25
|
-
"@webda/
|
|
26
|
-
"
|
|
14
|
+
"pg": "^8.20.0",
|
|
15
|
+
"@webda/core": "4.0.0-beta.4",
|
|
16
|
+
"@webda/utils": "4.0.0-beta.4",
|
|
17
|
+
"@webda/ql": "4.0.0-beta.3",
|
|
18
|
+
"@webda/workout": "4.0.0-beta.3"
|
|
27
19
|
},
|
|
28
20
|
"files": [
|
|
29
21
|
"lib",
|
|
30
22
|
"test",
|
|
31
23
|
"webda.module.json"
|
|
32
24
|
],
|
|
33
|
-
"c8": {
|
|
34
|
-
"report-dir": "./reports",
|
|
35
|
-
"reporter": [
|
|
36
|
-
"html",
|
|
37
|
-
"lcov",
|
|
38
|
-
"json",
|
|
39
|
-
"text"
|
|
40
|
-
],
|
|
41
|
-
"exclude": [
|
|
42
|
-
"**/*.spec.ts"
|
|
43
|
-
]
|
|
44
|
-
},
|
|
45
25
|
"homepage": "https://webda.io",
|
|
46
26
|
"publishConfig": {
|
|
47
27
|
"access": "public"
|
|
@@ -50,20 +30,38 @@
|
|
|
50
30
|
"namespace": "Webda"
|
|
51
31
|
},
|
|
52
32
|
"devDependencies": {
|
|
53
|
-
"@types/node": "
|
|
54
|
-
"@
|
|
55
|
-
"
|
|
33
|
+
"@types/node": "25.5.0",
|
|
34
|
+
"@types/pg": "^8.11.10",
|
|
35
|
+
"@vitest/coverage-v8": "^4.1.2",
|
|
36
|
+
"jscodeshift": "^17.3.0",
|
|
37
|
+
"skott": "^0.35.8",
|
|
38
|
+
"tsx": "^4.21.0",
|
|
39
|
+
"typescript": "7.1.0-dev.20260929.1",
|
|
40
|
+
"vite": "^6.0.0",
|
|
41
|
+
"vitest": "^4.1.2",
|
|
42
|
+
"@webda/compiler": "^4.0.0-beta.4",
|
|
43
|
+
"@webda/test": "4.0.0-beta.3"
|
|
56
44
|
},
|
|
57
45
|
"type": "module",
|
|
58
46
|
"engines": {
|
|
59
|
-
"node": ">=
|
|
47
|
+
"node": ">=22.0.0"
|
|
60
48
|
},
|
|
61
49
|
"nx": {
|
|
62
50
|
"implicitDependencies": [
|
|
63
|
-
"@webda/core"
|
|
64
|
-
"@webda/shell"
|
|
51
|
+
"@webda/core"
|
|
65
52
|
]
|
|
66
53
|
},
|
|
67
54
|
"license": "LGPL-3.0-only",
|
|
68
|
-
"
|
|
69
|
-
|
|
55
|
+
"scripts": {
|
|
56
|
+
"build": "webdac build",
|
|
57
|
+
"build:watch": "webdac build --watch",
|
|
58
|
+
"pretest": "npm run build",
|
|
59
|
+
"lint": "eslint",
|
|
60
|
+
"lint:fix": "eslint --fix",
|
|
61
|
+
"test": "vitest run",
|
|
62
|
+
"format": "prettier --check src/**/*",
|
|
63
|
+
"format:fix": "prettier --write src/**/*",
|
|
64
|
+
"deps:graph": "skott --showCircularDependencies --no-trackTypeOnlyDependencies --displayMode=raw -e .ts",
|
|
65
|
+
"codemod": "jscodeshift --parser=ts --extensions=tsx,ts -t ../codemod/current.mjs src"
|
|
66
|
+
}
|
|
67
|
+
}
|