-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathquery-runner.js
84 lines (64 loc) · 2.14 KB
/
query-runner.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
let mysql = require('mysql');
let config = require('./config.js');
let cleanup = require('./cleanup')
class QueryRunner {
constructor() {
this.pool = mysql.createPool(config);
let self = this;
cleanup.Cleanup(()=> {
this.releasePool(self.pool);
});
}
runQuery(sqlStatement) {
console.log('Executing: ' + sqlStatement);
let self = this;
return new Promise((resolve, reject) => {
self.pool.getConnection((err, connection) => {
if (err) {
reject(err);
} // not connected!
// Use the connection
connection.query(sqlStatement, function (error, results, fields) {
// When done with the connection, release it.
connection.release();
// Handle error after the release.
if (error) {
console.error('Error running sql: ' + sqlStatement, error);
// Error handling through repsonse object, to allow others to run to completion.
resolve({
error: error
});
} else {
let toReturn = {
results: results,
fields: fields
}
resolve(toReturn);
}
// Don't use the connection here, it has been returned to the pool.
});
});
});
}
releasePool(pool) {
console.log('Closing pool');
pool.end(function (err) {
if (err) {
console.error('Could not end all conections', err);
} else {
console.log('Ended mysql connection pool');
}
});
}
}
class Singleton {
constructor() {
if (!Singleton.instance) {
Singleton.instance = new QueryRunner();
}
}
getInstance() {
return Singleton.instance;
}
}
module.exports = Singleton;