-
Notifications
You must be signed in to change notification settings - Fork 573
/
Copy pathdb
executable file
·138 lines (135 loc) · 4.67 KB
/
db
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/usr/bin/env node
/**
* Module dependencies.
*/
var fs = require('fs');
var path = require('path');
var _ = require('lodash');
var mysql = require('mysql2');
var Promise = require("bluebird");
var common = require("../core/utils/common");
var constConfig = require('../core/const');
var yargs = require('yargs')
.usage('Usage: $0 <command> [options]')
.command('init', '初始化数据库', {
dbpassword: {
alias: 'dbpassword',
type: 'string'
}
})
.command('upgrade', '升级数据库', {
dbpassword: {
alias: 'dbpassword',
type: 'string'
}
})
.example('$0 init --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306 --force', '初始化code-push-server数据库')
.example('$0 upgrade --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306', '升级code-push-server数据库')
.default({dbname: 'codepush', dbhost: 'localhost', dbuser: 'root', dbpassword: null})
.help('h')
.alias('h', 'help');
var argv = yargs.argv;
var command = argv._[0];
var dbname = argv.dbname ? argv.dbname : 'codepush';
var dbhost = argv.dbhost ? argv.dbhost : 'localhost';
var dbuser = argv.dbuser ? argv.dbuser : 'root';
var dbport = argv.dbport ? argv.dbport : 3306;
var dbpassword = argv.dbpassword;
if (command === 'init') {
var connection2;
var connection = mysql.createConnection({
host: dbhost,
user: dbuser,
password: dbpassword,
port: dbport
});
var createDatabaseSql = argv.force ? `CREATE DATABASE IF NOT EXISTS ${dbname}` :
`CREATE DATABASE ${dbname}`;
Promise.promisifyAll(connection);
connection.connect();
connection.queryAsync(createDatabaseSql)
.then(function(){
connection2 = mysql.createConnection({
host: dbhost,
user: dbuser,
password: dbpassword,
database: dbname,
multipleStatements: true,
port: dbport
});
connection2.connect();
Promise.promisifyAll(connection2);
return connection2;
})
.then(function(connection2){
var sql = fs.readFileSync(path.resolve(__dirname, '../sql/codepush-all.sql'), 'utf-8');
return connection2.queryAsync(sql);
})
.then(function(){
console.log('success.');
})
.catch(function(e){
console.log(e);
})
.finally(function(){
if(connection) connection.end();
if(connection2) connection2.end()
});
} else if (command == 'upgrade'){
try {
var connection = mysql.createConnection({
host: dbhost,
user: dbuser,
password: dbpassword,
database: dbname,
multipleStatements: true,
port: dbport
});
Promise.promisifyAll(connection);
connection.connect()
} catch(e) {
console.error('connect mysql error, check params',e);
return;
}
return Promise.coroutine(function*(val){
var version_no = '0.0.1';
var rs = yield connection.queryAsync('select `version` from `versions` where `type`=1 limit 1');
version_no = _.get(rs,'0.version', '0.0.1');
if (version_no == constConfig.CURRENT_DB_VERSION) {
console.log('Everything up-to-date.');
process.exit(0);
}
var allSqlFile = [
{version:'0.2.14', 'path':path.resolve(__dirname, '../sql/codepush-v0.2.14-patch.sql')},
{version:'0.2.15', 'path':path.resolve(__dirname, '../sql/codepush-v0.2.15-patch.sql')},
{version:'0.3.0', 'path':path.resolve(__dirname, '../sql/codepush-v0.3.0-patch.sql')},
{version:'0.4.0', 'path':path.resolve(__dirname, '../sql/codepush-v0.4.0-patch.sql')},
{version:'0.5.0', 'path':path.resolve(__dirname, '../sql/codepush-v0.5.0-patch.sql')}
];
for (var i = 0; i < allSqlFile.length; i++) {
if(!_.gt(allSqlFile[i]['version'], version_no)) {
continue;
}
try {
var sql = fs.readFileSync(allSqlFile[i]['path'], 'utf-8');
console.log('exec sql file:' + allSqlFile[i]['path']);
yield connection.queryAsync(sql);
console.log('success exec sql file:' + allSqlFile[i]['path']);
} catch (e) {
console.error('error exec sql file:' + allSqlFile[i]['path']);
throw e;
}
}
})()
.then(function(){
console.log('Upgrade success.');
})
.catch(function(e){
console.error(e);
})
.finally(function(){
if(connection) connection.end();
});
} else {
yargs.showHelp();
}