aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclick <none@none>2010-04-21 20:34:04 +0200
committerclick <none@none>2010-04-21 20:34:04 +0200
commit123d40dcfec7183b8c26e671f9d05987fced7cfb (patch)
tree452943fd04330594a0b97c88e7140d2d83b6e934
parentaaf3a62395cf38074ffa648fe47bc5a9ae78a61f (diff)
* Add some more transactioncontrol to pet database handling + adjust character_aura keys to avoid duplicates
--HG-- branch : trunk
-rw-r--r--sql/characters.sql2
-rw-r--r--sql/updates/7974_characters_character_aura.sql2
-rw-r--r--src/game/Pet.cpp4
3 files changed, 7 insertions, 1 deletions
diff --git a/sql/characters.sql b/sql/characters.sql
index d07f43cf3a0..4c798262bb2 100644
--- a/sql/characters.sql
+++ b/sql/characters.sql
@@ -531,7 +531,7 @@ CREATE TABLE `character_aura` (
`maxduration` int(11) NOT NULL default '0',
`remaintime` int(11) NOT NULL default '0',
`remaincharges` tinyint(3) unsigned NOT NULL default '0',
- PRIMARY KEY (`guid`,`spell`,`effect_mask`)
+ PRIMARY KEY (`guid`,`caster_guid`,`spell`,`effect_mask`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Player System';
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/sql/updates/7974_characters_character_aura.sql b/sql/updates/7974_characters_character_aura.sql
new file mode 100644
index 00000000000..636b1cc204f
--- /dev/null
+++ b/sql/updates/7974_characters_character_aura.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `character_aura` DROP PRIMARY KEY ,
+ADD PRIMARY KEY ( `guid` , `caster_guid` , `spell`, `effect_mask` )
diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp
index ee96d7de9ee..9122b83adbb 100644
--- a/src/game/Pet.cpp
+++ b/src/game/Pet.cpp
@@ -378,6 +378,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
uint32 curhealth = GetHealth();
uint32 curmana = GetPower(POWER_MANA);
+ CharacterDatabase.BeginTransaction();
// save auras before possibly removing them
_SaveAuras();
@@ -389,6 +390,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
_SaveSpells();
_SaveSpellCooldowns();
+ CharacterDatabase.CommitTransaction();
// current/stable/not_in_slot
if (mode >= PET_SAVE_AS_CURRENT)
@@ -453,11 +455,13 @@ void Pet::SavePetToDB(PetSaveMode mode)
void Pet::DeleteFromDB(uint32 guidlow)
{
+ CharacterDatabase.BeginTransaction();
CharacterDatabase.PExecute("DELETE FROM character_pet WHERE id = '%u'", guidlow);
CharacterDatabase.PExecute("DELETE FROM character_pet_declinedname WHERE id = '%u'", guidlow);
CharacterDatabase.PExecute("DELETE FROM pet_aura WHERE guid = '%u'", guidlow);
CharacterDatabase.PExecute("DELETE FROM pet_spell WHERE guid = '%u'", guidlow);
CharacterDatabase.PExecute("DELETE FROM pet_spell_cooldown WHERE guid = '%u'", guidlow);
+ CharacterDatabase.CommitTransaction();
}
void Pet::setDeathState(DeathState s) // overwrite virtual Creature::setDeathState and Unit::setDeathState