diff options
author | Naios <naios-dev@live.de> | 2015-04-02 21:32:58 +0200 |
---|---|---|
committer | Naios <naios-dev@live.de> | 2015-04-02 22:55:52 +0200 |
commit | 6d0f0bf5fa432ae970a69aef44e9379e63a9ec23 (patch) | |
tree | 95bbec596e69ad942b7cf9472ef584657aa85dec | |
parent | 3486f15352684fb0f7a53cde6716de074f597446 (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.h | 56 | ||||
-rw-r--r-- | src/server/shared/Database/QueryHolder.cpp | 23 | ||||
-rw-r--r-- | src/server/shared/Database/QueryHolder.h | 5 |
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); |