@webda/postgres 2.0.0-beta.1 → 2.0.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/lib/index.d.ts +2 -2
- package/lib/index.js +2 -18
- package/lib/index.js.map +1 -1
- package/lib/postgresstore.d.ts +5 -5
- package/lib/postgresstore.js +79 -107
- package/lib/postgresstore.js.map +1 -1
- package/lib/sqlstore.js +68 -99
- package/lib/sqlstore.js.map +1 -1
- package/package.json +11 -8
- package/webda.module.json +175 -0
package/lib/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./postgresstore";
|
|
2
|
-
export * from "./sqlstore";
|
|
1
|
+
export * from "./postgresstore.js";
|
|
2
|
+
export * from "./sqlstore.js";
|
package/lib/index.js
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./postgresstore"), exports);
|
|
18
|
-
__exportStar(require("./sqlstore"), exports);
|
|
1
|
+
export * from "./postgresstore.js";
|
|
2
|
+
export * from "./sqlstore.js";
|
|
19
3
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
|
package/lib/postgresstore.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CoreModel } from "@webda/core";
|
|
2
|
-
import {
|
|
3
|
-
import { SQLResult, SQLStore, SQLStoreParameters } from "./sqlstore";
|
|
2
|
+
import pg, { ClientConfig, PoolConfig } from "pg";
|
|
3
|
+
import { SQLResult, SQLStore, SQLStoreParameters } from "./sqlstore.js";
|
|
4
4
|
declare class PostgresParameters extends SQLStoreParameters {
|
|
5
5
|
/**
|
|
6
6
|
* @default false
|
|
@@ -28,7 +28,7 @@ declare class PostgresParameters extends SQLStoreParameters {
|
|
|
28
28
|
* @WebdaModda
|
|
29
29
|
*/
|
|
30
30
|
export default class PostgresStore<T extends CoreModel = CoreModel, K extends PostgresParameters = PostgresParameters> extends SQLStore<T, K> {
|
|
31
|
-
client: Client | Pool;
|
|
31
|
+
client: pg.Client | pg.Pool;
|
|
32
32
|
/**
|
|
33
33
|
* @override
|
|
34
34
|
*/
|
|
@@ -36,12 +36,12 @@ export default class PostgresStore<T extends CoreModel = CoreModel, K extends Po
|
|
|
36
36
|
/**
|
|
37
37
|
* @override
|
|
38
38
|
*/
|
|
39
|
-
init(): Promise<
|
|
39
|
+
init(): Promise<this>;
|
|
40
40
|
/**
|
|
41
41
|
* Return the postgresql client
|
|
42
42
|
* @returns
|
|
43
43
|
*/
|
|
44
|
-
getClient(): Client | Pool;
|
|
44
|
+
getClient(): pg.Client | pg.Pool;
|
|
45
45
|
/**
|
|
46
46
|
* Execute a query on the server
|
|
47
47
|
*
|
package/lib/postgresstore.js
CHANGED
|
@@ -1,18 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const core_1 = require("@webda/core");
|
|
13
|
-
const pg_1 = require("pg");
|
|
14
|
-
const sqlstore_1 = require("./sqlstore");
|
|
15
|
-
class PostgresParameters extends sqlstore_1.SQLStoreParameters {
|
|
1
|
+
import { StoreNotFoundError, UpdateConditionFailError } from "@webda/core";
|
|
2
|
+
import pg from "pg";
|
|
3
|
+
import { SQLStore, SQLStoreParameters } from "./sqlstore.js";
|
|
4
|
+
class PostgresParameters extends SQLStoreParameters {
|
|
16
5
|
}
|
|
17
6
|
/**
|
|
18
7
|
* Store data within PostgreSQL with JSONB
|
|
@@ -30,7 +19,7 @@ class PostgresParameters extends sqlstore_1.SQLStoreParameters {
|
|
|
30
19
|
*
|
|
31
20
|
* @WebdaModda
|
|
32
21
|
*/
|
|
33
|
-
class PostgresStore extends
|
|
22
|
+
export default class PostgresStore extends SQLStore {
|
|
34
23
|
/**
|
|
35
24
|
* @override
|
|
36
25
|
*/
|
|
@@ -40,20 +29,16 @@ class PostgresStore extends sqlstore_1.SQLStore {
|
|
|
40
29
|
/**
|
|
41
30
|
* @override
|
|
42
31
|
*/
|
|
43
|
-
init() {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
yield this.client.connect();
|
|
55
|
-
yield _super.init.call(this);
|
|
56
|
-
});
|
|
32
|
+
async init() {
|
|
33
|
+
if (this.parameters.usePool) {
|
|
34
|
+
this.client = new pg.Pool(this.parameters.postgresqlServer);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
this.client = new pg.Client(this.parameters.postgresqlServer);
|
|
38
|
+
}
|
|
39
|
+
await this.client.connect();
|
|
40
|
+
await super.init();
|
|
41
|
+
return this;
|
|
57
42
|
}
|
|
58
43
|
/**
|
|
59
44
|
* Return the postgresql client
|
|
@@ -68,15 +53,13 @@ class PostgresStore extends sqlstore_1.SQLStore {
|
|
|
68
53
|
* @param query
|
|
69
54
|
* @returns
|
|
70
55
|
*/
|
|
71
|
-
executeQuery(query) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
};
|
|
79
|
-
});
|
|
56
|
+
async executeQuery(query) {
|
|
57
|
+
this.log("DEBUG", "Query", query);
|
|
58
|
+
let res = await this.client.query(query);
|
|
59
|
+
return {
|
|
60
|
+
rows: res.rows.map(r => this.initModel(r.data)),
|
|
61
|
+
rowCount: res.rowCount
|
|
62
|
+
};
|
|
80
63
|
}
|
|
81
64
|
/**
|
|
82
65
|
* @override
|
|
@@ -87,37 +70,33 @@ class PostgresStore extends sqlstore_1.SQLStore {
|
|
|
87
70
|
/**
|
|
88
71
|
* @override
|
|
89
72
|
*/
|
|
90
|
-
_patch(object, uid, itemWriteCondition, itemWriteConditionField) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
});
|
|
73
|
+
async _patch(object, uid, itemWriteCondition, itemWriteConditionField) {
|
|
74
|
+
let query = `UPDATE ${this.parameters.table} SET data = data || '${JSON.stringify(object)}'::jsonb WHERE uuid = '${this.getUuid(uid)}'`;
|
|
75
|
+
if (itemWriteCondition) {
|
|
76
|
+
query += this.getQueryCondition(itemWriteCondition, itemWriteConditionField);
|
|
77
|
+
}
|
|
78
|
+
let res = await this.sqlQuery(query);
|
|
79
|
+
if (res.rowCount === 0) {
|
|
80
|
+
throw new UpdateConditionFailError(uid, itemWriteConditionField, itemWriteCondition);
|
|
81
|
+
}
|
|
101
82
|
}
|
|
102
83
|
/**
|
|
103
84
|
* @override
|
|
104
85
|
*/
|
|
105
|
-
_removeAttribute(uuid, attribute, itemWriteCondition, itemWriteConditionField) {
|
|
106
|
-
|
|
107
|
-
|
|
86
|
+
async _removeAttribute(uuid, attribute, itemWriteCondition, itemWriteConditionField) {
|
|
87
|
+
let query = `UPDATE ${this.parameters.table} SET data = data - '${attribute}' WHERE uuid = '${this.getUuid(uuid)}'`;
|
|
88
|
+
if (itemWriteCondition) {
|
|
89
|
+
query += this.getQueryCondition(itemWriteCondition, itemWriteConditionField);
|
|
90
|
+
}
|
|
91
|
+
let res = await this.sqlQuery(query);
|
|
92
|
+
if (res.rowCount === 0) {
|
|
108
93
|
if (itemWriteCondition) {
|
|
109
|
-
|
|
94
|
+
throw new UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
110
95
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (itemWriteCondition) {
|
|
114
|
-
throw new core_1.UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
throw new core_1.StoreNotFoundError(uuid, this.getName());
|
|
118
|
-
}
|
|
96
|
+
else {
|
|
97
|
+
throw new StoreNotFoundError(uuid, this.getName());
|
|
119
98
|
}
|
|
120
|
-
}
|
|
99
|
+
}
|
|
121
100
|
}
|
|
122
101
|
/**
|
|
123
102
|
* @override
|
|
@@ -128,64 +107,57 @@ class PostgresStore extends sqlstore_1.SQLStore {
|
|
|
128
107
|
/**
|
|
129
108
|
* @override
|
|
130
109
|
*/
|
|
131
|
-
_incrementAttribute(uid, attribute, value, updateDate) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
});
|
|
110
|
+
async _incrementAttribute(uid, attribute, value, updateDate) {
|
|
111
|
+
let query = `UPDATE ${this.parameters.table} SET data = jsonb_set(jsonb_set(data, '{${attribute}}', (COALESCE(data->>'${attribute}','0')::int + ${value})::text::jsonb)::jsonb, '{_lastUpdate}', '"${updateDate.toISOString()}"'::jsonb) WHERE uuid = '${this.getUuid(uid)}'`;
|
|
112
|
+
let res = await this.sqlQuery(query);
|
|
113
|
+
if (res.rowCount === 0) {
|
|
114
|
+
throw new StoreNotFoundError(uid, this.getName());
|
|
115
|
+
}
|
|
139
116
|
}
|
|
140
117
|
/**
|
|
141
118
|
* @override
|
|
142
119
|
*/
|
|
143
|
-
_upsertItemToCollection(uuid, attribute, item, index, itemWriteCondition, itemWriteConditionField, updateDate) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
120
|
+
async _upsertItemToCollection(uuid, attribute, item, index, itemWriteCondition, itemWriteConditionField, updateDate) {
|
|
121
|
+
let query = `UPDATE ${this.parameters.table} SET data = jsonb_set(jsonb_set(data::jsonb, array['${attribute}'],`;
|
|
122
|
+
if (index === undefined) {
|
|
123
|
+
query += `COALESCE((data->'${attribute}')::jsonb, '[]'::jsonb) || '[${JSON.stringify(item)}]'::jsonb)::jsonb`;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
query += `jsonb_set(COALESCE((data->'${attribute}')::jsonb, '[]'::jsonb), '{${index}}', '${JSON.stringify(item)}'::jsonb)::jsonb)`;
|
|
127
|
+
}
|
|
128
|
+
query += `, '{_lastUpdate}', '"${updateDate.toISOString()}"'::jsonb) WHERE uuid = '${this.getUuid(uuid)}'`;
|
|
129
|
+
if (itemWriteCondition) {
|
|
130
|
+
query += ` AND (data#>>'{${attribute}, ${index}}')::jsonb->>'${itemWriteConditionField}'='${itemWriteCondition}'`;
|
|
131
|
+
}
|
|
132
|
+
let res = await this.sqlQuery(query);
|
|
133
|
+
if (res.rowCount === 0) {
|
|
153
134
|
if (itemWriteCondition) {
|
|
154
|
-
|
|
135
|
+
throw new UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
155
136
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if (itemWriteCondition) {
|
|
159
|
-
throw new core_1.UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
throw new core_1.StoreNotFoundError(uuid, this.getName());
|
|
163
|
-
}
|
|
137
|
+
else {
|
|
138
|
+
throw new StoreNotFoundError(uuid, this.getName());
|
|
164
139
|
}
|
|
165
|
-
}
|
|
140
|
+
}
|
|
166
141
|
}
|
|
167
142
|
/**
|
|
168
143
|
* @override
|
|
169
144
|
*/
|
|
170
|
-
_deleteItemFromCollection(uuid, attribute, index, itemWriteCondition, itemWriteConditionField, updateDate) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
145
|
+
async _deleteItemFromCollection(uuid, attribute, index, itemWriteCondition, itemWriteConditionField, updateDate) {
|
|
146
|
+
let query = `UPDATE ${this.parameters.table} SET data = jsonb_set(jsonb_set(data::jsonb, array['${attribute}'], COALESCE(`;
|
|
147
|
+
query += `((data->'${attribute}')::jsonb - ${index})`;
|
|
148
|
+
query += `, '[]'::jsonb))::jsonb, '{_lastUpdate}', '"${updateDate.toISOString()}"'::jsonb) WHERE uuid = '${this.getUuid(uuid)}'`;
|
|
149
|
+
if (itemWriteCondition) {
|
|
150
|
+
query += ` AND (data#>>'{${attribute}, ${index}}')::jsonb->>'${itemWriteConditionField}'='${itemWriteCondition}'`;
|
|
151
|
+
}
|
|
152
|
+
let res = await this.sqlQuery(query);
|
|
153
|
+
if (res.rowCount === 0) {
|
|
175
154
|
if (itemWriteCondition) {
|
|
176
|
-
|
|
155
|
+
throw new UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
177
156
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
if (itemWriteCondition) {
|
|
181
|
-
throw new core_1.UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
throw new core_1.StoreNotFoundError(uuid, this.getName());
|
|
185
|
-
}
|
|
157
|
+
else {
|
|
158
|
+
throw new StoreNotFoundError(uuid, this.getName());
|
|
186
159
|
}
|
|
187
|
-
}
|
|
160
|
+
}
|
|
188
161
|
}
|
|
189
162
|
}
|
|
190
|
-
exports.default = PostgresStore;
|
|
191
163
|
//# sourceMappingURL=postgresstore.js.map
|
package/lib/postgresstore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresstore.js","sourceRoot":"","sources":["../src/postgresstore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"postgresstore.js","sourceRoot":"","sources":["../src/postgresstore.ts"],"names":[],"mappings":"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"}
|
package/lib/sqlstore.js
CHANGED
|
@@ -1,20 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.SQLStore = exports.SQLComparisonExpression = exports.SQLStoreParameters = void 0;
|
|
13
|
-
const core_1 = require("@webda/core");
|
|
14
|
-
class SQLStoreParameters extends core_1.StoreParameters {
|
|
1
|
+
import { Store, StoreNotFoundError, StoreParameters, UpdateConditionFailError, WebdaQL } from "@webda/core";
|
|
2
|
+
export class SQLStoreParameters extends StoreParameters {
|
|
15
3
|
}
|
|
16
|
-
|
|
17
|
-
class SQLComparisonExpression extends core_1.WebdaQL.ComparisonExpression {
|
|
4
|
+
export class SQLComparisonExpression extends WebdaQL.ComparisonExpression {
|
|
18
5
|
toStringValue(value) {
|
|
19
6
|
if (typeof value === "string") {
|
|
20
7
|
return `'${value}'`;
|
|
@@ -29,8 +16,7 @@ class SQLComparisonExpression extends core_1.WebdaQL.ComparisonExpression {
|
|
|
29
16
|
return this.attribute[0];
|
|
30
17
|
}
|
|
31
18
|
}
|
|
32
|
-
|
|
33
|
-
class SQLStore extends core_1.Store {
|
|
19
|
+
export class SQLStore extends Store {
|
|
34
20
|
sqlQuery(q) {
|
|
35
21
|
q = this.completeQuery(q);
|
|
36
22
|
return this.executeQuery(q);
|
|
@@ -48,29 +34,27 @@ class SQLStore extends core_1.Store {
|
|
|
48
34
|
/**
|
|
49
35
|
* @override
|
|
50
36
|
*/
|
|
51
|
-
_delete(uid, writeCondition, writeConditionField) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
});
|
|
37
|
+
async _delete(uid, writeCondition, writeConditionField) {
|
|
38
|
+
let query = `DELETE FROM ${this.parameters.table} WHERE uuid='${uid}'`;
|
|
39
|
+
if (writeCondition) {
|
|
40
|
+
query += this.getQueryCondition(writeCondition, writeConditionField);
|
|
41
|
+
}
|
|
42
|
+
let res = await this.sqlQuery(query);
|
|
43
|
+
if (res.rowCount === 0 && writeCondition) {
|
|
44
|
+
throw new UpdateConditionFailError(uid, writeConditionField, writeCondition);
|
|
45
|
+
}
|
|
62
46
|
}
|
|
63
47
|
duplicateExpression(expression) {
|
|
64
|
-
if (expression instanceof
|
|
65
|
-
return new
|
|
48
|
+
if (expression instanceof WebdaQL.AndExpression) {
|
|
49
|
+
return new WebdaQL.AndExpression(expression.children.map(exp => this.duplicateExpression(exp)));
|
|
66
50
|
}
|
|
67
|
-
else if (expression instanceof
|
|
68
|
-
return new
|
|
51
|
+
else if (expression instanceof WebdaQL.OrExpression) {
|
|
52
|
+
return new WebdaQL.OrExpression(expression.children.map(exp => this.duplicateExpression(exp)));
|
|
69
53
|
}
|
|
70
|
-
else if (expression instanceof
|
|
54
|
+
else if (expression instanceof WebdaQL.ComparisonExpression) {
|
|
71
55
|
if (expression.operator === "IN") {
|
|
72
56
|
const attr = this.mapExpressionAttribute(expression.attribute);
|
|
73
|
-
return new
|
|
57
|
+
return new WebdaQL.OrExpression(expression.value.map(v => new SQLComparisonExpression("=", attr, v)));
|
|
74
58
|
}
|
|
75
59
|
return new SQLComparisonExpression(expression.operator, this.mapExpressionAttribute(expression.attribute), expression.value);
|
|
76
60
|
}
|
|
@@ -78,76 +62,66 @@ class SQLStore extends core_1.Store {
|
|
|
78
62
|
/**
|
|
79
63
|
* @override
|
|
80
64
|
*/
|
|
81
|
-
find(query) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
};
|
|
102
|
-
});
|
|
65
|
+
async find(query) {
|
|
66
|
+
// Update condition
|
|
67
|
+
let sql = this.duplicateExpression(query.filter).toString() || "TRUE";
|
|
68
|
+
let offset = 0;
|
|
69
|
+
offset = parseInt(query.continuationToken || "0", 10);
|
|
70
|
+
if (query.orderBy && query.orderBy.length) {
|
|
71
|
+
sql +=
|
|
72
|
+
" ORDER BY " +
|
|
73
|
+
query.orderBy.map(c => `${this.mapExpressionAttribute(c.field.split("."))} ${c.direction}`).join(", ");
|
|
74
|
+
}
|
|
75
|
+
sql += ` LIMIT ${query.limit || "1000"}`;
|
|
76
|
+
if (offset) {
|
|
77
|
+
sql += ` OFFSET ${offset}`;
|
|
78
|
+
}
|
|
79
|
+
const results = (await this.sqlQuery(sql)).rows.map(c => this.initModel(c));
|
|
80
|
+
return {
|
|
81
|
+
results,
|
|
82
|
+
continuationToken: query.limit <= results.length ? (offset + query.limit).toString() : undefined,
|
|
83
|
+
filter: new WebdaQL.AndExpression([])
|
|
84
|
+
};
|
|
103
85
|
}
|
|
104
86
|
/**
|
|
105
87
|
* @override
|
|
106
88
|
*/
|
|
107
|
-
exists(uid) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return res.rowCount === 1;
|
|
111
|
-
});
|
|
89
|
+
async exists(uid) {
|
|
90
|
+
let res = await this.sqlQuery(`SELECT uuid FROM ${this.parameters.table} WHERE ${this.getModel().getUuidField()} = '${this.getUuid(uid)}'`);
|
|
91
|
+
return res.rowCount === 1;
|
|
112
92
|
}
|
|
113
93
|
/**
|
|
114
94
|
* @override
|
|
115
95
|
*/
|
|
116
|
-
_get(uid, raiseIfNotFound) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return res.rows.shift();
|
|
123
|
-
});
|
|
96
|
+
async _get(uid, raiseIfNotFound) {
|
|
97
|
+
let res = await this.sqlQuery(`${this.getModel().getUuidField()} = '${this.getUuid(uid)}'`);
|
|
98
|
+
if (res.rowCount === 0 && raiseIfNotFound) {
|
|
99
|
+
throw new StoreNotFoundError(uid, this.getName());
|
|
100
|
+
}
|
|
101
|
+
return res.rows.shift();
|
|
124
102
|
}
|
|
125
103
|
/**
|
|
126
104
|
* @override
|
|
127
105
|
*/
|
|
128
|
-
getAll(list) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
return (yield this.sqlQuery("TRUE")).rows;
|
|
134
|
-
});
|
|
106
|
+
async getAll(list) {
|
|
107
|
+
if (list) {
|
|
108
|
+
return (await this.sqlQuery(list.map(uuid => `uuid='${this.getUuid(uuid)}'`).join(" OR "))).rows;
|
|
109
|
+
}
|
|
110
|
+
return (await this.sqlQuery("TRUE")).rows;
|
|
135
111
|
}
|
|
136
112
|
/**
|
|
137
113
|
* @override
|
|
138
114
|
*/
|
|
139
|
-
_update(object, uid, itemWriteCondition, itemWriteConditionField) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return object;
|
|
150
|
-
});
|
|
115
|
+
async _update(object, uid, itemWriteCondition, itemWriteConditionField) {
|
|
116
|
+
let q = `UPDATE ${this.parameters.table} SET data='${object.toStoredJSON(true)}' WHERE uuid='${this.getUuid(uid)}'`;
|
|
117
|
+
if (itemWriteCondition) {
|
|
118
|
+
q += this.getQueryCondition(itemWriteCondition, itemWriteConditionField);
|
|
119
|
+
}
|
|
120
|
+
let res = await this.sqlQuery(q);
|
|
121
|
+
if (res.rowCount === 0) {
|
|
122
|
+
throw new UpdateConditionFailError(uid, itemWriteConditionField, itemWriteCondition);
|
|
123
|
+
}
|
|
124
|
+
return object;
|
|
151
125
|
}
|
|
152
126
|
getUuid(object) {
|
|
153
127
|
let id;
|
|
@@ -162,17 +136,12 @@ class SQLStore extends core_1.Store {
|
|
|
162
136
|
/**
|
|
163
137
|
* @override
|
|
164
138
|
*/
|
|
165
|
-
_save(object) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
return object;
|
|
169
|
-
});
|
|
139
|
+
async _save(object) {
|
|
140
|
+
await this.sqlQuery(`INSERT INTO ${this.parameters.table}(uuid,data) VALUES('${this.getUuid(object)}', '${object.toStoredJSON(true)}')`);
|
|
141
|
+
return object;
|
|
170
142
|
}
|
|
171
|
-
__clean() {
|
|
172
|
-
|
|
173
|
-
yield this.sqlQuery(`DELETE FROM ${this.parameters.table}`);
|
|
174
|
-
});
|
|
143
|
+
async __clean() {
|
|
144
|
+
await this.sqlQuery(`DELETE FROM ${this.parameters.table}`);
|
|
175
145
|
}
|
|
176
146
|
}
|
|
177
|
-
exports.SQLStore = SQLStore;
|
|
178
147
|
//# 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":"
|
|
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": "2.0.0
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Implements Postgres on webda",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"postgres",
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
"pretest": "npm run build",
|
|
16
16
|
"lint": "prettier --check src/**/*",
|
|
17
17
|
"lint:fix": "prettier --write src/**/*",
|
|
18
|
-
"test": "
|
|
18
|
+
"test": "c8 mocha --recursive --exit --timeout=100000 src/**/*.spec.ts src/*.spec.ts"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@webda/core": "^2.0.0
|
|
21
|
+
"@webda/core": "^2.0.0",
|
|
22
22
|
"pg": "^8.7.1"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
@@ -26,8 +26,7 @@
|
|
|
26
26
|
"test",
|
|
27
27
|
"webda.module.json"
|
|
28
28
|
],
|
|
29
|
-
"
|
|
30
|
-
"extends": "@istanbuljs/nyc-config-typescript",
|
|
29
|
+
"c8": {
|
|
31
30
|
"report-dir": "./reports",
|
|
32
31
|
"reporter": [
|
|
33
32
|
"html",
|
|
@@ -47,8 +46,12 @@
|
|
|
47
46
|
"namespace": "Webda"
|
|
48
47
|
},
|
|
49
48
|
"devDependencies": {
|
|
50
|
-
"@types/node": "14.
|
|
51
|
-
"@webda/shell": "^2.0.0
|
|
49
|
+
"@types/node": "14.6.0",
|
|
50
|
+
"@webda/shell": "^2.0.0"
|
|
52
51
|
},
|
|
53
|
-
"
|
|
52
|
+
"type": "module",
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=14.6.0"
|
|
55
|
+
},
|
|
56
|
+
"gitHead": "5764db57432f146c84b2e8f52cf49fb5ded3af29"
|
|
54
57
|
}
|
package/webda.module.json
CHANGED
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
"type": "string",
|
|
14
14
|
"description": "Type of the service"
|
|
15
15
|
},
|
|
16
|
+
"url": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "URL on which to serve the content"
|
|
19
|
+
},
|
|
16
20
|
"model": {
|
|
17
21
|
"type": "string",
|
|
18
22
|
"description": "Webda model to use within the Store",
|
|
@@ -115,6 +119,25 @@
|
|
|
115
119
|
"readable": {
|
|
116
120
|
"type": "boolean"
|
|
117
121
|
},
|
|
122
|
+
"readableEncoding": {
|
|
123
|
+
"anyOf": [
|
|
124
|
+
{
|
|
125
|
+
"$ref": "#/definitions/BufferEncoding"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"type": "null"
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
"readableEnded": {
|
|
133
|
+
"type": "boolean"
|
|
134
|
+
},
|
|
135
|
+
"readableFlowing": {
|
|
136
|
+
"type": [
|
|
137
|
+
"boolean",
|
|
138
|
+
"null"
|
|
139
|
+
]
|
|
140
|
+
},
|
|
118
141
|
"readableHighWaterMark": {
|
|
119
142
|
"type": "number"
|
|
120
143
|
},
|
|
@@ -128,6 +151,9 @@
|
|
|
128
151
|
"required": [
|
|
129
152
|
"destroyed",
|
|
130
153
|
"readable",
|
|
154
|
+
"readableEncoding",
|
|
155
|
+
"readableEnded",
|
|
156
|
+
"readableFlowing",
|
|
131
157
|
"readableHighWaterMark",
|
|
132
158
|
"readableLength",
|
|
133
159
|
"readableObjectMode",
|
|
@@ -814,6 +840,38 @@
|
|
|
814
840
|
"type": "string",
|
|
815
841
|
"description": "Opaque identifier used by servers to ensure session state is not shared between applications. Unused by clients."
|
|
816
842
|
},
|
|
843
|
+
"ticketKeys": {
|
|
844
|
+
"type": "object",
|
|
845
|
+
"properties": {
|
|
846
|
+
"BYTES_PER_ELEMENT": {
|
|
847
|
+
"type": "number"
|
|
848
|
+
},
|
|
849
|
+
"buffer": {
|
|
850
|
+
"$ref": "#/definitions/ArrayBufferLike"
|
|
851
|
+
},
|
|
852
|
+
"byteLength": {
|
|
853
|
+
"type": "number"
|
|
854
|
+
},
|
|
855
|
+
"byteOffset": {
|
|
856
|
+
"type": "number"
|
|
857
|
+
},
|
|
858
|
+
"length": {
|
|
859
|
+
"type": "number"
|
|
860
|
+
}
|
|
861
|
+
},
|
|
862
|
+
"required": [
|
|
863
|
+
"BYTES_PER_ELEMENT",
|
|
864
|
+
"buffer",
|
|
865
|
+
"byteLength",
|
|
866
|
+
"byteOffset",
|
|
867
|
+
"length"
|
|
868
|
+
],
|
|
869
|
+
"description": "48 bytes of cryptographically strong pseudo-random data."
|
|
870
|
+
},
|
|
871
|
+
"sessionTimeout": {
|
|
872
|
+
"type": "number",
|
|
873
|
+
"description": "The number of seconds after which a TLS session created by the server will no longer be resumable."
|
|
874
|
+
},
|
|
817
875
|
"host": {
|
|
818
876
|
"type": "string"
|
|
819
877
|
},
|
|
@@ -853,6 +911,25 @@
|
|
|
853
911
|
"readable": {
|
|
854
912
|
"type": "boolean"
|
|
855
913
|
},
|
|
914
|
+
"readableEncoding": {
|
|
915
|
+
"anyOf": [
|
|
916
|
+
{
|
|
917
|
+
"$ref": "#/definitions/BufferEncoding"
|
|
918
|
+
},
|
|
919
|
+
{
|
|
920
|
+
"type": "null"
|
|
921
|
+
}
|
|
922
|
+
]
|
|
923
|
+
},
|
|
924
|
+
"readableEnded": {
|
|
925
|
+
"type": "boolean"
|
|
926
|
+
},
|
|
927
|
+
"readableFlowing": {
|
|
928
|
+
"type": [
|
|
929
|
+
"boolean",
|
|
930
|
+
"null"
|
|
931
|
+
]
|
|
932
|
+
},
|
|
856
933
|
"readableHighWaterMark": {
|
|
857
934
|
"type": "number"
|
|
858
935
|
},
|
|
@@ -899,6 +976,9 @@
|
|
|
899
976
|
"localAddress",
|
|
900
977
|
"localPort",
|
|
901
978
|
"readable",
|
|
979
|
+
"readableEncoding",
|
|
980
|
+
"readableEnded",
|
|
981
|
+
"readableFlowing",
|
|
902
982
|
"readableHighWaterMark",
|
|
903
983
|
"readableLength",
|
|
904
984
|
"readableObjectMode",
|
|
@@ -1043,6 +1123,25 @@
|
|
|
1043
1123
|
"readable": {
|
|
1044
1124
|
"type": "boolean"
|
|
1045
1125
|
},
|
|
1126
|
+
"readableEncoding": {
|
|
1127
|
+
"anyOf": [
|
|
1128
|
+
{
|
|
1129
|
+
"$ref": "#/definitions/BufferEncoding"
|
|
1130
|
+
},
|
|
1131
|
+
{
|
|
1132
|
+
"type": "null"
|
|
1133
|
+
}
|
|
1134
|
+
]
|
|
1135
|
+
},
|
|
1136
|
+
"readableEnded": {
|
|
1137
|
+
"type": "boolean"
|
|
1138
|
+
},
|
|
1139
|
+
"readableFlowing": {
|
|
1140
|
+
"type": [
|
|
1141
|
+
"boolean",
|
|
1142
|
+
"null"
|
|
1143
|
+
]
|
|
1144
|
+
},
|
|
1046
1145
|
"readableHighWaterMark": {
|
|
1047
1146
|
"type": "number"
|
|
1048
1147
|
},
|
|
@@ -1056,6 +1155,9 @@
|
|
|
1056
1155
|
"required": [
|
|
1057
1156
|
"destroyed",
|
|
1058
1157
|
"readable",
|
|
1158
|
+
"readableEncoding",
|
|
1159
|
+
"readableEnded",
|
|
1160
|
+
"readableFlowing",
|
|
1059
1161
|
"readableHighWaterMark",
|
|
1060
1162
|
"readableLength",
|
|
1061
1163
|
"readableObjectMode",
|
|
@@ -1742,6 +1844,38 @@
|
|
|
1742
1844
|
"type": "string",
|
|
1743
1845
|
"description": "Opaque identifier used by servers to ensure session state is not shared between applications. Unused by clients."
|
|
1744
1846
|
},
|
|
1847
|
+
"ticketKeys": {
|
|
1848
|
+
"type": "object",
|
|
1849
|
+
"properties": {
|
|
1850
|
+
"BYTES_PER_ELEMENT": {
|
|
1851
|
+
"type": "number"
|
|
1852
|
+
},
|
|
1853
|
+
"buffer": {
|
|
1854
|
+
"$ref": "#/definitions/ArrayBufferLike"
|
|
1855
|
+
},
|
|
1856
|
+
"byteLength": {
|
|
1857
|
+
"type": "number"
|
|
1858
|
+
},
|
|
1859
|
+
"byteOffset": {
|
|
1860
|
+
"type": "number"
|
|
1861
|
+
},
|
|
1862
|
+
"length": {
|
|
1863
|
+
"type": "number"
|
|
1864
|
+
}
|
|
1865
|
+
},
|
|
1866
|
+
"required": [
|
|
1867
|
+
"BYTES_PER_ELEMENT",
|
|
1868
|
+
"buffer",
|
|
1869
|
+
"byteLength",
|
|
1870
|
+
"byteOffset",
|
|
1871
|
+
"length"
|
|
1872
|
+
],
|
|
1873
|
+
"description": "48 bytes of cryptographically strong pseudo-random data."
|
|
1874
|
+
},
|
|
1875
|
+
"sessionTimeout": {
|
|
1876
|
+
"type": "number",
|
|
1877
|
+
"description": "The number of seconds after which a TLS session created by the server will no longer be resumable."
|
|
1878
|
+
},
|
|
1745
1879
|
"host": {
|
|
1746
1880
|
"type": "string"
|
|
1747
1881
|
},
|
|
@@ -1781,6 +1915,25 @@
|
|
|
1781
1915
|
"readable": {
|
|
1782
1916
|
"type": "boolean"
|
|
1783
1917
|
},
|
|
1918
|
+
"readableEncoding": {
|
|
1919
|
+
"anyOf": [
|
|
1920
|
+
{
|
|
1921
|
+
"$ref": "#/definitions/BufferEncoding"
|
|
1922
|
+
},
|
|
1923
|
+
{
|
|
1924
|
+
"type": "null"
|
|
1925
|
+
}
|
|
1926
|
+
]
|
|
1927
|
+
},
|
|
1928
|
+
"readableEnded": {
|
|
1929
|
+
"type": "boolean"
|
|
1930
|
+
},
|
|
1931
|
+
"readableFlowing": {
|
|
1932
|
+
"type": [
|
|
1933
|
+
"boolean",
|
|
1934
|
+
"null"
|
|
1935
|
+
]
|
|
1936
|
+
},
|
|
1784
1937
|
"readableHighWaterMark": {
|
|
1785
1938
|
"type": "number"
|
|
1786
1939
|
},
|
|
@@ -1827,6 +1980,9 @@
|
|
|
1827
1980
|
"localAddress",
|
|
1828
1981
|
"localPort",
|
|
1829
1982
|
"readable",
|
|
1983
|
+
"readableEncoding",
|
|
1984
|
+
"readableEnded",
|
|
1985
|
+
"readableFlowing",
|
|
1830
1986
|
"readableHighWaterMark",
|
|
1831
1987
|
"readableLength",
|
|
1832
1988
|
"readableObjectMode",
|
|
@@ -1933,6 +2089,10 @@
|
|
|
1933
2089
|
}
|
|
1934
2090
|
],
|
|
1935
2091
|
"description": "By default use environment variables"
|
|
2092
|
+
},
|
|
2093
|
+
"openapi": {
|
|
2094
|
+
"type": "object",
|
|
2095
|
+
"additionalProperties": true
|
|
1936
2096
|
}
|
|
1937
2097
|
},
|
|
1938
2098
|
"required": [
|
|
@@ -1990,6 +2150,21 @@
|
|
|
1990
2150
|
}
|
|
1991
2151
|
}
|
|
1992
2152
|
},
|
|
2153
|
+
"BufferEncoding": {
|
|
2154
|
+
"type": "string",
|
|
2155
|
+
"enum": [
|
|
2156
|
+
"ascii",
|
|
2157
|
+
"utf8",
|
|
2158
|
+
"utf-8",
|
|
2159
|
+
"utf16le",
|
|
2160
|
+
"ucs2",
|
|
2161
|
+
"ucs-2",
|
|
2162
|
+
"base64",
|
|
2163
|
+
"latin1",
|
|
2164
|
+
"binary",
|
|
2165
|
+
"hex"
|
|
2166
|
+
]
|
|
2167
|
+
},
|
|
1993
2168
|
"ArrayBufferLike": {
|
|
1994
2169
|
"anyOf": [
|
|
1995
2170
|
{
|