All pastes #500645 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-05-21 17:33 UTC
rendered paste body
Index: 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;