The onUpgrade callback in the moor migrator was not being fired when downgrading a database using moor_flutter.

The change has been made to moor_flutter and to moor_flutter with encryption
This commit is contained in:
David Martos 2020-03-03 14:48:09 +01:00
parent 3fba2ce05b
commit 2bcd51f437
4 changed files with 31 additions and 0 deletions

View File

@ -73,6 +73,9 @@ class _SqfliteDelegate extends DatabaseDelegate with _SqfliteExecutor {
onUpgrade: (db, from, to) {
_loadedSchemaVersion = from;
},
onDowngrade: (db, from, to) {
_loadedSchemaVersion = from;
},
singleInstance: singleInstance,
);
}

View File

@ -87,6 +87,12 @@ class Database extends _$Database {
Database(QueryExecutor e, {this.schemaVersion = 2}) : super(e);
/// It will be set in the onUpgrade callback. Null if no migration ocurred
int schemaVersionChangedFrom;
/// It will be set in the onUpgrade callback. Null if no migration ocurred
int schemaVersionChangedTo;
@override
MigrationStrategy get migration {
return MigrationStrategy(
@ -97,6 +103,9 @@ class Database extends _$Database {
}
},
onUpgrade: (m, from, to) async {
schemaVersionChangedFrom = from;
schemaVersionChangedTo = to;
if (from == 1) {
await m.createTable(friendships);
}

View File

@ -25,6 +25,22 @@ void migrationTests(TestExecutor executor) {
// the 3 initial users plus People.florian
final count = await database.userCountQuery().getSingle();
expect(count, 4);
expect(database.schemaVersionChangedFrom, 1);
expect(database.schemaVersionChangedTo, 2);
await database.close();
});
test('runs the migrator when downgrading', () async {
var database = Database(executor.createExecutor(), schemaVersion: 2);
await database.executor.ensureOpen(); // Create the database
await database.close();
database = Database(executor.createExecutor(), schemaVersion: 1);
await database.executor.ensureOpen(); // Let the migrator run
expect(database.schemaVersionChangedFrom, 2);
expect(database.schemaVersionChangedTo, 1);
await database.close();
});

View File

@ -73,6 +73,9 @@ class _SqfliteDelegate extends DatabaseDelegate with _SqfliteExecutor {
onUpgrade: (db, from, to) {
_loadedSchemaVersion = from;
},
onDowngrade: (db, from, to) {
_loadedSchemaVersion = from;
},
singleInstance: singleInstance,
);
}