aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Database/SqlOperations.h
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-08-18 02:25:52 +0200
committerMachiavelli <none@none>2010-08-18 02:25:52 +0200
commit87218eadcdeac5ba86a035edfd079958405cb24f (patch)
treeb72020ed0d390953b70d2026bf4c0b16c8271d11 /src/server/shared/Database/SqlOperations.h
parent1ab2bd6d58adf35090ca3a9ef82eee00a14ff507 (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.h168
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
-