orange-orm 4.3.0-beta.0 → 4.3.0-beta.2
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/package.json +3 -8
- package/src/getManyDto.js +83 -14
- package/src/mssql/newDatabase.js +2 -2
- package/src/mssql/newTransaction.js +52 -28
- package/src/mySql/newDatabase.js +2 -2
- package/src/mySql/newTransaction.js +44 -21
- package/src/oracle/newDatabase.js +2 -2
- package/src/oracle/newTransaction.js +47 -21
- package/src/pg/encodeBoolean.js +1 -1
- package/src/pg/encodeDate.js +2 -2
- package/src/pg/encodeJSON.js +10 -11
- package/src/pg/newDatabase.js +2 -2
- package/src/pg/newTransaction.js +44 -22
- package/src/pg/pool/newPgPool.js +30 -4
- package/src/pg/wrapQuery.js +11 -8
- package/src/sap/newDatabase.js +2 -2
- package/src/sap/newTransaction.js +52 -28
- package/src/sqlite/newDatabase.js +2 -2
- package/src/sqlite/newTransaction.js +41 -18
- package/src/tedious/newDatabase.js +2 -2
- package/src/tedious/newTransaction.js +53 -30
- package/src/getManyDto2.js +0 -301
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orange-orm",
|
|
3
|
-
"version": "4.3.0-beta.
|
|
3
|
+
"version": "4.3.0-beta.2",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"browser": "./src/client/index.mjs",
|
|
6
6
|
"bin": {
|
|
@@ -47,7 +47,8 @@
|
|
|
47
47
|
"build": "rollup -c ./src/client/rollup.config.js && npm run concat",
|
|
48
48
|
"lint": "eslint ./",
|
|
49
49
|
"fix": "eslint ./ --fix",
|
|
50
|
-
"owasp": "owasp-dependency-check --project \"MY_PROJECT\" --scan \"package-lock.json\" --exclude \"dependency-check-bin\" --out \"owasp\" --format HTML"
|
|
50
|
+
"owasp": "owasp-dependency-check --project \"MY_PROJECT\" --scan \"package-lock.json\" --exclude \"dependency-check-bin\" --out \"owasp\" --format HTML",
|
|
51
|
+
"beta": "publish --tag beta"
|
|
51
52
|
},
|
|
52
53
|
"dependencies": {
|
|
53
54
|
"@lroal/on-change": "^4.0.2",
|
|
@@ -63,7 +64,6 @@
|
|
|
63
64
|
"glob": "^10.3.4",
|
|
64
65
|
"module-definition": "^4.0.0",
|
|
65
66
|
"node-cls": "^1.0.5",
|
|
66
|
-
"postgres": "^3.4.4",
|
|
67
67
|
"promise": "^8.0.3",
|
|
68
68
|
"rfdc": "^1.2.0",
|
|
69
69
|
"uuid": "^8.3.2"
|
|
@@ -72,7 +72,6 @@
|
|
|
72
72
|
"msnodesqlv8": "^4.1.0",
|
|
73
73
|
"mysql2": "^2.2.5 || ^3.9.4",
|
|
74
74
|
"oracledb": "^6.3.0",
|
|
75
|
-
"postgres": "^3.4.4",
|
|
76
75
|
"pg": "^8.5.1",
|
|
77
76
|
"pg-native": "^3.0.0",
|
|
78
77
|
"pg-query-stream": "^3.3.2",
|
|
@@ -80,9 +79,6 @@
|
|
|
80
79
|
"tedious": "^15.1.2 || ^16.0.0 || ^18.1.0"
|
|
81
80
|
},
|
|
82
81
|
"peerDependenciesMeta": {
|
|
83
|
-
"postgres": {
|
|
84
|
-
"optional": true
|
|
85
|
-
},
|
|
86
82
|
"pg": {
|
|
87
83
|
"optional": true
|
|
88
84
|
},
|
|
@@ -119,7 +115,6 @@
|
|
|
119
115
|
"mysql2": "^3.9.4",
|
|
120
116
|
"oracledb": "^6.3.0",
|
|
121
117
|
"owasp-dependency-check": "^0.0.21",
|
|
122
|
-
"postgres": "^3.4.4",
|
|
123
118
|
"pg": "^8.5.1",
|
|
124
119
|
"pg-query-stream": "^3.3.2",
|
|
125
120
|
"rollup": "^2.52.7",
|
package/src/getManyDto.js
CHANGED
|
@@ -128,7 +128,7 @@ async function decode(strategy, span, rows, keys = rows.length > 0 ? Object.keys
|
|
|
128
128
|
for (let j = 0; j < aggregateKeys.length; j++) {
|
|
129
129
|
const key = aggregateKeys[j];
|
|
130
130
|
const parse = span.aggregates[key].column?.decode || Number.parseFloat;
|
|
131
|
-
outRow[key] =
|
|
131
|
+
outRow[key] = parse(row[keys[j + columnsLength]]);
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
outRows[i] = outRow;
|
|
@@ -141,8 +141,18 @@ async function decode(strategy, span, rows, keys = rows.length > 0 ? Object.keys
|
|
|
141
141
|
span._ids = fkIds;
|
|
142
142
|
|
|
143
143
|
keys.splice(0, columnsLength + aggregateKeys.length);
|
|
144
|
+
if (span.legs.toArray().length === 0)
|
|
145
|
+
return outRows;
|
|
146
|
+
|
|
147
|
+
const all = [];
|
|
148
|
+
|
|
149
|
+
if (shouldCreateMap)
|
|
150
|
+
all.push(decodeManyRelations(strategy, span).then(() => decodeRelations2(strategy, span, rows, outRows, keys)));
|
|
151
|
+
else
|
|
152
|
+
all.push(decodeRelations2(strategy, span, rows, outRows, keys));
|
|
153
|
+
|
|
154
|
+
await Promise.all(all);
|
|
144
155
|
|
|
145
|
-
await decodeRelations(strategy, span, rows, outRows, keys);
|
|
146
156
|
return outRows;
|
|
147
157
|
|
|
148
158
|
|
|
@@ -165,19 +175,10 @@ async function decode(strategy, span, rows, keys = rows.length > 0 ? Object.keys
|
|
|
165
175
|
|
|
166
176
|
}
|
|
167
177
|
|
|
168
|
-
async function
|
|
178
|
+
async function decodeManyRelations(strategy, span) {
|
|
169
179
|
const promises = [];
|
|
170
180
|
const c = {};
|
|
171
|
-
c.visitJoin =
|
|
172
|
-
const name = leg.name;
|
|
173
|
-
const p = decode(strategy[name], leg.span, rawRows, keys).then((rows) => {
|
|
174
|
-
for (let i = 0; i < rows.length; i++) {
|
|
175
|
-
resultRows[i][name] = rows[i];
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
promises.push(p);
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
+
c.visitJoin = () => { };
|
|
181
182
|
c.visitOne = c.visitJoin;
|
|
182
183
|
|
|
183
184
|
c.visitMany = function(leg) {
|
|
@@ -205,6 +206,74 @@ async function decodeRelations(strategy, span, rawRows, resultRows, keys) {
|
|
|
205
206
|
await Promise.all(promises);
|
|
206
207
|
}
|
|
207
208
|
|
|
209
|
+
async function decodeRelations2(strategy, span, rawRows, resultRows, keys) {
|
|
210
|
+
const promises = [];
|
|
211
|
+
const c = {};
|
|
212
|
+
c.visitJoin = function (leg) {
|
|
213
|
+
const name = leg.name;
|
|
214
|
+
const p = decode(strategy[name], leg.span, rawRows, keys).then((rows) => {
|
|
215
|
+
for (let i = 0; i < rows.length; i++) {
|
|
216
|
+
resultRows[i][name] = rows[i];
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
promises.push(p);
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
c.visitOne = c.visitJoin;
|
|
223
|
+
|
|
224
|
+
c.visitMany = () => { };
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
span.legs.forEach(onEachLeg);
|
|
228
|
+
|
|
229
|
+
function onEachLeg(leg) {
|
|
230
|
+
leg.accept(c);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
await Promise.all(promises);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
// async function decodeRelations(strategy, span, rawRows, resultRows, keys) {
|
|
238
|
+
// const promises = [];
|
|
239
|
+
// const c = {};
|
|
240
|
+
// c.visitJoin = function (leg) {
|
|
241
|
+
// const name = leg.name;
|
|
242
|
+
// const p = decode(strategy[name], leg.span, rawRows, keys).then((rows) => {
|
|
243
|
+
// for (let i = 0; i < rows.length; i++) {
|
|
244
|
+
// resultRows[i][name] = rows[i];
|
|
245
|
+
// }
|
|
246
|
+
// });
|
|
247
|
+
// promises.push(p);
|
|
248
|
+
// };
|
|
249
|
+
|
|
250
|
+
// c.visitOne = c.visitJoin;
|
|
251
|
+
|
|
252
|
+
// c.visitMany = function (leg) {
|
|
253
|
+
// const name = leg.name;
|
|
254
|
+
// const table = span.table;
|
|
255
|
+
// const relation = table._relations[name];
|
|
256
|
+
// const filter = createOneFilter(relation, span._ids);
|
|
257
|
+
// const rowsMap = span._rowsMap;
|
|
258
|
+
// const p = getManyDto(relation.childTable, filter, strategy[name], leg.span).then(subRows => {
|
|
259
|
+
// for (let i = 0; i < subRows.length; i++) {
|
|
260
|
+
// const key = leg.columns.map(column => subRows[i][column.alias]);
|
|
261
|
+
// const parentRow = getFromMap(rowsMap, table._primaryColumns, key);
|
|
262
|
+
// parentRow[name].push(subRows[i]);
|
|
263
|
+
// }
|
|
264
|
+
// });
|
|
265
|
+
// promises.push(p);
|
|
266
|
+
// };
|
|
267
|
+
|
|
268
|
+
// span.legs.forEach(onEachLeg);
|
|
269
|
+
|
|
270
|
+
// function onEachLeg(leg) {
|
|
271
|
+
// leg.accept(c);
|
|
272
|
+
// }
|
|
273
|
+
|
|
274
|
+
// await Promise.all(promises);
|
|
275
|
+
// }
|
|
276
|
+
|
|
208
277
|
function createOneFilter(relation, ids) {
|
|
209
278
|
const columns = relation.joinRelation.columns;
|
|
210
279
|
|
|
@@ -216,7 +285,7 @@ function createOneFilter(relation, ids) {
|
|
|
216
285
|
|
|
217
286
|
function createCompositeFilter() {
|
|
218
287
|
let filter = emptyFilter;
|
|
219
|
-
for(let id of ids) {
|
|
288
|
+
for (let id of ids) {
|
|
220
289
|
let nextFilter;
|
|
221
290
|
for (let i = 0; i < columns.length; i++) {
|
|
222
291
|
if (nextFilter)
|
package/src/mssql/newDatabase.js
CHANGED
|
@@ -43,7 +43,7 @@ function newDatabase(connectionString, poolOptions) {
|
|
|
43
43
|
|
|
44
44
|
async function runInTransaction() {
|
|
45
45
|
let result;
|
|
46
|
-
let transaction = newTransaction(domain, pool);
|
|
46
|
+
let transaction = newTransaction(domain, pool, options);
|
|
47
47
|
await new Promise(transaction)
|
|
48
48
|
.then(begin)
|
|
49
49
|
.then(fn)
|
|
@@ -59,7 +59,7 @@ function newDatabase(connectionString, poolOptions) {
|
|
|
59
59
|
|
|
60
60
|
function run() {
|
|
61
61
|
let p;
|
|
62
|
-
let transaction = newTransaction(domain, pool);
|
|
62
|
+
let transaction = newTransaction(domain, pool, options);
|
|
63
63
|
if (useHook())
|
|
64
64
|
p = new Promise(transaction);
|
|
65
65
|
else
|
|
@@ -8,12 +8,63 @@ const formatDateOut = require('../tedious/formatDateOut');
|
|
|
8
8
|
const insertSql = require('../tedious/insertSql');
|
|
9
9
|
const insert = require('../tedious/insert');
|
|
10
10
|
|
|
11
|
-
function newResolveTransaction(domain, pool) {
|
|
11
|
+
function newResolveTransaction(domain, pool, { readonly } = {}) {
|
|
12
12
|
var rdb = {poolFactory: pool};
|
|
13
13
|
if (!pool.connect) {
|
|
14
14
|
pool = pool();
|
|
15
15
|
rdb.pool = pool;
|
|
16
16
|
}
|
|
17
|
+
rdb.engine = 'mssqlNative';
|
|
18
|
+
rdb.encodeBoolean = encodeBoolean;
|
|
19
|
+
rdb.decodeJSON = decodeJSON;
|
|
20
|
+
rdb.encodeJSON = JSON.stringify;
|
|
21
|
+
rdb.formatDateOut = formatDateOut;
|
|
22
|
+
rdb.deleteFromSql = deleteFromSql;
|
|
23
|
+
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
24
|
+
rdb.outputInsertedSql = outputInsertedSql;
|
|
25
|
+
rdb.insertSql = insertSql;
|
|
26
|
+
rdb.insert = insert;
|
|
27
|
+
rdb.lastInsertedIsSeparate = false;
|
|
28
|
+
rdb.multipleStatements = true;
|
|
29
|
+
rdb.begin = 'BEGIN TRANSACTION';
|
|
30
|
+
rdb.limit = (span) => {
|
|
31
|
+
if (span.offset)
|
|
32
|
+
return '';
|
|
33
|
+
else if (span.limit || span.limit === 0)
|
|
34
|
+
return 'TOP ' + span.limit;
|
|
35
|
+
else
|
|
36
|
+
return '';
|
|
37
|
+
};
|
|
38
|
+
rdb.limitAndOffset = limitAndOffset;
|
|
39
|
+
rdb.accept = function(caller) {
|
|
40
|
+
caller.visitSqlite();
|
|
41
|
+
};
|
|
42
|
+
rdb.aggregateCount = 0;
|
|
43
|
+
rdb.quote = (name) => `[${name}]`;
|
|
44
|
+
|
|
45
|
+
if (readonly) {
|
|
46
|
+
rdb.dbClient = {
|
|
47
|
+
executeQuery: function(query, callback) {
|
|
48
|
+
pool.connect((err, client, done) => {
|
|
49
|
+
if (err) {
|
|
50
|
+
return callback(err);
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
client.setUseUTC(false);
|
|
54
|
+
wrapQuery(client)(query, (err, res) => {
|
|
55
|
+
done();
|
|
56
|
+
callback(err, res);
|
|
57
|
+
});
|
|
58
|
+
} catch (e) {
|
|
59
|
+
done();
|
|
60
|
+
callback(e);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
domain.rdb = rdb;
|
|
66
|
+
return (onSuccess) => onSuccess();
|
|
67
|
+
}
|
|
17
68
|
|
|
18
69
|
return function(onSuccess, onError) {
|
|
19
70
|
pool.connect(onConnected);
|
|
@@ -26,35 +77,8 @@ function newResolveTransaction(domain, pool) {
|
|
|
26
77
|
}
|
|
27
78
|
client.setUseUTC(false);
|
|
28
79
|
client.executeQuery = wrapQuery(client);
|
|
29
|
-
rdb.engine = 'mssqlNative';
|
|
30
80
|
rdb.dbClient = client;
|
|
31
81
|
rdb.dbClientDone = done;
|
|
32
|
-
rdb.encodeBoolean = encodeBoolean;
|
|
33
|
-
rdb.decodeJSON = decodeJSON;
|
|
34
|
-
rdb.encodeJSON = JSON.stringify;
|
|
35
|
-
rdb.formatDateOut = formatDateOut;
|
|
36
|
-
rdb.deleteFromSql = deleteFromSql;
|
|
37
|
-
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
38
|
-
rdb.outputInsertedSql = outputInsertedSql;
|
|
39
|
-
rdb.insertSql = insertSql;
|
|
40
|
-
rdb.insert = insert;
|
|
41
|
-
rdb.lastInsertedIsSeparate = false;
|
|
42
|
-
rdb.multipleStatements = true;
|
|
43
|
-
rdb.begin = 'BEGIN TRANSACTION';
|
|
44
|
-
rdb.limit = (span) => {
|
|
45
|
-
if (span.offset)
|
|
46
|
-
return '';
|
|
47
|
-
else if (span.limit || span.limit === 0)
|
|
48
|
-
return 'TOP ' + span.limit;
|
|
49
|
-
else
|
|
50
|
-
return '';
|
|
51
|
-
};
|
|
52
|
-
rdb.limitAndOffset = limitAndOffset;
|
|
53
|
-
rdb.accept = function(caller) {
|
|
54
|
-
caller.visitSqlite();
|
|
55
|
-
};
|
|
56
|
-
rdb.aggregateCount = 0;
|
|
57
|
-
rdb.quote = (name) => `[${name}]`;
|
|
58
82
|
domain.rdb = rdb;
|
|
59
83
|
onSuccess();
|
|
60
84
|
} catch (e) {
|
package/src/mySql/newDatabase.js
CHANGED
|
@@ -42,7 +42,7 @@ function newDatabase(connectionString, poolOptions) {
|
|
|
42
42
|
|
|
43
43
|
async function runInTransaction() {
|
|
44
44
|
let result;
|
|
45
|
-
let transaction = newTransaction(domain, pool);
|
|
45
|
+
let transaction = newTransaction(domain, pool, options);
|
|
46
46
|
await new Promise(transaction)
|
|
47
47
|
.then(begin)
|
|
48
48
|
.then(fn)
|
|
@@ -58,7 +58,7 @@ function newDatabase(connectionString, poolOptions) {
|
|
|
58
58
|
|
|
59
59
|
function run() {
|
|
60
60
|
let p;
|
|
61
|
-
let transaction = newTransaction(domain, pool);
|
|
61
|
+
let transaction = newTransaction(domain, pool, options);
|
|
62
62
|
if (useHook())
|
|
63
63
|
p = new Promise(transaction);
|
|
64
64
|
else
|
|
@@ -7,42 +7,65 @@ const limitAndOffset = require('./limitAndOffset');
|
|
|
7
7
|
const insertSql = require('./insertSql');
|
|
8
8
|
const insert = require('./insert');
|
|
9
9
|
|
|
10
|
-
function newResolveTransaction(domain, pool) {
|
|
10
|
+
function newResolveTransaction(domain, pool, { readonly } = {}) {
|
|
11
11
|
var rdb = {poolFactory: pool};
|
|
12
12
|
if (!pool.connect) {
|
|
13
13
|
pool = pool();
|
|
14
14
|
rdb.pool = pool;
|
|
15
15
|
}
|
|
16
|
+
rdb.engine = 'mysql';
|
|
17
|
+
rdb.encodeBoolean = encodeBoolean;
|
|
18
|
+
rdb.encodeJSON = JSON.stringify;
|
|
19
|
+
rdb.deleteFromSql = deleteFromSql;
|
|
20
|
+
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
21
|
+
rdb.lastInsertedIsSeparate = true;
|
|
22
|
+
rdb.lastInsertedSql = lastInsertedSql;
|
|
23
|
+
rdb.insertSql = insertSql;
|
|
24
|
+
rdb.insert = insert;
|
|
25
|
+
rdb.multipleStatements = false;
|
|
26
|
+
rdb.limitAndOffset = limitAndOffset;
|
|
27
|
+
rdb.accept = function(caller) {
|
|
28
|
+
caller.visitMySql();
|
|
29
|
+
};
|
|
30
|
+
rdb.aggregateCount = 0;
|
|
31
|
+
rdb.quote = (name) => `\`${name}\``;
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
if (readonly) {
|
|
35
|
+
rdb.dbClient = {
|
|
36
|
+
executeQuery: function(query, callback) {
|
|
37
|
+
pool.connect((err, client, done) => {
|
|
38
|
+
if (err) {
|
|
39
|
+
return callback(err);
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
wrapQuery(client)(query, (err, res) => {
|
|
43
|
+
done();
|
|
44
|
+
callback(err, res);
|
|
45
|
+
});
|
|
46
|
+
} catch (e) {
|
|
47
|
+
done();
|
|
48
|
+
callback(e);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
domain.rdb = rdb;
|
|
54
|
+
return (onSuccess) => onSuccess();
|
|
55
|
+
}
|
|
16
56
|
|
|
17
57
|
return function(onSuccess, onError) {
|
|
18
58
|
pool.connect(onConnected);
|
|
19
59
|
|
|
20
|
-
function onConnected(err,
|
|
60
|
+
function onConnected(err, client, done) {
|
|
21
61
|
try {
|
|
22
62
|
if (err) {
|
|
23
63
|
onError(err);
|
|
24
64
|
return;
|
|
25
65
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
rdb.engine = 'mysql';
|
|
29
|
-
rdb.dbClient = connection;
|
|
66
|
+
client.executeQuery = wrapQuery(client);
|
|
67
|
+
rdb.dbClient = client;
|
|
30
68
|
rdb.dbClientDone = done;
|
|
31
|
-
rdb.encodeBoolean = encodeBoolean;
|
|
32
|
-
rdb.encodeJSON = JSON.stringify;
|
|
33
|
-
rdb.deleteFromSql = deleteFromSql;
|
|
34
|
-
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
35
|
-
rdb.lastInsertedIsSeparate = true;
|
|
36
|
-
rdb.lastInsertedSql = lastInsertedSql;
|
|
37
|
-
rdb.insertSql = insertSql;
|
|
38
|
-
rdb.insert = insert;
|
|
39
|
-
rdb.multipleStatements = false;
|
|
40
|
-
rdb.limitAndOffset = limitAndOffset;
|
|
41
|
-
rdb.accept = function(caller) {
|
|
42
|
-
caller.visitMySql();
|
|
43
|
-
};
|
|
44
|
-
rdb.aggregateCount = 0;
|
|
45
|
-
rdb.quote = (name) => `\`${name}\``;
|
|
46
69
|
domain.rdb = rdb;
|
|
47
70
|
onSuccess();
|
|
48
71
|
} catch (e) {
|
|
@@ -47,7 +47,7 @@ function newDatabase(connectionString, poolOptions) {
|
|
|
47
47
|
|
|
48
48
|
async function runInTransaction() {
|
|
49
49
|
let result;
|
|
50
|
-
let transaction = newTransaction(domain, pool);
|
|
50
|
+
let transaction = newTransaction(domain, pool, options);
|
|
51
51
|
await new Promise(transaction)
|
|
52
52
|
.then(begin)
|
|
53
53
|
.then(fn)
|
|
@@ -59,7 +59,7 @@ function newDatabase(connectionString, poolOptions) {
|
|
|
59
59
|
|
|
60
60
|
function run() {
|
|
61
61
|
let p;
|
|
62
|
-
let transaction = newTransaction(domain, pool);
|
|
62
|
+
let transaction = newTransaction(domain, pool, options);
|
|
63
63
|
if (useHook())
|
|
64
64
|
p = new Promise(transaction);
|
|
65
65
|
else
|
|
@@ -9,13 +9,58 @@ const insert = require('./insert');
|
|
|
9
9
|
const formatDateOut = require('./formatDateOut');
|
|
10
10
|
const formatDateIn = require('./formatDateIn');
|
|
11
11
|
|
|
12
|
-
function newResolveTransaction(domain, pool) {
|
|
12
|
+
function newResolveTransaction(domain, pool, { readonly } = {}) {
|
|
13
13
|
var rdb = {poolFactory: pool};
|
|
14
14
|
if (!pool.connect) {
|
|
15
15
|
pool = pool();
|
|
16
16
|
rdb.pool = pool;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
rdb.begin = 'SET TRANSACTION ISOLATION LEVEL READ COMMITTED';
|
|
20
|
+
rdb.engine = 'oracle';
|
|
21
|
+
rdb.encodeBoolean = encodeBoolean;
|
|
22
|
+
rdb.decodeJSON = decodeJSON;
|
|
23
|
+
rdb.encodeJSON = JSON.stringify;
|
|
24
|
+
rdb.formatDateOut = formatDateOut;
|
|
25
|
+
rdb.formatDateIn = formatDateIn;
|
|
26
|
+
rdb.deleteFromSql = deleteFromSql;
|
|
27
|
+
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
28
|
+
rdb.lastInsertedSql = lastInsertedSql;
|
|
29
|
+
rdb.insertSql = insertSql;
|
|
30
|
+
rdb.insert = insert;
|
|
31
|
+
rdb.lastInsertedIsSeparate = true;
|
|
32
|
+
rdb.multipleStatements = false;
|
|
33
|
+
rdb.limitAndOffset = limitAndOffset;
|
|
34
|
+
rdb.accept = function(caller) {
|
|
35
|
+
caller.visitSqlite();
|
|
36
|
+
};
|
|
37
|
+
rdb.aggregateCount = 0;
|
|
38
|
+
rdb.quote = (name) => `"${name}"`;
|
|
39
|
+
|
|
40
|
+
if (readonly) {
|
|
41
|
+
rdb.dbClient = {
|
|
42
|
+
executeQuery: function(query, callback) {
|
|
43
|
+
pool.connect((err, client, done) => {
|
|
44
|
+
if (err) {
|
|
45
|
+
return callback(err);
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
wrapQuery(client)(query, (err, res) => {
|
|
49
|
+
done();
|
|
50
|
+
callback(err, res);
|
|
51
|
+
});
|
|
52
|
+
} catch (e) {
|
|
53
|
+
done();
|
|
54
|
+
callback(e);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
domain.rdb = rdb;
|
|
60
|
+
return (onSuccess) => onSuccess();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
19
64
|
return function(onSuccess, onError) {
|
|
20
65
|
pool.connect(onConnected);
|
|
21
66
|
|
|
@@ -26,29 +71,10 @@ function newResolveTransaction(domain, pool) {
|
|
|
26
71
|
return;
|
|
27
72
|
}
|
|
28
73
|
client.executeQuery = wrapQuery(client);
|
|
29
|
-
rdb.begin = 'SET TRANSACTION ISOLATION LEVEL READ COMMITTED';
|
|
30
|
-
rdb.engine = 'oracle';
|
|
31
74
|
rdb.dbClient = client;
|
|
32
75
|
rdb.dbClientDone = done;
|
|
33
|
-
rdb.encodeBoolean = encodeBoolean;
|
|
34
|
-
rdb.decodeJSON = decodeJSON;
|
|
35
|
-
rdb.encodeJSON = JSON.stringify;
|
|
36
|
-
rdb.formatDateOut = formatDateOut;
|
|
37
|
-
rdb.formatDateIn = formatDateIn;
|
|
38
|
-
rdb.deleteFromSql = deleteFromSql;
|
|
39
|
-
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
40
|
-
rdb.lastInsertedSql = lastInsertedSql;
|
|
41
|
-
rdb.insertSql = insertSql;
|
|
42
|
-
rdb.insert = insert;
|
|
43
|
-
rdb.lastInsertedIsSeparate = true;
|
|
44
|
-
rdb.multipleStatements = false;
|
|
45
|
-
rdb.limitAndOffset = limitAndOffset;
|
|
46
|
-
rdb.accept = function(caller) {
|
|
47
|
-
caller.visitSqlite();
|
|
48
|
-
};
|
|
49
|
-
rdb.aggregateCount = 0;
|
|
50
|
-
rdb.quote = (name) => `"${name}"`;
|
|
51
76
|
domain.rdb = rdb;
|
|
77
|
+
|
|
52
78
|
onSuccess();
|
|
53
79
|
} catch (e) {
|
|
54
80
|
onError(e);
|
package/src/pg/encodeBoolean.js
CHANGED
package/src/pg/encodeDate.js
CHANGED
package/src/pg/encodeJSON.js
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
function encode(arg) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
if (Array.isArray(arg))
|
|
3
|
+
return new JsonBArrayParam(arg);
|
|
4
|
+
else
|
|
5
|
+
return arg;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// }
|
|
8
|
+
class JsonBArrayParam {
|
|
9
|
+
constructor(actualArray) { this.actualArray = actualArray; }
|
|
10
|
+
toPostgres() {
|
|
11
|
+
return JSON.stringify(this.actualArray);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
15
14
|
|
|
16
15
|
module.exports = encode;
|
package/src/pg/newDatabase.js
CHANGED
|
@@ -52,7 +52,7 @@ function newDatabase(connectionString, poolOptions) {
|
|
|
52
52
|
|
|
53
53
|
async function runInTransaction() {
|
|
54
54
|
let result;
|
|
55
|
-
let transaction = newTransaction(domain, pool);
|
|
55
|
+
let transaction = newTransaction(domain, pool, options);
|
|
56
56
|
await new Promise(transaction)
|
|
57
57
|
.then(begin)
|
|
58
58
|
.then(negotiateSchema)
|
|
@@ -69,7 +69,7 @@ function newDatabase(connectionString, poolOptions) {
|
|
|
69
69
|
|
|
70
70
|
function run() {
|
|
71
71
|
let p;
|
|
72
|
-
let transaction = newTransaction(domain, pool);
|
|
72
|
+
let transaction = newTransaction(domain, pool, options);
|
|
73
73
|
if (useHook())
|
|
74
74
|
p = new Promise(transaction);
|
|
75
75
|
else
|
package/src/pg/newTransaction.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
var wrapQuery = require('./wrapQuery');
|
|
2
|
-
var wrapQueryStream = require('./wrapQueryStream');
|
|
3
2
|
var encodeDate = require('./encodeDate');
|
|
4
3
|
var encodeBoolean = require('./encodeBoolean');
|
|
5
4
|
var deleteFromSql = require('./deleteFromSql');
|
|
@@ -10,13 +9,54 @@ var encodeJSON = require('./encodeJSON');
|
|
|
10
9
|
var insertSql = require('./insertSql');
|
|
11
10
|
var insert = require('./insert');
|
|
12
11
|
|
|
13
|
-
function newResolveTransaction(domain, pool) {
|
|
14
|
-
var rdb = {poolFactory: pool};
|
|
12
|
+
function newResolveTransaction(domain, pool, { readonly } = {}) {
|
|
13
|
+
var rdb = { poolFactory: pool };
|
|
15
14
|
if (!pool.connect) {
|
|
16
15
|
pool = pool();
|
|
17
16
|
rdb.pool = pool;
|
|
18
17
|
}
|
|
19
18
|
|
|
19
|
+
rdb.engine = 'pg';
|
|
20
|
+
rdb.encodeBoolean = encodeBoolean;
|
|
21
|
+
rdb.encodeDate = encodeDate;
|
|
22
|
+
rdb.encodeJSON = encodeJSON;
|
|
23
|
+
rdb.formatDateOut = formatDateOut;
|
|
24
|
+
rdb.deleteFromSql = deleteFromSql;
|
|
25
|
+
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
26
|
+
rdb.lastInsertedIsSeparate = false;
|
|
27
|
+
rdb.insertSql = insertSql;
|
|
28
|
+
rdb.insert = insert;
|
|
29
|
+
rdb.multipleStatements = true;
|
|
30
|
+
rdb.limitAndOffset = limitAndOffset;
|
|
31
|
+
rdb.accept = function(caller) {
|
|
32
|
+
caller.visitPg();
|
|
33
|
+
};
|
|
34
|
+
rdb.aggregateCount = 0;
|
|
35
|
+
rdb.quote = (name) => `"${name}"`;
|
|
36
|
+
|
|
37
|
+
if (readonly) {
|
|
38
|
+
rdb.dbClient = {
|
|
39
|
+
executeQuery: function(query, callback) {
|
|
40
|
+
pool.connect((err, client, done) => {
|
|
41
|
+
if (err) {
|
|
42
|
+
return callback(err);
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
wrapQuery(client)(query, (err, res) => {
|
|
46
|
+
done();
|
|
47
|
+
callback(err, res);
|
|
48
|
+
});
|
|
49
|
+
} catch (e) {
|
|
50
|
+
done();
|
|
51
|
+
callback(e);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
domain.rdb = rdb;
|
|
57
|
+
return (onSuccess) => onSuccess();
|
|
58
|
+
}
|
|
59
|
+
|
|
20
60
|
return function(onSuccess, onError) {
|
|
21
61
|
pool.connect(onConnected);
|
|
22
62
|
|
|
@@ -27,26 +67,8 @@ function newResolveTransaction(domain, pool) {
|
|
|
27
67
|
return;
|
|
28
68
|
}
|
|
29
69
|
client.executeQuery = wrapQuery(client);
|
|
30
|
-
client.streamQuery = wrapQueryStream(client);
|
|
31
|
-
rdb.engine = 'pg';
|
|
32
70
|
rdb.dbClient = client;
|
|
33
71
|
rdb.dbClientDone = done;
|
|
34
|
-
rdb.encodeBoolean = encodeBoolean;
|
|
35
|
-
rdb.encodeDate = encodeDate;
|
|
36
|
-
rdb.encodeJSON = encodeJSON;
|
|
37
|
-
rdb.formatDateOut = formatDateOut;
|
|
38
|
-
rdb.deleteFromSql = deleteFromSql;
|
|
39
|
-
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
40
|
-
rdb.lastInsertedIsSeparate = false;
|
|
41
|
-
rdb.insertSql = insertSql;
|
|
42
|
-
rdb.insert = insert;
|
|
43
|
-
rdb.multipleStatements = true;
|
|
44
|
-
rdb.limitAndOffset = limitAndOffset;
|
|
45
|
-
rdb.accept = function(caller) {
|
|
46
|
-
caller.visitPg();
|
|
47
|
-
};
|
|
48
|
-
rdb.aggregateCount = 0;
|
|
49
|
-
rdb.quote = (name) => `"${name}"`;
|
|
50
72
|
domain.rdb = rdb;
|
|
51
73
|
onSuccess();
|
|
52
74
|
} catch (e) {
|
|
@@ -56,4 +78,4 @@ function newResolveTransaction(domain, pool) {
|
|
|
56
78
|
};
|
|
57
79
|
}
|
|
58
80
|
|
|
59
|
-
module.exports = newResolveTransaction;
|
|
81
|
+
module.exports = newResolveTransaction;
|