@webda/postgres 4.0.0-beta.2 → 4.0.0-beta.3
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 +132 -0
- package/lib/postgresstore.service.d.ts.map +1 -0
- package/lib/postgresstore.service.js +327 -0
- package/lib/postgresstore.service.js.map +1 -0
- package/lib/sqlstore.d.ts +121 -40
- package/lib/sqlstore.d.ts.map +1 -1
- package/lib/sqlstore.js +313 -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/postgresstore.d.ts
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { CoreModel } from "@webda/core";
|
|
2
|
-
import pg, { ClientConfig, PoolConfig } from "pg";
|
|
3
|
-
import { SQLResult, SQLStore, SQLStoreParameters } from "./sqlstore.js";
|
|
4
|
-
/**
|
|
5
|
-
*
|
|
6
|
-
*/
|
|
7
|
-
export declare class PostgresParameters extends SQLStoreParameters {
|
|
8
|
-
/**
|
|
9
|
-
* @default true
|
|
10
|
-
*/
|
|
11
|
-
usePool?: boolean;
|
|
12
|
-
/**
|
|
13
|
-
* By default use environment variables
|
|
14
|
-
*/
|
|
15
|
-
postgresqlServer?: ClientConfig | PoolConfig;
|
|
16
|
-
/**
|
|
17
|
-
* Auto create table if not exists
|
|
18
|
-
* @default true
|
|
19
|
-
*/
|
|
20
|
-
autoCreateTable?: boolean;
|
|
21
|
-
/**
|
|
22
|
-
* View name prefix
|
|
23
|
-
*/
|
|
24
|
-
viewPrefix?: string;
|
|
25
|
-
/**
|
|
26
|
-
* Regexp of models to include
|
|
27
|
-
*
|
|
28
|
-
* @default [".*"]
|
|
29
|
-
*/
|
|
30
|
-
views?: string[];
|
|
31
|
-
constructor(params: any, store: PostgresStore);
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Store data within PostgreSQL with JSONB
|
|
35
|
-
*
|
|
36
|
-
* The table should be created before with
|
|
37
|
-
|
|
38
|
-
* ```sql
|
|
39
|
-
* CREATE TABLE IF NOT EXISTS ${tableName}
|
|
40
|
-
* (
|
|
41
|
-
* uuid uuid NOT NULL,
|
|
42
|
-
* data jsonb,
|
|
43
|
-
* CONSTRAINT ${tableName}_pkey PRIMARY KEY (uuid)
|
|
44
|
-
* );
|
|
45
|
-
* ```
|
|
46
|
-
*
|
|
47
|
-
* @WebdaModda
|
|
48
|
-
*/
|
|
49
|
-
export declare class PostgresStore<T extends CoreModel = CoreModel, K extends PostgresParameters = PostgresParameters> extends SQLStore<T, K> {
|
|
50
|
-
client: pg.Client | pg.Pool;
|
|
51
|
-
/**
|
|
52
|
-
* @override
|
|
53
|
-
*/
|
|
54
|
-
loadParameters(params: any): PostgresParameters;
|
|
55
|
-
/**
|
|
56
|
-
* @override
|
|
57
|
-
*/
|
|
58
|
-
init(): Promise<this>;
|
|
59
|
-
/**
|
|
60
|
-
* Ensure your table exists
|
|
61
|
-
*/
|
|
62
|
-
checkTable(): Promise<void>;
|
|
63
|
-
/**
|
|
64
|
-
* Return the postgresql client
|
|
65
|
-
* @returns
|
|
66
|
-
*/
|
|
67
|
-
getClient(): pg.Client | pg.Pool;
|
|
68
|
-
/**
|
|
69
|
-
* Execute a query on the server
|
|
70
|
-
*
|
|
71
|
-
* @param query
|
|
72
|
-
* @returns
|
|
73
|
-
*/
|
|
74
|
-
executeQuery(query: string, values?: any[]): Promise<SQLResult<T>>;
|
|
75
|
-
/**
|
|
76
|
-
* Create views for each models
|
|
77
|
-
*
|
|
78
|
-
* @param [prefix=""] prefix to add to the view name
|
|
79
|
-
* @param [skips=[]] list of models to skip
|
|
80
|
-
*/
|
|
81
|
-
createViews(): Promise<void>;
|
|
82
|
-
/**
|
|
83
|
-
* @override
|
|
84
|
-
*/
|
|
85
|
-
mapExpressionAttribute(attribute: string[]): string;
|
|
86
|
-
/**
|
|
87
|
-
* @override
|
|
88
|
-
*/
|
|
89
|
-
_patch(object: any, uid: string, itemWriteCondition?: any, itemWriteConditionField?: string): Promise<any>;
|
|
90
|
-
/**
|
|
91
|
-
* @override
|
|
92
|
-
*/
|
|
93
|
-
_removeAttribute(uuid: string, attribute: string, itemWriteCondition?: any, itemWriteConditionField?: string): Promise<void>;
|
|
94
|
-
/**
|
|
95
|
-
* @override
|
|
96
|
-
*/
|
|
97
|
-
getQueryCondition(itemWriteCondition: any, itemWriteConditionField: string, params: any[]): string;
|
|
98
|
-
/**
|
|
99
|
-
* @override
|
|
100
|
-
*/
|
|
101
|
-
_incrementAttributes(uid: string, params: {
|
|
102
|
-
property: string;
|
|
103
|
-
value: number;
|
|
104
|
-
}[], updateDate: Date): Promise<any>;
|
|
105
|
-
/**
|
|
106
|
-
* @override
|
|
107
|
-
*/
|
|
108
|
-
_upsertItemToCollection(uuid: string, attribute: string, item: any, index: number, itemWriteCondition: any, itemWriteConditionField: string, updateDate: Date): Promise<any>;
|
|
109
|
-
/**
|
|
110
|
-
* @override
|
|
111
|
-
*/
|
|
112
|
-
_deleteItemFromCollection(uuid: string, attribute: string, index: number, itemWriteCondition: any, itemWriteConditionField: string, updateDate: Date): Promise<any>;
|
|
113
|
-
}
|
|
114
|
-
export default PostgresStore;
|
|
115
|
-
//# sourceMappingURL=postgresstore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgresstore.d.ts","sourceRoot":"","sources":["../src/postgresstore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAuE,MAAM,aAAa,CAAC;AAE7G,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAarE;;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;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;gBAEL,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa;CAO9C;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAa,CACxB,CAAC,SAAS,SAAS,GAAG,SAAS,EAC/B,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,CACjD,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACtB,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;IAE5B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,GAAG;IAI1B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B;;OAEG;IACG,UAAU;IAahB;;;OAGG;IACH,SAAS;IAIT;;;;;OAKG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAS5E;;;;;OAKG;IACG,WAAW;IA6DjB;;OAEG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM;IAInD;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,GAAG,EAAE,uBAAuB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAYhH;;OAEG;IACG,gBAAgB,CACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,GAAG,EACxB,uBAAuB,CAAC,EAAE,MAAM,GAC/B,OAAO,CAAC,IAAI,CAAC;IAgBhB;;OAEG;IACH,iBAAiB,CAAC,kBAAkB,EAAE,GAAG,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;IAMzF;;OAEG;IACG,oBAAoB,CACxB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,EAC7C,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,GAAG,CAAC;IAkBf;;OAEG;IACG,uBAAuB,CAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,GAAG,EACvB,uBAAuB,EAAE,MAAM,EAC/B,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,GAAG,CAAC;IAyBf;;OAEG;IACG,yBAAyB,CAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,GAAG,EACvB,uBAAuB,EAAE,MAAM,EAC/B,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,GAAG,CAAC;CAkBhB;AAED,eAAe,aAAa,CAAC"}
|
package/lib/postgresstore.js
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
import { RegExpStringValidator, StoreNotFoundError, UpdateConditionFailError } from "@webda/core";
|
|
2
|
-
import pg from "pg";
|
|
3
|
-
import { SQLStore, SQLStoreParameters } from "./sqlstore.js";
|
|
4
|
-
/*
|
|
5
|
-
* Ideas:
|
|
6
|
-
* - Make views for each models to have a better query: https://dba.stackexchange.com/questions/151838/postgresql-json-column-to-view
|
|
7
|
-
* - CREATE VIEW my_view AS SELECT uuid,data->>'status' as status from table;
|
|
8
|
-
* - could auto resolve FK
|
|
9
|
-
* - Use STORED generated model to define FK: https://stackoverflow.com/questions/24489647/json-foreign-keys-in-postgresql
|
|
10
|
-
* - FKs should be defined based on relationship
|
|
11
|
-
* - Define colums dynamically based on the schema -> benchmark to see if it is useful
|
|
12
|
-
* - Allow to define indexes on fields
|
|
13
|
-
*/
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
*/
|
|
17
|
-
export class PostgresParameters extends SQLStoreParameters {
|
|
18
|
-
constructor(params, store) {
|
|
19
|
-
super(params, store);
|
|
20
|
-
this.autoCreateTable ?? (this.autoCreateTable = true);
|
|
21
|
-
this.usePool ?? (this.usePool = false);
|
|
22
|
-
this.viewPrefix ?? (this.viewPrefix = "");
|
|
23
|
-
this.views ?? (this.views = ["regex:.*"]);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Store data within PostgreSQL with JSONB
|
|
28
|
-
*
|
|
29
|
-
* The table should be created before with
|
|
30
|
-
|
|
31
|
-
* ```sql
|
|
32
|
-
* CREATE TABLE IF NOT EXISTS ${tableName}
|
|
33
|
-
* (
|
|
34
|
-
* uuid uuid NOT NULL,
|
|
35
|
-
* data jsonb,
|
|
36
|
-
* CONSTRAINT ${tableName}_pkey PRIMARY KEY (uuid)
|
|
37
|
-
* );
|
|
38
|
-
* ```
|
|
39
|
-
*
|
|
40
|
-
* @WebdaModda
|
|
41
|
-
*/
|
|
42
|
-
export class PostgresStore extends SQLStore {
|
|
43
|
-
/**
|
|
44
|
-
* @override
|
|
45
|
-
*/
|
|
46
|
-
loadParameters(params) {
|
|
47
|
-
return new PostgresParameters(params, this);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* @override
|
|
51
|
-
*/
|
|
52
|
-
async init() {
|
|
53
|
-
if (this.parameters.usePool) {
|
|
54
|
-
this.client = new pg.Pool(this.parameters.postgresqlServer);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
this.client = new pg.Client(this.parameters.postgresqlServer);
|
|
58
|
-
}
|
|
59
|
-
await this.client.connect();
|
|
60
|
-
await this.checkTable();
|
|
61
|
-
await super.init();
|
|
62
|
-
return this;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Ensure your table exists
|
|
66
|
-
*/
|
|
67
|
-
async checkTable() {
|
|
68
|
-
if (!this.parameters.autoCreateTable) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
this.log("DEBUG", `CREATE TABLE IF NOT EXISTS ${this.parameters.table} (uuid VARCHAR(255) NOT NULL, data jsonb, CONSTRAINT ${this.parameters.table}_pkey PRIMARY KEY (uuid))`);
|
|
72
|
-
await this.client.query(`CREATE TABLE IF NOT EXISTS ${this.parameters.table} (uuid VARCHAR(255) NOT NULL, data jsonb, CONSTRAINT ${this.parameters.table}_pkey PRIMARY KEY (uuid))`);
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Return the postgresql client
|
|
76
|
-
* @returns
|
|
77
|
-
*/
|
|
78
|
-
getClient() {
|
|
79
|
-
return this.client;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Execute a query on the server
|
|
83
|
-
*
|
|
84
|
-
* @param query
|
|
85
|
-
* @returns
|
|
86
|
-
*/
|
|
87
|
-
async executeQuery(query, values = []) {
|
|
88
|
-
this.log("DEBUG", "Query", query);
|
|
89
|
-
const res = await this.client.query(query, values);
|
|
90
|
-
return {
|
|
91
|
-
rows: res.rows.map(r => this.initModel(r.data)),
|
|
92
|
-
rowCount: res.rowCount
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Create views for each models
|
|
97
|
-
*
|
|
98
|
-
* @param [prefix=""] prefix to add to the view name
|
|
99
|
-
* @param [skips=[]] list of models to skip
|
|
100
|
-
*/
|
|
101
|
-
async createViews() {
|
|
102
|
-
// CREATE VIEW my_view AS SELECT uuid,data->>'status' as status from table;
|
|
103
|
-
const webda = this.getWebda();
|
|
104
|
-
const models = webda.getModels();
|
|
105
|
-
const app = webda.getApplication();
|
|
106
|
-
const validator = new RegExpStringValidator(this.parameters.views);
|
|
107
|
-
for (const model of Object.values(models)) {
|
|
108
|
-
const store = webda.getModelStore(model);
|
|
109
|
-
if (!(store instanceof PostgresStore)) {
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
const fields = ["uuid"];
|
|
113
|
-
const schema = model.getSchema();
|
|
114
|
-
console.log("SCHEMA", schema, model.getIdentifier(false), validator.validate(model.getIdentifier(false)), this.parameters.views);
|
|
115
|
-
if (!schema || !validator.validate(model.getIdentifier(false))) {
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
const plural = webda.getApplication().getModelPlural(model.getIdentifier());
|
|
119
|
-
for (const field of Object.keys(schema.properties)) {
|
|
120
|
-
if (field === "uuid" || !field.match(/^[0-9a-zA-Z-_$]+$/)) {
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
let cast = "";
|
|
124
|
-
const type = schema.properties[field].type;
|
|
125
|
-
if (type === "number") {
|
|
126
|
-
cast = "::bigint";
|
|
127
|
-
}
|
|
128
|
-
else if (type === "boolean") {
|
|
129
|
-
cast = "::boolean";
|
|
130
|
-
}
|
|
131
|
-
else if (type === "string") {
|
|
132
|
-
cast = "::text";
|
|
133
|
-
}
|
|
134
|
-
else if (type === "array") {
|
|
135
|
-
cast = "::jsonb";
|
|
136
|
-
}
|
|
137
|
-
else if (type === "object") {
|
|
138
|
-
cast = "::jsonb";
|
|
139
|
-
}
|
|
140
|
-
fields.push(`(data->>'${field}')${cast} as ${field}`);
|
|
141
|
-
}
|
|
142
|
-
let query = `CREATE OR REPLACE VIEW ${this.parameters.viewPrefix}${plural} AS SELECT ${fields.join(",")} FROM ${store.getParameters().table}`;
|
|
143
|
-
if (store.handleModel(model) > 0) {
|
|
144
|
-
query += ` WHERE (data#>>'{__types}')::jsonb ? '${app.getShortId(app.getModelName(model))}'`;
|
|
145
|
-
}
|
|
146
|
-
try {
|
|
147
|
-
this.log("INFO", "Dropping view");
|
|
148
|
-
await store.getClient().query(`DROP VIEW IF EXISTS ${this.parameters.viewPrefix}${plural}`);
|
|
149
|
-
this.log("INFO", query);
|
|
150
|
-
await store.getClient().query(query);
|
|
151
|
-
}
|
|
152
|
-
catch (err) {
|
|
153
|
-
this.log("ERROR", err);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* @override
|
|
159
|
-
*/
|
|
160
|
-
mapExpressionAttribute(attribute) {
|
|
161
|
-
return `data#>>'{${attribute.join(",")}}'`;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* @override
|
|
165
|
-
*/
|
|
166
|
-
async _patch(object, uid, itemWriteCondition, itemWriteConditionField) {
|
|
167
|
-
let query = `UPDATE ${this.parameters.table} SET data = data || $1::jsonb WHERE uuid = $2`;
|
|
168
|
-
const args = [JSON.stringify(object), this.getUuid(uid)];
|
|
169
|
-
if (itemWriteCondition) {
|
|
170
|
-
query += this.getQueryCondition(itemWriteCondition, itemWriteConditionField, args);
|
|
171
|
-
}
|
|
172
|
-
const res = await this.sqlQuery(query, args);
|
|
173
|
-
if (res.rowCount === 0) {
|
|
174
|
-
throw new UpdateConditionFailError(uid, itemWriteConditionField, itemWriteCondition);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* @override
|
|
179
|
-
*/
|
|
180
|
-
async _removeAttribute(uuid, attribute, itemWriteCondition, itemWriteConditionField) {
|
|
181
|
-
let query = `UPDATE ${this.parameters.table} SET data = data - $1 WHERE uuid = $2`;
|
|
182
|
-
const args = [attribute, this.getUuid(uuid)];
|
|
183
|
-
if (itemWriteCondition) {
|
|
184
|
-
query += this.getQueryCondition(itemWriteCondition, itemWriteConditionField, args);
|
|
185
|
-
}
|
|
186
|
-
const res = await this.sqlQuery(query, args);
|
|
187
|
-
if (res.rowCount === 0) {
|
|
188
|
-
if (itemWriteCondition) {
|
|
189
|
-
throw new UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
throw new StoreNotFoundError(uuid, this.getName());
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* @override
|
|
198
|
-
*/
|
|
199
|
-
getQueryCondition(itemWriteCondition, itemWriteConditionField, params) {
|
|
200
|
-
const condition = itemWriteCondition instanceof Date ? itemWriteCondition.toISOString() : itemWriteCondition;
|
|
201
|
-
params.push(condition);
|
|
202
|
-
return ` AND data->>'${itemWriteConditionField}'=$${params.length}`;
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* @override
|
|
206
|
-
*/
|
|
207
|
-
async _incrementAttributes(uid, params, updateDate) {
|
|
208
|
-
let data = "data";
|
|
209
|
-
const args = [this.getUuid(uid)];
|
|
210
|
-
params.forEach((p, index) => {
|
|
211
|
-
args.push(p.value);
|
|
212
|
-
data = `jsonb_set(${data}, '{${p.property}}', (COALESCE(data->>'${p.property}','0')::int + $${index + 2})::text::jsonb)::jsonb`;
|
|
213
|
-
});
|
|
214
|
-
const query = `UPDATE ${this.parameters.table} SET data = jsonb_set(${data}, '{_lastUpdate}', '"${updateDate.toISOString()}"'::jsonb) WHERE uuid = $1`;
|
|
215
|
-
const res = await this.sqlQuery(query, args);
|
|
216
|
-
if (res.rowCount === 0) {
|
|
217
|
-
throw new StoreNotFoundError(uid, this.getName());
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* @override
|
|
222
|
-
*/
|
|
223
|
-
async _upsertItemToCollection(uuid, attribute, item, index, itemWriteCondition, itemWriteConditionField, updateDate) {
|
|
224
|
-
let query = `UPDATE ${this.parameters.table} SET data = jsonb_set(jsonb_set(data::jsonb, array['${attribute}'],`;
|
|
225
|
-
const args = [this.getUuid(uuid)];
|
|
226
|
-
if (index === undefined) {
|
|
227
|
-
query += `COALESCE((data->'${attribute}')::jsonb, '[]'::jsonb) || '[${JSON.stringify(item)}]'::jsonb)::jsonb`;
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
query += `jsonb_set(COALESCE((data->'${attribute}')::jsonb, '[]'::jsonb), '{${index}}', '${JSON.stringify(item)}'::jsonb)::jsonb)`;
|
|
231
|
-
}
|
|
232
|
-
query += `, '{_lastUpdate}', '"${updateDate.toISOString()}"'::jsonb) WHERE uuid = $1`;
|
|
233
|
-
if (itemWriteCondition) {
|
|
234
|
-
args.push(itemWriteCondition);
|
|
235
|
-
query += ` AND (data#>>'{${attribute}, ${index}}')::jsonb->>'${itemWriteConditionField}'=$${args.length}`;
|
|
236
|
-
}
|
|
237
|
-
const res = await this.sqlQuery(query, args);
|
|
238
|
-
if (res.rowCount === 0) {
|
|
239
|
-
if (itemWriteCondition) {
|
|
240
|
-
throw new UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
throw new StoreNotFoundError(uuid, this.getName());
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* @override
|
|
249
|
-
*/
|
|
250
|
-
async _deleteItemFromCollection(uuid, attribute, index, itemWriteCondition, itemWriteConditionField, updateDate) {
|
|
251
|
-
let query = `UPDATE ${this.parameters.table} SET data = jsonb_set(jsonb_set(data::jsonb, array['${attribute}'], COALESCE(`;
|
|
252
|
-
const args = [this.getUuid(uuid)];
|
|
253
|
-
query += `((data->'${attribute}')::jsonb - ${index})`;
|
|
254
|
-
query += `, '[]'::jsonb))::jsonb, '{_lastUpdate}', '"${updateDate.toISOString()}"'::jsonb) WHERE uuid = $1`;
|
|
255
|
-
if (itemWriteCondition) {
|
|
256
|
-
args.push(itemWriteCondition);
|
|
257
|
-
query += ` AND (data#>>'{${attribute}, ${index}}')::jsonb->>'${itemWriteConditionField}'=$2`;
|
|
258
|
-
}
|
|
259
|
-
const res = await this.sqlQuery(query, args);
|
|
260
|
-
if (res.rowCount === 0) {
|
|
261
|
-
if (itemWriteCondition) {
|
|
262
|
-
throw new UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
throw new StoreNotFoundError(uuid, this.getName());
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
export default PostgresStore;
|
|
271
|
-
//# sourceMappingURL=postgresstore.js.map
|
package/lib/postgresstore.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgresstore.js","sourceRoot":"","sources":["../src/postgresstore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Ident } from "@webda/core";
|
|
2
|
-
import { StoreTest } from "@webda/core/lib/stores/store.spec.js";
|
|
3
|
-
import PostgresStore from "./postgresstore.js";
|
|
4
|
-
export declare class PostgresTest extends StoreTest<PostgresStore> {
|
|
5
|
-
getIdentStore(): Promise<PostgresStore<any>>;
|
|
6
|
-
getUserStore(): Promise<PostgresStore<any>>;
|
|
7
|
-
getModelClass(): typeof Ident;
|
|
8
|
-
deleteConcurrent(): Promise<void>;
|
|
9
|
-
createTable(): Promise<void>;
|
|
10
|
-
cov(): Promise<void>;
|
|
11
|
-
stoppedPostgres(): Promise<void>;
|
|
12
|
-
createViews(): Promise<void>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=postgresstore.spec.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgresstore.spec.d.ts","sourceRoot":"","sources":["../src/postgresstore.spec.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,EAAS,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAG9D,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAc5C,qBACa,YAAa,SAAQ,SAAS,CAAC,aAAa,CAAC;IAClD,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAY5C,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAYjD,aAAa;IAKP,gBAAgB;IAKhB,WAAW;IAuBX,GAAG;IAaH,eAAe;IAUf,WAAW;CA4BlB"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import { suite, test } from "@testdeck/mocha";
|
|
8
|
-
import { Ident } from "@webda/core";
|
|
9
|
-
import { StoreTest } from "@webda/core/lib/stores/store.spec.js";
|
|
10
|
-
import * as assert from "assert";
|
|
11
|
-
import pg from "pg";
|
|
12
|
-
import PostgresStore from "./postgresstore.js";
|
|
13
|
-
const params = {
|
|
14
|
-
database: "webda.io",
|
|
15
|
-
postgresqlServer: {
|
|
16
|
-
host: "localhost",
|
|
17
|
-
user: "webda.io",
|
|
18
|
-
database: "webda.io",
|
|
19
|
-
password: "webda.io",
|
|
20
|
-
statement_timeout: 60000,
|
|
21
|
-
max: 2
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
let PostgresTest = class PostgresTest extends StoreTest {
|
|
25
|
-
async getIdentStore() {
|
|
26
|
-
return this.addService(PostgresStore, {
|
|
27
|
-
...params,
|
|
28
|
-
asyncDelete: true,
|
|
29
|
-
table: "idents",
|
|
30
|
-
model: "Webda/Ident"
|
|
31
|
-
}, "idents");
|
|
32
|
-
}
|
|
33
|
-
async getUserStore() {
|
|
34
|
-
return this.addService(PostgresStore, {
|
|
35
|
-
...params,
|
|
36
|
-
table: "users",
|
|
37
|
-
model: "Webda/User"
|
|
38
|
-
}, "users");
|
|
39
|
-
}
|
|
40
|
-
getModelClass() {
|
|
41
|
-
return Ident;
|
|
42
|
-
}
|
|
43
|
-
async deleteConcurrent() {
|
|
44
|
-
return super.deleteConcurrent();
|
|
45
|
-
}
|
|
46
|
-
async createTable() {
|
|
47
|
-
const client = new pg.Client({
|
|
48
|
-
host: "localhost",
|
|
49
|
-
user: "webda.io",
|
|
50
|
-
database: "webda.io",
|
|
51
|
-
password: "webda.io"
|
|
52
|
-
});
|
|
53
|
-
try {
|
|
54
|
-
await client.connect();
|
|
55
|
-
await client.query("DROP TABLE IF EXISTS create_test");
|
|
56
|
-
const store = this.getService("idents");
|
|
57
|
-
store.getParameters().table = "create_test";
|
|
58
|
-
store.getParameters().autoCreateTable = true;
|
|
59
|
-
await store.init();
|
|
60
|
-
await store.save({ test: 1 });
|
|
61
|
-
const res = await store.getClient().query("SELECT * FROM create_test");
|
|
62
|
-
assert.strictEqual(res.rowCount, 1);
|
|
63
|
-
}
|
|
64
|
-
finally {
|
|
65
|
-
await client.end();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
async cov() {
|
|
69
|
-
const store = this.identStore;
|
|
70
|
-
store.getParameters().usePool = false;
|
|
71
|
-
await store.init();
|
|
72
|
-
await store.query("test = TRUE");
|
|
73
|
-
//assert.rejects(() => store._find({}, 12, 10), /Query should be a string/);
|
|
74
|
-
assert.strictEqual(store.getClient(), store.client);
|
|
75
|
-
// Test checkTable
|
|
76
|
-
store.getParameters().autoCreateTable = false;
|
|
77
|
-
await store.checkTable();
|
|
78
|
-
}
|
|
79
|
-
async stoppedPostgres() {
|
|
80
|
-
const obj = await this.identStore.save({
|
|
81
|
-
test: 0
|
|
82
|
-
});
|
|
83
|
-
await obj.patch({ test: 1 });
|
|
84
|
-
await new Promise(resolve => setTimeout(resolve, 20000));
|
|
85
|
-
await obj.patch({ test: 2 });
|
|
86
|
-
}
|
|
87
|
-
async createViews() {
|
|
88
|
-
const store = this.identStore;
|
|
89
|
-
let info = await store.getClient().query(`SELECT 'DROP VIEW ' || table_name || ';'
|
|
90
|
-
FROM information_schema.views
|
|
91
|
-
WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
|
|
92
|
-
AND table_name !~ '^pg_';`);
|
|
93
|
-
store.getParameters().viewPrefix = "view_";
|
|
94
|
-
// Execute all the drop views
|
|
95
|
-
await store.createViews();
|
|
96
|
-
info = await store
|
|
97
|
-
.getClient()
|
|
98
|
-
.query("SELECT table_name FROM information_schema.views WHERE table_schema NOT IN ('pg_catalog', 'information_schema')");
|
|
99
|
-
assert.deepStrictEqual(info.rows.sort((a, b) => a.table_name.localeCompare(b.table_name)), [
|
|
100
|
-
{ table_name: "view_idents" },
|
|
101
|
-
{ table_name: "view_myidents" },
|
|
102
|
-
{ table_name: "view_mysimpleusers" },
|
|
103
|
-
{ table_name: "view_simpleusers" },
|
|
104
|
-
{ table_name: "view_testidents" },
|
|
105
|
-
{ table_name: "view_users" }
|
|
106
|
-
]);
|
|
107
|
-
store.getParameters().viewPrefix = "";
|
|
108
|
-
await store.createViews();
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
__decorate([
|
|
112
|
-
test
|
|
113
|
-
], PostgresTest.prototype, "deleteConcurrent", null);
|
|
114
|
-
__decorate([
|
|
115
|
-
test
|
|
116
|
-
], PostgresTest.prototype, "createTable", null);
|
|
117
|
-
__decorate([
|
|
118
|
-
test
|
|
119
|
-
], PostgresTest.prototype, "cov", null);
|
|
120
|
-
__decorate([
|
|
121
|
-
test
|
|
122
|
-
], PostgresTest.prototype, "stoppedPostgres", null);
|
|
123
|
-
__decorate([
|
|
124
|
-
test
|
|
125
|
-
], PostgresTest.prototype, "createViews", null);
|
|
126
|
-
PostgresTest = __decorate([
|
|
127
|
-
suite
|
|
128
|
-
], PostgresTest);
|
|
129
|
-
export { PostgresTest };
|
|
130
|
-
//# sourceMappingURL=postgresstore.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgresstore.spec.js","sourceRoot":"","sources":["../src/postgresstore.spec.ts"],"names":[],"mappings":"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"}
|