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/src/pg/pool/newPgPool.js
CHANGED
|
@@ -4,19 +4,45 @@ var EventEmitter = require('events').EventEmitter;
|
|
|
4
4
|
|
|
5
5
|
var defaults = require('./defaults');
|
|
6
6
|
var genericPool = require('../../generic-pool');
|
|
7
|
-
var
|
|
7
|
+
var _pg = require('pg');
|
|
8
8
|
|
|
9
9
|
function newPgPool(connectionString, poolOptions) {
|
|
10
10
|
poolOptions = poolOptions || {};
|
|
11
|
+
let pg = poolOptions.native ? _pg.native : _pg;
|
|
11
12
|
var pool = genericPool.Pool({
|
|
12
13
|
max: poolOptions.size || poolOptions.poolSize || defaults.poolSize,
|
|
13
14
|
idleTimeoutMillis: poolOptions.idleTimeout || defaults.poolIdleTimeout,
|
|
14
15
|
reapIntervalMillis: poolOptions.reapIntervalMillis || defaults.reapIntervalMillis,
|
|
15
16
|
log: poolOptions.log || defaults.poolLog,
|
|
16
17
|
create: function(cb) {
|
|
17
|
-
var client = pg(connectionString
|
|
18
|
-
client.
|
|
19
|
-
|
|
18
|
+
var client = new pg.Client(connectionString);
|
|
19
|
+
client.connect(function(err) {
|
|
20
|
+
if (err) return cb(err, null);
|
|
21
|
+
|
|
22
|
+
//handle connected client background errors by emitting event
|
|
23
|
+
//via the pg object and then removing errored client from the pool
|
|
24
|
+
client.on('error', function(e) {
|
|
25
|
+
pool.emit('error', e, client);
|
|
26
|
+
|
|
27
|
+
// If the client is already being destroyed, the error
|
|
28
|
+
// occurred during stream ending. Do not attempt to destroy
|
|
29
|
+
// the client again.
|
|
30
|
+
if (!client._destroying) {
|
|
31
|
+
pool.destroy(client);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Remove connection from pool on disconnect
|
|
36
|
+
client.on('end', function(_e) {
|
|
37
|
+
// Do not enter infinite loop between pool.destroy
|
|
38
|
+
// and client 'end' event...
|
|
39
|
+
if (!client._destroying) {
|
|
40
|
+
pool.destroy(client);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
client.poolCount = 0;
|
|
44
|
+
return cb(null, client);
|
|
45
|
+
});
|
|
20
46
|
},
|
|
21
47
|
destroy: function(client) {
|
|
22
48
|
client._destroying = true;
|
package/src/pg/wrapQuery.js
CHANGED
|
@@ -2,7 +2,7 @@ var log = require('../table/log');
|
|
|
2
2
|
var replaceParamChar = require('./replaceParamChar');
|
|
3
3
|
|
|
4
4
|
function wrapQuery(connection) {
|
|
5
|
-
|
|
5
|
+
var runOriginalQuery = connection.query;
|
|
6
6
|
return runQuery;
|
|
7
7
|
|
|
8
8
|
function runQuery(query, onCompleted) {
|
|
@@ -13,15 +13,18 @@ function wrapQuery(connection) {
|
|
|
13
13
|
values: params,
|
|
14
14
|
types: query.types
|
|
15
15
|
};
|
|
16
|
-
log.emitQuery({
|
|
16
|
+
log.emitQuery({sql, parameters: params});
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
// runOriginalQuery.call(connection, query, onInnerCompleted);
|
|
18
|
+
runOriginalQuery.call(connection, query, onInnerCompleted);
|
|
20
19
|
|
|
21
|
-
function onInnerCompleted(result) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
function onInnerCompleted(err, result) {
|
|
21
|
+
if (err)
|
|
22
|
+
onCompleted(err);
|
|
23
|
+
else {
|
|
24
|
+
if (Array.isArray(result))
|
|
25
|
+
result = result[result.length-1];
|
|
26
|
+
onCompleted(null, result.rows);
|
|
27
|
+
}
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
30
|
|
package/src/sap/newDatabase.js
CHANGED
|
@@ -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
|
|
@@ -8,12 +8,63 @@ const insertSql = require('./insertSql');
|
|
|
8
8
|
const insert = require('./insert');
|
|
9
9
|
const limitAndOffset = require('./limitAndOffset');
|
|
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 = 'sap';
|
|
18
|
+
rdb.encodeBoolean = encodeBoolean;
|
|
19
|
+
rdb.decodeJSON = decodeJSON;
|
|
20
|
+
rdb.encodeJSON = JSON.stringify;
|
|
21
|
+
rdb.deleteFromSql = deleteFromSql;
|
|
22
|
+
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
23
|
+
rdb.formatDateOut = formatDateOut;
|
|
24
|
+
rdb.lastInsertedSql = lastInsertedSql;
|
|
25
|
+
rdb.insertSql = insertSql;
|
|
26
|
+
rdb.insert = insert;
|
|
27
|
+
rdb.lastInsertedIsSeparate = true;
|
|
28
|
+
rdb.multipleStatements = false;
|
|
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.visitSap();
|
|
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
|
+
wrapQuery(client)(query, (err, res) => {
|
|
54
|
+
done();
|
|
55
|
+
callback(err, res);
|
|
56
|
+
});
|
|
57
|
+
} catch (e) {
|
|
58
|
+
done();
|
|
59
|
+
callback(e);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
domain.rdb = rdb;
|
|
65
|
+
return (onSuccess) => onSuccess();
|
|
66
|
+
}
|
|
67
|
+
|
|
17
68
|
|
|
18
69
|
return function(onSuccess, onError) {
|
|
19
70
|
pool.connect(onConnected);
|
|
@@ -25,35 +76,8 @@ function newResolveTransaction(domain, pool) {
|
|
|
25
76
|
return;
|
|
26
77
|
}
|
|
27
78
|
client.executeQuery = wrapQuery(client);
|
|
28
|
-
rdb.engine = 'sap';
|
|
29
79
|
rdb.dbClient = client;
|
|
30
80
|
rdb.dbClientDone = done;
|
|
31
|
-
rdb.encodeBoolean = encodeBoolean;
|
|
32
|
-
rdb.decodeJSON = decodeJSON;
|
|
33
|
-
rdb.encodeJSON = JSON.stringify;
|
|
34
|
-
rdb.deleteFromSql = deleteFromSql;
|
|
35
|
-
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
36
|
-
rdb.formatDateOut = formatDateOut;
|
|
37
|
-
rdb.lastInsertedSql = lastInsertedSql;
|
|
38
|
-
rdb.insertSql = insertSql;
|
|
39
|
-
rdb.insert = insert;
|
|
40
|
-
rdb.lastInsertedIsSeparate = true;
|
|
41
|
-
rdb.multipleStatements = false;
|
|
42
|
-
rdb.begin = 'BEGIN TRANSACTION';
|
|
43
|
-
rdb.limit = (span) => {
|
|
44
|
-
if (span.offset)
|
|
45
|
-
return '';
|
|
46
|
-
else if (span.limit || span.limit === 0)
|
|
47
|
-
return 'TOP ' + span.limit;
|
|
48
|
-
else
|
|
49
|
-
return '';
|
|
50
|
-
};
|
|
51
|
-
rdb.limitAndOffset = limitAndOffset;
|
|
52
|
-
rdb.accept = function(caller) {
|
|
53
|
-
caller.visitSap();
|
|
54
|
-
};
|
|
55
|
-
rdb.aggregateCount = 0;
|
|
56
|
-
rdb.quote = (name) => `[${name}]`;
|
|
57
81
|
domain.rdb = rdb;
|
|
58
82
|
onSuccess();
|
|
59
83
|
} 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
|
|
@@ -7,12 +7,52 @@ 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 = 'sqlite';
|
|
17
|
+
rdb.encodeBoolean = encodeBoolean;
|
|
18
|
+
rdb.decodeJSON = decodeJSON;
|
|
19
|
+
rdb.encodeJSON = JSON.stringify;
|
|
20
|
+
rdb.deleteFromSql = deleteFromSql;
|
|
21
|
+
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
22
|
+
rdb.lastInsertedSql = lastInsertedSql;
|
|
23
|
+
rdb.insertSql = insertSql;
|
|
24
|
+
rdb.insert = insert;
|
|
25
|
+
rdb.lastInsertedIsSeparate = true;
|
|
26
|
+
rdb.multipleStatements = false;
|
|
27
|
+
rdb.limitAndOffset = limitAndOffset;
|
|
28
|
+
rdb.accept = function(caller) {
|
|
29
|
+
caller.visitSqlite();
|
|
30
|
+
};
|
|
31
|
+
rdb.aggregateCount = 0;
|
|
32
|
+
rdb.quote = (name) => `"${name}"`;
|
|
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);
|
|
@@ -24,25 +64,8 @@ function newResolveTransaction(domain, pool) {
|
|
|
24
64
|
return;
|
|
25
65
|
}
|
|
26
66
|
client.executeQuery = wrapQuery(client);
|
|
27
|
-
rdb.engine = 'sqlite';
|
|
28
67
|
rdb.dbClient = client;
|
|
29
68
|
rdb.dbClientDone = done;
|
|
30
|
-
rdb.encodeBoolean = encodeBoolean;
|
|
31
|
-
rdb.decodeJSON = decodeJSON;
|
|
32
|
-
rdb.encodeJSON = JSON.stringify;
|
|
33
|
-
rdb.deleteFromSql = deleteFromSql;
|
|
34
|
-
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
35
|
-
rdb.lastInsertedSql = lastInsertedSql;
|
|
36
|
-
rdb.insertSql = insertSql;
|
|
37
|
-
rdb.insert = insert;
|
|
38
|
-
rdb.lastInsertedIsSeparate = true;
|
|
39
|
-
rdb.multipleStatements = false;
|
|
40
|
-
rdb.limitAndOffset = limitAndOffset;
|
|
41
|
-
rdb.accept = function(caller) {
|
|
42
|
-
caller.visitSqlite();
|
|
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)
|
|
@@ -60,7 +60,7 @@ function newDatabase(connectionString, poolOptions) {
|
|
|
60
60
|
|
|
61
61
|
function run() {
|
|
62
62
|
let p;
|
|
63
|
-
let transaction = newTransaction(domain, pool);
|
|
63
|
+
let transaction = newTransaction(domain, pool, options);
|
|
64
64
|
if (useHook())
|
|
65
65
|
p = new Promise(transaction);
|
|
66
66
|
else
|
|
@@ -10,12 +10,64 @@ const formatJSONOut = require('./formatJSONOut');
|
|
|
10
10
|
const insertSql = require('./insertSql');
|
|
11
11
|
const insert = require('./insert');
|
|
12
12
|
|
|
13
|
-
function newResolveTransaction(domain, pool) {
|
|
13
|
+
function newResolveTransaction(domain, pool, { readonly } = {}) {
|
|
14
14
|
var rdb = {poolFactory: pool};
|
|
15
15
|
if (!pool.connect) {
|
|
16
16
|
pool = pool();
|
|
17
17
|
rdb.pool = pool;
|
|
18
18
|
}
|
|
19
|
+
rdb.engine = 'mssql';
|
|
20
|
+
rdb.getManyDto = getManyDto;
|
|
21
|
+
rdb.encodeBoolean = encodeBoolean;
|
|
22
|
+
rdb.decodeJSON = decodeJSON;
|
|
23
|
+
rdb.encodeJSON = JSON.stringify;
|
|
24
|
+
rdb.deleteFromSql = deleteFromSql;
|
|
25
|
+
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
26
|
+
rdb.outputInsertedSql = outputInsertedSql;
|
|
27
|
+
rdb.lastInsertedIsSeparate = false;
|
|
28
|
+
rdb.insertSql = insertSql;
|
|
29
|
+
rdb.insert = insert;
|
|
30
|
+
rdb.formatDateOut = formatDateOut;
|
|
31
|
+
rdb.formatJSONOut = formatJSONOut;
|
|
32
|
+
rdb.multipleStatements = true;
|
|
33
|
+
rdb.begin = 'BEGIN TRANSACTION';
|
|
34
|
+
rdb.limit = (span) => {
|
|
35
|
+
if (span.offset)
|
|
36
|
+
return '';
|
|
37
|
+
else if (span.limit || span.limit === 0)
|
|
38
|
+
return 'TOP ' + span.limit;
|
|
39
|
+
else
|
|
40
|
+
return '';
|
|
41
|
+
};
|
|
42
|
+
rdb.limitAndOffset = limitAndOffset;
|
|
43
|
+
rdb.accept = function(caller) {
|
|
44
|
+
caller.visitSqlite();
|
|
45
|
+
};
|
|
46
|
+
rdb.aggregateCount = 0;
|
|
47
|
+
rdb.quote = (name) => `[${name}]`;
|
|
48
|
+
|
|
49
|
+
if (readonly) {
|
|
50
|
+
rdb.dbClient = {
|
|
51
|
+
executeQuery: function(query, callback) {
|
|
52
|
+
pool.connect((err, client, done) => {
|
|
53
|
+
if (err) {
|
|
54
|
+
return callback(err);
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
wrapQuery(client)(query, (err, res) => {
|
|
58
|
+
done();
|
|
59
|
+
callback(err, res);
|
|
60
|
+
});
|
|
61
|
+
} catch (e) {
|
|
62
|
+
done();
|
|
63
|
+
callback(e);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
domain.rdb = rdb;
|
|
69
|
+
return (onSuccess) => onSuccess();
|
|
70
|
+
}
|
|
19
71
|
|
|
20
72
|
return function(onSuccess, onError) {
|
|
21
73
|
pool.connect(onConnected);
|
|
@@ -27,37 +79,8 @@ function newResolveTransaction(domain, pool) {
|
|
|
27
79
|
return;
|
|
28
80
|
}
|
|
29
81
|
client.executeQuery = wrapQuery(client);
|
|
30
|
-
rdb.engine = 'mssql';
|
|
31
|
-
rdb.getManyDto = getManyDto;
|
|
32
82
|
rdb.dbClient = client;
|
|
33
83
|
rdb.dbClientDone = done;
|
|
34
|
-
rdb.encodeBoolean = encodeBoolean;
|
|
35
|
-
rdb.decodeJSON = decodeJSON;
|
|
36
|
-
rdb.encodeJSON = JSON.stringify;
|
|
37
|
-
rdb.deleteFromSql = deleteFromSql;
|
|
38
|
-
rdb.selectForUpdateSql = selectForUpdateSql;
|
|
39
|
-
rdb.outputInsertedSql = outputInsertedSql;
|
|
40
|
-
rdb.lastInsertedIsSeparate = false;
|
|
41
|
-
rdb.insertSql = insertSql;
|
|
42
|
-
rdb.insert = insert;
|
|
43
|
-
rdb.formatDateOut = formatDateOut;
|
|
44
|
-
rdb.formatJSONOut = formatJSONOut;
|
|
45
|
-
rdb.multipleStatements = true;
|
|
46
|
-
rdb.begin = 'BEGIN TRANSACTION';
|
|
47
|
-
rdb.limit = (span) => {
|
|
48
|
-
if (span.offset)
|
|
49
|
-
return '';
|
|
50
|
-
else if (span.limit || span.limit === 0)
|
|
51
|
-
return 'TOP ' + span.limit;
|
|
52
|
-
else
|
|
53
|
-
return '';
|
|
54
|
-
};
|
|
55
|
-
rdb.limitAndOffset = limitAndOffset;
|
|
56
|
-
rdb.accept = function(caller) {
|
|
57
|
-
caller.visitSqlite();
|
|
58
|
-
};
|
|
59
|
-
rdb.aggregateCount = 0;
|
|
60
|
-
rdb.quote = (name) => `[${name}]`;
|
|
61
84
|
domain.rdb = rdb;
|
|
62
85
|
onSuccess();
|
|
63
86
|
} catch (e) {
|