deployMigrations method
Future<DeployResult>
deployMigrations({
- required SessionExecutor executor,
- required String migrationsDirectory,
Applies all pending local migrations in order.
Implementation
Future<DeployResult> deployMigrations({
required pg.SessionExecutor executor,
required String migrationsDirectory,
}) async {
final localArtifacts = loadLocalMigrationArtifacts(
migrationsDirectory,
provider: PostgresqlMigrationRunner.providerName,
);
final activeNames = (await runner.loadActiveHistory(
executor,
)).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}`.',
);
}
await runner.migrateToSchema(
executor: executor,
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),
);
}