1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | var
|
13 | mysql = require('mysql');
|
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 printout = 'tcp://' + query.datasource.user + ':' + query.datasource.password.replace(/./g, '*') + '@' + query.datasource.host + ':' + (query.datasource.port || 3306) + '/' + query.datasource.dbname;
|
24 | joola.logger.debug('Open connection to MySQL: ' + printout);
|
25 | return mysql.createConnection({host: query.datasource.host, user: query.datasource.user, password: query.datasource.password, database: query.datasource.dbname});
|
26 | };
|
27 |
|
28 | exports.close = function (connection, query) {
|
29 | var printout = 'tcp://' + query.datasource.user + ':' + query.datasource.password.replace(/./g, '*') + '@' + query.datasource.host + ':' + (query.datasource.port || 3306) + '/' + query.datasource.dbname;
|
30 | joola.logger.silly('Close connection to MySQL: ' + printout);
|
31 | connection.end();
|
32 | };
|
33 |
|
34 | exports.executeQuery = function (query, callback) {
|
35 | var self = this;
|
36 | var connection = this.open(query);
|
37 |
|
38 | if (query.limit)
|
39 | query.sql = removeTrailing(query.sql) + ' LIMIT ' + query.limit + ';';
|
40 |
|
41 | query.sql = query.sql.replace(/"/gi, '');
|
42 |
|
43 | connection.query(query.sql, function (err, rows) {
|
44 | if (err)
|
45 | return callback(err);
|
46 |
|
47 | var _fields = [];
|
48 | var _rows = [];
|
49 |
|
50 | if (rows.length > 0) {
|
51 | _.each(rows[0], function (value, column) {
|
52 | _fields.push({name: column});
|
53 | })
|
54 | }
|
55 |
|
56 | _.each(rows, function (row) {
|
57 | var _row = {};
|
58 | _.each(row, function (value, column) {
|
59 | _row[column] = row[column];
|
60 |
|
61 | });
|
62 | _rows.push(_row);
|
63 | });
|
64 |
|
65 | var result = {
|
66 | fields: _fields,
|
67 | rows: _rows
|
68 | };
|
69 |
|
70 | self.close(connection, query);
|
71 | return callback(err, result);
|
72 | });
|
73 | }; |
\ | No newline at end of file |