UNPKG

miridoo-js-orm

Version:
139 lines (119 loc) 4.25 kB
var SGBD = require(__dirname+'/../sgbd/index'); var Table = require(__dirname+'/Table'); var colors = require('colors'); module.exports = function($conf){ //extend from sgbd SGBD.apply(this, arguments); $conf = $conf || {}; $conf.stringifyObjects = true; var self = this; var mysql = require('mysql'); var $poolConf = { host : $conf.host, user : $conf.user, password : $conf.password, database : $conf.name }; var $connection = mysql.createConnection($conf); var $pool = null; function config(connection){ connection.config.queryFormat = function (query, values){ if (!values) return query; return query.replace(/\:(\w+)/g, function (txt, key){ if (values.hasOwnProperty(key)) { return this.escape(values[key]); } return txt; }.bind(this)); }; } config($connection); this.destroy = function(){ return $connection.destroy(); }; this.connect = function(){ return new Promise(function(resolve, reject){ $connection.connect(function(err){ if(err) reject(err); else resolve(); }); }); }; this.disconnect = function(){ }; this.use = function(name){ return new Promise(function(resolve, reject){ if($conf.xdebug == true){ console.log('SQL --> '.yellow+' USE '+name, {}); } $connection.query('USE '+name, function(err, result){ if(err){ reject(err); } else{ $poolConf.database = name; $pool = mysql.createPool($poolConf); resolve(result); } $connection.destroy(); }); }); }; this.database = function(name, charset, collate){ var query = []; if(charset) query.push('CHARACTER SET '+charset); if(collate) query.push('COLLATE '+collate); return new Promise(function(resolve, reject){ if($conf.xdebug == true){ console.log('SQL --> '.yellow+' CREATE DATABASE IF NOT EXISTS '+name+' '+query.join(' '), {}); } $connection.query('CREATE DATABASE IF NOT EXISTS '+name+' '+query.join(' '), function(err, result){ if(err){ reject(err); }else{ self.use(name).then(function(){ resolve(result); }); } }); }); }; this.query = function(query, params, call){ $pool.getConnection(function(err, connection){ config(connection); var cb = function(err, rsp){ connection.release(); (call)? call(rsp, err) : null; }; if (typeof params == 'function') { call = params; params = {}; } connection.query(query, params || {}, cb); if($conf.xdebug == true){ /* * display all query and params */ console.log('SQL --> '.yellow+' '+query, params); } }); }; this.tables = function(){ return new Promise(function(resolve, reject){ if($conf.xdebug == true){ console.log('SQL --> '.yellow+' SHOW TABLES', {}); } self.query('SHOW TABLES', function(result, err){ if(err) reject(err); else{ var tables = []; for(var i in result){ for(var j in result[i]){ tables.push(result[i][j]); break; } } resolve(tables); } }); }); }; this.table = function(name){ var table = new Table(name, this); table.$sql = this; return table; }; };