Comparing version 1.3.2 to 1.3.3
@@ -0,3 +1,8 @@ | ||
1.3.3 ( 8/06/2017 ) | ||
- fix node encodings lookup in string parser #583, #582 | ||
- fix connection not released to the pool on error #579, #551, #540, #508, #569 | ||
- better stack traces in promise wrapper #580, #530 | ||
1.3.2 ( 31/05/2017 ) | ||
- fix PromiseConnection.prepare and add #574, 575 | ||
- fix PromiseConnection.prepare and add #574, #575 | ||
PromisePreparedStatementInfo | ||
@@ -9,3 +14,3 @@ | ||
1.3.0 ( 29/05/2017 ) | ||
- Make Promise Pool wrapper extend EventEmitter #567, 468 | ||
- Make Promise Pool wrapper extend EventEmitter #567, #468 | ||
- build: integrate prettier #563 | ||
@@ -12,0 +17,0 @@ - do not send 23 unallocated bytes over wire #547 |
@@ -31,4 +31,6 @@ var EventEmitter = require('events').EventEmitter; | ||
this.onResult(err); | ||
this.emit('end'); | ||
} else { | ||
this.emit('error', err); | ||
this.emit('end'); | ||
} | ||
@@ -35,0 +37,0 @@ return true; |
@@ -717,2 +717,3 @@ var Net = require('net'); | ||
} | ||
executeCommand.emit('end'); | ||
return; | ||
@@ -719,0 +720,0 @@ } |
@@ -12,3 +12,6 @@ var Iconv = require('iconv-lite'); | ||
'hex' | ||
]; | ||
].reduce(function (map, item) { | ||
map[item] = Buffer.isEncoding(item); | ||
return map; | ||
}, {}); | ||
@@ -15,0 +18,0 @@ exports.decode = function(buffer, encoding, options) { |
@@ -173,6 +173,5 @@ var mysql = require('../index.js'); | ||
conn.config.namedPlaceholders = useNamedPlaceholders; | ||
return conn.execute(sql, values, function() { | ||
const executeCmd = conn.execute(sql, values, cb); | ||
executeCmd.once('end', function() { | ||
conn.release(); | ||
cb.apply(this, arguments); | ||
}); | ||
@@ -179,0 +178,0 @@ }); |
{ | ||
"name": "mysql2", | ||
"version": "1.3.2", | ||
"version": "1.3.3", | ||
"description": "fast mysql driver. Implements core protocol, prepared statements, ssl and compression in native JS", | ||
@@ -56,3 +56,3 @@ "main": "index.js", | ||
"object-assign": "^4.1.1", | ||
"readable-stream": "2.2.9", | ||
"readable-stream": "2.2.11", | ||
"safe-buffer": "^5.0.1", | ||
@@ -64,2 +64,3 @@ "seq-queue": "0.0.5", | ||
"assert-diff": "^1.2.0", | ||
"error-stack-parser": "^2.0.1", | ||
"eslint": "^3.19.0", | ||
@@ -71,4 +72,5 @@ "eslint-config-prettier": "^2.1.1", | ||
"husky": "^0.13.3", | ||
"is-async-supported": "^1.2.0", | ||
"lint-staged": "^3.4.2", | ||
"portfinder": "^1.0.10", | ||
"lint-staged": "^3.4.2", | ||
"prettier": "^1.3.1", | ||
@@ -75,0 +77,0 @@ "prettier-markdown": "^0.1.6", |
223
promise.js
@@ -6,45 +6,63 @@ var core = require('./index.js'); | ||
function inheritEvents(source, target, events) { | ||
events | ||
.forEach(function (eventName) { | ||
source.on(eventName, function () { | ||
var args = [].slice.call(arguments); | ||
args.unshift(eventName); | ||
events.forEach(function(eventName) { | ||
source.on(eventName, function() { | ||
var args = [].slice.call(arguments); | ||
args.unshift(eventName); | ||
target.emit.apply(target, args); | ||
}); | ||
target.emit.apply(target, args); | ||
}); | ||
}); | ||
} | ||
function createConnection (opts) { | ||
var coreConnection = core.createConnection(opts); | ||
var Promise = opts.Promise || global.Promise; | ||
function createConnection(opts) { | ||
const coreConnection = core.createConnection(opts); | ||
const createConnectionErr = new Error(); | ||
const Promise = opts.Promise || global.Promise; | ||
if (!Promise) { | ||
throw new Error('no Promise implementation available.' + | ||
'Use promise-enabled node version or pass userland Promise' + | ||
' implementation as parameter, for example: { Promise: require(\'bluebird\') }'); | ||
throw new Error( | ||
'no Promise implementation available.' + | ||
'Use promise-enabled node version or pass userland Promise' + | ||
" implementation as parameter, for example: { Promise: require('bluebird') }" | ||
); | ||
} | ||
return new Promise(function (resolve, reject) { | ||
coreConnection.once('connect', function (connectParams) { | ||
return new Promise(function(resolve, reject) { | ||
coreConnection.once('connect', function(connectParams) { | ||
resolve(new PromiseConnection(coreConnection, Promise)); | ||
}); | ||
coreConnection.once('error', reject); | ||
coreConnection.once('error', err => { | ||
createConnectionErr.message = err.message; | ||
createConnectionErr.code = err.code; | ||
createConnectionErr.errno = err.errno; | ||
createConnectionErr.sqlState = err.sqlState; | ||
reject(createConnectionErr); | ||
}); | ||
}); | ||
} | ||
function PromiseConnection (connection, promiseImpl) { | ||
function PromiseConnection(connection, promiseImpl) { | ||
this.connection = connection; | ||
this.Promise = promiseImpl; | ||
inheritEvents(connection, this, ['error', 'drain', 'connect', 'end', 'enqueue']); | ||
inheritEvents(connection, this, [ | ||
'error', | ||
'drain', | ||
'connect', | ||
'end', | ||
'enqueue' | ||
]); | ||
} | ||
util.inherits(PromiseConnection, EventEmitter); | ||
PromiseConnection.prototype.release = function () { | ||
PromiseConnection.prototype.release = function() { | ||
this.connection.release(); | ||
}; | ||
function makeDoneCb (resolve, reject) { | ||
return function (err, rows, fields) { | ||
function makeDoneCb(resolve, reject, localErr) { | ||
return function(err, rows, fields) { | ||
if (err) { | ||
reject(err); | ||
localErr.message = err.message; | ||
localErr.code = err.code; | ||
localErr.errno = err.errno; | ||
localErr.sqlState = err.sqlState; | ||
reject(localErr); | ||
} else { | ||
@@ -56,6 +74,7 @@ resolve([rows, fields]); | ||
PromiseConnection.prototype.query = function (query, params) { | ||
var c = this.connection; | ||
return new this.Promise(function (resolve, reject) { | ||
var done = makeDoneCb(resolve, reject); | ||
PromiseConnection.prototype.query = function(query, params) { | ||
const c = this.connection; | ||
const localErr = new Error(); | ||
return new this.Promise(function(resolve, reject) { | ||
const done = makeDoneCb(resolve, reject, localErr); | ||
if (params) { | ||
@@ -69,6 +88,7 @@ c.query(query, params, done); | ||
PromiseConnection.prototype.execute = function (query, params) { | ||
PromiseConnection.prototype.execute = function(query, params) { | ||
var c = this.connection; | ||
return new this.Promise(function (resolve, reject) { | ||
var done = makeDoneCb(resolve, reject); | ||
const localErr = new Error(); | ||
return new this.Promise(function(resolve, reject) { | ||
var done = makeDoneCb(resolve, reject, localErr); | ||
if (params) { | ||
@@ -82,6 +102,6 @@ c.execute(query, params, done); | ||
PromiseConnection.prototype.end = function () { | ||
PromiseConnection.prototype.end = function() { | ||
var c = this.connection; | ||
return new this.Promise(function (resolve, reject) { | ||
c.end(function () { | ||
return new this.Promise(function(resolve, reject) { | ||
c.end(function() { | ||
resolve(); | ||
@@ -92,6 +112,7 @@ }); | ||
PromiseConnection.prototype.beginTransaction = function () { | ||
PromiseConnection.prototype.beginTransaction = function() { | ||
var c = this.connection; | ||
return new this.Promise(function (resolve, reject) { | ||
var done = makeDoneCb(resolve, reject); | ||
const localErr = new Error(); | ||
return new this.Promise(function(resolve, reject) { | ||
var done = makeDoneCb(resolve, reject, localErr); | ||
c.beginTransaction(done); | ||
@@ -101,6 +122,7 @@ }); | ||
PromiseConnection.prototype.commit = function () { | ||
PromiseConnection.prototype.commit = function() { | ||
var c = this.connection; | ||
return new this.Promise(function (resolve, reject) { | ||
var done = makeDoneCb(resolve, reject); | ||
const localErr = new Error(); | ||
return new this.Promise(function(resolve, reject) { | ||
var done = makeDoneCb(resolve, reject, localErr); | ||
c.commit(done); | ||
@@ -110,6 +132,7 @@ }); | ||
PromiseConnection.prototype.rollback = function () { | ||
PromiseConnection.prototype.rollback = function() { | ||
var c = this.connection; | ||
return new this.Promise(function (resolve, reject) { | ||
var done = makeDoneCb(resolve, reject); | ||
const localErr = new Error(); | ||
return new this.Promise(function(resolve, reject) { | ||
var done = makeDoneCb(resolve, reject, localErr); | ||
c.rollback(done); | ||
@@ -119,5 +142,5 @@ }); | ||
PromiseConnection.prototype.ping = function () { | ||
PromiseConnection.prototype.ping = function() { | ||
var c = this.connection; | ||
return new this.Promise(function (resolve, reject) { | ||
return new this.Promise(function(resolve, reject) { | ||
c.ping(resolve); | ||
@@ -127,8 +150,13 @@ }); | ||
PromiseConnection.prototype.connect = function () { | ||
PromiseConnection.prototype.connect = function() { | ||
var c = this.connection; | ||
return new this.Promise(function (resolve, reject) { | ||
c.connect(function (error, param) { | ||
if (error) { | ||
reject(error); | ||
const localErr = new Error(); | ||
return new this.Promise(function(resolve, reject) { | ||
c.connect(function(err, param) { | ||
if (err) { | ||
localErr.message = err.message; | ||
localErr.code = err.code; | ||
localErr.errno = err.errno; | ||
localErr.sqlState = err.sqlState; | ||
reject(localErr); | ||
} else { | ||
@@ -141,11 +169,19 @@ resolve(param); | ||
PromiseConnection.prototype.prepare = function (options) { | ||
PromiseConnection.prototype.prepare = function(options) { | ||
var c = this.connection; | ||
var promiseImpl = this.Promise; | ||
return new this.Promise(function (resolve, reject) { | ||
c.prepare(options, function (error, statement) { | ||
if (error) { | ||
reject(error); | ||
const localErr = new Error(); | ||
return new this.Promise(function(resolve, reject) { | ||
c.prepare(options, function(err, statement) { | ||
if (err) { | ||
localErr.message = err.message; | ||
localErr.code = err.code; | ||
localErr.errno = err.errno; | ||
localErr.sqlState = err.sqlState; | ||
reject(localErr); | ||
} else { | ||
var wrappedStatement = new PromisePreparedStatementInfo(statement, promiseImpl); | ||
var wrappedStatement = new PromisePreparedStatementInfo( | ||
statement, | ||
promiseImpl | ||
); | ||
resolve(wrappedStatement); | ||
@@ -157,3 +193,3 @@ } | ||
function PromisePreparedStatementInfo (statement, promiseImpl) { | ||
function PromisePreparedStatementInfo(statement, promiseImpl) { | ||
this.statement = statement; | ||
@@ -163,5 +199,5 @@ this.Promise = promiseImpl; | ||
PromisePreparedStatementInfo.prototype.execute = function (parameters) { | ||
PromisePreparedStatementInfo.prototype.execute = function(parameters) { | ||
var s = this.statement; | ||
return new this.Promise(function (resolve, reject) { | ||
return new this.Promise(function(resolve, reject) { | ||
var done = makeDoneCb(resolve, reject); | ||
@@ -176,5 +212,5 @@ if (parameters) { | ||
PromisePreparedStatementInfo.prototype.close = function () { | ||
PromisePreparedStatementInfo.prototype.close = function() { | ||
var s = this.statement; | ||
return new this.Promise(function (resolve, reject) { | ||
return new this.Promise(function(resolve, reject) { | ||
s.close(); | ||
@@ -193,4 +229,3 @@ resolve(); | ||
// proxy synchronous functions only | ||
(function (functionsToWrap) { | ||
(function(functionsToWrap) { | ||
for (var i = 0; functionsToWrap && i < functionsToWrap.length; i++) { | ||
@@ -200,9 +235,11 @@ var func = functionsToWrap[i]; | ||
if ( | ||
typeof core.Connection.prototype[func] === 'function' | ||
&& PromiseConnection.prototype[func] === undefined | ||
typeof core.Connection.prototype[func] === 'function' && | ||
PromiseConnection.prototype[func] === undefined | ||
) { | ||
PromiseConnection.prototype[func] = (function factory (funcName) { | ||
return function () { | ||
return core.Connection | ||
.prototype[funcName].apply(this.connection, arguments); | ||
PromiseConnection.prototype[func] = (function factory(funcName) { | ||
return function() { | ||
return core.Connection.prototype[funcName].apply( | ||
this.connection, | ||
arguments | ||
); | ||
}; | ||
@@ -212,5 +249,4 @@ })(func); | ||
} | ||
})([ | ||
// synchronous functions | ||
// synchronous functions | ||
'close', | ||
@@ -231,3 +267,3 @@ 'createBinlogStream', | ||
this.Promise = Promise; | ||
inheritEvents(pool, this, ['acquire', 'connection', 'enqueue', 'release']); | ||
@@ -237,7 +273,7 @@ } | ||
PromisePool.prototype.getConnection = function () { | ||
PromisePool.prototype.getConnection = function() { | ||
var corePool = this.pool; | ||
return new this.Promise(function (resolve, reject) { | ||
corePool.getConnection(function (err, coreConnection) { | ||
return new this.Promise(function(resolve, reject) { | ||
corePool.getConnection(function(err, coreConnection) { | ||
if (err) { | ||
@@ -252,7 +288,7 @@ reject(err); | ||
PromisePool.prototype.query = function (sql, args) { | ||
var corePool = this.pool; | ||
return new this.Promise(function (resolve, reject) { | ||
var done = makeDoneCb(resolve, reject); | ||
PromisePool.prototype.query = function(sql, args) { | ||
const corePool = this.pool; | ||
const localErr = new Error(); | ||
return new this.Promise(function(resolve, reject) { | ||
var done = makeDoneCb(resolve, reject, localErr); | ||
if (args) { | ||
@@ -266,17 +302,22 @@ corePool.query(sql, args, done); | ||
PromisePool.prototype.execute = function (sql, values) { | ||
PromisePool.prototype.execute = function(sql, values) { | ||
var corePool = this.pool; | ||
const localErr = new Error(); | ||
return new Promise(function (resolve, reject) { | ||
corePool.execute(sql, values, makeDoneCb(resolve, reject)); | ||
return new Promise(function(resolve, reject) { | ||
corePool.execute(sql, values, makeDoneCb(resolve, reject, localErr)); | ||
}); | ||
}; | ||
PromisePool.prototype.end = function () { | ||
PromisePool.prototype.end = function() { | ||
var corePool = this.pool; | ||
return new Promise(function (resolve, reject) { | ||
corePool.end(function (err) { | ||
const localErr = new Error(); | ||
return new Promise(function(resolve, reject) { | ||
corePool.end(function(err) { | ||
if (err) { | ||
reject(err); | ||
localErr.message = err.message; | ||
localErr.code = err.code; | ||
localErr.errno = err.errno; | ||
localErr.sqlState = err.sqlState; | ||
reject(localErr); | ||
} else { | ||
@@ -289,9 +330,11 @@ resolve(); | ||
function createPool (opts) { | ||
function createPool(opts) { | ||
var corePool = core.createPool(opts); | ||
var Promise = opts.Promise || global.Promise; | ||
if (!Promise) { | ||
throw new Error('no Promise implementation available.' + | ||
'Use promise-enabled node version or pass userland Promise' + | ||
' implementation as parameter, for example: { Promise: require(\'bluebird\') }'); | ||
throw new Error( | ||
'no Promise implementation available.' + | ||
'Use promise-enabled node version or pass userland Promise' + | ||
" implementation as parameter, for example: { Promise: require('bluebird') }" | ||
); | ||
} | ||
@@ -298,0 +341,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
331171
8505
16
+ Addedreadable-stream@2.2.11(transitive)
+ Addedsafe-buffer@5.0.1(transitive)
- Removedbuffer-shims@1.0.0(transitive)
- Removedreadable-stream@2.2.9(transitive)
Updatedreadable-stream@2.2.11