diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-10-24 17:37:24 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-10-24 17:37:24 +0200 |
commit | 53482f729995889936ad8fba9fc5789d9cdba85a (patch) | |
tree | 93657e31b48c50d41e6d23c45bd0a6cb8eaeb0e8 /src/server/database/Database/QueryHolder.h | |
parent | aff9cf40dcf52f686c27b7abe20ae0eda5779800 (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.h | 21 |
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 |