Spaces:
Running
Running
; | |
const Connection = require('../index.js').Connection; | |
class PoolConnection extends Connection { | |
constructor(pool, options) { | |
super(options); | |
this._pool = pool; | |
// The last active time of this connection | |
this.lastActiveTime = Date.now(); | |
// When a fatal error occurs the connection's protocol ends, which will cause | |
// the connection to end as well, thus we only need to watch for the end event | |
// and we will be notified of disconnects. | |
// REVIEW: Moved to `once` | |
this.once('end', () => { | |
this._removeFromPool(); | |
}); | |
this.once('error', () => { | |
this._removeFromPool(); | |
}); | |
} | |
release() { | |
if (!this._pool || this._pool._closed) { | |
return; | |
} | |
// update last active time | |
this.lastActiveTime = Date.now(); | |
this._pool.releaseConnection(this); | |
} | |
promise(promiseImpl) { | |
const PromisePoolConnection = require('../promise').PromisePoolConnection; | |
return new PromisePoolConnection(this, promiseImpl); | |
} | |
end() { | |
const err = new Error( | |
'Calling conn.end() to release a pooled connection is ' + | |
'deprecated. In next version calling conn.end() will be ' + | |
'restored to default conn.end() behavior. Use ' + | |
'conn.release() instead.' | |
); | |
this.emit('warn', err); | |
// eslint-disable-next-line no-console | |
console.warn(err.message); | |
this.release(); | |
} | |
destroy() { | |
this._removeFromPool(); | |
super.destroy(); | |
} | |
_removeFromPool() { | |
if (!this._pool || this._pool._closed) { | |
return; | |
} | |
const pool = this._pool; | |
this._pool = null; | |
pool._removeConnection(this); | |
} | |
} | |
PoolConnection.statementKey = Connection.statementKey; | |
module.exports = PoolConnection; | |
// TODO: Remove this when we are removing PoolConnection#end | |
PoolConnection.prototype._realEnd = Connection.prototype.end; | |