public IDatabase Create(MigrationType migrationType = MigrationType.Main) { string connectionString; switch (migrationType) { case MigrationType.Main: { connectionString = _connectionStringFactory.MainDbConnectionString; break; } case MigrationType.Log: { connectionString = _connectionStringFactory.LogDbConnectionString; break; } default: { throw new ArgumentException("Invalid MigrationType"); } } _migrationController.MigrateToLatest(connectionString, migrationType); var db = new Database(() => { var dataMapper = new DataMapper(SQLiteFactory.Instance, connectionString) { SqlMode = SqlModes.Text, }; return dataMapper; }); db.Vacuum(); return db; }
public IDatabase Create(MigrationContext migrationContext) { string connectionString; switch (migrationContext.MigrationType) { case MigrationType.Main: { connectionString = _connectionStringFactory.MainDbConnectionString; break; } case MigrationType.Log: { connectionString = _connectionStringFactory.LogDbConnectionString; break; } default: { throw new ArgumentException("Invalid MigrationType"); } } try { _migrationController.Migrate(connectionString, migrationContext); } catch (SQLiteException ex) { var fileName = _connectionStringFactory.GetDatabasePath(connectionString); if (migrationContext.MigrationType == MigrationType.Log) { Logger.Error(ex, "Logging database is corrupt, attempting to recreate it automatically"); try { _diskProvider.DeleteFile(fileName + "-shm"); _diskProvider.DeleteFile(fileName + "-wal"); _diskProvider.DeleteFile(fileName + "-journal"); _diskProvider.DeleteFile(fileName); } catch (Exception) { Logger.Error("Unable to recreate logging database automatically. It will need to be removed manually."); } _migrationController.Migrate(connectionString, migrationContext); } else { if (OsInfo.IsOsx) { throw new CorruptDatabaseException("Database file: {0} is corrupt, restore from backup if available. See: https://github.com/Sonarr/Sonarr/wiki/FAQ#i-use-sonarr-on-a-mac-and-it-suddenly-stopped-working-what-happened", ex, fileName); } throw new CorruptDatabaseException("Database file: {0} is corrupt, restore from backup if available. See: https://github.com/Sonarr/Sonarr/wiki/FAQ#i-am-getting-an-error-database-disk-image-is-malformed", ex, fileName); } } var db = new Database(migrationContext.MigrationType.ToString(), () => { var dataMapper = new DataMapper(SQLiteFactory.Instance, connectionString) { SqlMode = SqlModes.Text, }; return dataMapper; }); return db; }