UNPKG

joola.io.engine

Version:
76 lines (65 loc) 2.29 kB
/** * 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); } };