private void InnerMigrate ()
{
MethodInfo [] methods = GetType ().GetMethods (BindingFlags.Instance | BindingFlags.NonPublic);
bool terminate = false;
bool ran_migration_step = false;
Log.DebugFormat ("Migrating from database version {0} to {1}", DatabaseVersion, CURRENT_VERSION);
for (int i = DatabaseVersion + 1; i <= CURRENT_VERSION; i++) {
foreach (MethodInfo method in methods) {
foreach (DatabaseVersionAttribute attr in method.GetCustomAttributes (
typeof (DatabaseVersionAttribute), false)) {
if (attr.Version != i) {
continue;
}
if (!ran_migration_step) {
ran_migration_step = true;
OnStarted ();
}
if (!(bool)method.Invoke (this, null)) {
terminate = true;
}
break;
}
}
if (terminate) {
break;
}
}
Execute (String.Format ("UPDATE CoreConfiguration SET Value = {0} WHERE Key = 'DatabaseVersion'", CURRENT_VERSION));
}