migrateToLatest method

Future<List<String>?> migrateToLatest(
  1. DatabaseSession session
)

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;
}