aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-11-07 10:55:29 +0100
committerShauren <shauren.trinity@gmail.com>2016-11-07 10:55:29 +0100
commitf9b4f686c83bcc97fad84f1d8775963c4a108541 (patch)
treef91bdfe31eed193beec1bd6bd954fa679a969c25
parentb01820704846fff493ed6839a8849d5e3f5742f7 (diff)
Core/Scenarios: Removed a bad usage of blocking db queries when saving scenario to db
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp4
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.h4
-rw-r--r--src/server/game/Scenarios/InstanceScenario.cpp33
-rw-r--r--src/server/game/Scenarios/InstanceScenario.h4
4 files changed, 15 insertions, 30 deletions
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index 5845a0d6a3a..9027b3f575a 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -735,9 +735,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
// Scenario
PrepareStatement(CHAR_SEL_SCENARIO_INSTANCE_CRITERIA_FOR_INSTANCE, "SELECT criteria, counter, date FROM instance_scenario_progress WHERE id = ?", CONNECTION_SYNCH);
- PrepareStatement(CHAR_SEL_SCENARIO_INSTANCE_CRITERIA, "SELECT counter, date FROM instance_scenario_progress WHERE id = ? AND criteria = ?", CONNECTION_SYNCH);
+ PrepareStatement(CHAR_DEL_SCENARIO_INSTANCE_CRITERIA, "DELETE FROM instance_scenario_progress WHERE id = ? AND criteria = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_SCENARIO_INSTANCE_CRITERIA, "INSERT INTO instance_scenario_progress (id, criteria, counter, date) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_SCENARIO_INSTANCE_CRITERIA_FOR_INSTANCE, "DELETE FROM instance_scenario_progress WHERE id = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_UPD_SCENARIO_INSTANCE_CRITERIA, "UPDATE instance_scenario_progress SET counter = ?, date = ? WHERE id = ? AND criteria = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_DEL_INVALID_SCENARIO_INSTANCE_CRITERIA, "DELETE FROM instance_scenario_progress WHERE id = ? AND criteria = ?", CONNECTION_ASYNC);
}
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h
index 02969290007..91f8a51eda3 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.h
+++ b/src/server/database/Database/Implementation/CharacterDatabase.h
@@ -624,11 +624,9 @@ enum CharacterDatabaseStatements
CHAR_INS_BLACKMARKET_AUCTIONS,
CHAR_SEL_SCENARIO_INSTANCE_CRITERIA_FOR_INSTANCE,
- CHAR_SEL_SCENARIO_INSTANCE_CRITERIA,
+ CHAR_DEL_SCENARIO_INSTANCE_CRITERIA,
CHAR_INS_SCENARIO_INSTANCE_CRITERIA,
CHAR_DEL_SCENARIO_INSTANCE_CRITERIA_FOR_INSTANCE,
- CHAR_UPD_SCENARIO_INSTANCE_CRITERIA,
- CHAR_DEL_INVALID_SCENARIO_INSTANCE_CRITERIA,
MAX_CHARACTERDATABASE_STATEMENTS
};
diff --git a/src/server/game/Scenarios/InstanceScenario.cpp b/src/server/game/Scenarios/InstanceScenario.cpp
index 60f3a364af5..f8c9959d3fd 100644
--- a/src/server/game/Scenarios/InstanceScenario.cpp
+++ b/src/server/game/Scenarios/InstanceScenario.cpp
@@ -20,7 +20,7 @@
#include "InstanceSaveMgr.h"
#include "ObjectMgr.h"
-InstanceScenario::InstanceScenario(Map* map, ScenarioData const* scenarioData) : Scenario(scenarioData), _map(map)
+InstanceScenario::InstanceScenario(Map const* map, ScenarioData const* scenarioData) : Scenario(scenarioData), _map(map)
{
ASSERT(_map);
LoadInstanceData(_map->GetInstanceId());
@@ -65,28 +65,17 @@ void InstanceScenario::SaveToDB()
if (iter->second.Counter)
{
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_SCENARIO_INSTANCE_CRITERIA);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_SCENARIO_INSTANCE_CRITERIA);
stmt->setUInt32(0, id);
stmt->setUInt32(1, iter->first);
- PreparedQueryResult result = CharacterDatabase.Query(stmt);
- if (result)
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_SCENARIO_INSTANCE_CRITERIA);
- stmt->setUInt64(0, iter->second.Counter);
- stmt->setUInt32(1, uint32(iter->second.Date));
- stmt->setUInt32(2, id);
- stmt->setUInt32(3, iter->first);
- trans->Append(stmt);
- }
- else
- {
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_SCENARIO_INSTANCE_CRITERIA);
- stmt->setUInt32(0, id);
- stmt->setUInt32(1, iter->first);
- stmt->setUInt64(2, iter->second.Counter);
- stmt->setUInt32(3, uint32(iter->second.Date));
- trans->Append(stmt);
- }
+ trans->Append(stmt);
+
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_SCENARIO_INSTANCE_CRITERIA);
+ stmt->setUInt32(0, id);
+ stmt->setUInt32(1, iter->first);
+ stmt->setUInt64(2, iter->second.Counter);
+ stmt->setUInt32(3, uint32(iter->second.Date));
+ trans->Append(stmt);
}
iter->second.Changed = false;
@@ -120,7 +109,7 @@ void InstanceScenario::LoadInstanceData(uint32 instanceId)
// Removing non-existing criteria data for all instances
TC_LOG_ERROR("criteria.instancescenarios", "Removing scenario criteria %u data from the table `instance_scenario_progress`.", id);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_SCENARIO_INSTANCE_CRITERIA);
+ stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_SCENARIO_INSTANCE_CRITERIA);
stmt->setUInt32(0, instanceId);
stmt->setUInt32(1, uint32(id));
trans->Append(stmt);
diff --git a/src/server/game/Scenarios/InstanceScenario.h b/src/server/game/Scenarios/InstanceScenario.h
index 9582d0cf2ba..4dd7a31f083 100644
--- a/src/server/game/Scenarios/InstanceScenario.h
+++ b/src/server/game/Scenarios/InstanceScenario.h
@@ -27,7 +27,7 @@ typedef std::unordered_map<uint8, CriteriaProgressMap> StepCriteriaProgressMap;
class TC_GAME_API InstanceScenario : public Scenario
{
public:
- InstanceScenario(Map* map, ScenarioData const* scenarioData);
+ InstanceScenario(Map const* map, ScenarioData const* scenarioData);
void SaveToDB();
void LoadInstanceData(uint32 instanceId);
@@ -36,7 +36,7 @@ class TC_GAME_API InstanceScenario : public Scenario
std::string GetOwnerInfo() const override;
void SendPacket(WorldPacket const* data) const override;
- Map* _map;
+ Map const* _map;
ScenarioData const* _data;
StepCriteriaProgressMap _stepCriteriaProgress;
};