deployMigrations method

DeployResult deployMigrations({
  1. required Database database,
  2. required String migrationsDirectory,
})

Applies all pending local migrations in order.

Implementation

DeployResult deployMigrations({
  required sqlite.Database database,
  required String migrationsDirectory,
}) {
  final localArtifacts = loadLocalMigrationArtifacts(
    migrationsDirectory,
    provider: SqliteMigrationRunner.providerName,
  );
  final activeNames = runner
      .loadActiveHistory(database)
      .map((record) => record.name)
      .toSet();
  final appliedMigrationNames = <String>[];

  for (final artifact in localArtifacts) {
    if (activeNames.contains(artifact.name)) {
      continue;
    }

    if (containsManualMigrationWarnings(artifact.warnings)) {
      throw ManualMigrationRequiredException(
        'Migration `${artifact.name}` requires manual migration and cannot be applied automatically. Complete the change manually, then run `migrate resolve --applied ${artifact.name}`.',
      );
    }

    runner.migrateToSchema(
      database: database,
      target: const SchemaParser().parse(artifact.afterSchema),
      migrationName: artifact.name,
      allowWarnings: true,
    );
    activeNames.add(artifact.name);
    appliedMigrationNames.add(artifact.name);
  }

  return DeployResult(
    localMigrationCount: localArtifacts.length,
    appliedMigrationNames: List<String>.unmodifiable(appliedMigrationNames),
  );
}