-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
91 lines (80 loc) · 2.15 KB
/
index.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
84
85
86
87
88
89
90
91
var mysql = require('mysql');
var fs = require('fs');
var path = require('path');
var nimble = require('nimble');
var Promise = require('bluebird');
var connection = null;
function connect(connectionObj)
{
connectionObj.host = connectionObj.host !== undefined ? connectionObj.host : 'localhost';
connectionObj.multipleStatements = true;
connection = mysql.createConnection(connectionObj);
connection.connect();
return connection;
}
function disconnect()
{
connection.end();
connection = null;
}
function getFiles(directory)
{
var toReturn = [];
var fileRegex = new RegExp("^.+[.]sql$", "g");
var files = fs.readdirSync(directory);
files.forEach(function(file) {
if(file.match(fileRegex) !== null)
{
toReturn.push(file);
}
});
return toReturn;
}
function executeFile(file, callback)
{
//Return a promise is no callback
if(!callback) {
return new Promise(function(resolve, reject) {
executeFile(file, function(err) {
if(err) {
reject(err);
} else {
resolve();
}
})
});
}
var sql = fs.readFileSync(file).toString();
connection.query(sql, function(err, result) {
if(err)
{
err.file = file;
console.log(err);
}
callback(err);
});
}
function executeDirectory(directory, callback)
{
//Return a promise is no callback
if(!callback) {
return new Promise(function(resolve, reject) {
executeDirectory(directory, function(err) {
if(err) {
reject(err);
} else {
resolve();
}
})
});
}
var files = getFiles(directory);
var tasks = [];
files.forEach(function(file) {
tasks.push(function(callback) {
executeFile(path.join(directory, file), callback);
});
});
nimble.series(tasks, callback);
}
module.exports = {'connect': connect, 'disconnect': disconnect, 'executeFile': executeFile, 'executeDirectory': executeDirectory};