113 lines
2.9 KiB
JavaScript
113 lines
2.9 KiB
JavaScript
'use strict';
|
|
|
|
const EventEmitter = require('events').EventEmitter;
|
|
const makeDoneCb = require('./make_done_cb.js');
|
|
const PromisePoolConnection = require('./pool_connection.js');
|
|
const inheritEvents = require('./inherit_events.js');
|
|
const BasePool = require('../base/pool.js');
|
|
|
|
class PromisePool extends EventEmitter {
|
|
constructor(pool, thePromise) {
|
|
super();
|
|
this.pool = pool;
|
|
this.Promise = thePromise || Promise;
|
|
inheritEvents(pool, this, ['acquire', 'connection', 'enqueue', 'release']);
|
|
}
|
|
|
|
getConnection() {
|
|
const corePool = this.pool;
|
|
return new this.Promise((resolve, reject) => {
|
|
corePool.getConnection((err, coreConnection) => {
|
|
if (err) {
|
|
reject(err);
|
|
} else {
|
|
resolve(new PromisePoolConnection(coreConnection, this.Promise));
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
releaseConnection(connection) {
|
|
if (connection instanceof PromisePoolConnection) connection.release();
|
|
}
|
|
|
|
query(sql, args) {
|
|
const corePool = this.pool;
|
|
const localErr = new Error();
|
|
if (typeof args === 'function') {
|
|
throw new Error(
|
|
'Callback function is not available with promise clients.'
|
|
);
|
|
}
|
|
return new this.Promise((resolve, reject) => {
|
|
const done = makeDoneCb(resolve, reject, localErr);
|
|
if (args !== undefined) {
|
|
corePool.query(sql, args, done);
|
|
} else {
|
|
corePool.query(sql, done);
|
|
}
|
|
});
|
|
}
|
|
|
|
execute(sql, args) {
|
|
const corePool = this.pool;
|
|
const localErr = new Error();
|
|
if (typeof args === 'function') {
|
|
throw new Error(
|
|
'Callback function is not available with promise clients.'
|
|
);
|
|
}
|
|
return new this.Promise((resolve, reject) => {
|
|
const done = makeDoneCb(resolve, reject, localErr);
|
|
if (args) {
|
|
corePool.execute(sql, args, done);
|
|
} else {
|
|
corePool.execute(sql, done);
|
|
}
|
|
});
|
|
}
|
|
|
|
end() {
|
|
const corePool = this.pool;
|
|
const localErr = new Error();
|
|
return new this.Promise((resolve, reject) => {
|
|
corePool.end((err) => {
|
|
if (err) {
|
|
localErr.message = err.message;
|
|
localErr.code = err.code;
|
|
localErr.errno = err.errno;
|
|
localErr.sqlState = err.sqlState;
|
|
localErr.sqlMessage = err.sqlMessage;
|
|
reject(localErr);
|
|
} else {
|
|
resolve();
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
(function (functionsToWrap) {
|
|
for (let i = 0; functionsToWrap && i < functionsToWrap.length; i++) {
|
|
const func = functionsToWrap[i];
|
|
|
|
if (
|
|
typeof BasePool.prototype[func] === 'function' &&
|
|
PromisePool.prototype[func] === undefined
|
|
) {
|
|
PromisePool.prototype[func] = (function factory(funcName) {
|
|
return function () {
|
|
return BasePool.prototype[funcName].apply(this.pool, arguments);
|
|
};
|
|
})(func);
|
|
}
|
|
}
|
|
})([
|
|
// synchronous functions
|
|
'escape',
|
|
'escapeId',
|
|
'format',
|
|
]);
|
|
|
|
module.exports = PromisePool;
|