Updated migration runner

This commit is contained in:
thomashii 2021-07-25 18:27:26 +08:00
parent 8603d22d97
commit 9c4df63b8f
6 changed files with 55 additions and 13 deletions

View file

@ -1,5 +1,11 @@
# Change Log
## 4.0.0-beta.4
* Logged exception of the db query execution to console
* Added transaction to data insertion
* Fixed SQL column generator to remove size from none character based data type
## 4.0.0-beta.3
* Updated README

View file

@ -4,7 +4,7 @@ import 'runner.dart';
/// Runs the Angel Migration CLI.
Future runMigrations(MigrationRunner migrationRunner, List<String> args) {
var cmd = CommandRunner('migration_runner', 'Executes Angel migrations.')
var cmd = CommandRunner('migration_runner', 'Executes Angel3 migrations.')
..addCommand(_UpCommand(migrationRunner))
..addCommand(_RefreshCommand(migrationRunner))
..addCommand(_ResetCommand(migrationRunner))
@ -17,6 +17,7 @@ class _UpCommand extends Command {
@override
String get name => 'up';
@override
String get description => 'Runs outstanding migrations.';

View file

@ -2,11 +2,14 @@ import 'dart:async';
import 'dart:collection';
import 'package:angel3_migration/angel3_migration.dart';
import 'package:postgres/postgres.dart';
import 'package:logging/logging.dart';
import '../runner.dart';
import '../util.dart';
import 'schema.dart';
class PostgresMigrationRunner implements MigrationRunner {
final _log = Logger('PostgresMigrationRunner');
final Map<String, Migration> migrations = {};
final PostgreSQLConnection connection;
final Queue<Migration> _migrationQueue = Queue();
@ -42,7 +45,11 @@ class PostgresMigrationRunner implements MigrationRunner {
path varchar,
PRIMARY KEY(id)
);
''');
''').then((result) {
_log.info('Check and create "migrations" table');
}).catchError((e) {
_log.severe('Failed to create "migrations" table.');
});
}
@override
@ -65,14 +72,22 @@ class PostgresMigrationRunner implements MigrationRunner {
var migration = migrations[k]!;
var schema = PostgresSchema();
migration.up(schema);
print('Bringing up "$k"...');
_log.info('Added "$k" into "migrations" table.');
await schema.run(connection).then((_) {
return connection.execute(
'INSERT INTO MIGRATIONS (batch, path) VALUES ($batch, \'$k\');');
return connection.transaction((ctx) async {
var result = await ctx.query(
"INSERT INTO MIGRATIONS (batch, path) VALUES ($batch, \'$k\')");
return result.affectedRowCount;
});
//return connection.execute(
// 'INSERT INTO MIGRATIONS (batch, path) VALUES ($batch, \'$k\');');
}).catchError((e) {
_log.severe('Failed to insert into "migrations" table.');
});
}
} else {
print('No migrations found to bring up.');
_log.warning('Nothing to add into "migrations" table.');
}
}
@ -96,14 +111,14 @@ class PostgresMigrationRunner implements MigrationRunner {
var migration = migrations[k]!;
var schema = PostgresSchema();
migration.down(schema);
print('Bringing down "$k"...');
_log.info('Removed "$k" from "migrations" table.');
await schema.run(connection).then((_) {
return connection
.execute('DELETE FROM migrations WHERE path = \'$k\';');
});
}
} else {
print('No migrations found to roll back.');
_log.warning('Nothing to remove from "migrations" table.');
}
}
@ -120,14 +135,14 @@ class PostgresMigrationRunner implements MigrationRunner {
var migration = migrations[k]!;
var schema = PostgresSchema();
migration.down(schema);
print('Bringing down "$k"...');
_log.info('Removed "$k" from "migrations" table.');
await schema.run(connection).then((_) {
return connection
.execute('DELETE FROM migrations WHERE path = \'$k\';');
});
}
} else {
print('No migrations found to roll back.');
_log.warning('Nothing to remove from "migrations" table.');
}
}

View file

@ -2,8 +2,11 @@ import 'dart:async';
import 'package:angel3_migration/angel3_migration.dart';
import 'package:postgres/postgres.dart';
import 'package:angel3_migration_runner/src/postgres/table.dart';
import 'package:logging/logging.dart';
class PostgresSchema extends Schema {
final _log = Logger('PostgresSchema');
final int _indent;
final StringBuffer _buf;
@ -11,7 +14,18 @@ class PostgresSchema extends Schema {
factory PostgresSchema() => PostgresSchema._(StringBuffer(), 0);
Future run(PostgreSQLConnection connection) => connection.execute(compile());
Future<int> run(PostgreSQLConnection connection) async {
//return connection.execute(compile());
var result = await connection.transaction((ctx) async {
var sql = compile();
var result = await ctx.query(sql).catchError((e) {
_log.severe('Failed to run query: [ $sql ]', e);
});
return result.affectedRowCount;
});
return (result is int) ? result : 0;
}
String compile() => _buf.toString();

View file

@ -6,7 +6,11 @@ import 'package:charcode/ascii.dart';
abstract class PostgresGenerator {
static String columnType(MigrationColumn column) {
var str = column.type.name;
if (column.type.hasSize) {
return '$str(${column.length})';
} else {
return '$str';
}
}
static String compileColumn(MigrationColumn column) {

View file

@ -1,5 +1,5 @@
name: angel3_migration_runner
version: 4.0.0-beta.3
version: 4.0.0-beta.4
description: Command-line based database migration runner for Angel3's ORM.
homepage: https://angel3-framework.web.app/
repository: https://github.com/dukefirehawk/angel/tree/angel3/packages/orm/angel_migration_runner
@ -11,5 +11,7 @@ dependencies:
args: ^2.1.0
charcode: ^1.2.0
postgres: ^2.3.2
logging: ^1.0.0
dev_dependencies:
pedantic: ^1.11.0