Skip to content

Commit bbb56ee

Browse files
committed
added pddev-migratedbdown and change -d option to use postgrator.json database if not supplied
1 parent 315d453 commit bbb56ee

10 files changed

+73
-15
lines changed

package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"bin": {
77
"pddev": "pddev.js",
88
"pddev-migratedb": "pddev-migratedb.js",
9+
"pddev-migratedbdown": "pddev-migratedbdown.js",
910
"pddev-nukedb": "pddev-nukedb.js",
1011
"pddev-rebuilddb": "pddev-rebuilddb.js",
1112
"pddev-restoredb": "pddev-restoredb.js",

pddev-migratedbdown.js

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/env node
2+
'use strict';
3+
const args = require('args');
4+
const sql = require('mssql/msnodesqlv8');
5+
const SqlService = require('./sql/sqlService');
6+
7+
(async () => {
8+
const postgratorConfig = await require('./postgratorConfig');
9+
const sqlService = new SqlService();
10+
const options = args.parse(process.argv);
11+
12+
// this is whatever is typed just after this subcommand: pddev-migratedbdown 5
13+
const version = args.sub[0]; // would be 5 from above example
14+
15+
let dbPool = {};
16+
17+
try {
18+
const sqlDbConnectionOptions = {
19+
connectionString: `Driver=SQL Server;Server=(local);Database=${postgratorConfig.database};Trusted_Connection=true;`,
20+
};
21+
22+
dbPool = await new sql.ConnectionPool(sqlDbConnectionOptions).connect();
23+
console.log(`connected to ${postgratorConfig.database}...`);
24+
25+
let result = await sqlService.runScript(dbPool, sqlService.scriptNames.migrateDown, `migrating down to version ${version}...`, {version: version});
26+
}
27+
catch (err) {
28+
console.log(err);
29+
}
30+
finally {
31+
if (dbPool && dbPool.close) {
32+
dbPool.close();
33+
}
34+
}
35+
36+
})();

pddev-nukedb.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
const sql = require('mssql/msnodesqlv8');
44
const args = require('args');
55
const SqlService = require('./sql/sqlService');
6-
const SqlMigrationService = require('./sqlMigrationService');
76
const config = require('./config.json');
87

98
args.option('databaseName', 'The database you want to act on');
109

1110
(async () => {
11+
const postgratorConfig = await require('./postgratorConfig');
1212
const sqlService = new SqlService();
13-
const sqlMigrationService = new SqlMigrationService();
1413
// console.log(process.argv);
1514
const options = args.parse(process.argv);
15+
const databaseName = options.databaseName ? options.databaseName : postgratorConfig.database;
1616

17-
//const sqlScripts = await sqlService.transformSqlScripts({ databaseName: options.databaseName }); //await require('./sqlScripts/sqlScriptService')({ databaseName: options.databaseName });
17+
//const sqlScripts = await sqlService.transformSqlScripts({ databaseName: databaseName }); //await require('./sqlScripts/sqlScriptService')({ databaseName: databaseName });
1818

1919
let masterPool = {};
2020
let dbPool = {};
@@ -33,13 +33,13 @@ args.option('databaseName', 'The database you want to act on');
3333
// }
3434
// };
3535
const sqlDbConnectionOptions = {
36-
connectionString: `Driver=SQL Server;Server=(local);Database=${options.databaseName};Trusted_Connection=true;`,
36+
connectionString: `Driver=SQL Server;Server=(local);Database=${databaseName};Trusted_Connection=true;`,
3737
};
3838

3939
masterPool = await new sql.ConnectionPool(sqlMasterConnectionOptions).connect();
4040
console.log('connected to master using instance ${c}...');
4141

42-
await sqlService.nukeDb(masterPool, sqlDbConnectionOptions, {databaseName: options.databaseName, username: config.username, password: config.password});
42+
await sqlService.nukeDb(masterPool, sqlDbConnectionOptions, {databaseName: databaseName, username: config.username, password: config.password});
4343
}
4444
catch (err) {
4545
console.log(err);

pddev-rebuilddb.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ const config = require('./config.json');
99
args.option('databaseName', 'The database you want to act on');
1010

1111
(async () => {
12+
const postgratorConfig = await require('./postgratorConfig');
1213
const sqlService = new SqlService();
1314
const sqlMigrationService = new SqlMigrationService();
1415
// console.log(process.argv);
1516
const options = args.parse(process.argv);
17+
const databaseName = options.databaseName ? options.databaseName : postgratorConfig.database;
1618

1719
let masterPool = {};
1820
let dbPool = {};
@@ -31,14 +33,14 @@ args.option('databaseName', 'The database you want to act on');
3133
// }
3234
// };
3335
const sqlDbConnectionOptions = {
34-
connectionString: `Driver=SQL Server;Server=(local);Database=${options.databaseName};Trusted_Connection=true;`,
36+
connectionString: `Driver=SQL Server;Server=(local);Database=${databaseName};Trusted_Connection=true;`,
3537
};
3638

3739
masterPool = await new sql.ConnectionPool(sqlMasterConnectionOptions).connect();
3840
console.log('connected to master...');
3941

4042
// nuke database
41-
await sqlService.nukeDb(masterPool, sqlDbConnectionOptions, {databaseName: options.databaseName, username: config.username, password: config.password});
43+
await sqlService.nukeDb(masterPool, sqlDbConnectionOptions, {databaseName: databaseName, username: config.username, password: config.password});
4244

4345
console.log(`migrating sql in local sql folder...`);
4446
sqlMigrationService.migrateSql();

pddev-restoredb.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ const config = require('./config.json');
88
args.option('databaseName', 'The database you want to act on');
99

1010
(async () => {
11+
const postgratorConfig = await require('./postgratorConfig');
1112
const sqlService = new SqlService();
1213
const options = args.parse(process.argv);
14+
const databaseName = options.databaseName ? options.databaseName : postgratorConfig.database;
1315

14-
//const sqlScripts = await sqlService.transformSqlScripts({ databaseName: options.databaseName }); //await require('./sqlScripts/sqlScriptService')({ databaseName: options.databaseName });
16+
//const sqlScripts = await sqlService.transformSqlScripts({ databaseName: databaseName }); //await require('./sqlScripts/sqlScriptService')({ databaseName: databaseName });
1517

1618
let masterPool = {};
1719

@@ -30,25 +32,25 @@ args.option('databaseName', 'The database you want to act on');
3032
// }
3133
// };
3234
const sqlDbConnectionOptions = {
33-
connectionString: `Driver=SQL Server;Server=(local);Database=${options.databaseName};Trusted_Connection=true;`,
35+
connectionString: `Driver=SQL Server;Server=(local);Database=${databaseName};Trusted_Connection=true;`,
3436
};
3537

3638
masterPool = await new sql.ConnectionPool(sqlMasterConnectionOptions).connect();
3739
masterPool.config.requestTimeout = 300000;
3840
console.log('connected to master...');
3941

4042
// nuke database
41-
await sqlService.nukeDb(masterPool, sqlDbConnectionOptions, {databaseName: options.databaseName, username: config.username, password: config.password});
43+
await sqlService.nukeDb(masterPool, sqlDbConnectionOptions, {databaseName: databaseName, username: config.username, password: config.password});
4244

4345
// **** restore database
44-
console.log(`attempting to restore database ${options.databaseName}...`);
46+
console.log(`attempting to restore database ${databaseName}...`);
4547
//const sqlFilePathResult = await masterPool.request().query(sqlScripts.getSqlFilePath);
4648
const sqlFilePathResult = await sqlService.runScript(masterPool, sqlService.scriptNames.getSqlFilePath);
4749
const sqlFilePath = sqlFilePathResult.recordsets[0] && sqlFilePathResult.recordsets[0][0] ? sqlFilePathResult.recordsets[0][0].sqlFilePath : null;
4850

49-
let result = await sqlService.restoreDatabase(masterPool,{databaseName: options.databaseName, restoreFilePath: './sql/restore.bak', sqlFilePath});
51+
let result = await sqlService.restoreDatabase(masterPool,{databaseName: databaseName, restoreFilePath: './sql/restore.bak', sqlFilePath});
5052

51-
console.log(`${options.databaseName} restored - DONE`);
53+
console.log(`${databaseName} restored - DONE`);
5254
masterPool.close();
5355
}
5456
catch (err) {

pddev.js

+2
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ const args = require('args');
77
args
88
.option('databaseName', 'The database you want to act on')
99
.command('migratedb', 'Migrate database using scripts in local sql folder', ['m'])
10+
.command('migratedbdown', 'Migrate database down to version (must supply version number)', ['d'])
1011
.command('nukedb', 'Nuke database (drop, then create empty)', ['n'])
1112
.command('rebuilddb', 'Rebuild your database (drop, create, migrate)', ['r'])
1213
.command('restoredb', 'Restore database from bak file', ['s'])
1314
.command('test', 'Test cool new console stuffs', ['t']);
1415

1516
global.options = args.parse(process.argv);
1617

18+
1719
// (async () => {
1820
// global.sqlScripts = await sqlScripts.loadSqlScripts({ databaseName: flags.databaseName});
1921
// })();

postgratorConfig.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const path = require('path');
2+
const fs = require("fs-extra");
3+
4+
// this is how to do an export an asynchronous/awaitable require
5+
module.exports = (async () => {
6+
const cwd = process.cwd();
7+
const postgratorFilePath = path.resolve(cwd, 'postgrator.json');
8+
postgratorConfig = await fs.readFile(postgratorFilePath, "utf8");
9+
10+
// this is what will be exported
11+
return JSON.parse(postgratorConfig);
12+
})();
13+

sql/sqlScripts/migrateDown.sql

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
delete from DbMigrationVersion where [version] > ${version}

sql/sqlService.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ class SqlService {
2424
dropDatabase: 'dropDatabase',
2525
getSqlFilePath: 'getSqlFilePath',
2626
initSecurityForLocalUser: 'initSecurityForLocalUser',
27-
restoreDatabase: 'restoreDatabase'
27+
restoreDatabase: 'restoreDatabase',
28+
migrateDown: 'migrateDown'
2829
};
2930
}
3031

0 commit comments

Comments
 (0)