UNPKG

2.37 kBJavaScriptView Raw
1/**
2 * joola.io
3 *
4 * Copyright Joola Smart Solutions, Ltd. <info@joo.la>
5 *
6 * Licensed under GNU General Public License 3.0 or later.
7 * Some rights reserved. See LICENSE, AUTHORS.
8 *
9 * @license GPL-3.0+ <http://spdx.org/licenses/GPL-3.0+>
10 */
11
12var
13 pg = require('pg');
14
15var removeTrailing = function (sql) {
16 if (sql.substring(sql.length - 1) == ';')
17 return sql.substring(0, sql.length - 1);
18 else
19 return sql;
20};
21
22exports.open = function (query) {
23 var constring = 'tcp://' + query.datasource.user + ':' + query.datasource.password + '@' + query.datasource.host + ':' + (query.datasource.port || 5432) + '/' + query.datasource.dbname;
24 var printout = 'tcp://' + query.datasource.user + ':' + query.datasource.password.replace(/./g, '*') + '@' + query.datasource.host + ':' + (query.datasource.port || 5432) + '/' + query.datasource.dbname;
25 joola.logger.debug('Open connection to PG: ' + printout);
26
27 return new pg.Client(constring);
28};
29
30exports.close = function (connection, query) {
31 var printout = 'tcp://' + query.datasource.user + ':' + query.datasource.password.replace(/./g, '*') + '@' + query.datasource.host + ':' + (query.datasource.port || 5432) + '/' + query.datasource.dbname;
32 joola.logger.silly('Close connection to PG: ' + printout);
33 connection.end();
34};
35
36exports.executeQuery = function (query, callback) {
37 var self = this;
38
39 if (query.limit)
40 //query.limit = 50000;
41 query.sql = removeTrailing(query.sql) + ' LIMIT ' + query.limit + ';';
42
43 query.sql = query.sql.replace(/`/gi, '"');
44 var connection = this.open(query);
45 try {
46 connection.connect(function (err) {
47
48 if (err) {
49 joola.logger.error('DB Error: ' + err);
50 return callback(err);
51 }
52
53 try {
54 connection.query(query.sql, function (err, result) {
55 self.close(connection, query);
56 if (err) {
57 joola.logger.error('Query Error: ' + err);
58 return callback(err, null);
59 }
60 else {
61 return callback(null, result);
62 }
63 });
64 }
65 catch (ex) {
66 joola.logger.error('Query Exception: ' + err);
67 return callback(err, null);
68 }
69 });
70 }
71 catch (ex) {
72 joola.logger.error('Connect Error: ' + err);
73 return callback(err, null);
74 }
75};