public void Migrate ()
{
try {
if (DatabaseVersion > CURRENT_VERSION) {
throw new DatabaseVersionTooHigh (CURRENT_VERSION, DatabaseVersion);
} else if (DatabaseVersion < CURRENT_VERSION) {
Execute ("BEGIN");
InnerMigrate ();
Execute ("COMMIT");
} else {
Log.DebugFormat ("Database version {0} is up to date", DatabaseVersion);
}
// Trigger metadata refreshes if necessary
int metadata_version = connection.Query<int> ("SELECT Value FROM CoreConfiguration WHERE Key = 'MetadataVersion'");
if (DatabaseVersion == CURRENT_VERSION && metadata_version < CURRENT_METADATA_VERSION) {
ServiceManager.ServiceStarted += OnServiceStarted;
}
} catch (DatabaseVersionTooHigh) {
throw;
} catch (Exception) {
Log.Warning ("Rolling back database migration");
Execute ("ROLLBACK");
throw;
}
OnFinished ();
}