Fix instance cleanup at startup (#99)

Error caused by backquotes in double.
This commit is contained in:
Elmsroth 2020-05-24 11:58:53 +02:00 committed by GitHub
parent a2accf6029
commit a5b82444f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -785,7 +785,7 @@ void MapPersistentStateManager::_DelHelper(DatabaseType& db, const char* fields,
db.escape_string(fieldValue);
ss << (i != 0 ? " AND " : "") << fieldTokens[i] << " = '" << fieldValue << "'";
}
db.PExecute("DELETE FROM `%s` WHERE %s", table, ss.str().c_str());
db.PExecute("DELETE FROM %s WHERE %s", table, ss.str().c_str());
}
while (result->NextRow());
delete result;
@ -801,17 +801,21 @@ void MapPersistentStateManager::CleanupInstances()
m_Scheduler.LoadResetTimes();
CharacterDatabase.BeginTransaction();
sLog.outString("|> Clean character/group - instance binds with invalid group/characters...");
// clean character/group - instance binds with invalid group/characters
_DelHelper(CharacterDatabase, "`character_instance`.`guid`, `instance`", "`character_instance`", "LEFT JOIN `characters` ON `character_instance`.`guid` = `characters`.`guid` WHERE `characters`.`guid` IS NULL");
_DelHelper(CharacterDatabase, "`group_instance`.`leaderGuid`, `instance`", "`group_instance`", "LEFT JOIN `characters` ON `group_instance`.`leaderGuid` = `characters`.`guid` LEFT JOIN `groups` ON `group_instance`.`leaderGuid` = `groups`.`leaderGuid` WHERE `characters`.`guid` IS NULL OR `groups`.`leaderGuid` IS NULL");
sLog.outString("|> Clean instances that do not have any players or groups bound to them...");
// clean instances that do not have any players or groups bound to them
_DelHelper(CharacterDatabase, "`id`, `map`", "`instance`", "LEFT JOIN `character_instance` ON `character_instance`.`instance` = `id` LEFT JOIN `group_instance` ON `group_instance`.`instance` = `id` WHERE `character_instance`.`instance` IS NULL AND `group_instance`.`instance` IS NULL");
sLog.outString("|> Clean invalid instance references in other tables...");
// clean invalid instance references in other tables
_DelHelper(CharacterDatabase, "`character_instance`.`guid`, `instance`", "`character_instance`", "LEFT JOIN `instance` ON `character_instance`.`instance` = `instance`.`id` WHERE `instance`.`id` IS NULL");
_DelHelper(CharacterDatabase, "`group_instance`.`leaderGuid`, `instance`", "`group_instance`", "LEFT JOIN `instance` ON `group_instance`.`instance` = `instance`.`id` WHERE `instance`.`id` IS NULL");
sLog.outString("|> Clean unused respawn data...");
// clean unused respawn data
CharacterDatabase.Execute("DELETE FROM `creature_respawn` WHERE `instance` <> 0 AND `instance` NOT IN (SELECT `id` FROM `instance`)");
CharacterDatabase.Execute("DELETE FROM `gameobject_respawn` WHERE `instance` <> 0 AND `instance` NOT IN (SELECT `id` FROM `instance`)");