MCPcopy Create free account
hub / github.com/pyfa-org/Pyfa / DatabaseCleanup

Class DatabaseCleanup

eos/db/saveddata/databaseRepair.py:26–239  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

24
25
26class DatabaseCleanup:
27 def __init__(self):
28 pass
29
30 @staticmethod
31 def ExecuteSQLQuery(saveddata_engine, query):
32 try:
33 results = saveddata_engine.execute(query)
34 return results
35 except DatabaseError:
36 pyfalog.error("Failed to connect to database or error executing query:\n{0}", query)
37 return None
38
39 @staticmethod
40 def OrphanedCharacterSkills(saveddata_engine):
41 # Find orphaned character skills.
42 # This solves an issue where the character doesn't exist, but skills for that character do.
43 # See issue #917
44 pyfalog.debug("Running database cleanup for character skills.")
45 query = "SELECT COUNT(*) AS num FROM characterSkills WHERE characterID NOT IN (SELECT ID from characters)"
46 results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
47
48 if results is None:
49 return
50
51 row = results.first()
52
53 if row and row['num']:
54 query = "DELETE FROM characterSkills WHERE characterID NOT IN (SELECT ID from characters)"
55 delete = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
56 pyfalog.error("Database corruption found. Cleaning up {0} records.", delete.rowcount)
57
58 @staticmethod
59 def OrphanedFitDamagePatterns(saveddata_engine):
60 # Find orphaned damage patterns.
61 # This solves an issue where the damage pattern doesn't exist, but fits reference the pattern.
62 # See issue #777
63 pyfalog.debug("Running database cleanup for orphaned damage patterns attached to fits.")
64 query = "SELECT COUNT(*) AS num FROM fits WHERE damagePatternID NOT IN (SELECT ID FROM damagePatterns) OR damagePatternID IS NULL"
65 results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, query)
66
67 if results is None:
68 return
69
70 row = results.first()
71
72 if row and row['num']:
73 # Get Uniform damage pattern ID
74 uniform_query = "SELECT ID FROM damagePatterns WHERE name = 'Uniform'"
75 uniform_results = DatabaseCleanup.ExecuteSQLQuery(saveddata_engine, uniform_query)
76
77 if uniform_results is None:
78 return
79
80 rows = uniform_results.fetchall()
81
82 if len(rows) == 0:
83 pyfalog.error("Missing uniform damage pattern.")

Callers 1

prefetch.pyFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected