Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support asynchronous migrations #287

Merged
merged 2 commits into from
Mar 19, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions floor/lib/src/adapter/migration_adapter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import 'package:sqflite/sqflite.dart';

abstract class MigrationAdapter {
/// Runs the given [migrations] for migrating the database schema and data.
static void runMigrations(
static Future<void> runMigrations(
final Database migrationDatabase,
final int startVersion,
final int endVersion,
final List<Migration> migrations,
) {
) async {
final relevantMigrations = migrations
.where((migration) => migration.startVersion >= startVersion)
.toList()
Expand All @@ -24,7 +24,7 @@ abstract class MigrationAdapter {
}

for (final migration in relevantMigrations) {
migration.migrate(migrationDatabase);
await migration.migrate(migrationDatabase);
}
}
}
2 changes: 1 addition & 1 deletion floor/lib/src/migration.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Migration {
final int endVersion;

/// Function that performs the migration.
final void Function(sqflite.Database database) migrate;
final Future<void> Function(sqflite.Database database) migrate;

/// Creates a new migration between [startVersion] and [endVersion].
/// [migrate] will be called by the database and performs the actual
Expand Down
32 changes: 16 additions & 16 deletions floor/test/adapter/migration_adapter_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,17 @@ void main() {
clearInteractions(mockMigrationDatabase);
});

test('run single migration', () {
test('run single migration', () async {
const startVersion = 1;
const endVersion = 2;
const sql = 'FOO BAR';
final migrations = [
Migration(1, 2, (database) {
database.execute(sql);
Migration(1, 2, (database) async {
await database.execute(sql);
})
];

MigrationAdapter.runMigrations(
await MigrationAdapter.runMigrations(
mockMigrationDatabase,
startVersion,
endVersion,
Expand All @@ -32,25 +32,25 @@ void main() {
verify(mockMigrationDatabase.execute(sql));
});

test('run multiple migrations in order', () {
test('run multiple migrations in order', () async {
const startVersion = 1;
const endVersion = 4;
const sql1 = 'first';
const sql2 = 'second';
const sql3 = 'third';
final migrations = [
Migration(3, 4, (database) {
database.execute(sql3);
Migration(3, 4, (database) async {
await database.execute(sql3);
}),
Migration(1, 2, (database) {
database.execute(sql1);
Migration(1, 2, (database) async {
await database.execute(sql1);
}),
Migration(2, 3, (database) {
database.execute(sql2);
Migration(2, 3, (database) async {
await database.execute(sql2);
}),
];

MigrationAdapter.runMigrations(
await MigrationAdapter.runMigrations(
mockMigrationDatabase,
startVersion,
endVersion,
Expand All @@ -69,8 +69,8 @@ void main() {
const endVersion = 20;
const sql = 'FOO BAR';
final migrations = [
Migration(1, 2, (database) {
database.execute(sql);
Migration(1, 2, (database) async {
await database.execute(sql);
})
];

Expand All @@ -90,8 +90,8 @@ void main() {
const endVersion = 10;
const sql = 'FOO BAR';
final migrations = [
Migration(1, 2, (database) {
database.execute(sql);
Migration(1, 2, (database) async {
await database.execute(sql);
})
];

Expand Down
4 changes: 2 additions & 2 deletions floor/test/integration/database_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ void main() {
DogDao dogDao;

setUp(() async {
final migration1to2 = Migration(1, 2, (database) {
database.execute('ALTER TABLE dog ADD COLUMN nick_name TEXT');
final migration1to2 = Migration(1, 2, (database) async {
await database.execute('ALTER TABLE dog ADD COLUMN nick_name TEXT');
});
final allMigrations = [migration1to2];

Expand Down
2 changes: 1 addition & 1 deletion floor_generator/lib/writer/database_writer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ class DatabaseWriter implements Writer {
await callback?.onOpen?.call(database);
},
onUpgrade: (database, startVersion, endVersion) async {
MigrationAdapter.runMigrations(database, startVersion, endVersion, migrations);
await MigrationAdapter.runMigrations(database, startVersion, endVersion, migrations);

await callback?.onUpgrade?.call(database, startVersion, endVersion);
},
Expand Down
4 changes: 2 additions & 2 deletions floor_generator/test/writer/database_writer_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ void main() {
await callback?.onOpen?.call(database);
},
onUpgrade: (database, startVersion, endVersion) async {
MigrationAdapter.runMigrations(
await MigrationAdapter.runMigrations(
database, startVersion, endVersion, migrations);

await callback?.onUpgrade?.call(database, startVersion, endVersion);
Expand Down Expand Up @@ -95,7 +95,7 @@ void main() {
await callback?.onOpen?.call(database);
},
onUpgrade: (database, startVersion, endVersion) async {
MigrationAdapter.runMigrations(
await MigrationAdapter.runMigrations(
database, startVersion, endVersion, migrations);

await callback?.onUpgrade?.call(database, startVersion, endVersion);
Expand Down