aboutsummaryrefslogtreecommitdiff
path: root/src/shared/Database/SqlOperations.cpp
diff options
context:
space:
mode:
authorAnubisss <none@none>2010-01-23 14:45:58 +0100
committerAnubisss <none@none>2010-01-23 14:45:58 +0100
commitd9cb0702158fd045285f2c0a904cb31a45a3864a (patch)
treecdc6a7c6a83c6eea603ae296a653fb9f04945aad /src/shared/Database/SqlOperations.cpp
parentc784110d87666579f18620a98e1e57118db4a9cf (diff)
Implement QueryResult_AutoPtr type which is ACE's reference counted auto_ptr(ACE_Refcounted_Auto_Ptr) for QueryResult pointers.
Use this auto_ptr for every DB queries(except QueryNamedResult yet). This patch guarantees NO memory leaks from QueryResult pointers. Thanks to raczman for the idea and for the helping to make this patch. --HG-- branch : trunk
Diffstat (limited to 'src/shared/Database/SqlOperations.cpp')
-rw-r--r--src/shared/Database/SqlOperations.cpp12
1 files changed, 4 insertions, 8 deletions
diff --git a/src/shared/Database/SqlOperations.cpp b/src/shared/Database/SqlOperations.cpp
index 1012c94cbdd..793fabecde7 100644
--- a/src/shared/Database/SqlOperations.cpp
+++ b/src/shared/Database/SqlOperations.cpp
@@ -109,7 +109,7 @@ bool SqlQueryHolder::SetQuery(size_t index, const char *sql)
}
/// not executed yet, just stored (it's not called a holder for nothing)
- m_queries[index] = SqlResultPair(strdup(sql), NULL);
+ m_queries[index] = SqlResultPair(strdup(sql), QueryResult_AutoPtr(NULL));
return true;
}
@@ -136,7 +136,7 @@ bool SqlQueryHolder::SetPQuery(size_t index, const char *format, ...)
return SetQuery(index,szQuery);
}
-QueryResult* SqlQueryHolder::GetResult(size_t index)
+QueryResult_AutoPtr SqlQueryHolder::GetResult(size_t index)
{
if(index < m_queries.size())
{
@@ -150,10 +150,10 @@ QueryResult* SqlQueryHolder::GetResult(size_t index)
return m_queries[index].second;
}
else
- return NULL;
+ return QueryResult_AutoPtr(NULL);
}
-void SqlQueryHolder::SetResult(size_t index, QueryResult *result)
+void SqlQueryHolder::SetResult(size_t index, QueryResult_AutoPtr result)
{
/// store the result in the holder
if(index < m_queries.size())
@@ -167,11 +167,7 @@ SqlQueryHolder::~SqlQueryHolder()
/// if the result was never used, free the resources
/// results used already (getresult called) are expected to be deleted
if(m_queries[i].first != NULL)
- {
free((void*)(const_cast<char*>(m_queries[i].first)));
- if(m_queries[i].second)
- delete m_queries[i].second;
- }
}
}