miridoo-js-orm
Version:
miridoo javascript orm for database
139 lines (119 loc) • 4.25 kB
JavaScript
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;
};
};