migrateToLatest method
Migrates all modules to the latest version.
Returns the migrations applied. Returns null if latest version was already installed.
Implementation
Future<List<String>?> migrateToLatest(DatabaseSession session) async {
List<String>? migrationsApplied = [];
await _withMigrationLock(session, (transaction) async {
await _updateState(session, transaction);
var latestVersion = _getLatestVersion();
var moduleName = session.db.serializationManager.getModuleName();
var definitionModuleName = await _loadLatestDefinitionModuleName();
if (definitionModuleName != null && definitionModuleName != moduleName) {
writeError(
'WARNING: The module name in the migration definition '
'("$definitionModuleName") does not match the module name of the '
'serialization manager ("$moduleName"). This may indicate that the '
'wrong Protocol class is being used in "server.dart". Make sure you '
'are using the Protocol class generated under '
'"src/generated/protocol.dart" and not one from an external package.',
);
}
if (_isVersionInstalled(moduleName, latestVersion)) {
migrationsApplied = null;
return;
}
var installedVersion = _getInstalledVersion(moduleName);
migrationsApplied = await _migrateToLatestModule(
session,
latestVersion: latestVersion,
fromVersion: installedVersion,
transaction: transaction,
);
await _updateState(session, transaction);
});
return migrationsApplied;
}