Determine schema version. (#1743)

Avoid an unnecessary write to the database when no migration is needed.
This commit is contained in:
YeungKC 2022-03-10 21:36:02 +08:00 committed by GitHub
parent b25921a362
commit 79aedea60e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 3 deletions

View File

@ -42,4 +42,4 @@ class MyDatabase extends _$MyDatabase {
},
);
}
// #enddocregion
// #enddocregion

View File

@ -334,7 +334,8 @@ class DelegatedDatabase extends _BaseExecutor {
final openingDetails = OpeningDetails(oldVersion, currentVersion);
await user.beforeOpen(_BeforeOpeningExecutor(this), openingDetails);
if (versionDelegate is DynamicVersionDelegate) {
if (versionDelegate is DynamicVersionDelegate &&
(oldVersion == null || oldVersion < currentVersion)) {
// set version now, after migrations ran successfully
await versionDelegate.setSchemaVersion(currentVersion);
}

View File

@ -109,14 +109,20 @@ void main() {
test('when the database supports dynamic version', () async {
final version = _MockDynamicVersionDelegate();
when(userDb.schemaVersion).thenReturn(3);
when(version.schemaVersion).thenAnswer((_) => Future.value(3));
when(delegate.versionDelegate).thenReturn(version);
await db.ensureOpen(userDb);
verify(delegate.open(userDb));
verifyNever(delegate.runCustom(any, any));
verify(version.schemaVersion);
// Running migrations from version 3 to 3
verifyNever(version.setSchemaVersion(3));
when(version.schemaVersion).thenAnswer((_) => Future.value(2));
await db.ensureOpen(userDb);
// Running migrations from version 2 to 3
verify(version.setSchemaVersion(3));
});