UNPKG

2.17 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 mysql = require('mysql');
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 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
28exports.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
34exports.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