aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaios <naios-dev@live.de>2015-04-02 21:32:58 +0200
committerNaios <naios-dev@live.de>2015-04-02 22:55:52 +0200
commit6d0f0bf5fa432ae970a69aef44e9379e63a9ec23 (patch)
tree95bbec596e69ad942b7cf9472ef584657aa85dec
parent3486f15352684fb0f7a53cde6716de074f597446 (diff)
Core/Database: Remove va_args from DatabaseWorker::Execute methods.
* Also delegate SQLQueryHolder::SetPQuery into SetQuery. (cherry picked from commit df4723af25900b3638a2b5921cf67e1838cbaf64) Conflicts: src/server/shared/Database/QueryHolder.h
-rw-r--r--src/server/shared/Database/DatabaseWorkerPool.h56
-rw-r--r--src/server/shared/Database/QueryHolder.cpp23
-rw-r--r--src/server/shared/Database/QueryHolder.h5
3 files changed, 19 insertions, 65 deletions
diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h
index 6210986ff8b..d99e832d62f 100644
--- a/src/server/shared/Database/DatabaseWorkerPool.h
+++ b/src/server/shared/Database/DatabaseWorkerPool.h
@@ -28,6 +28,7 @@
#include "QueryResult.h"
#include "QueryHolder.h"
#include "AdhocStatement.h"
+#include "StringFormat.h"
#include <mysqld_error.h>
#include <memory>
@@ -170,18 +171,13 @@ class DatabaseWorkerPool
//! Enqueues a one-way SQL operation in string format -with variable args- that will be executed asynchronously.
//! This method should only be used for queries that are only executed once, e.g during startup.
- void PExecute(const char* sql, ...)
+ template<typename... Args>
+ void PExecute(const char* sql, Args const&... args)
{
if (!sql)
return;
- va_list ap;
- char szQuery[MAX_QUERY_LEN];
- va_start(ap, sql);
- vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap);
- va_end(ap);
-
- Execute(szQuery);
+ Execute(Trinity::StringFormat(sql, args...).c_str());
}
//! Enqueues a one-way SQL operation in prepared statement format that will be executed asynchronously.
@@ -210,18 +206,13 @@ class DatabaseWorkerPool
//! Directly executes a one-way SQL operation in string format -with variable args-, that will block the calling thread until finished.
//! This method should only be used for queries that are only executed once, e.g during startup.
- void DirectPExecute(const char* sql, ...)
+ template<typename... Args>
+ void DirectPExecute(const char* sql, Args const&... args)
{
if (!sql)
return;
- va_list ap;
- char szQuery[MAX_QUERY_LEN];
- va_start(ap, sql);
- vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap);
- va_end(ap);
-
- return DirectExecute(szQuery);
+ DirectExecute(Trinity::StringFormat(sql, args...).c_str());
}
//! Directly executes a one-way SQL operation in prepared statement format, that will block the calling thread until finished.
@@ -260,34 +251,24 @@ class DatabaseWorkerPool
//! Directly executes an SQL query in string format -with variable args- that will block the calling thread until finished.
//! Returns reference counted auto pointer, no need for manual memory management in upper level code.
- QueryResult PQuery(const char* sql, T* conn, ...)
+ template<typename... Args>
+ QueryResult PQuery(const char* sql, T* conn, Args const&... args)
{
if (!sql)
return QueryResult(NULL);
- va_list ap;
- char szQuery[MAX_QUERY_LEN];
- va_start(ap, conn);
- vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap);
- va_end(ap);
-
- return Query(szQuery, conn);
+ return Query(Trinity::StringFormat(sql, args...).c_str(), conn);
}
//! Directly executes an SQL query in string format -with variable args- that will block the calling thread until finished.
//! Returns reference counted auto pointer, no need for manual memory management in upper level code.
- QueryResult PQuery(const char* sql, ...)
+ template<typename... Args>
+ QueryResult PQuery(const char* sql, Args const&... args)
{
if (!sql)
return QueryResult(NULL);
- va_list ap;
- char szQuery[MAX_QUERY_LEN];
- va_start(ap, sql);
- vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap);
- va_end(ap);
-
- return Query(szQuery);
+ return Query(Trinity::StringFormat(sql, args...).c_str());
}
//! Directly executes an SQL query in prepared format that will block the calling thread until finished.
@@ -328,15 +309,10 @@ class DatabaseWorkerPool
//! Enqueues a query in string format -with variable args- that will set the value of the QueryResultFuture return object as soon as the query is executed.
//! The return value is then processed in ProcessQueryCallback methods.
- QueryResultFuture AsyncPQuery(const char* sql, ...)
+ template<typename... Args>
+ QueryResultFuture AsyncPQuery(const char* sql, Args const&... args)
{
- va_list ap;
- char szQuery[MAX_QUERY_LEN];
- va_start(ap, sql);
- vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap);
- va_end(ap);
-
- return AsyncQuery(szQuery);
+ return AsyncQuery(Trinity::StringFormat(sql, args...).c_str());
}
//! Enqueues a query in prepared format that will set the value of the PreparedQueryResultFuture return object as soon as the query is executed.
diff --git a/src/server/shared/Database/QueryHolder.cpp b/src/server/shared/Database/QueryHolder.cpp
index 75b96e1996c..2fdb3825526 100644
--- a/src/server/shared/Database/QueryHolder.cpp
+++ b/src/server/shared/Database/QueryHolder.cpp
@@ -40,29 +40,6 @@ bool SQLQueryHolder::SetQuery(size_t index, const char *sql)
return true;
}
-bool SQLQueryHolder::SetPQuery(size_t index, const char *format, ...)
-{
- if (!format)
- {
- TC_LOG_ERROR("sql.sql", "Query (index: %u) is empty.", uint32(index));
- return false;
- }
-
- va_list ap;
- char szQuery [MAX_QUERY_LEN];
- va_start(ap, format);
- int res = vsnprintf(szQuery, MAX_QUERY_LEN, format, ap);
- va_end(ap);
-
- if (res == -1)
- {
- TC_LOG_ERROR("sql.sql", "SQL Query truncated (and not execute) for format: %s", format);
- return false;
- }
-
- return SetQuery(index, szQuery);
-}
-
bool SQLQueryHolder::SetPreparedQuery(size_t index, PreparedStatement* stmt)
{
if (m_queries.size() <= index)
diff --git a/src/server/shared/Database/QueryHolder.h b/src/server/shared/Database/QueryHolder.h
index 9022b97de3b..a190ffbbdab 100644
--- a/src/server/shared/Database/QueryHolder.h
+++ b/src/server/shared/Database/QueryHolder.h
@@ -29,8 +29,9 @@ class SQLQueryHolder
public:
SQLQueryHolder() { }
virtual ~SQLQueryHolder();
- bool SetQuery(size_t index, const char *sql);
- bool SetPQuery(size_t index, const char *format, ...) ATTR_PRINTF(3, 4);
+ bool SetQuery(size_t index, const char* sql);
+ template<typename... Args>
+ bool SetPQuery(size_t index, const char* sql, Args const&... args) { return SetQuery(index, Trinity::StringFormat(sql, args...).c_str()); }
bool SetPreparedQuery(size_t index, PreparedStatement* stmt);
void SetSize(size_t size);
QueryResult GetResult(size_t index);