joola.io.engine
Version:
joola.io's Framework Engine
76 lines (65 loc) • 2.29 kB
JavaScript
/**
* joola.io
*
* Copyright Joola Smart Solutions, Ltd. <info@joo.la>
*
* Licensed under GNU General Public License 3.0 or later.
* Some rights reserved. See LICENSE, AUTHORS.
*
* @license GPL-3.0+ <http://spdx.org/licenses/GPL-3.0+>
*/
var
pg = require('pg');
var removeTrailing = function (sql) {
if (sql.substring(sql.length - 1) == ';')
return sql.substring(0, sql.length - 1);
else
return sql;
};
exports.open = function (query) {
var constring = 'tcp://' + query.datasource.user + ':' + query.datasource.password + '@' + query.datasource.host + ':' + (query.datasource.port || 5432) + '/' + query.datasource.dbname;
var printout = 'tcp://' + query.datasource.user + ':' + query.datasource.password.replace(/./g, '*') + '@' + query.datasource.host + ':' + (query.datasource.port || 5432) + '/' + query.datasource.dbname;
joola.logger.debug('Open connection to PG: ' + printout);
return new pg.Client(constring);
};
exports.close = function (connection, query) {
var printout = 'tcp://' + query.datasource.user + ':' + query.datasource.password.replace(/./g, '*') + '@' + query.datasource.host + ':' + (query.datasource.port || 5432) + '/' + query.datasource.dbname;
joola.logger.silly('Close connection to PG: ' + printout);
connection.end();
};
exports.executeQuery = function (query, callback) {
var self = this;
if (query.limit)
//query.limit = 50000;
query.sql = removeTrailing(query.sql) + ' LIMIT ' + query.limit + ';';
query.sql = query.sql.replace(/`/gi, '"');
var connection = this.open(query);
try {
connection.connect(function (err) {
if (err) {
joola.logger.error('DB Error: ' + err);
return callback(err);
}
try {
connection.query(query.sql, function (err, result) {
self.close(connection, query);
if (err) {
joola.logger.error('Query Error: ' + err);
return callback(err, null);
}
else {
return callback(null, result);
}
});
}
catch (ex) {
joola.logger.error('Query Exception: ' + err);
return callback(err, null);
}
});
}
catch (ex) {
joola.logger.error('Connect Error: ' + err);
return callback(err, null);
}
};