Skip to content

Commit 1c35d46

Browse files
committed
Expose escape & format methods on connection pool
Escape methods already exist on Pool, so are only new to PromisePool
1 parent d854344 commit 1c35d46

File tree

4 files changed

+112
-29
lines changed

4 files changed

+112
-29
lines changed

index.js

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,28 @@ var SqlString = require('sqlstring');
33
var Connection = require('./lib/connection.js');
44
var ConnectionConfig = require('./lib/connection_config.js');
55

6-
module.exports.createConnection = function (opts) {
7-
return new Connection({config: new ConnectionConfig(opts)});
6+
module.exports.createConnection = function(opts) {
7+
return new Connection({ config: new ConnectionConfig(opts) });
88
};
99

1010
module.exports.connect = module.exports.createConnection;
1111
module.exports.Connection = Connection;
1212

13-
module.exports.createPool = function (config) {
13+
var Pool = require('./lib/pool.js');
14+
15+
module.exports.createPool = function(config) {
1416
var PoolConfig = require('./lib/pool_config.js');
15-
var Pool = require('./lib/pool.js');
16-
return new Pool({config: new PoolConfig(config)});
17+
return new Pool({ config: new PoolConfig(config) });
1718
};
1819

19-
exports.createPoolCluster = function (config) {
20+
exports.createPoolCluster = function(config) {
2021
var PoolCluster = require('./lib/pool_cluster.js');
2122
return new PoolCluster(config);
2223
};
2324

24-
module.exports.createServer = function (handler) {
25+
module.exports.Pool = Pool;
26+
27+
module.exports.createServer = function(handler) {
2528
var Server = require('./lib/server.js');
2629
var s = new Server();
2730
if (handler) {
@@ -34,26 +37,26 @@ exports.escape = SqlString.escape;
3437
exports.escapeId = SqlString.escapeId;
3538
exports.format = SqlString.format;
3639

37-
exports.__defineGetter__('createConnectionPromise', function () {
40+
exports.__defineGetter__('createConnectionPromise', function() {
3841
return require('./promise.js').createConnection;
3942
});
4043

41-
exports.__defineGetter__('createPoolPromise', function () {
44+
exports.__defineGetter__('createPoolPromise', function() {
4245
return require('./promise.js').createPool;
4346
});
4447

45-
exports.__defineGetter__('createPoolClusterPromise', function () {
48+
exports.__defineGetter__('createPoolClusterPromise', function() {
4649
return require('./promise.js').createPoolCluster;
4750
});
4851

49-
exports.__defineGetter__('Types', function () {
52+
exports.__defineGetter__('Types', function() {
5053
return require('./lib/constants/types.js');
5154
});
5255

53-
exports.__defineGetter__('Charsets', function () {
56+
exports.__defineGetter__('Charsets', function() {
5457
return require('./lib/constants/charsets.js');
5558
});
5659

57-
exports.__defineGetter__('CharsetToEncoding', function () {
60+
exports.__defineGetter__('CharsetToEncoding', function() {
5861
return require('./lib/constants/charset_encodings.js');
5962
});

lib/pool.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,15 @@ Pool.prototype._removeConnection = function(connection) {
194194
this.releaseConnection(connection);
195195
};
196196

197+
Pool.prototype.format = function(sql, values) {
198+
return mysql.format(
199+
sql,
200+
values,
201+
this.config.connectionConfig.stringifyObjects,
202+
this.config.connectionConfig.timezone
203+
);
204+
};
205+
197206
Pool.prototype.escape = function(value) {
198207
return mysql.escape(
199208
value,

promise.js

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,26 @@ var util = require('util');
44

55
function inheritEvents(source, target, events) {
66
var listeners = {};
7-
target.on('newListener', function(eventName) {
8-
if (events.indexOf(eventName) >= 0 && !target.listenerCount(eventName)) {
9-
source.on(eventName, listeners[eventName] = function() {
10-
var args = [].slice.call(arguments);
11-
args.unshift(eventName);
12-
13-
target.emit.apply(target, args);
14-
});
15-
}
16-
}).on('removeListener', function(eventName) {
17-
if (events.indexOf(eventName) >= 0 && !target.listenerCount(eventName)) {
18-
source.removeListener(eventName, listeners[eventName]);
19-
delete listeners[eventName];
20-
}
21-
});
7+
target
8+
.on('newListener', function(eventName) {
9+
if (events.indexOf(eventName) >= 0 && !target.listenerCount(eventName)) {
10+
source.on(
11+
eventName,
12+
(listeners[eventName] = function() {
13+
var args = [].slice.call(arguments);
14+
args.unshift(eventName);
15+
16+
target.emit.apply(target, args);
17+
})
18+
);
19+
}
20+
})
21+
.on('removeListener', function(eventName) {
22+
if (events.indexOf(eventName) >= 0 && !target.listenerCount(eventName)) {
23+
source.removeListener(eventName, listeners[eventName]);
24+
delete listeners[eventName];
25+
}
26+
});
2227
}
2328

2429
function createConnection(opts) {
@@ -213,7 +218,7 @@ function PromisePreparedStatementInfo(statement, promiseImpl) {
213218

214219
PromisePreparedStatementInfo.prototype.execute = function(parameters) {
215220
var s = this.statement;
216-
var localErr = new Error()
221+
var localErr = new Error();
217222
return new this.Promise(function(resolve, reject) {
218223
var done = makeDoneCb(resolve, reject, localErr);
219224
if (parameters) {
@@ -272,6 +277,29 @@ PromisePreparedStatementInfo.prototype.close = function() {
272277
'unprepare'
273278
]);
274279

280+
(function(functionsToWrap) {
281+
for (var i = 0; functionsToWrap && i < functionsToWrap.length; i++) {
282+
var func = functionsToWrap[i];
283+
284+
if (
285+
typeof core.Pool.prototype[func] === 'function' &&
286+
PromisePool.prototype[func] === undefined
287+
) {
288+
PromisePool.prototype[func] = (function factory(funcName) {
289+
return function() {
290+
console.log(core.Pool.prototype[funcName]);
291+
return core.Pool.prototype[funcName].apply(this.pool, arguments);
292+
};
293+
})(func);
294+
}
295+
}
296+
})([
297+
// synchronous functions
298+
'escape',
299+
'escapeId',
300+
'format'
301+
]);
302+
275303
function PromisePool(pool, Promise) {
276304
this.pool = pool;
277305
this.Promise = Promise;

test/unit/test-Pool.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
const mysql = require('../..');
2+
const test = require('utest');
3+
const assert = require('assert');
4+
5+
const poolConfig = { config: { connectionConfig: {} } };
6+
7+
const pool = new mysql.createPool(poolConfig);
8+
test('Pool', {
9+
'exposes escape': () => {
10+
assert.equal(pool.escape(123), '123');
11+
},
12+
13+
'exposes escapeId': () => {
14+
assert.equal(pool.escapeId('table name'), '`table name`');
15+
},
16+
17+
'exposes format': () => {
18+
const params = ['table name', 'thing'];
19+
assert.equal(
20+
pool.format('SELECT a FROM ?? WHERE b = ?', params),
21+
"SELECT a FROM `table name` WHERE b = 'thing'"
22+
);
23+
}
24+
});
25+
26+
const promisePool = new mysql.createPoolPromise(poolConfig);
27+
test('PromisePool', {
28+
'exposes escape': () => {
29+
assert.equal(pool.escape(123), '123');
30+
},
31+
32+
'exposes escapeId': () => {
33+
assert.equal(pool.escapeId('table name'), '`table name`');
34+
},
35+
36+
'exposes format': () => {
37+
const params = ['table name', 'thing'];
38+
assert.equal(
39+
pool.format('SELECT a FROM ?? WHERE b = ?', params),
40+
"SELECT a FROM `table name` WHERE b = 'thing'"
41+
);
42+
}
43+
});

0 commit comments

Comments
 (0)