aboutsummaryrefslogtreecommitdiff
path: root/src/server/database/Database/QueryHolder.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-10-24 17:37:24 +0200
committerShauren <shauren.trinity@gmail.com>2020-10-24 17:37:24 +0200
commit53482f729995889936ad8fba9fc5789d9cdba85a (patch)
tree93657e31b48c50d41e6d23c45bd0a6cb8eaeb0e8 /src/server/database/Database/QueryHolder.h
parentaff9cf40dcf52f686c27b7abe20ae0eda5779800 (diff)
Core/DBLayer: Fixed memory leaks with existing SQLQueryHolder uses and eliminated the possibilty of adding more in future (replaced manual memory management with smart pointers)
Diffstat (limited to 'src/server/database/Database/QueryHolder.h')
-rw-r--r--src/server/database/Database/QueryHolder.h21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/server/database/Database/QueryHolder.h b/src/server/database/Database/QueryHolder.h
index f94eff49d2c..25687fedd81 100644
--- a/src/server/database/Database/QueryHolder.h
+++ b/src/server/database/Database/QueryHolder.h
@@ -19,6 +19,7 @@
#define _QUERYHOLDER_H
#include "SQLOperation.h"
+#include <vector>
class TC_DATABASE_API SQLQueryHolderBase
{
@@ -26,10 +27,10 @@ class TC_DATABASE_API SQLQueryHolderBase
private:
std::vector<std::pair<PreparedStatementBase*, PreparedQueryResult>> m_queries;
public:
- SQLQueryHolderBase() { }
+ SQLQueryHolderBase() = default;
virtual ~SQLQueryHolderBase();
void SetSize(size_t size);
- PreparedQueryResult GetPreparedResult(size_t index);
+ PreparedQueryResult GetPreparedResult(size_t index) const;
void SetPreparedResult(size_t index, PreparedResultSet* result);
protected:
@@ -49,13 +50,12 @@ public:
class TC_DATABASE_API SQLQueryHolderTask : public SQLOperation
{
private:
- SQLQueryHolderBase* m_holder;
+ std::shared_ptr<SQLQueryHolderBase> m_holder;
QueryResultHolderPromise m_result;
- bool m_executed;
public:
- SQLQueryHolderTask(SQLQueryHolderBase* holder)
- : m_holder(holder), m_executed(false) { }
+ explicit SQLQueryHolderTask(std::shared_ptr<SQLQueryHolderBase> holder)
+ : m_holder(std::move(holder)) { }
~SQLQueryHolderTask();
@@ -66,20 +66,23 @@ class TC_DATABASE_API SQLQueryHolderTask : public SQLOperation
class TC_DATABASE_API SQLQueryHolderCallback
{
public:
- SQLQueryHolderCallback(QueryResultHolderFuture&& future) : m_future(std::move(future)) { }
+ SQLQueryHolderCallback(std::shared_ptr<SQLQueryHolderBase>&& holder, QueryResultHolderFuture&& future)
+ : m_holder(std::move(holder)), m_future(std::move(future)) { }
+
SQLQueryHolderCallback(SQLQueryHolderCallback&&) = default;
SQLQueryHolderCallback& operator=(SQLQueryHolderCallback&&) = default;
- void AfterComplete(std::function<void(SQLQueryHolderBase*)> callback) &
+ void AfterComplete(std::function<void(SQLQueryHolderBase const&)> callback) &
{
m_callback = std::move(callback);
}
bool InvokeIfReady();
+ std::shared_ptr<SQLQueryHolderBase> m_holder;
QueryResultHolderFuture m_future;
- std::function<void(SQLQueryHolderBase*)> m_callback;
+ std::function<void(SQLQueryHolderBase const&)> m_callback;
};
#endif