Future<Schema>
schemaByApplyingMigrationFile(File migrationFile, Schema fromSchema)
Source
Future<Schema> schemaByApplyingMigrationFile(File migrationFile, Schema fromSchema) async {
var sourceFunction =
(List<String> args, Map<String, dynamic> values) async {
var inputSchema =
new Schema.fromMap(values["schema"] as Map<String, dynamic>);
var versionNumber = int.parse(args.first);
var migrationClassMirror = currentMirrorSystem()
.isolate
.rootLibrary
.declarations
.values
.firstWhere((dm) =>
dm is ClassMirror && dm.isSubclassOf(reflectClass(Migration)))
as ClassMirror;
var migrationInstance = migrationClassMirror
.newInstance(new Symbol(''), []).reflectee as Migration;
migrationInstance.database = new SchemaBuilder(null, inputSchema);
await migrationInstance.upgrade();
return migrationInstance.currentSchema.asMap();
};
var generator = new SourceGenerator(sourceFunction,
imports: [
"dart:async",
"package:aqueduct/aqueduct.dart",
"dart:isolate",
"dart:mirrors"
],
additionalContents: migrationFile.readAsStringSync());
var schemaMap = await IsolateExecutor.executeSource(generator,
["${versionNumberFromFile(migrationFile)}"], projectDirectory.uri,
message: {"schema": fromSchema.asMap()});
return new Schema.fromMap(schemaMap as Map<String, dynamic>);
}