rendered paste bodyIndex: src/game/TradeHandler.cpp
===================================================================
--- src/game/TradeHandler.cpp (revision 3691)
+++ src/game/TradeHandler.cpp (working copy)
@@ -295,10 +295,10 @@
_player->pTrader->ClearTrade();
// desynced with the other saves here (SaveInventoryAndGoldToDB() not have own transaction guards)
- //sDatabase.BeginTransaction();
+ sDatabase.BeginTransaction();
_player->SaveInventoryAndGoldToDB();
_player->pTrader->SaveInventoryAndGoldToDB();
- //sDatabase.CommitTransaction();
+ sDatabase.CommitTransaction();
_player->pTrader->GetSession()->SendTradeStatus(TRADE_STATUS_TRADE_COMPLETE);
SendTradeStatus(TRADE_STATUS_TRADE_COMPLETE);
Index: src/shared/Database/Database.h
===================================================================
--- src/shared/Database/Database.h (revision 3691)
+++ src/shared/Database/Database.h (working copy)
@@ -53,7 +53,20 @@
bool ExecuteLog(const char * format,...);
bool PExecuteLog(const char * format,...);
-
+
+ virtual bool BeginTransaction() // nothing do if DB not support transactions
+ {
+ return true;
+ }
+ virtual bool CommitTransaction() // nothing do if DB not support transactions
+ {
+ return true;
+ }
+ virtual bool RollbackTransaction() // can't rollback without transaction support
+ {
+ return false;
+ }
+
virtual void CheckConnections() = 0;
inline DatabaseType GetType() { return mType; }
@@ -102,7 +115,6 @@
Database* CreateDatabaseInterface(DatabaseType type);
void DestroyDatabaseInterface(Database * ptr);
-// shitty mangos coders
extern Database * MainDatabase;
extern Database * LogonDatabase;
#define sDatabase (*MainDatabase)
Index: src/shared/Database/impl/MySQLDatabase.cpp
===================================================================
--- src/shared/Database/impl/MySQLDatabase.cpp (revision 3691)
+++ src/shared/Database/impl/MySQLDatabase.cpp (working copy)
@@ -17,8 +17,12 @@
*/
#include "../DatabaseEnv.h"
-#include "Timer.h"
+#ifdef WIN32
+#define usleep Sleep
+#else
+#endif
+
#ifdef DATABASE_SUPPORT_MYSQL
MySQLDatabase::MySQLDatabase() : Database(DATABASE_TYPE_MYSQL)
@@ -28,7 +32,7 @@
QueryBuffer = NULL;
mConnectionCount = -1; // Not connected.
mNormalCount = -1;
- mNextPing = getMSTime();
+ mNextPing = time(NULL);
mQueryThread = 0;
}
@@ -172,10 +176,10 @@
void MySQLDatabase::CheckConnections()
{
// Check every 30 seconds (TODO: MAKE CUSTOMIZABLE)
- if(getMSTime() < mNextPing)
+ if(time(NULL) < mNextPing)
return;
- mNextPing = getMSTime() + 60000;
+ mNextPing = time(NULL) + 60000;
mSearchMutex.acquire();
for(uint32 i = 0; i < mNormalCount; ++i)
{
@@ -239,7 +243,7 @@
int result = mysql_query(Connections[ConnectionIndex], Sql);
if(result > 0)
{
- sLog.outDetail("Sql query failed due to [%s]", mysql_error(Connections[ConnectionIndex]));
+ sLog.outError("Sql query failed due to [%s]", mysql_error(Connections[ConnectionIndex]));
if( Self == false && HandleError( ConnectionIndex, mysql_errno(Connections[ConnectionIndex]) ) )
{
// Re-send the query, the connection was successful.
@@ -321,6 +325,24 @@
return qResult;
}
+bool MySQLDatabase::BeginTransaction()
+{
+ Execute("BEGIN");
+ return true;
+}
+
+bool MySQLDatabase::CommitTransaction()
+{
+ Execute("COMMIT");
+ return true;
+}
+
+bool MySQLDatabase::RollbackTransaction()
+{
+ Execute("ROLLBACK");
+ return true;
+}
+
bool MySQLDatabase::Execute(const char* QueryString, ...)
{
if(QueryString == NULL) return false;
@@ -400,7 +422,7 @@
{
// set thread name
//SetThreadName("MySQL Database Execute Thread");
- Sleep(2000);
+ usleep(2000);
bool err = false;
string query;
MYSQL * conn = _db->Connections[_db->mDelayedID];
@@ -425,7 +447,7 @@
if(!_db->Connect(i) || !_db->SelectDatabase(i))
{
sLog.outError("Delayed query thread failed reconnection. Trying again in 2 seconds.");
- Sleep(2000);
+ usleep(2000);
}
else
{
@@ -442,7 +464,7 @@
_db->SendQuery(i, query.c_str(), false);
}
}
- Sleep(200);
+ usleep(200);
}
}
Index: src/shared/Database/impl/MySQLDatabase.h
===================================================================
--- src/shared/Database/impl/MySQLDatabase.h (revision 3691)
+++ src/shared/Database/impl/MySQLDatabase.h (working copy)
@@ -43,6 +43,9 @@
QueryResult* Query(const char* QueryString, ...);
bool WaitExecute(const char* QueryString, ...);
bool Execute(const char* QueryString, ...);
+ bool BeginTransaction();
+ bool CommitTransaction();
+ bool RollbackTransaction();
void CheckConnections();
bool Active;