From 9b8a457aeb5c609411beae97b8d7f5a228b3c618 Mon Sep 17 00:00:00 2001 From: linencloth Date: Mon, 25 Oct 2010 02:32:33 +0200 Subject: Core/DBLayer: Optimize creature formation loading --HG-- branch : trunk --- .../game/Entities/Creature/CreatureGroups.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src/server') diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index f9a8f973d07..f70648e23ea 100755 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -91,6 +91,21 @@ void CreatureGroupManager::LoadCreatureFormations() return; } + std::set guidSet; + + QueryResult guidResult = WorldDatabase.PQuery("SELECT guid FROM creature"); + if (guidResult) + { + do + { + Field *fields = guidResult->Fetch(); + uint32 guid = fields[0].GetUInt32(); + + guidSet.insert(guid); + + } while (guidResult->NextRow()); + } + uint64 total_records = result->GetRowCount(); barGoLink bar(total_records); Field *fields; @@ -121,16 +136,14 @@ void CreatureGroupManager::LoadCreatureFormations() // check data correctness { - QueryResult result = WorldDatabase.PQuery("SELECT guid FROM creature WHERE guid = %u", group_member->leaderGUID); - if (!result) + if (guidSet.find(group_member->leaderGUID) == guidSet.end()) { sLog.outErrorDb("creature_formations table leader guid %u incorrect (not exist)", group_member->leaderGUID); delete group_member; continue; } - result = WorldDatabase.PQuery("SELECT guid FROM creature WHERE guid = %u", memberGUID); - if (!result) + if (guidSet.find(memberGUID) == guidSet.end()) { sLog.outErrorDb("creature_formations table member guid %u incorrect (not exist)", memberGUID); delete group_member; -- cgit v1.2.3