aboutsummaryrefslogtreecommitdiff
path: root/src/server/database/Database/QueryHolder.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-10-24 17:37:24 +0200
committerShauren <shauren.trinity@gmail.com>2022-02-28 22:41:36 +0100
commit357147834e3d9e4c2822a0a5b895152d6639268d (patch)
tree3d8a8ede9e57cb1ccea02c4a80eea3e6aa9a6077 /src/server/database/Database/QueryHolder.cpp
parentf400a1cf365fd83241b5485cc731a48fd40b5943 (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)
(cherry picked from commit 53482f729995889936ad8fba9fc5789d9cdba85a)
Diffstat (limited to 'src/server/database/Database/QueryHolder.cpp')
-rw-r--r--src/server/database/Database/QueryHolder.cpp30
1 files changed, 11 insertions, 19 deletions
diff --git a/src/server/database/Database/QueryHolder.cpp b/src/server/database/Database/QueryHolder.cpp
index eb9dbdcca22..a5c43b67c8a 100644
--- a/src/server/database/Database/QueryHolder.cpp
+++ b/src/server/database/Database/QueryHolder.cpp
@@ -15,10 +15,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "MySQLConnection.h"
#include "QueryHolder.h"
-#include "PreparedStatement.h"
+#include "Errors.h"
#include "Log.h"
+#include "MySQLConnection.h"
+#include "PreparedStatement.h"
#include "QueryResult.h"
bool SQLQueryHolderBase::SetPreparedQueryImpl(size_t index, PreparedStatementBase* stmt)
@@ -33,13 +34,13 @@ bool SQLQueryHolderBase::SetPreparedQueryImpl(size_t index, PreparedStatementBas
return true;
}
-PreparedQueryResult SQLQueryHolderBase::GetPreparedResult(size_t index)
+PreparedQueryResult SQLQueryHolderBase::GetPreparedResult(size_t index) const
{
// Don't call to this function if the index is of a prepared statement
- if (index < m_queries.size())
- return m_queries[index].second;
- else
- return PreparedQueryResult(nullptr);
+ ASSERT(index < m_queries.size(), "Query holder result index out of range, tried to access index " SZFMTD " but there are only " SZFMTD " results",
+ index, m_queries.size());
+
+ return m_queries[index].second;
}
void SQLQueryHolderBase::SetPreparedResult(size_t index, PreparedResultSet* result)
@@ -71,25 +72,16 @@ void SQLQueryHolderBase::SetSize(size_t size)
m_queries.resize(size);
}
-SQLQueryHolderTask::~SQLQueryHolderTask()
-{
- if (!m_executed)
- delete m_holder;
-}
+SQLQueryHolderTask::~SQLQueryHolderTask() = default;
bool SQLQueryHolderTask::Execute()
{
- m_executed = true;
-
- if (!m_holder)
- return false;
-
/// execute all queries in the holder and pass the results
for (size_t i = 0; i < m_holder->m_queries.size(); ++i)
if (PreparedStatementBase* stmt = m_holder->m_queries[i].first)
m_holder->SetPreparedResult(i, m_conn->Query(stmt));
- m_result.set_value(m_holder);
+ m_result.set_value();
return true;
}
@@ -97,7 +89,7 @@ bool SQLQueryHolderCallback::InvokeIfReady()
{
if (m_future.valid() && m_future.wait_for(std::chrono::seconds(0)) == std::future_status::ready)
{
- m_callback(m_future.get());
+ m_callback(*m_holder);
return true;
}