UNPKG

mysql2

Version:

fast mysql driver. Implements core protocol, prepared statements, ssl and compression in native JS

128 lines (113 loc) 3.25 kB
var core = require('./index.js'); function createConnection (opts) { var coreConnection = core.createConnection(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(\'es6-promise\').Promise }'); } return new Promise(function (resolve, reject) { coreConnection.once('connect', function (connectParams) { resolve(new PromiseConnection(coreConnection, Promise)); }); coreConnection.once('error', reject); }); } function PromiseConnection (connection, promiseImpl) { this.connection = connection; this.Promise = promiseImpl; } PromiseConnection.prototype.release = function () { this.connection.release(); }; function makeDoneCb (resolve, reject) { return function (err, rows, fields) { if (err) { reject(err); } else { 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); if (params) { c.query(query, params, done); } else { c.query(query, done); } }); }; PromiseConnection.prototype.execute = function (query, params) { var c = this.connection; return new this.Promise(function (resolve, reject) { var done = makeDoneCb(resolve, reject); if (params) { c.execute(query, params, done); } else { c.execute(query, done); } }); }; PromiseConnection.prototype.end = function () { var c = this.connection; return new this.Promise(function (resolve, reject) { c.end(function () { resolve(); }); }); }; function createPool (opts) { var corePool = core.createPool(opts); var Promise = opts.Promise || global.Promise || require('es6-promise'); var promisePool = { getConnection: function () { return new Promise(function (resolve, reject) { corePool.getConnection(function (err, coreConnection) { if (err) { reject(err); } else { resolve(new PromiseConnection(coreConnection, Promise)); } }); }); }, query: function (sql, args) { return new Promise(function (resolve, reject) { var done = makeDoneCb(resolve, reject); if (args) { corePool.query(sql, args, done); } else { corePool.query(sql, done); } }); }, execute: function (sql, args) { return new Promise(function (resolve, reject) { var done = makeDoneCb(resolve, reject); if (args) { corePool.execute(sql, args, done); } else { corePool.execute(sql, done); } }); }, end: function () { return new Promise(function (resolve, reject) { corePool.end(function (err) { if (err) { reject(err); } else { resolve(); } }); }); } }; return promisePool; } module.exports.createConnection = createConnection; module.exports.createPool = createPool;