diff options
author | click <none@none> | 2010-04-21 20:34:04 +0200 |
---|---|---|
committer | click <none@none> | 2010-04-21 20:34:04 +0200 |
commit | 123d40dcfec7183b8c26e671f9d05987fced7cfb (patch) | |
tree | 452943fd04330594a0b97c88e7140d2d83b6e934 | |
parent | aaf3a62395cf38074ffa648fe47bc5a9ae78a61f (diff) |
* Add some more transactioncontrol to pet database handling + adjust character_aura keys to avoid duplicates
--HG--
branch : trunk
-rw-r--r-- | sql/characters.sql | 2 | ||||
-rw-r--r-- | sql/updates/7974_characters_character_aura.sql | 2 | ||||
-rw-r--r-- | src/game/Pet.cpp | 4 |
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 |