6#ifndef _DATABASEWORKERPOOL_H
7#define _DATABASEWORKERPOOL_H
21#define MIN_MYSQL_SERVER_VERSION 50100u
22#define MIN_MYSQL_CLIENT_VERSION 50100u
44 WPFatal(mysql_thread_safe(),
"Used MySQL library isn't thread-safe.");
52 bool Open(
const char* host,
const char* port,
const char* user,
const char* password,
const char* database,
uint8 async_threads,
uint8 synch_threads)
55 _connectionInfo =
new MySQLConnectionInfo(host, port, user, password, database);
57 SF_LOG_INFO(
"sql.driver",
"Opening DatabasePool '%s'. Asynchronous connections: %u, synchronous connections: %u.",
62 for (
uint8 i = 0; i < async_threads; ++i)
74 for (
uint8 i = 0; i < synch_threads; ++i)
86 SF_LOG_ERROR(
"sql.driver",
"DatabasePool %s NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile "
91 bool Open(
const std::string& infoString,
uint8 async_threads,
uint8 synch_threads)
96 SF_LOG_INFO(
"sql.driver",
"Opening DatabasePool '%s'. Asynchronous connections: %u, synchronous connections: %u.",
101 for (
uint8 i = 0; i < async_threads; ++i)
113 for (
uint8 i = 0; i < synch_threads; ++i)
125 SF_LOG_ERROR(
"sql.driver",
"DatabasePool %s NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile "
147 SF_LOG_INFO(
"sql.driver",
"Asynchronous connections on DatabasePool '%s' terminated. Proceeding with synchronous connections.",
283 return Query(szQuery, conn);
299 return Query(szQuery);
391 switch (transaction->GetSize())
394 SF_LOG_DEBUG(
"sql.driver",
"Transaction contains 0 queries. Not executing.");
397 SF_LOG_DEBUG(
"sql.driver",
"Warning: Transaction only holds 1 query, consider removing Transaction context in code.");
418 if (con->ExecuteTransaction(transaction))
426 if (con->GetLastError() == 1213)
428 uint8 loopBreaker = 5;
429 for (
uint8 i = 0; i < loopBreaker; ++i)
431 if (con->ExecuteTransaction(transaction))
437 transaction->Cleanup();
480 char* buf =
new char[str.size() * 2 + 1];
493 if (t->LockIfReady())
508 unsigned long EscapeString(
char* to,
const char* from,
unsigned long length)
510 if (!to || !from || !length)
533 if (t->LockIfReady())
Skyfire::Future< QueryResult > QueryResultFuture
#define MIN_MYSQL_CLIENT_VERSION
#define MIN_MYSQL_SERVER_VERSION
#define WPFatal(cond, msg)
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
#define SF_LOG_INFO(filterType__,...)
Skyfire::Future< PreparedQueryResult > PreparedQueryResultFuture
Skyfire::Future< SQLQueryHolder * > QueryResultHolderFuture
Skyfire::AutoPtr< PreparedResultSet, Skyfire::Mutex > PreparedQueryResult
Skyfire::AutoPtr< ResultSet, Skyfire::Mutex > QueryResult
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
void ExecuteOrAppend(SQLTransaction &trans, const char *sql)
QueryResult PQuery(const char *sql, T *conn,...)
void ExecuteOrAppend(SQLTransaction &trans, PreparedStatement *stmt)
PreparedQueryResultFuture AsyncQuery(PreparedStatement *stmt)
void PExecute(const char *sql,...)
bool Open(const std::string &infoString, uint8 async_threads, uint8 synch_threads)
void Enqueue(SQLOperation *op)
unsigned long EscapeString(char *to, const char *from, unsigned long length)
PreparedStatement * GetPreparedStatement(uint32 index)
QueryResult Query(const char *sql, T *conn=NULL)
void Execute(const char *sql)
void DirectCommitTransaction(SQLTransaction &transaction)
QueryResultFuture AsyncQuery(const char *sql)
bool Open(const char *host, const char *port, const char *user, const char *password, const char *database, uint8 async_threads, uint8 synch_threads)
void Execute(PreparedStatement *stmt)
std::vector< std::vector< CharacterDatabaseConnection * > > _connections
void KeepAlive()
Keeps all our MySQL connections alive, prevent the server from disconnecting us.
Skyfire::DatabaseQueue * _queue
QueryResultHolderFuture DelayQueryHolder(SQLQueryHolder *holder)
char const * GetDatabaseName() const
void Wait()
Blocks until all currently queued asynchronous operations have finished.
void DirectPExecute(const char *sql,...)
SQLTransaction BeginTransaction()
Begins an automanaged transaction pointer that will automatically rollback if not commited....
MySQLConnectionInfo * _connectionInfo
void DirectExecute(PreparedStatement *stmt)
void EscapeString(std::string &str)
Apply escape string'ing for current collation. (utf8).
void CommitTransaction(SQLTransaction transaction)
PreparedQueryResult Query(PreparedStatement *stmt)
void DirectExecute(const char *sql)
QueryResult PQuery(const char *sql,...)
QueryResultFuture AsyncPQuery(const char *sql,...)
uint32 _connectionCount[2]
bool Execute()
Operation for idle delaythreads.
uint64 GetRowCount() const
uint64 GetRowCount() const