public static MigrationSet MakePlan(IDatabase database, ChangeGoal spec, params IMigrationLoader[] migrationLoaders) { var targetVersion = FindTrueTargetVersion(spec.TargetVersion, migrationLoaders); User.Notify(DescribePlan(spec.CurrentVersion, targetVersion)); var plan = PlanToGetFromCurrentToTarget(spec, targetVersion); return new MigrationSet(plan, database, migrationLoaders); }
private static ChangePlan PlanToGetFromCurrentToTarget(ChangeGoal spec, int targetVersion) { if (targetVersion >= spec.CurrentVersion) { var firstMigrationToApply = spec.CurrentVersion + 1; return new ChangePlan(Do.Apply, Enumerable.Range(firstMigrationToApply, targetVersion - firstMigrationToApply + 1)); } else { var firstMigrationToApply = spec.CurrentVersion; return new ChangePlan(Do.Unapply, Enumerable.Range(targetVersion + 1, firstMigrationToApply - targetVersion).Reverse()); } }
public ChangePlanner(IDatabase database, ChangeGoal request) { this._database = database; this._request = request; }