diff --git a/eos/db/saveddata/databaseRepair.py b/eos/db/saveddata/databaseRepair.py index 53f6ae29f..074730fe0 100644 --- a/eos/db/saveddata/databaseRepair.py +++ b/eos/db/saveddata/databaseRepair.py @@ -199,3 +199,21 @@ class DatabaseCleanup: query = "UPDATE '" + profileType + "' SET '" + damageType + "Amount' = '0' WHERE " + damageType + "Amount IS NULL OR emAmount = ''" delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query) logger.error("Database corruption found. Cleaning up %d records.", delete.rowcount) + + @staticmethod + def DuplicateSelectedAmmoName(saveddata_engine): + # Orphaned items that are missing the fit ID or item ID. + # See issue #954 + logger.debug("Running database cleanup for duplicated selected ammo profiles.") + query = "SELECT COUNT(*) AS num FROM damagePatterns WHERE name = 'Selected Ammo'" + results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query) + + if results is None: + return + + row = results.first() + + if row and row['num'] > 1: + query = "DELETE FROM damagePatterns WHERE name = 'Selected Ammo'" + delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query) + logger.error("Database corruption found. Cleaning up %d records.", delete.rowcount) diff --git a/service/prefetch.py b/service/prefetch.py index 9990fea10..f04220b3c 100644 --- a/service/prefetch.py +++ b/service/prefetch.py @@ -69,6 +69,7 @@ if os.path.isfile(config.saveDB): database_cleanup_instance.OrphanedFitDamagePatterns(eos.db.saveddata_engine) database_cleanup_instance.OrphanedFitIDItemID(eos.db.saveddata_engine) database_cleanup_instance.NullDamageTargetPatternValues(eos.db.saveddata_engine) + database_cleanup_instance.DuplicateSelectedAmmoName(eos.db.saveddata_engine) logging.debug("Completed database validation.") else: