up method
Implementation
@override
Future up() async {
await _init();
var r = await connection.execute('SELECT path from migrations;');
var existing = r.expand((x) => x).cast<String>();
var toRun = <String>[];
migrations.forEach((k, v) {
if (!existing.contains(k)) toRun.add(k);
});
if (toRun.isNotEmpty) {
var r = await connection.execute('SELECT MAX(batch) from migrations;');
var curBatch = (r[0][0] ?? 0) as int;
var batch = curBatch + 1;
for (var k in toRun) {
var migration = migrations[k]!;
var schema = PostgresSchema();
migration.up(schema);
var result = await schema.run(connection).then((_) {
return connection.runTx((ctx) async {
var result = await ctx.execute(
"INSERT INTO MIGRATIONS (batch, path) VALUES ($batch, '$k')");
return result.affectedRows;
});
}).catchError((e) {
_log.severe('Failed to insert into "migrations" table.');
return -1;
});
if (result > 0) {
_log.info('Inserted "$k" into "migrations" table.');
}
}
} else {
_log.warning('Nothing to add into "migrations" table.');
}
}