pogi 3.0.0-beta → 3.0.0-beta2
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/bin/generateInterface.js +1 -1
- package/lib/connectionOptions.d.ts +10 -0
- package/lib/index.d.ts +1 -1
- package/lib/pgConverters.d.ts +9 -10
- package/lib/pgConverters.js +44 -39
- package/lib/pgConverters.js.map +1 -1
- package/lib/{src/pgConverters.test.d.ts → pgConverters.test.d.ts} +0 -0
- package/lib/{src/pgConverters.test.js → pgConverters.test.js} +0 -0
- package/lib/pgConverters.test.js.map +1 -0
- package/lib/pgDb.d.ts +18 -27
- package/lib/pgDb.js +59 -62
- package/lib/pgDb.js.map +1 -1
- package/lib/{src/pgDb.test.d.ts → pgDb.test.d.ts} +0 -0
- package/lib/{src/pgDb.test.js → pgDb.test.js} +0 -0
- package/lib/pgDb.test.js.map +1 -0
- package/lib/pgDbInterface.d.ts +53 -0
- package/lib/{src/pgDbInterface.js → pgDbInterface.js} +0 -0
- package/lib/pgDbInterface.js.map +1 -0
- package/lib/pgDbOperators.d.ts +3 -3
- package/lib/pgDbOperators.js +4 -7
- package/lib/pgDbOperators.js.map +1 -1
- package/lib/{src/pgDbOperators.test.d.ts → pgDbOperators.test.d.ts} +0 -0
- package/lib/{src/pgDbOperators.test.js → pgDbOperators.test.js} +0 -0
- package/lib/pgDbOperators.test.js.map +1 -0
- package/lib/pgSchema.d.ts +10 -9
- package/lib/pgSchema.js.map +1 -1
- package/lib/{src/pgSchemaInterface.d.ts → pgSchemaInterface.d.ts} +0 -0
- package/lib/{src/pgSchemaInterface.js → pgSchemaInterface.js} +0 -0
- package/lib/pgSchemaInterface.js.map +1 -0
- package/lib/pgTable.d.ts +15 -40
- package/lib/pgTable.js +54 -54
- package/lib/pgTable.js.map +1 -1
- package/lib/{src/pgTableInterface.d.ts → pgTableInterface.d.ts} +3 -3
- package/lib/{src/pgTableInterface.js → pgTableInterface.js} +0 -0
- package/lib/pgTableInterface.js.map +1 -0
- package/lib/pgUtils.d.ts +13 -5
- package/lib/pgUtils.js +116 -23
- package/lib/pgUtils.js.map +1 -1
- package/lib/queryAble.d.ts +16 -64
- package/lib/queryAble.js +43 -42
- package/lib/queryAble.js.map +1 -1
- package/lib/{src/queryAbleInterface.d.ts → queryAbleInterface.d.ts} +2 -6
- package/lib/{src/queryAbleInterface.js → queryAbleInterface.js} +0 -0
- package/lib/queryAbleInterface.js.map +1 -0
- package/lib/queryWhere.d.ts +2 -2
- package/lib/queryWhere.js +19 -23
- package/lib/queryWhere.js.map +1 -1
- package/package.json +2 -1
- package/src/connectionOptions.ts +9 -7
- package/src/index.ts +1 -1
- package/src/pgDb.ts +3 -3
- package/src/pgDbInterface.ts +2 -2
- package/src/pgTable.ts +6 -6
- package/src/pgTableInterface.ts +20 -20
- package/src/pgUtils.ts +16 -6
- package/src/queryAbleInterface.ts +2 -6
- package/tsconfig.json +3 -5
- package/lib/src/bin/generateInterface.d.ts +0 -1
- package/lib/src/bin/generateInterface.js +0 -53
- package/lib/src/bin/generateInterface.js.map +0 -1
- package/lib/src/connectionOptions.d.ts +0 -34
- package/lib/src/connectionOptions.js +0 -3
- package/lib/src/connectionOptions.js.map +0 -1
- package/lib/src/index.d.ts +0 -6
- package/lib/src/index.js +0 -12
- package/lib/src/index.js.map +0 -1
- package/lib/src/pgConverters.d.ts +0 -9
- package/lib/src/pgConverters.js +0 -71
- package/lib/src/pgConverters.js.map +0 -1
- package/lib/src/pgConverters.test.js.map +0 -1
- package/lib/src/pgDb.d.ts +0 -79
- package/lib/src/pgDb.js +0 -764
- package/lib/src/pgDb.js.map +0 -1
- package/lib/src/pgDb.test.js.map +0 -1
- package/lib/src/pgDbInterface.js.map +0 -1
- package/lib/src/pgDbLogger.d.ts +0 -5
- package/lib/src/pgDbLogger.js +0 -3
- package/lib/src/pgDbLogger.js.map +0 -1
- package/lib/src/pgDbOperators.d.ts +0 -113
- package/lib/src/pgDbOperators.js +0 -41
- package/lib/src/pgDbOperators.js.map +0 -1
- package/lib/src/pgDbOperators.test.js.map +0 -1
- package/lib/src/pgSchema.d.ts +0 -17
- package/lib/src/pgSchema.js +0 -16
- package/lib/src/pgSchema.js.map +0 -1
- package/lib/src/pgSchemaInterface.js.map +0 -1
- package/lib/src/pgTable.d.ts +0 -105
- package/lib/src/pgTable.js +0 -322
- package/lib/src/pgTable.js.map +0 -1
- package/lib/src/pgTableInterface.js.map +0 -1
- package/lib/src/pgUtils.d.ts +0 -41
- package/lib/src/pgUtils.js +0 -282
- package/lib/src/pgUtils.js.map +0 -1
- package/lib/src/queryAble.d.ts +0 -40
- package/lib/src/queryAble.js +0 -338
- package/lib/src/queryAble.js.map +0 -1
- package/lib/src/queryAbleInterface.js.map +0 -1
- package/lib/src/queryWhere.d.ts +0 -8
- package/lib/src/queryWhere.js +0 -245
- package/lib/src/queryWhere.js.map +0 -1
package/lib/src/queryAble.js
DELETED
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.QueryAble = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const pgUtils_1 = require("./pgUtils");
|
|
6
|
-
const util = require("util");
|
|
7
|
-
const QueryStream = require("pg-query-stream");
|
|
8
|
-
const through = require("through");
|
|
9
|
-
let defaultLogger = {
|
|
10
|
-
log: () => { },
|
|
11
|
-
error: () => { }
|
|
12
|
-
};
|
|
13
|
-
class QueryAble {
|
|
14
|
-
setLogger(logger) {
|
|
15
|
-
this.logger = logger;
|
|
16
|
-
}
|
|
17
|
-
getLogger(useConsoleAsDefault = false) {
|
|
18
|
-
return this.logger || this.schema && this.schema.logger || this.db.logger || (useConsoleAsDefault ? console : defaultLogger);
|
|
19
|
-
}
|
|
20
|
-
run(sql, params, options) {
|
|
21
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
22
|
-
return this.query(sql, params, options);
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
query(sql, params, options) {
|
|
26
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
27
|
-
let connection = this.db.connection;
|
|
28
|
-
let logger = (options && options.logger || this.getLogger(false));
|
|
29
|
-
return this.internalQuery({ connection, sql, params, logger });
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
internalQuery(options) {
|
|
33
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
34
|
-
if (this.db.needToFixConnectionForListen()) {
|
|
35
|
-
yield this.db.runRestartConnectionForListen();
|
|
36
|
-
}
|
|
37
|
-
let { connection, sql, params, logger } = options;
|
|
38
|
-
logger = logger || this.getLogger(false);
|
|
39
|
-
try {
|
|
40
|
-
if (params && !Array.isArray(params)) {
|
|
41
|
-
let p = pgUtils_1.pgUtils.processNamedParams(sql, params);
|
|
42
|
-
sql = p.sql;
|
|
43
|
-
params = p.params;
|
|
44
|
-
}
|
|
45
|
-
let query = (options === null || options === void 0 ? void 0 : options.rowMode) ? { text: sql, values: params, rowMode: 'array' } : { text: sql, values: params };
|
|
46
|
-
let res;
|
|
47
|
-
if (connection) {
|
|
48
|
-
logger.log('reused connection', sql, util.inspect(params, false, null), connection.processID);
|
|
49
|
-
res = yield connection.query(query);
|
|
50
|
-
yield this.checkAndFixOids(connection, res.fields);
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
connection = yield this.db.pool.connect();
|
|
54
|
-
logger.log('new connection', sql, util.inspect(params, false, null), connection.processID);
|
|
55
|
-
connection.on('error', QueryAble.connectionErrorListener);
|
|
56
|
-
res = yield connection.query(query);
|
|
57
|
-
yield this.checkAndFixOids(connection, res.fields);
|
|
58
|
-
connection.off('error', QueryAble.connectionErrorListener);
|
|
59
|
-
connection.release();
|
|
60
|
-
connection = null;
|
|
61
|
-
}
|
|
62
|
-
this.postProcessFields(res.rows, res.fields, logger);
|
|
63
|
-
return (options === null || options === void 0 ? void 0 : options.rowMode) ? { columns: (res.fields || []).map(f => f.name), rows: res.rows || [] } : res.rows;
|
|
64
|
-
}
|
|
65
|
-
catch (e) {
|
|
66
|
-
pgUtils_1.pgUtils.logError(logger, { error: e, sql, params, connection });
|
|
67
|
-
if (connection) {
|
|
68
|
-
try {
|
|
69
|
-
connection.release();
|
|
70
|
-
}
|
|
71
|
-
catch (e) {
|
|
72
|
-
logger.error('connection error', e.message);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
throw e;
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
queryAsRows(sql, params, options) {
|
|
80
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
81
|
-
let connection = this.db.connection;
|
|
82
|
-
let logger = (options && options.logger || this.getLogger(false));
|
|
83
|
-
return this.internalQuery({ connection, sql, params, logger, rowMode: true });
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
queryWithOnCursorCallback(sql, params, options, callback) {
|
|
87
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
88
|
-
if (this.db.needToFixConnectionForListen()) {
|
|
89
|
-
yield this.db.runRestartConnectionForListen();
|
|
90
|
-
}
|
|
91
|
-
let connection = this.db.connection;
|
|
92
|
-
let logger = this.getLogger(true);
|
|
93
|
-
let positionedParams;
|
|
94
|
-
try {
|
|
95
|
-
if (params && !Array.isArray(params)) {
|
|
96
|
-
let p = pgUtils_1.pgUtils.processNamedParams(sql, params);
|
|
97
|
-
sql = p.sql;
|
|
98
|
-
params = p.params;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
positionedParams = params;
|
|
102
|
-
}
|
|
103
|
-
let queryInternal = () => (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
104
|
-
this.getLogger(false).log(sql, util.inspect(positionedParams, false, null), connection.processID);
|
|
105
|
-
let fieldsToFix;
|
|
106
|
-
let isFirst = true;
|
|
107
|
-
let query = new QueryStream(sql, positionedParams);
|
|
108
|
-
let stream = connection.query(query);
|
|
109
|
-
yield new Promise((resolve, reject) => {
|
|
110
|
-
query.handleError = reject;
|
|
111
|
-
stream.on('data', (res) => {
|
|
112
|
-
try {
|
|
113
|
-
let fields = stream._result && stream._result.fields || stream.cursor._result && stream.cursor._result.fields;
|
|
114
|
-
if (isFirst) {
|
|
115
|
-
if (this.hasUnknownOids(fields)) {
|
|
116
|
-
fieldsToFix = fields;
|
|
117
|
-
stream.destroy();
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
isFirst = false;
|
|
121
|
-
}
|
|
122
|
-
this.postProcessFields([res], fields, this.getLogger(false));
|
|
123
|
-
if (callback(res)) {
|
|
124
|
-
stream.destroy();
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
catch (e) {
|
|
128
|
-
reject(e);
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
stream.on('close', resolve);
|
|
132
|
-
stream.on('error', reject);
|
|
133
|
-
});
|
|
134
|
-
if (fieldsToFix) {
|
|
135
|
-
yield this.checkAndFixOids(connection, fieldsToFix);
|
|
136
|
-
query = new QueryStream(sql, positionedParams);
|
|
137
|
-
stream = connection.query(query);
|
|
138
|
-
yield new Promise((resolve, reject) => {
|
|
139
|
-
query.handleError = reject;
|
|
140
|
-
stream.on('data', (res) => {
|
|
141
|
-
try {
|
|
142
|
-
let fields = stream._result && stream._result.fields || stream.cursor._result && stream.cursor._result.fields;
|
|
143
|
-
this.postProcessFields([res], fields, this.getLogger(false));
|
|
144
|
-
if (callback(res)) {
|
|
145
|
-
stream.destroy();
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
catch (e) {
|
|
149
|
-
reject(e);
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
stream.on('close', resolve);
|
|
153
|
-
stream.on('error', reject);
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
if (connection) {
|
|
158
|
-
yield queryInternal();
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
connection = yield this.db.pool.connect();
|
|
162
|
-
logger.log('new connection', sql, util.inspect(positionedParams, false, null), connection.processID);
|
|
163
|
-
connection.on('error', QueryAble.connectionErrorListener);
|
|
164
|
-
yield queryInternal();
|
|
165
|
-
connection.off('error', QueryAble.connectionErrorListener);
|
|
166
|
-
connection.release();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
catch (e) {
|
|
170
|
-
pgUtils_1.pgUtils.logError(logger, { error: e, sql, params, connection });
|
|
171
|
-
if (connection) {
|
|
172
|
-
try {
|
|
173
|
-
connection.release();
|
|
174
|
-
}
|
|
175
|
-
catch (e) {
|
|
176
|
-
logger.error('connection error', e.message);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
throw e;
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
queryAsStream(sql, params, options) {
|
|
184
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
185
|
-
if (this.db.needToFixConnectionForListen()) {
|
|
186
|
-
yield this.db.runRestartConnectionForListen();
|
|
187
|
-
}
|
|
188
|
-
let connection = this.db.connection;
|
|
189
|
-
let logger = (options && options.logger || this.getLogger(false));
|
|
190
|
-
let pgStream;
|
|
191
|
-
let queriable = this;
|
|
192
|
-
let isFirst = true;
|
|
193
|
-
let convertTypeFilter = through(function (data) {
|
|
194
|
-
try {
|
|
195
|
-
let fields = pgStream._result && pgStream._result.fields || pgStream.cursor._result && pgStream.cursor._result.fields;
|
|
196
|
-
if (isFirst) {
|
|
197
|
-
if (queriable.hasUnknownOids(fields)) {
|
|
198
|
-
throw new Error('[337] Query returns fields with unknown oid.');
|
|
199
|
-
}
|
|
200
|
-
isFirst = false;
|
|
201
|
-
}
|
|
202
|
-
queriable.postProcessFields([data], fields, queriable.db.pgdbTypeParsers);
|
|
203
|
-
this.emit('data', data);
|
|
204
|
-
}
|
|
205
|
-
catch (err) {
|
|
206
|
-
this.emit('error', err);
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
convertTypeFilter.on('error', (e) => {
|
|
210
|
-
if (connection) {
|
|
211
|
-
try {
|
|
212
|
-
connection.release();
|
|
213
|
-
}
|
|
214
|
-
catch (e) {
|
|
215
|
-
logger.error('connection error', e.message);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
connection = null;
|
|
219
|
-
pgUtils_1.pgUtils.logError(logger, { error: e, sql, params, connection });
|
|
220
|
-
});
|
|
221
|
-
let positionedParams;
|
|
222
|
-
try {
|
|
223
|
-
if (params && !Array.isArray(params)) {
|
|
224
|
-
let p = pgUtils_1.pgUtils.processNamedParams(sql, params);
|
|
225
|
-
sql = p.sql;
|
|
226
|
-
params = p.params;
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
positionedParams = params;
|
|
230
|
-
}
|
|
231
|
-
if (connection) {
|
|
232
|
-
logger.log(sql, util.inspect(positionedParams, false, null), connection.processID);
|
|
233
|
-
let query = new QueryStream(sql, positionedParams);
|
|
234
|
-
query.handleError = (err) => {
|
|
235
|
-
convertTypeFilter.emit('error', err);
|
|
236
|
-
};
|
|
237
|
-
pgStream = connection.query(query);
|
|
238
|
-
return pgStream.pipe(convertTypeFilter);
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
connection = yield this.db.pool.connect();
|
|
242
|
-
logger.log('new connection', sql, util.inspect(positionedParams, false, null), connection.processID);
|
|
243
|
-
connection.on('error', QueryAble.connectionErrorListener);
|
|
244
|
-
let query = new QueryStream(sql, positionedParams);
|
|
245
|
-
query.handleError = (err, _connection) => {
|
|
246
|
-
convertTypeFilter.emit('error', err);
|
|
247
|
-
};
|
|
248
|
-
pgStream = connection.query(query);
|
|
249
|
-
pgStream.on('close', () => {
|
|
250
|
-
if (connection) {
|
|
251
|
-
connection.off('error', QueryAble.connectionErrorListener);
|
|
252
|
-
connection.release();
|
|
253
|
-
}
|
|
254
|
-
connection = null;
|
|
255
|
-
});
|
|
256
|
-
pgStream.on('error', (e) => {
|
|
257
|
-
pgUtils_1.pgUtils.logError(logger, { error: e, sql, params: positionedParams, connection });
|
|
258
|
-
if (connection) {
|
|
259
|
-
connection.off('error', QueryAble.connectionErrorListener);
|
|
260
|
-
connection.release();
|
|
261
|
-
}
|
|
262
|
-
connection = null;
|
|
263
|
-
});
|
|
264
|
-
return pgStream.pipe(convertTypeFilter);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
catch (e) {
|
|
268
|
-
pgUtils_1.pgUtils.logError(logger, { error: e, sql, params: positionedParams, connection });
|
|
269
|
-
throw e;
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
queryOne(sql, params, options) {
|
|
274
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
275
|
-
let res = yield this.query(sql, params, options);
|
|
276
|
-
if (res.length > 1) {
|
|
277
|
-
let logger = (options && options.logger || this.getLogger(false));
|
|
278
|
-
let error = Error('More then one rows exists');
|
|
279
|
-
pgUtils_1.pgUtils.logError(logger, { error, sql, params, connection: this.db.connection });
|
|
280
|
-
throw error;
|
|
281
|
-
}
|
|
282
|
-
return res[0];
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
queryFirst(sql, params, options) {
|
|
286
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
287
|
-
let res = yield this.query(sql, params, options);
|
|
288
|
-
return res[0];
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
queryOneField(sql, params, options) {
|
|
292
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
293
|
-
let res = yield this.query(sql, params, options);
|
|
294
|
-
if (!res.length) {
|
|
295
|
-
return null;
|
|
296
|
-
}
|
|
297
|
-
let fieldName = Object.keys(res[0])[0];
|
|
298
|
-
if (res.length > 1) {
|
|
299
|
-
let logger = (options && options.logger || this.getLogger(false));
|
|
300
|
-
let error = Error('More then one field exists!');
|
|
301
|
-
pgUtils_1.pgUtils.logError(logger, { error, sql, params, connection: this.db.connection });
|
|
302
|
-
throw error;
|
|
303
|
-
}
|
|
304
|
-
return res.length == 1 ? res[0][fieldName] : null;
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
queryOneColumn(sql, params, options) {
|
|
308
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
309
|
-
let res = yield this.query(sql, params, options);
|
|
310
|
-
if (!res.length) {
|
|
311
|
-
return [];
|
|
312
|
-
}
|
|
313
|
-
let fieldName = Object.keys(res[0])[0];
|
|
314
|
-
return res.map(r => r[fieldName]);
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
postProcessFields(rows, fields, logger) {
|
|
318
|
-
pgUtils_1.pgUtils.postProcessResult(rows, fields, this.db.pgdbTypeParsers);
|
|
319
|
-
if (this.db.postProcessResult)
|
|
320
|
-
this.db.postProcessResult(rows, fields, logger);
|
|
321
|
-
}
|
|
322
|
-
checkAndFixOids(connection, fields) {
|
|
323
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
324
|
-
if (fields) {
|
|
325
|
-
let oidList = fields.map(field => field.dataTypeID);
|
|
326
|
-
return this.db.resetMissingParsers(connection, oidList);
|
|
327
|
-
}
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
hasUnknownOids(fields) {
|
|
331
|
-
let oidList = fields.map(field => field.dataTypeID);
|
|
332
|
-
let unknownOids = oidList.filter(oid => !this.db.knownOids[oid]);
|
|
333
|
-
return !!unknownOids.length;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
exports.QueryAble = QueryAble;
|
|
337
|
-
QueryAble.connectionErrorListener = () => { };
|
|
338
|
-
//# sourceMappingURL=queryAble.js.map
|
package/lib/src/queryAble.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queryAble.js","sourceRoot":"","sources":["../../src/queryAble.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queryAbleInterface.js","sourceRoot":"","sources":["../../src/queryAbleInterface.ts"],"names":[],"mappings":";;AAoDA,IAAI,aAAa,GAAG;IAChB,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;CACnB,CAAC"}
|
package/lib/src/queryWhere.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { FieldType } from "./pgDb";
|
|
2
|
-
declare function generateWhere(conditions: Record<string, any>, fieldTypes: {
|
|
3
|
-
[index: string]: FieldType;
|
|
4
|
-
}, tableName: string, placeholderOffset?: number, skipUndefined?: boolean): {
|
|
5
|
-
where: string;
|
|
6
|
-
params: Array<any>;
|
|
7
|
-
};
|
|
8
|
-
export default generateWhere;
|
package/lib/src/queryWhere.js
DELETED
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const pgDbOperators_1 = require("./pgDbOperators");
|
|
4
|
-
const pgDb_1 = require("./pgDb");
|
|
5
|
-
const _ = require("lodash");
|
|
6
|
-
const util = require("util");
|
|
7
|
-
const pgUtils_1 = require("./pgUtils");
|
|
8
|
-
function generateWhere(conditions, fieldTypes, tableName, placeholderOffset = 0, skipUndefined) {
|
|
9
|
-
let result = generate({
|
|
10
|
-
params: [],
|
|
11
|
-
predicates: [],
|
|
12
|
-
offset: placeholderOffset,
|
|
13
|
-
}, conditions, fieldTypes, tableName, skipUndefined);
|
|
14
|
-
return {
|
|
15
|
-
where: result.predicates.length > 0 ? ' WHERE ' + result.predicates.join(' AND ') : '',
|
|
16
|
-
params: result.params
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
function generate(result, conditions, fieldTypes, tableName, skipUndefined) {
|
|
20
|
-
_.each(conditions, (value, key) => {
|
|
21
|
-
let fieldAndOperator = parseKey(key);
|
|
22
|
-
if (value === undefined) {
|
|
23
|
-
if (skipUndefined === true)
|
|
24
|
-
return;
|
|
25
|
-
throw new Error('Invalid conditions! Field value undefined: "' + fieldAndOperator.field + '". Either delete the field, set it to null or use the options.skipUndefined parameter.');
|
|
26
|
-
}
|
|
27
|
-
else if (fieldAndOperator.field === 'or' || fieldAndOperator.field === 'and') {
|
|
28
|
-
result = handleOrAnd(result, fieldAndOperator, value, fieldTypes, tableName, skipUndefined);
|
|
29
|
-
}
|
|
30
|
-
else if (value === null) {
|
|
31
|
-
result = handleNullValue(result, fieldAndOperator, value);
|
|
32
|
-
}
|
|
33
|
-
else if (Array.isArray(value)) {
|
|
34
|
-
result = handleArrayValue(result, fieldAndOperator, value, fieldTypes);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
result = handleSingleValue(result, fieldAndOperator, value, fieldTypes, tableName);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
return result;
|
|
41
|
-
}
|
|
42
|
-
function handleOrAnd(result, fieldAndOperator, value, fieldTypes, tableName, skipUndefined) {
|
|
43
|
-
if (!Array.isArray(value)) {
|
|
44
|
-
value = [value];
|
|
45
|
-
}
|
|
46
|
-
let groupResult = _.reduce(value, (acc, v) => {
|
|
47
|
-
let subResult = generate({
|
|
48
|
-
params: [],
|
|
49
|
-
predicates: [],
|
|
50
|
-
offset: result.params.length + acc.offset
|
|
51
|
-
}, v, fieldTypes, tableName, skipUndefined);
|
|
52
|
-
acc.predicates.push('(' + subResult.predicates.join(' AND ') + ')');
|
|
53
|
-
acc.params = acc.params.concat(subResult.params);
|
|
54
|
-
acc.offset += subResult.params.length;
|
|
55
|
-
return acc;
|
|
56
|
-
}, {
|
|
57
|
-
params: [],
|
|
58
|
-
predicates: [],
|
|
59
|
-
offset: result.offset
|
|
60
|
-
});
|
|
61
|
-
result.params = result.params.concat(groupResult.params);
|
|
62
|
-
if (groupResult.predicates.length) {
|
|
63
|
-
if (fieldAndOperator.field === 'and') {
|
|
64
|
-
result.predicates.push(util.format('(%s)', groupResult.predicates.join(' AND ')));
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
result.predicates.push(util.format('(%s)', groupResult.predicates.join(' OR ')));
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return result;
|
|
71
|
-
}
|
|
72
|
-
function handleNullValue(result, fieldAndOperator, value) {
|
|
73
|
-
fieldAndOperator.operator = fieldAndOperator.operator === '=' ? 'IS' : 'IS NOT';
|
|
74
|
-
result.predicates.push(util.format('%s %s %s', fieldAndOperator.quotedField, fieldAndOperator.operator, value));
|
|
75
|
-
return result;
|
|
76
|
-
}
|
|
77
|
-
function handleArrayValue(result, fieldAndOperator, value, fieldTypes) {
|
|
78
|
-
if (fieldAndOperator.mutator) {
|
|
79
|
-
value = value.map((v) => fieldAndOperator.mutator(v));
|
|
80
|
-
}
|
|
81
|
-
let fieldType = fieldTypes[fieldAndOperator.field];
|
|
82
|
-
let position = '$' + (result.params.length + 1 + result.offset);
|
|
83
|
-
if (fieldType == pgDb_1.FieldType.JSON &&
|
|
84
|
-
['?|', '?&'].indexOf(fieldAndOperator.operator) != -1) {
|
|
85
|
-
result.params.push(value);
|
|
86
|
-
result.predicates.push(util.format('%s %s %s', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
|
|
87
|
-
return result;
|
|
88
|
-
}
|
|
89
|
-
else if (fieldType == pgDb_1.FieldType.JSON &&
|
|
90
|
-
['@>', '<@', '&&'].indexOf(fieldAndOperator.operator) != -1) {
|
|
91
|
-
result.params.push(JSON.stringify(value));
|
|
92
|
-
result.predicates.push(util.format('%s %s %s', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
|
|
93
|
-
return result;
|
|
94
|
-
}
|
|
95
|
-
else if ((!fieldType || fieldType == pgDb_1.FieldType.TIME) &&
|
|
96
|
-
['=', '<>', 'IN', 'NOT IN'].includes(fieldAndOperator.operator)) {
|
|
97
|
-
if (fieldAndOperator.operator === '=' || fieldAndOperator.operator === 'IN') {
|
|
98
|
-
fieldAndOperator.operator = '= ANY';
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
fieldAndOperator.operator = '<> ALL';
|
|
102
|
-
}
|
|
103
|
-
if (value.length === 0) {
|
|
104
|
-
throw new Error('Invalid conditions! empty array for field:"' + fieldAndOperator.field + '" and operator:"' + fieldAndOperator.operator + '"');
|
|
105
|
-
}
|
|
106
|
-
result.params.push(value
|
|
107
|
-
.map(v => (fieldType == pgDb_1.FieldType.TIME && !(v instanceof Date)) ? new Date(v) : v));
|
|
108
|
-
result.predicates.push(util.format('%s %s (%s)', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
|
|
109
|
-
return result;
|
|
110
|
-
}
|
|
111
|
-
else if (!fieldType && ['LIKE', 'ILIKE', 'SIMILAR TO', '~', '~*'].indexOf(fieldAndOperator.operator) != -1) {
|
|
112
|
-
result.params.push(value);
|
|
113
|
-
result.predicates.push(util.format('%s %s ANY(%s)', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
|
|
114
|
-
return result;
|
|
115
|
-
}
|
|
116
|
-
else if (!fieldType && ['NOT LIKE', 'NOT ILIKE', 'NOT SIMILAR TO', '!~', '!~*'].indexOf(fieldAndOperator.operator) != -1) {
|
|
117
|
-
result.params.push(value);
|
|
118
|
-
result.predicates.push(util.format('%s %s ALL(%s)', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
|
|
119
|
-
return result;
|
|
120
|
-
}
|
|
121
|
-
else if (fieldType == pgDb_1.FieldType.ARRAY &&
|
|
122
|
-
['=', '<>', '<', '>', '<=', '>=', '@>', '<@', '&&'].indexOf(fieldAndOperator.operator) != -1) {
|
|
123
|
-
result.params.push(value);
|
|
124
|
-
result.predicates.push(util.format('%s %s %s', fieldAndOperator.quotedField, fieldAndOperator.operator, position));
|
|
125
|
-
return result;
|
|
126
|
-
}
|
|
127
|
-
throw new Error('[325] Not implemented operator: "' + fieldAndOperator.operator + '" for field ' + fieldAndOperator.field + ' with type ' + fieldType);
|
|
128
|
-
}
|
|
129
|
-
function handleSingleValue(result, fieldAndOperator, value, fieldTypes, tableName) {
|
|
130
|
-
if (fieldAndOperator.mutator) {
|
|
131
|
-
value = fieldAndOperator.mutator(value);
|
|
132
|
-
}
|
|
133
|
-
let fieldType = fieldTypes[fieldAndOperator.field];
|
|
134
|
-
if (fieldAndOperator.operator === '@@') {
|
|
135
|
-
if (typeof value == 'object') {
|
|
136
|
-
if (!(value.lang || value.language) || !(value.query || value.plainquery)) {
|
|
137
|
-
throw new Error('[499] only "lang"/"language" and "query/plainquery" properties are supported!');
|
|
138
|
-
}
|
|
139
|
-
if (fieldType == pgDb_1.FieldType.TSVECTOR) {
|
|
140
|
-
result.params.push(value.lang || value.language);
|
|
141
|
-
result.params.push(value.query || value.plainquery);
|
|
142
|
-
let template = value.query ? "%s %s to_tsquery($%s, $%s)" : "%s %s plainto_tsquery($%s, $%s)";
|
|
143
|
-
result.predicates.push(util.format(template, fieldAndOperator.quotedField, fieldAndOperator.operator, result.params.length - 1 + result.offset, result.params.length + result.offset));
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
result.params.push(value.lang || value.language);
|
|
147
|
-
result.params.push(value.lang || value.language);
|
|
148
|
-
result.params.push(value.query || value.plainquery);
|
|
149
|
-
let template = value.query ? "to_tsvector($%s, %s) %s to_tsquery($%s, $%s)" : "to_tsvector($%s, %s) %s plainto_tsquery($%s, $%s)";
|
|
150
|
-
result.predicates.push(util.format(template, result.params.length - 2 + result.offset, fieldAndOperator.quotedField, fieldAndOperator.operator, result.params.length - 1 + result.offset, result.params.length + result.offset));
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
result.params.push(value);
|
|
155
|
-
let template = fieldType == pgDb_1.FieldType.TSVECTOR ? "%s %s plainto_tsquery($%s)" : "to_tsvector(%s) %s plainto_tsquery($%s)";
|
|
156
|
-
result.predicates.push(util.format(template, fieldAndOperator.quotedField, fieldAndOperator.operator, result.params.length + result.offset));
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
else if (fieldType == pgDb_1.FieldType.ARRAY) {
|
|
160
|
-
if (['=', '<>'].indexOf(fieldAndOperator.operator) != -1) {
|
|
161
|
-
if (fieldAndOperator.originalOp == '=*') {
|
|
162
|
-
result.params.push([value]);
|
|
163
|
-
value = util.format("$%s", result.params.length + result.offset);
|
|
164
|
-
result.predicates.push(util.format('%s && %s', fieldAndOperator.quotedField, value));
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
result.params.push(value);
|
|
168
|
-
value = util.format("$%s", result.params.length + result.offset);
|
|
169
|
-
result.predicates.push(util.format('%s %s ANY(%s)', value, fieldAndOperator.operator, fieldAndOperator.quotedField));
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
else if (['LIKE', 'ILIKE', 'NOT LIKE', 'NOT ILIKE', 'SIMILAR TO', 'NOT SIMILAR TO'].indexOf(fieldAndOperator.operator) != -1) {
|
|
173
|
-
result.params.push(value);
|
|
174
|
-
value = util.format("$%s", result.params.length + result.offset);
|
|
175
|
-
let q = 'EXISTS (SELECT * FROM (SELECT UNNEST(' + tableName + '.%s) _el) _arr WHERE _arr._el %s %s)';
|
|
176
|
-
result.predicates.push(util.format(q, fieldAndOperator.quotedField, fieldAndOperator.operator, value));
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
throw new Error('[326] Not implemented operator: "' + fieldAndOperator.operator + '" for type ' + fieldType);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
result.params.push((fieldType == pgDb_1.FieldType.TIME && !(value instanceof Date)) ? new Date(value) : value);
|
|
184
|
-
value = util.format("$%s", result.params.length + result.offset);
|
|
185
|
-
result.predicates.push(util.format('%s %s %s', fieldAndOperator.quotedField, fieldAndOperator.operator, value));
|
|
186
|
-
}
|
|
187
|
-
return result;
|
|
188
|
-
}
|
|
189
|
-
function strip(arr) {
|
|
190
|
-
return arr.map((s) => s.trim()).filter(v => v != '');
|
|
191
|
-
}
|
|
192
|
-
function getOp(str) {
|
|
193
|
-
for (let i = 0; i < str.length; i++) {
|
|
194
|
-
if (pgDbOperators_1.default[str.substr(i)]) {
|
|
195
|
-
return str.substr(i);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
return '';
|
|
199
|
-
}
|
|
200
|
-
function parseKey(key) {
|
|
201
|
-
var _a;
|
|
202
|
-
key = key.trim();
|
|
203
|
-
let userOp = getOp(key);
|
|
204
|
-
if (userOp) {
|
|
205
|
-
key = key.substr(0, key.length - userOp.length);
|
|
206
|
-
}
|
|
207
|
-
let operation = pgDbOperators_1.default[userOp] || {};
|
|
208
|
-
let jsonRegexp = /(->[^>]|->>|#>[^>]|#>>)/;
|
|
209
|
-
let field;
|
|
210
|
-
let quotedField;
|
|
211
|
-
let quotedByUser = key.indexOf('"') > -1;
|
|
212
|
-
if (quotedByUser) {
|
|
213
|
-
quotedField = key;
|
|
214
|
-
field = (_a = /[^"]*"([^"]*)".*/.exec(key)) === null || _a === void 0 ? void 0 : _a[1];
|
|
215
|
-
if (!quotedField || !field) {
|
|
216
|
-
throw new Error('Invalid field:' + key);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
let parts = strip(key.split(jsonRegexp));
|
|
221
|
-
field = parts.shift();
|
|
222
|
-
if (!field) {
|
|
223
|
-
throw new Error('Invalid field:' + key);
|
|
224
|
-
}
|
|
225
|
-
quotedField = pgUtils_1.pgUtils.quoteFieldName(field);
|
|
226
|
-
if (parts.length > 1) {
|
|
227
|
-
let jsonOp = parts.shift();
|
|
228
|
-
let jsonKey = parts.shift();
|
|
229
|
-
jsonKey = pgUtils_1.pgUtils.quoteFieldNameJsonbOrPosition(jsonKey);
|
|
230
|
-
quotedField = util.format('%s%s%s', quotedField, jsonOp, jsonKey);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
if (operation.fieldMutator) {
|
|
234
|
-
quotedField = operation.fieldMutator(field, quotedField);
|
|
235
|
-
}
|
|
236
|
-
return {
|
|
237
|
-
field: field,
|
|
238
|
-
quotedField: quotedField,
|
|
239
|
-
operator: (operation.operator || '=').toUpperCase(),
|
|
240
|
-
mutator: operation.mutator,
|
|
241
|
-
originalOp: userOp
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
exports.default = generateWhere;
|
|
245
|
-
//# sourceMappingURL=queryWhere.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queryWhere.js","sourceRoot":"","sources":["../../src/queryWhere.ts"],"names":[],"mappings":"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"}
|