deployMigrations method
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),
);
}