1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | var
|
13 | pg = require('pg');
|
14 |
|
15 | var 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 |
|
22 | exports.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 |
|
30 | exports.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 |
|
36 | exports.executeQuery = function (query, callback) {
|
37 | var self = this;
|
38 |
|
39 | if (query.limit)
|
40 |
|
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 | };
|