diff --git a/eos/db/saveddata/databaseRepair.py b/eos/db/saveddata/databaseRepair.py index ede0f2fde..87442a2dc 100644 --- a/eos/db/saveddata/databaseRepair.py +++ b/eos/db/saveddata/databaseRepair.py @@ -29,9 +29,6 @@ class DatabaseCleanup: @staticmethod def OrphanedCharacterSkills(saveddata_engine): - # Finds and fixes database corruption issues. - logger.debug("Start databsae validation and cleanup.") - # Find orphaned character skills. # This solves an issue where the character doesn't exist, but skills for that character do. # See issue #917 @@ -102,3 +99,39 @@ class DatabaseCleanup: logger.error("Database corruption found. Cleaning up %d records.", update.rowcount) except sqlalchemy.exc.DatabaseError: logger.error("Failed to connect to database.") + + @staticmethod + def NullDamagePatternNames(saveddata_engine): + # Find damage patterns that are missing the name. + # This solves an issue where the damage pattern ends up with a name that is null. + # See issue #949 + try: + logger.debug("Running database cleanup for missing damage pattern names.") + + # Damage Patterns + results = saveddata_engine.execute("SELECT COUNT(*) AS num FROM damagePatterns WHERE name IS NULL OR name = ''") + row = results.first() + + if row and row['num']: + update = saveddata_engine.execute("UPDATE 'damagePatterns' SET 'name' = 'Unknown' WHERE name IS NULL OR name = ''") + logger.error("Database corruption found. Cleaning up %d records.", update.rowcount) + except sqlalchemy.exc.DatabaseError: + logger.error("Failed to connect to database.") + + @staticmethod + def NullTargetResistNames(saveddata_engine): + # Find target resists that are missing the name. + # This solves an issue where the target resist ends up with a name that is null. + # See issue #949 + try: + logger.debug("Running database cleanup for missing target resist names.") + + # Damage Patterns + results = saveddata_engine.execute("SELECT COUNT(*) AS num FROM targetResists WHERE name IS NULL OR name = ''") + row = results.first() + + if row and row['num']: + update = saveddata_engine.execute("UPDATE 'targetResists' SET 'name' = 'Unknown' WHERE name IS NULL OR name = ''") + logger.error("Database corruption found. Cleaning up %d records.", update.rowcount) + except sqlalchemy.exc.DatabaseError: + logger.error("Failed to connect to database.") diff --git a/service/prefetch.py b/service/prefetch.py index 6c45ffc63..c0477e6bd 100644 --- a/service/prefetch.py +++ b/service/prefetch.py @@ -61,11 +61,14 @@ if os.path.isfile(config.saveDB): # Import values that must exist otherwise Pyfa breaks DefaultDatabaseValues.importRequiredDefaults() + # Finds and fixes database corruption issues. logging.debug("Starting database validation.") database_cleanup_instance = DatabaseCleanup() database_cleanup_instance.OrphanedCharacterSkills(eos.db.saveddata_engine) database_cleanup_instance.OrphanedFitCharacterIDs(eos.db.saveddata_engine) database_cleanup_instance.OrphanedFitDamagePatterns(eos.db.saveddata_engine) + database_cleanup_instance.NullDamagePatternNames(eos.db.saveddata_engine) + database_cleanup_instance.NullTargetResistNames(eos.db.saveddata_engine) logging.debug("Completed database validation.") else: