Skip to content
Snippets Groups Projects
index.js 1.8 KiB
Newer Older
  • Learn to ignore specific revisions
  • Hossam Fares's avatar
    Hossam Fares committed
    /* jshint strict: true */
    
    'use strict';
    
    
    var Q = require('q');
    var mysql2 = require('mysql2');
    var instances = {};
    
    Hossam Fares's avatar
    Hossam Fares committed
    
    function DB() {
      this.pool = null;
    }
    
    /**
     * Setup the Database connection pool for this instance
     * @param  {Object} config
     */
    DB.prototype.configure = function (config) {
    
      this.pool = mysql2.createPool(config);
    
    Hossam Fares's avatar
    Hossam Fares committed
    };
    
    /**
     * Run DB query
     * @param  {String} query
     * @param  {Object} [params]
     * @return {Promise}
     */
    DB.prototype.query = function (query, params) {
      params = params || {};
    
      var db = this;
    
    Hossam Fares's avatar
    Hossam Fares committed
    
    
      return Q.Promise(function (resolve, reject) {
        db.pool.getConnection(function (err, con) {
    
    Hossam Fares's avatar
    Hossam Fares committed
          if (err) {
            if (con) {
              con.release();
            }
    
            return reject(err);
    
    Hossam Fares's avatar
    Hossam Fares committed
          }
    
    
          con.query(query, params, function (err) {
            if (err) {
              if (con) {
                con.release();
              }
    
              
              return reject(err);
    
            }
    
            resolve([].splice.call(arguments, 1));
            con.release();
          });
    
    Hossam Fares's avatar
    Hossam Fares committed
        });
      });
    };
    
    /**
     * Run DB execute
     * @param  {String} query
     * @param  {Object} [params]
     * @return {Promise}
     */
    DB.prototype.execute = function (query, params) {
      params = params || {};
    
      var db = this;
    
    Hossam Fares's avatar
    Hossam Fares committed
    
    
      return Q.Promise(function (resolve, reject) {
        db.pool.getConnection(function (err, con) {
    
    Hossam Fares's avatar
    Hossam Fares committed
          if (err) {
            if (con) {
              con.release();
            }
    
            return reject(err);
    
    Hossam Fares's avatar
    Hossam Fares committed
          }
    
    
          con.execute(query, params, function (err) {
            if (err) {
              if (con) {
                con.release();
              }
    
              
              return reject(err);
    
            }
    
            resolve([].splice.call(arguments, 1));
            con.release();
          });
    
    Hossam Fares's avatar
    Hossam Fares committed
        });
      });
    };
    
    module.exports = function (name) {
      name = name || '_default_';
    
    Hossam Fares's avatar
    Hossam Fares committed
      if (!instances[name]) {
        instances[name] = new DB();
      }
    
    Hossam Fares's avatar
    Hossam Fares committed
      return instances[name];
    };