Fix instance cleanup at startup (#99)
Error caused by backquotes in double.
This commit is contained in:
parent
a2accf6029
commit
a5b82444f7
@ -785,7 +785,7 @@ void MapPersistentStateManager::_DelHelper(DatabaseType& db, const char* fields,
|
|||||||
db.escape_string(fieldValue);
|
db.escape_string(fieldValue);
|
||||||
ss << (i != 0 ? " AND " : "") << fieldTokens[i] << " = '" << 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());
|
while (result->NextRow());
|
||||||
delete result;
|
delete result;
|
||||||
@ -801,17 +801,21 @@ void MapPersistentStateManager::CleanupInstances()
|
|||||||
m_Scheduler.LoadResetTimes();
|
m_Scheduler.LoadResetTimes();
|
||||||
|
|
||||||
CharacterDatabase.BeginTransaction();
|
CharacterDatabase.BeginTransaction();
|
||||||
|
sLog.outString("|> Clean character/group - instance binds with invalid group/characters...");
|
||||||
// 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, "`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");
|
_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
|
// 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");
|
_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
|
// 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, "`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");
|
_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
|
// 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 `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`)");
|
CharacterDatabase.Execute("DELETE FROM `gameobject_respawn` WHERE `instance` <> 0 AND `instance` NOT IN (SELECT `id` FROM `instance`)");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user