diff options
author | Machiavelli <none@none> | 2010-08-18 02:25:52 +0200 |
---|---|---|
committer | Machiavelli <none@none> | 2010-08-18 02:25:52 +0200 |
commit | 87218eadcdeac5ba86a035edfd079958405cb24f (patch) | |
tree | b72020ed0d390953b70d2026bf4c0b16c8271d11 /src/server/shared/Database/SqlOperations.h | |
parent | 1ab2bd6d58adf35090ca3a9ef82eee00a14ff507 (diff) |
* HIGHLY EXPERIMENTAL - USE AT OWN RISK *
Database Layer:
- Implement connection pooling: Instead of 1 delay thread per database, you can configure between 1 and 32 worker threads that have a seperate thread in the core and have a seperate connection to the MySQL server (based on raczman/Albator´s database layer for Trinitycore3)
- Implement a configurable thread bundle for synchroneous requests from seperate core threads (see worldserver.conf.dist for more info)
- Every mapupdate thread now has its seperate MySQL connection to the world and characters database
- Drop inconsistent PExecuteLog function - query logging will be implemented CONSISTENTLY later
- Drop current prepared statement interface - this will be done *properly* later
- You´ll need to update your worldserver.conf and authserver.conf
- You´re recommended to make a backup of your databases before using this.
* HIGHLY EXPERIMENTAL - USE AT OWN RISK *
* HIGHLY EXPERIMENTAL - USE AT OWN RISK *
etc.
--HG--
branch : trunk
Diffstat (limited to 'src/server/shared/Database/SqlOperations.h')
-rw-r--r-- | src/server/shared/Database/SqlOperations.h | 168 |
1 files changed, 0 insertions, 168 deletions
diff --git a/src/server/shared/Database/SqlOperations.h b/src/server/shared/Database/SqlOperations.h deleted file mode 100644 index 337790e4c72..00000000000 --- a/src/server/shared/Database/SqlOperations.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __SQLOPERATIONS_H -#define __SQLOPERATIONS_H - -#include "Common.h" - -#include "ace/Thread_Mutex.h" -#include "ace/Method_Request.h" -#include "Threading/LockedQueue.h" -#include <queue> -#include "Threading/Callback.h" -#include "QueryResult.h" - -/// ---- BASE --- - -class Database; -class SqlDelayThread; - -class SqlOperation -{ - public: - virtual void OnRemove() { delete this; } - virtual void Execute(Database *db) = 0; - virtual ~SqlOperation() {} -}; - -/// ---- ASYNC STATEMENTS / TRANSACTIONS ---- - -class SqlStatement : public SqlOperation -{ - private: - const char *m_sql; - public: - SqlStatement(const char *sql) : m_sql(strdup(sql)){} - ~SqlStatement() { void* tofree = const_cast<char*>(m_sql); free(tofree); } - void Execute(Database *db); -}; - -class SqlTransaction : public SqlOperation -{ - private: - std::queue<const char*> m_queue; - ACE_Thread_Mutex m_Mutex; - public: - SqlTransaction() {} - void DelayExecute(const char *sql) - { - m_Mutex.acquire(); - char* _sql = strdup(sql); - if (_sql) - m_queue.push(_sql); - m_Mutex.release(); - } - void Execute(Database *db); -}; - -/// ---- ASYNC QUERIES ---- - -class SqlQuery; /// contains a single async query -class QueryResult; /// the result of one -class SqlResultQueue; /// queue for thread sync -class SqlQueryHolder; /// groups several async quries -class SqlQueryHolderEx; /// points to a holder, added to the delay thread - -class SqlResultQueue : public ACE_Based::LockedQueue<Trinity::IQueryCallback* , ACE_Thread_Mutex> -{ - public: - SqlResultQueue() {} - void Update(); -}; - -class SqlQuery : public SqlOperation -{ - private: - const char *m_sql; - Trinity::IQueryCallback * m_callback; - SqlResultQueue * m_queue; - public: - SqlQuery(const char *sql, Trinity::IQueryCallback * callback, SqlResultQueue * queue) - : m_sql(strdup(sql)), m_callback(callback), m_queue(queue) {} - ~SqlQuery() { void* tofree = const_cast<char*>(m_sql); free(tofree); } - void Execute(Database *db); -}; - -class SqlQueryHolder -{ - friend class SqlQueryHolderEx; - private: - typedef std::pair<const char*, QueryResult_AutoPtr> SqlResultPair; - std::vector<SqlResultPair> m_queries; - public: - SqlQueryHolder() {} - ~SqlQueryHolder(); - bool SetQuery(size_t index, const char *sql); - bool SetPQuery(size_t index, const char *format, ...) ATTR_PRINTF(3,4); - void SetSize(size_t size); - QueryResult_AutoPtr GetResult(size_t index); - void SetResult(size_t index, QueryResult_AutoPtr result); - bool Execute(Trinity::IQueryCallback * callback, SqlDelayThread *thread, SqlResultQueue *queue); -}; - -class SqlQueryHolderEx : public SqlOperation -{ - private: - SqlQueryHolder * m_holder; - Trinity::IQueryCallback * m_callback; - SqlResultQueue * m_queue; - public: - SqlQueryHolderEx(SqlQueryHolder *holder, Trinity::IQueryCallback * callback, SqlResultQueue * queue) - : m_holder(holder), m_callback(callback), m_queue(queue) {} - void Execute(Database *db); -}; - -class SqlAsyncTask : public ACE_Method_Request -{ -public: - SqlAsyncTask(Database * db, SqlOperation * op) : m_db(db), m_op(op){} - ~SqlAsyncTask() - { - if (!m_op) - return; - - delete m_op; - m_op = NULL; - } - - int call() - { - if (m_db == NULL || m_op == NULL) - return -1; - - try - { - m_op->Execute(m_db); - } - catch(...) - { - return -1; - } - - return 0; - } - -private: - Database * m_db; - SqlOperation * m_op; -}; -#endif //__SQLOPERATIONS_H - |