enhancer-data-bridge
Version:
A bridge between Enhancer Clould and user business datasource
112 lines (102 loc) • 3.51 kB
JavaScript
/**
* Database Service Class
* @param databaseConfiguration {Object} Database configuration
* eg:
{
"default": "__default__",
"connections": {
"__default__": {
"databaseType": "mysql",
"host": "115.28.48.117",
"port": "3306",
"database": "widget_usage",
"user": "zyz",
"password": "passw0rd",
"acquireTimeout": "1000",
"connectionLimit": "100",
"queueLimit": "20",
"bridgeHost": "127.0.0.1",
"bridgePort": "5312",
"connectionMethod": "direct"
}
}
}
*/
function DatabaseService(databaseConfiguration) {
this.config = databaseConfiguration;
this.services = {};
}
DatabaseService.prototype = {
/**
* {Function} query
* @param connectionName {String} [optional] The connection name defined in
* databaseConfiguration.connections. If not set, the query will be executed using
* default connection.
* @param criteria {Object} [required] @see Service.prototype.prepareStatement()
* in ./service-base.js
* @param cb {Function} Callback function.
**/
criteriaQuery: function(connectionName, criteria, cb) {
if (arguments.length === 2) {
cb = criteria;
criteria = connectionName;
connectionName = this.config.default;
}
// Consider rewrite callback to catch adventitious execptions
var callback = cb;
var service = this.getService(connectionName);
criteria.query = (criteria.query || '').replace(/\;\s*$/, '');
service.criteriaQuery(criteria, callback);
},
getService: function(connectionName) {
if (!connectionName) {
connectionName = this.config.default;
}
if (this.services[connectionName]) {
return this.services[connectionName];
}
var dbConfig = this.config.connections[connectionName];
if (!dbConfig) {
dbConfig = this.config.connections[this.config.default];
}
var databaseType = dbConfig.databaseType || 'mysql';
var Service = require('./service-' + databaseType);
this.services[connectionName] = new Service(dbConfig);
return this.services[connectionName];
},
execute: function(connectionName, sql, params, cb) {
if (arguments.length === 3) {
cb = params;
params = sql;
sql = connectionName;
connectionName = this.config.default;
}
var callback = cb;
var dbService = this.getService(connectionName);
dbService.execute(sql, params, function(err, result) {
if (err) {
return callback(err);
}
callback(null, result);
});
},
beginTransaction: function(connectionName, cb) {
if (arguments.length === 1) {
cb = connectionName;
connectionName = this.config.default;
}
var dbService = this.getService(connectionName);
var callback = cb;
dbService.beginTransaction(callback);
},
getConnection: function(connectionName, cb) {
if (arguments.length === 1) {
cb = connectionName;
connectionName = this.config.default;
}
var dbService = this.getService(connectionName);
var callback = cb;
dbService.getConnection(callback);
}
}
module.exports = DatabaseService;