connection = function (config, _connection){ var self = this, connect = function(resolve, reject) { if (_connection) { self.connection = _connection; resolve(); } else { self.connection = mysql.createConnection(self.config); self.connection.connect( function(err){ if (err) { self.connection.err = err; if (typeof reject === 'function') { return reject(err); } else { setTimeout(function(){ connect(); }, 2000); return; } } else { delete self.connection.err; if (typeof resolve === 'function') { return resolve(); } } } ); self.connection.on('error', function(err) { console.log('db error', err); self.connection.err = err; if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET' || err.code === 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR ') { connect(); } }); } }; this.config = config; return new Promise(function(resolve, reject) { connect( function(){ return resolve(self); }, function(err){ return reject(err); } ); }); }
n/a
createConnection = function (config){ return new Connection(config); }
...
```bash
$ npm install promise-mysql
```
Please refer to [mysqljs/mysql](https://github.com/mysqljs/mysql) for documentation on how to use the mysql functions and refer
to [Bluebird](https://github.com/petkaantonov/bluebird/) for documentation on Bluebird's promises
At the minute only the standard connection (using `.createConnection()`) and the pool
(using `.createPool()`) is supported. `createPoolCluster` is not implemented yet.
## Examples
### Connection
To connect, you simply call `.createConnection()` like you would on mysqljs/mysql:
```javascript
...
createPool = function (config){ return new Pool(config); }
...
```bash
$ npm install promise-mysql
```
Please refer to [mysqljs/mysql](https://github.com/mysqljs/mysql) for documentation on how to use the mysql functions and refer
to [Bluebird](https://github.com/petkaantonov/bluebird/) for documentation on Bluebird's promises
At the minute only the standard connection (using `.createConnection()`) and the pool (using `.createPool()`) is supported. `createPoolCluster` is not implemented yet.
## Examples
### Connection
To connect, you simply call `.createConnection()` like you would on mysqljs/mysql:
```javascript
...
function escape(value, stringifyObjects, timeZone) { var SqlString = loadClass('SqlString'); return SqlString.escape(value, stringifyObjects, timeZone); }
...
};
connection.prototype.resume = function() {
this.connection.resume();
};
connection.prototype.escape = function(value) {
return this.connection.escape(value);
};
connection.prototype.escapeId = function(value) {
return this.connection.escapeId(value);
};
connection.prototype.format = function(sql, values) {
...
function escapeId(value, forbidQualified) { var SqlString = loadClass('SqlString'); return SqlString.escapeId(value, forbidQualified); }
...
};
connection.prototype.escape = function(value) {
return this.connection.escape(value);
};
connection.prototype.escapeId = function(value) {
return this.connection.escapeId(value);
};
connection.prototype.format = function(sql, values) {
return this.connection.format(sql, values);
};
module.exports = connection;
...
function format(sql, values, stringifyObjects, timeZone) { var SqlString = loadClass('SqlString'); return SqlString.format(sql, values, stringifyObjects, timeZone); }
...
};
connection.prototype.escapeId = function(value) {
return this.connection.escapeId(value);
};
connection.prototype.format = function(sql, values) {
return this.connection.format(sql, values);
};
module.exports = connection;
...
pool = function (config) { this.pool = mysql.createPool(config); }
n/a
connection = function (config, _connection){ var self = this, connect = function(resolve, reject) { if (_connection) { self.connection = _connection; resolve(); } else { self.connection = mysql.createConnection(self.config); self.connection.connect( function(err){ if (err) { self.connection.err = err; if (typeof reject === 'function') { return reject(err); } else { setTimeout(function(){ connect(); }, 2000); return; } } else { delete self.connection.err; if (typeof resolve === 'function') { return resolve(); } } } ); self.connection.on('error', function(err) { console.log('db error', err); self.connection.err = err; if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET' || err.code === 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR ') { connect(); } }); } }; this.config = config; return new Promise(function(resolve, reject) { connect( function(){ return resolve(self); }, function(err){ return reject(err); } ); }); }
n/a
beginTransaction = function () { return promiseCallback.apply(this.connection, ['beginTransaction', arguments]); }
n/a
changeUser = function (data) { return promiseCallback.apply(this.connection, ['changeUser', arguments]); }
n/a
commit = function () { return promiseCallback.apply(this.connection, ['commit', arguments]); }
n/a
destroy = function () { this.connection.destroy(); }
...
};
connection.prototype.end = function(data) {
return promiseCallback.apply(this.connection, ['end', arguments]);
};
connection.prototype.destroy = function() {
this.connection.destroy();
};
connection.prototype.pause = function() {
this.connection.pause();
};
connection.prototype.resume = function() {
...
end = function (data) { return promiseCallback.apply(this.connection, ['end', arguments]); }
n/a
escape = function (value) { return this.connection.escape(value); }
...
};
connection.prototype.resume = function() {
this.connection.resume();
};
connection.prototype.escape = function(value) {
return this.connection.escape(value);
};
connection.prototype.escapeId = function(value) {
return this.connection.escapeId(value);
};
connection.prototype.format = function(sql, values) {
...
escapeId = function (value) { return this.connection.escapeId(value); }
...
};
connection.prototype.escape = function(value) {
return this.connection.escape(value);
};
connection.prototype.escapeId = function(value) {
return this.connection.escapeId(value);
};
connection.prototype.format = function(sql, values) {
return this.connection.format(sql, values);
};
module.exports = connection;
...
format = function (sql, values) { return this.connection.format(sql, values); }
...
};
connection.prototype.escapeId = function(value) {
return this.connection.escapeId(value);
};
connection.prototype.format = function(sql, values) {
return this.connection.format(sql, values);
};
module.exports = connection;
...
pause = function () { this.connection.pause(); }
...
};
connection.prototype.destroy = function() {
this.connection.destroy();
};
connection.prototype.pause = function() {
this.connection.pause();
};
connection.prototype.resume = function() {
this.connection.resume();
};
connection.prototype.escape = function(value) {
...
ping = function (data) { return promiseCallback.apply(this.connection, ['ping', arguments]); }
n/a
query = function (sql, values) { return promiseCallback.apply(this.connection, ['query', arguments]); }
...
host: 'localhost',
user: 'sauron',
password: 'theonetruering',
database: 'mordor'
}).then(function(conn){
connection = conn;
return connection.query('select `name` from hobbits');
}).then(function(rows){
// Logs out a list of hobbits
console.log(rows);
});
```
You can even chain the promises, using a return within the .then():
...
resume = function () { this.connection.resume(); }
...
};
connection.prototype.pause = function() {
this.connection.pause();
};
connection.prototype.resume = function() {
this.connection.resume();
};
connection.prototype.escape = function(value) {
return this.connection.escape(value);
};
connection.prototype.escapeId = function(value) {
...
rollback = function () { return promiseCallback.apply(this.connection, ['rollback', arguments]); }
n/a
statistics = function (data) { return promiseCallback.apply(this.connection, ['statistics', arguments]); }
n/a
promiseCallback = function (functionName, params) { var self = this; params = Array.prototype.slice.call(params, 0); return new Promise(function(resolve, reject) { params.push(function(err) { var args = Array.prototype.slice.call(arguments, 1); if (err) { return reject(err); } return resolve.apply(this, args); }); self[functionName].apply(self, params); }); }
n/a
pool = function (config) { this.pool = mysql.createPool(config); }
n/a
end = function (data) { return promiseCallback.apply(this.pool, ['end', arguments]); }
n/a
escape = function (value) { return this.pool.escape(value); }
...
};
connection.prototype.resume = function() {
this.connection.resume();
};
connection.prototype.escape = function(value) {
return this.connection.escape(value);
};
connection.prototype.escapeId = function(value) {
return this.connection.escapeId(value);
};
connection.prototype.format = function(sql, values) {
...
escapeId = function (value) { return this.pool.escapeId(value); }
...
};
connection.prototype.escape = function(value) {
return this.connection.escape(value);
};
connection.prototype.escapeId = function(value) {
return this.connection.escapeId(value);
};
connection.prototype.format = function(sql, values) {
return this.connection.format(sql, values);
};
module.exports = connection;
...
function getConnection() { return promiseCallback.apply(this.pool, ['getConnection', arguments]) .then(function(con) { return new Connection(null, con); }); }
...
});
```
Get a connection from the pool:
```javascript
pool.getConnection().then(function(connection) {
connection.query('select `name` from hobbits').then(...)
}).catch(function(err) {
done(err);
});
```
#### Using/Disposer Pattern with Pool
...
on = function (event, fn) { this.pool.on(event, fn); }
...
if (typeof resolve === 'function') {
return resolve();
}
}
}
);
self.connection.on('error', function(err) {
console.log('db error', err);
self.connection.err = err;
if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET' || err.code === 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR
') {
connect();
}
});
}
...
query = function (sql, values) { return promiseCallback.apply(this.pool, ['query', arguments]); }
...
host: 'localhost',
user: 'sauron',
password: 'theonetruering',
database: 'mordor'
}).then(function(conn){
connection = conn;
return connection.query('select `name` from hobbits');
}).then(function(rows){
// Logs out a list of hobbits
console.log(rows);
});
```
You can even chain the promises, using a return within the .then():
...
function releaseConnection(connection) { //Use the underlying connection from the mysql-module here: return this.pool.releaseConnection(connection.connection); }
...
password: 'theonetruering',
database: 'mordor',
connectionLimit: 10
});
function getSqlConnection() {
return pool.getConnection().disposer(function(connection) {
pool.releaseConnection(connection);
});
}
module.exports = getSqlConnection;
```
sqlQuery.js:
...