Merge branch 'AncientDatabaseRepair' of https://github.com/Ebag333/Pyfa
Conflicts: service/prefetch.py
This commit is contained in:
@@ -160,3 +160,75 @@ class DatabaseCleanup:
|
|||||||
query = "DELETE FROM targetResists WHERE name IS NULL OR name = ''"
|
query = "DELETE FROM targetResists WHERE name IS NULL OR name = ''"
|
||||||
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
|
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
|
||||||
logger.error("Database corruption found. Cleaning up %d records.", delete.rowcount)
|
logger.error("Database corruption found. Cleaning up %d records.", delete.rowcount)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def OrphanedFitIDItemID(saveddata_engine):
|
||||||
|
# Orphaned items that are missing the fit ID or item ID.
|
||||||
|
# See issue #954
|
||||||
|
for table in ['drones', 'cargo', 'fighters']:
|
||||||
|
logger.debug("Running database cleanup for orphaned %s items.", table)
|
||||||
|
query = "SELECT COUNT(*) AS num FROM " + table + " WHERE itemID IS NULL OR itemID = '' or itemID = '0' or fitID IS NULL OR fitID = '' or fitID = '0'"
|
||||||
|
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
|
||||||
|
|
||||||
|
if results is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
row = results.first()
|
||||||
|
|
||||||
|
if row and row['num']:
|
||||||
|
query = "DELETE FROM " + table + " WHERE itemID IS NULL OR itemID = '' or itemID = '0' or fitID IS NULL OR fitID = '' or fitID = '0'"
|
||||||
|
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
|
||||||
|
logger.error("Database corruption found. Cleaning up %d records.", delete.rowcount)
|
||||||
|
|
||||||
|
for table in ['modules']:
|
||||||
|
logger.debug("Running database cleanup for orphaned %s items.", table)
|
||||||
|
query = "SELECT COUNT(*) AS num FROM " + table + " WHERE itemID = '0' or fitID IS NULL OR fitID = '' or fitID = '0'"
|
||||||
|
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
|
||||||
|
|
||||||
|
if results is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
row = results.first()
|
||||||
|
|
||||||
|
if row and row['num']:
|
||||||
|
query = "DELETE FROM " + table + " WHERE itemID = '0' or fitID IS NULL OR fitID = '' or fitID = '0'"
|
||||||
|
delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
|
||||||
|
logger.error("Database corruption found. Cleaning up %d records.", delete.rowcount)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def NullDamageTargetPatternValues(saveddata_engine):
|
||||||
|
# Find patterns that have null values
|
||||||
|
# See issue #954
|
||||||
|
for profileType in ['damagePatterns', 'targetResists']:
|
||||||
|
for damageType in ['em', 'thermal', 'kinetic', 'explosive']:
|
||||||
|
logger.debug("Running database cleanup for null %s values. (%s)", profileType, damageType)
|
||||||
|
query = "SELECT COUNT(*) AS num FROM " + profileType + " WHERE " + damageType + "Amount IS NULL OR " + damageType + "Amount = ''"
|
||||||
|
results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
|
||||||
|
|
||||||
|
if results is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
row = results.first()
|
||||||
|
|
||||||
|
if row and row['num']:
|
||||||
|
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)
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ if config.saveDB and os.path.isfile(config.saveDB):
|
|||||||
database_cleanup_instance.OrphanedFitDamagePatterns(db.saveddata_engine)
|
database_cleanup_instance.OrphanedFitDamagePatterns(db.saveddata_engine)
|
||||||
database_cleanup_instance.NullDamagePatternNames(db.saveddata_engine)
|
database_cleanup_instance.NullDamagePatternNames(db.saveddata_engine)
|
||||||
database_cleanup_instance.NullTargetResistNames(db.saveddata_engine)
|
database_cleanup_instance.NullTargetResistNames(db.saveddata_engine)
|
||||||
|
database_cleanup_instance.OrphanedFitIDItemID(db.saveddata_engine)
|
||||||
|
database_cleanup_instance.NullDamageTargetPatternValues(db.saveddata_engine)
|
||||||
|
database_cleanup_instance.DuplicateSelectedAmmoName(db.saveddata_engine)
|
||||||
logging.debug("Completed database validation.")
|
logging.debug("Completed database validation.")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user