aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-09-29 08:48:06 +0200
committerMachiavelli <none@none>2010-09-29 08:48:06 +0200
commitbf72fa749ff3beef2ba226862e2a5af7c170fc49 (patch)
treeb8f40bd36b67439e790f20f2b52c0ae864e547b5 /src
parentdcbe4026c327539391e022c69e417928f83c4ab5 (diff)
Core/DBLayer: Store MySQL connection details in a struct and print relevant data in sql driver messages
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/server/shared/Database/DatabaseWorkerPool.h22
-rw-r--r--src/server/shared/Database/Implementation/CharacterDatabase.cpp4
-rw-r--r--src/server/shared/Database/Implementation/CharacterDatabase.h2
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.cpp4
-rw-r--r--src/server/shared/Database/Implementation/LoginDatabase.h2
-rw-r--r--src/server/shared/Database/Implementation/WorldDatabase.cpp4
-rw-r--r--src/server/shared/Database/Implementation/WorldDatabase.h2
-rw-r--r--src/server/shared/Database/MySQLConnection.cpp41
-rw-r--r--src/server/shared/Database/MySQLConnection.h30
9 files changed, 59 insertions, 52 deletions
diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h
index 164fce8cb5f..ebb258177e0 100644
--- a/src/server/shared/Database/DatabaseWorkerPool.h
+++ b/src/server/shared/Database/DatabaseWorkerPool.h
@@ -61,7 +61,6 @@ class DatabaseWorkerPool
m_queue(new ACE_Activation_Queue(new ACE_Message_Queue<ACE_MT_SYNCH>)),
m_connections(0)
{
- m_infoString = "";
m_connections.resize(IDX_SIZE);
mysql_library_init(-1, NULL, NULL);
@@ -70,20 +69,22 @@ class DatabaseWorkerPool
~DatabaseWorkerPool()
{
- sLog.outSQLDriver("~DatabaseWorkerPool for '%s'.", "missingname");
+ sLog.outSQLDriver("~DatabaseWorkerPool for '%s'.", m_connectionDetails.database.c_str());
mysql_library_end();
}
bool Open(const std::string& infoString, uint8 async_threads, uint8 synch_threads)
{
- sLog.outSQLDriver("Opening databasepool '%s'. Async threads: %u, synch threads: %u", "nonameyet", async_threads, synch_threads);
+ m_connectionDetails = MySQLConnectionInfo(infoString);
+
+ sLog.outSQLDriver("Opening databasepool '%s'. Async threads: %u, synch threads: %u", m_connectionDetails.database.c_str(), async_threads, synch_threads);
/// Open asynchronous connections (delayed operations)
m_connections[IDX_ASYNC].resize(async_threads);
for (uint8 i = 0; i < async_threads; ++i)
{
T* t = new T(m_queue);
- t->Open(infoString);
+ t->Open(m_connectionDetails);
m_connections[IDX_ASYNC][i] = t;
++m_connectionCount;
}
@@ -93,21 +94,18 @@ class DatabaseWorkerPool
for (uint8 i = 0; i < synch_threads; ++i)
{
T* t = new T();
- t->Open(infoString);
+ t->Open(m_connectionDetails);
m_connections[IDX_SYNCH][i] = t;
++m_connectionCount;
}
- /// TODO: Connection details in a struct
- m_infoString = infoString;
-
sLog.outSQLDriver("Databasepool opened succesfuly. %u connections running.", (uint32)m_connectionCount.value());
return true;
}
void Close()
{
- sLog.outSQLDriver("Closing down databasepool '%s'.", "missingname");
+ sLog.outSQLDriver("Closing down databasepool '%s'.", m_connectionDetails.database.c_str());
/// Shuts down delaythreads for this connection pool.
m_queue->queue()->deactivate();
@@ -120,7 +118,7 @@ class DatabaseWorkerPool
--m_connectionCount;
}
- sLog.outSQLDriver("Asynchronous connections on databasepool '%s' terminated. Proceeding with synchronous connections.", "missingname");
+ sLog.outSQLDriver("Asynchronous connections on databasepool '%s' terminated. Proceeding with synchronous connections.", m_connectionDetails.database.c_str());
/// Shut down the synchronous connections
for (uint8 i = 0; i < m_connections[IDX_SYNCH].size(); ++i)
@@ -132,7 +130,7 @@ class DatabaseWorkerPool
--m_connectionCount;
}
- sLog.outSQLDriver("All connections on databasepool 'missingname' closed.");
+ sLog.outSQLDriver("All connections on databasepool %s closed.", m_connectionDetails.database.c_str());
}
void Execute(const char* sql)
@@ -362,7 +360,7 @@ class DatabaseWorkerPool
ACE_Activation_Queue* m_queue; //! Queue shared by async worker threads.
std::vector< std::vector<T*> > m_connections;
AtomicUInt m_connectionCount; //! Counter of MySQL connections;
- std::string m_infoString; //! Infostring that is passed on to child connections.
+ MySQLConnectionInfo m_connectionDetails;
};
#endif
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
index 3e6f1f5c74a..fe48a1564ff 100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
@@ -18,9 +18,9 @@
#include "CharacterDatabase.h"
-bool CharacterDatabaseConnection::Open(const std::string& infoString)
+bool CharacterDatabaseConnection::Open(const MySQLConnectionInfo& connInfo)
{
- if (!MySQLConnection::Open(infoString))
+ if (!MySQLConnection::Open(connInfo))
return false;
m_stmts.resize(MAX_CHARACTERDATABASE_STATEMENTS);
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
index 27aa20b9a13..387f35ba36b 100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.h
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
@@ -30,7 +30,7 @@ class CharacterDatabaseConnection : public MySQLConnection
CharacterDatabaseConnection(ACE_Activation_Queue* q) : MySQLConnection(q) {}
//- Loads databasetype specific prepared statements
- bool Open(const std::string& infoString);
+ bool Open(const MySQLConnectionInfo& connInfo);
};
typedef DatabaseWorkerPool<CharacterDatabaseConnection> CharacterDatabaseWorkerPool;
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp
index 5a662af7882..47530598027 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.cpp
+++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp
@@ -18,9 +18,9 @@
#include "LoginDatabase.h"
-bool LoginDatabaseConnection::Open(const std::string& infoString)
+bool LoginDatabaseConnection::Open(const MySQLConnectionInfo& connInfo)
{
- if (!MySQLConnection::Open(infoString))
+ if (!MySQLConnection::Open(connInfo))
return false;
m_stmts.resize(MAX_LOGINDATABASE_STATEMENTS);
diff --git a/src/server/shared/Database/Implementation/LoginDatabase.h b/src/server/shared/Database/Implementation/LoginDatabase.h
index 69674b2e354..a74669a2f71 100644
--- a/src/server/shared/Database/Implementation/LoginDatabase.h
+++ b/src/server/shared/Database/Implementation/LoginDatabase.h
@@ -30,7 +30,7 @@ class LoginDatabaseConnection : public MySQLConnection
LoginDatabaseConnection(ACE_Activation_Queue* q) : MySQLConnection(q) {}
//- Loads databasetype specific prepared statements
- bool Open(const std::string& infoString);
+ bool Open(const MySQLConnectionInfo& connInfo);
};
typedef DatabaseWorkerPool<LoginDatabaseConnection> LoginDatabaseWorkerPool;
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp
index 019473cee89..ebd40451d71 100644
--- a/src/server/shared/Database/Implementation/WorldDatabase.cpp
+++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp
@@ -18,9 +18,9 @@
#include "WorldDatabase.h"
-bool WorldDatabaseConnection::Open(const std::string& infoString)
+bool WorldDatabaseConnection::Open(const MySQLConnectionInfo& connInfo)
{
- if (!MySQLConnection::Open(infoString))
+ if (!MySQLConnection::Open(connInfo))
return false;
m_stmts.resize(MAX_WORLDDATABASE_STATEMENTS);
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.h b/src/server/shared/Database/Implementation/WorldDatabase.h
index c45fdd6eac6..5495048b02c 100644
--- a/src/server/shared/Database/Implementation/WorldDatabase.h
+++ b/src/server/shared/Database/Implementation/WorldDatabase.h
@@ -30,7 +30,7 @@ class WorldDatabaseConnection : public MySQLConnection
WorldDatabaseConnection(ACE_Activation_Queue* q) : MySQLConnection(q) {}
//- Loads databasetype specific prepared statements
- bool Open(const std::string& infoString);
+ bool Open(const MySQLConnectionInfo& connInfo);
};
typedef DatabaseWorkerPool<WorldDatabaseConnection> WorldDatabaseWorkerPool;
diff --git a/src/server/shared/Database/MySQLConnection.cpp b/src/server/shared/Database/MySQLConnection.cpp
index f4cf3152f6f..7c004927c4a 100644
--- a/src/server/shared/Database/MySQLConnection.cpp
+++ b/src/server/shared/Database/MySQLConnection.cpp
@@ -30,7 +30,6 @@
#include "SQLOperation.h"
#include "PreparedStatement.h"
#include "DatabaseWorker.h"
-#include "Util.h"
#include "Timer.h"
MySQLConnection::MySQLConnection() :
@@ -65,7 +64,7 @@ void MySQLConnection::Close()
delete this;
}
-bool MySQLConnection::Open(const std::string& infoString)
+bool MySQLConnection::Open(const MySQLConnectionInfo& connInfo)
{
MYSQL *mysqlInit;
mysqlInit = mysql_init(NULL);
@@ -75,30 +74,12 @@ bool MySQLConnection::Open(const std::string& infoString)
return false;
}
- Tokens tokens = StrSplit(infoString, ";");
-
- Tokens::iterator iter;
-
- std::string host, port_or_socket, user, password, database;
int port;
- char const* unix_socket;
-
- iter = tokens.begin();
-
- if (iter != tokens.end())
- host = *iter++;
- if (iter != tokens.end())
- port_or_socket = *iter++;
- if (iter != tokens.end())
- user = *iter++;
- if (iter != tokens.end())
- password = *iter++;
- if (iter != tokens.end())
- database = *iter++;
+ char* unix_socket;
mysql_options(mysqlInit, MYSQL_SET_CHARSET_NAME, "utf8");
#ifdef _WIN32
- if (host==".") // named pipe use option (Windows)
+ if (connInfo.host == ".") // named pipe use option (Windows)
{
unsigned int opt = MYSQL_PROTOCOL_PIPE;
mysql_options(mysqlInit, MYSQL_OPT_PROTOCOL, (char const*)&opt);
@@ -107,17 +88,17 @@ bool MySQLConnection::Open(const std::string& infoString)
}
else // generic case
{
- port = atoi(port_or_socket.c_str());
+ port = atoi(connInfo.port_or_socket.c_str());
unix_socket = 0;
}
#else
- if (host==".") // socket use option (Unix/Linux)
+ if (connInfo.host == ".") // socket use option (Unix/Linux)
{
unsigned int opt = MYSQL_PROTOCOL_SOCKET;
mysql_options(mysqlInit, MYSQL_OPT_PROTOCOL, (char const*)&opt);
- host = "localhost";
+ connInfo.host = "localhost";
port = 0;
- unix_socket = port_or_socket.c_str();
+ unix_socket = connInfo.port_or_socket.c_str();
}
else // generic case
{
@@ -126,8 +107,8 @@ bool MySQLConnection::Open(const std::string& infoString)
}
#endif
- m_Mysql = mysql_real_connect(mysqlInit, host.c_str(), user.c_str(),
- password.c_str(), database.c_str(), port, unix_socket, 0);
+ m_Mysql = mysql_real_connect(mysqlInit, connInfo.host.c_str(), connInfo.user.c_str(),
+ connInfo.password.c_str(), connInfo.database.c_str(), port, unix_socket, 0);
if (m_Mysql)
{
@@ -136,7 +117,7 @@ bool MySQLConnection::Open(const std::string& infoString)
if (mysql_get_server_version(m_Mysql) != mysql_get_client_version())
sLog.outSQLDriver("[WARNING] MySQL client/server version mismatch; may conflict with behaviour of prepared statements.");
- sLog.outDetail("Connected to MySQL database at %s", host.c_str());
+ sLog.outDetail("Connected to MySQL database at %s", connInfo.host.c_str());
if (!mysql_autocommit(m_Mysql, 1))
sLog.outSQLDriver("AUTOCOMMIT SUCCESSFULLY SET TO 1");
else
@@ -160,7 +141,7 @@ bool MySQLConnection::Open(const std::string& infoString)
}
else
{
- sLog.outError("Could not connect to MySQL database at %s: %s\n", host.c_str(), mysql_error(mysqlInit));
+ sLog.outError("Could not connect to MySQL database at %s: %s\n", connInfo.host.c_str(), mysql_error(mysqlInit));
mysql_close(mysqlInit);
return false;
}
diff --git a/src/server/shared/Database/MySQLConnection.h b/src/server/shared/Database/MySQLConnection.h
index d786dd83c01..0c18ad8b7fb 100644
--- a/src/server/shared/Database/MySQLConnection.h
+++ b/src/server/shared/Database/MySQLConnection.h
@@ -18,6 +18,7 @@
#include <ace/Activation_Queue.h>
#include "DatabaseWorkerPool.h"
+#include "Util.h"
#ifndef _MYSQLCONNECTION_H
#define _MYSQLCONNECTION_H
@@ -27,6 +28,33 @@ class PreparedStatement;
class MySQLPreparedStatement;
class PingOperation;
+struct MySQLConnectionInfo
+{
+ MySQLConnectionInfo() {}
+ MySQLConnectionInfo(const std::string& infoString)
+ {
+ Tokens tokens = StrSplit(infoString, ";");
+ Tokens::iterator iter = tokens.begin();
+
+ if (iter != tokens.end())
+ host = *iter++;
+ if (iter != tokens.end())
+ port_or_socket = *iter++;
+ if (iter != tokens.end())
+ user = *iter++;
+ if (iter != tokens.end())
+ password = *iter++;
+ if (iter != tokens.end())
+ database = *iter++;
+ }
+
+ std::string user;
+ std::string password;
+ std::string database;
+ std::string host;
+ std::string port_or_socket;
+};
+
class MySQLConnection
{
template <class T> friend class DatabaseWorkerPool;
@@ -37,7 +65,7 @@ class MySQLConnection
MySQLConnection(ACE_Activation_Queue* queue); //! Constructor for asynchroneous connections.
~MySQLConnection();
- virtual bool Open(const std::string& infoString); //! Connection details.
+ virtual bool Open(const MySQLConnectionInfo& connInfo); //! Connection details.
void Close();
public: