diff options
Diffstat (limited to 'src/shared/Database')
| -rw-r--r-- | src/shared/Database/DBCStore.h | 6 | ||||
| -rw-r--r-- | src/shared/Database/Database.cpp | 11 | ||||
| -rw-r--r-- | src/shared/Database/Database.h | 36 | ||||
| -rw-r--r-- | src/shared/Database/DatabaseImpl.h | 48 | ||||
| -rw-r--r-- | src/shared/Database/DatabaseMysql.cpp | 6 | ||||
| -rw-r--r-- | src/shared/Database/DatabaseMysql.h | 2 | ||||
| -rw-r--r-- | src/shared/Database/DatabasePostgre.cpp | 8 | ||||
| -rw-r--r-- | src/shared/Database/DatabasePostgre.h | 2 | ||||
| -rw-r--r-- | src/shared/Database/QueryResult.h | 7 | ||||
| -rw-r--r-- | src/shared/Database/SQLStorageImpl.h | 7 | ||||
| -rw-r--r-- | src/shared/Database/SqlOperations.cpp | 12 | ||||
| -rw-r--r-- | src/shared/Database/SqlOperations.h | 7 | 
12 files changed, 72 insertions, 80 deletions
diff --git a/src/shared/Database/DBCStore.h b/src/shared/Database/DBCStore.h index ea4ce109e27..4344b6e6450 100644 --- a/src/shared/Database/DBCStore.h +++ b/src/shared/Database/DBCStore.h @@ -83,7 +83,7 @@ class DBCStorage              uint32 sqlRecordCount = 0;              uint32 sqlHighestIndex = 0;              Field *fields = NULL; -            QueryResult *result = NULL; +            QueryResult_AutoPtr result = QueryResult_AutoPtr(NULL);              // Load data from sql              if (sql)              { @@ -188,7 +188,6 @@ class DBCStorage                                          break;                                      case FT_STRING:                                          sLog.outError("Unsupported data type in table '%s' at char %d", sql->sqlTableName.c_str(), columnNumber); -                                        delete result;                                          return false;                                      case FT_SORT:                                          break; @@ -201,14 +200,12 @@ class DBCStorage                              else                              {                                  sLog.outError("Incorrect sql format string '%s' at char %d", sql->sqlTableName.c_str(), columnNumber); -                                delete result;                                  return false;                              }                          }                          if (sqlColumnNumber != (result->GetFieldCount()-1))                          {                              sLog.outError("SQL and DBC format strings are not matching for table: '%s'", sql->sqlTableName.c_str()); -                            delete result;                              return false;                          } @@ -216,7 +213,6 @@ class DBCStorage                          ++rowIndex;                      }while (result->NextRow());                  } -                delete result;              }              // error in dbc file at loading if NULL diff --git a/src/shared/Database/Database.cpp b/src/shared/Database/Database.cpp index ac2cdfa4163..da214e71650 100644 --- a/src/shared/Database/Database.cpp +++ b/src/shared/Database/Database.cpp @@ -117,9 +117,9 @@ void Database::SetResultQueue(SqlResultQueue * queue)  } -QueryResult* Database::PQuery(const char *format,...) +QueryResult_AutoPtr Database::PQuery(const char *format,...)  { -    if(!format) return NULL; +    if(!format) return QueryResult_AutoPtr(NULL);      va_list ap;      char szQuery [MAX_QUERY_LEN]; @@ -130,7 +130,7 @@ QueryResult* Database::PQuery(const char *format,...)      if(res==-1)      {          sLog.outError("SQL Query truncated (and not execute) for format: %s",format); -        return false; +        return QueryResult_AutoPtr(NULL);      }      return Query(szQuery); @@ -217,12 +217,9 @@ bool Database::DirectPExecute(const char * format,...)  bool Database::CheckRequiredField( char const* table_name, char const* required_name )  {      // check required field -    QueryResult* result = PQuery("SELECT %s FROM %s LIMIT 1",required_name,table_name); +    QueryResult_AutoPtr result = PQuery("SELECT %s FROM %s LIMIT 1",required_name,table_name);      if(result) -    { -        delete result;          return true; -    }      // check fail, prepare readabale error message diff --git a/src/shared/Database/Database.h b/src/shared/Database/Database.h index 804501cd7f9..e1b44c99057 100644 --- a/src/shared/Database/Database.h +++ b/src/shared/Database/Database.h @@ -52,8 +52,8 @@ class TRINITY_DLL_SPEC Database          virtual void InitDelayThread() = 0;          virtual void HaltDelayThread() = 0; -        virtual QueryResult* Query(const char *sql) = 0; -        QueryResult* PQuery(const char *format,...) ATTR_PRINTF(2,3); +        virtual QueryResult_AutoPtr Query(const char *sql) = 0; +        QueryResult_AutoPtr PQuery(const char *format,...) ATTR_PRINTF(2,3);          virtual QueryNamedResult* QueryNamed(const char *sql) = 0;          QueryNamedResult* PQueryNamed(const char *format,...) ATTR_PRINTF(2,3); @@ -61,41 +61,41 @@ class TRINITY_DLL_SPEC Database          // Query / member          template<class Class> -            bool AsyncQuery(Class *object, void (Class::*method)(QueryResult*), const char *sql); +            bool AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr), const char *sql);          template<class Class, typename ParamType1> -            bool AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1), ParamType1 param1, const char *sql); +            bool AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *sql);          template<class Class, typename ParamType1, typename ParamType2> -            bool AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql); +            bool AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql);          template<class Class, typename ParamType1, typename ParamType2, typename ParamType3> -            bool AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql); +            bool AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql);          // Query / static          template<typename ParamType1> -            bool AsyncQuery(void (*method)(QueryResult*, ParamType1), ParamType1 param1, const char *sql); +            bool AsyncQuery(void (*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *sql);          template<typename ParamType1, typename ParamType2> -            bool AsyncQuery(void (*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql); +            bool AsyncQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql);          template<typename ParamType1, typename ParamType2, typename ParamType3> -            bool AsyncQuery(void (*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql); +            bool AsyncQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql);          // PQuery / member          template<class Class> -            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult*), const char *format,...) ATTR_PRINTF(4,5); +            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr), const char *format,...) ATTR_PRINTF(4,5);          template<class Class, typename ParamType1> -            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1), ParamType1 param1, const char *format,...) ATTR_PRINTF(5,6); +            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *format,...) ATTR_PRINTF(5,6);          template<class Class, typename ParamType1, typename ParamType2> -            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) ATTR_PRINTF(6,7); +            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) ATTR_PRINTF(6,7);          template<class Class, typename ParamType1, typename ParamType2, typename ParamType3> -            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...) ATTR_PRINTF(7,8); +            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...) ATTR_PRINTF(7,8);          // PQuery / static          template<typename ParamType1> -            bool AsyncPQuery(void (*method)(QueryResult*, ParamType1), ParamType1 param1, const char *format,...) ATTR_PRINTF(4,5); +            bool AsyncPQuery(void (*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *format,...) ATTR_PRINTF(4,5);          template<typename ParamType1, typename ParamType2> -            bool AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) ATTR_PRINTF(5,6); +            bool AsyncPQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) ATTR_PRINTF(5,6);          template<typename ParamType1, typename ParamType2, typename ParamType3> -            bool AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...) ATTR_PRINTF(6,7); +            bool AsyncPQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...) ATTR_PRINTF(6,7);          template<class Class>          // QueryHolder -            bool DelayQueryHolder(Class *object, void (Class::*method)(QueryResult*, SqlQueryHolder*), SqlQueryHolder *holder); +            bool DelayQueryHolder(Class *object, void (Class::*method)(QueryResult_AutoPtr, SqlQueryHolder*), SqlQueryHolder *holder);          template<class Class, typename ParamType1> -            bool DelayQueryHolder(Class *object, void (Class::*method)(QueryResult*, SqlQueryHolder*, ParamType1), SqlQueryHolder *holder, ParamType1 param1); +            bool DelayQueryHolder(Class *object, void (Class::*method)(QueryResult_AutoPtr, SqlQueryHolder*, ParamType1), SqlQueryHolder *holder, ParamType1 param1);          virtual bool Execute(const char *sql) = 0;          bool PExecute(const char *format,...) ATTR_PRINTF(2,3); diff --git a/src/shared/Database/DatabaseImpl.h b/src/shared/Database/DatabaseImpl.h index 01ee52065fa..d77b16c8ea6 100644 --- a/src/shared/Database/DatabaseImpl.h +++ b/src/shared/Database/DatabaseImpl.h @@ -68,7 +68,7 @@  template<class Class>  bool -Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*), const char *sql) +Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr), const char *sql)  {      ASYNC_QUERY_BODY(sql, itr)      return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback<Class>(object, method), itr->second)); @@ -76,59 +76,59 @@ Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*), const c  template<class Class, typename ParamType1>  bool -Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1), ParamType1 param1, const char *sql) +Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *sql)  {      ASYNC_QUERY_BODY(sql, itr) -    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback<Class, ParamType1>(object, method, (QueryResult*)NULL, param1), itr->second)); +    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback<Class, ParamType1>(object, method, (QueryResult_AutoPtr)NULL, param1), itr->second));  }  template<class Class, typename ParamType1, typename ParamType2>  bool -Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql) +Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql)  {      ASYNC_QUERY_BODY(sql, itr) -    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback<Class, ParamType1, ParamType2>(object, method, (QueryResult*)NULL, param1, param2), itr->second)); +    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback<Class, ParamType1, ParamType2>(object, method, (QueryResult_AutoPtr)NULL, param1, param2), itr->second));  }  template<class Class, typename ParamType1, typename ParamType2, typename ParamType3>  bool -Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql) +Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql)  {      ASYNC_QUERY_BODY(sql, itr) -    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback<Class, ParamType1, ParamType2, ParamType3>(object, method, (QueryResult*)NULL, param1, param2, param3), itr->second)); +    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback<Class, ParamType1, ParamType2, ParamType3>(object, method, (QueryResult_AutoPtr)NULL, param1, param2, param3), itr->second));  }  // -- Query / static --  template<typename ParamType1>  bool -Database::AsyncQuery(void (*method)(QueryResult*, ParamType1), ParamType1 param1, const char *sql) +Database::AsyncQuery(void (*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *sql)  {      ASYNC_QUERY_BODY(sql, itr) -    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback<ParamType1>(method, (QueryResult*)NULL, param1), itr->second)); +    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback<ParamType1>(method, (QueryResult_AutoPtr)NULL, param1), itr->second));  }  template<typename ParamType1, typename ParamType2>  bool -Database::AsyncQuery(void (*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql) +Database::AsyncQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql)  {      ASYNC_QUERY_BODY(sql, itr) -    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback<ParamType1, ParamType2>(method, (QueryResult*)NULL, param1, param2), itr->second)); +    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback<ParamType1, ParamType2>(method, (QueryResult_AutoPtr)NULL, param1, param2), itr->second));  }  template<typename ParamType1, typename ParamType2, typename ParamType3>  bool -Database::AsyncQuery(void (*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql) +Database::AsyncQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql)  {      ASYNC_QUERY_BODY(sql, itr) -    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback<ParamType1, ParamType2, ParamType3>(method, (QueryResult*)NULL, param1, param2, param3), itr->second)); +    return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback<ParamType1, ParamType2, ParamType3>(method, (QueryResult_AutoPtr)NULL, param1, param2, param3), itr->second));  }  // -- PQuery / member --  template<class Class>  bool -Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*), const char *format,...) +Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr), const char *format,...)  {      ASYNC_PQUERY_BODY(format, szQuery)      return AsyncQuery(object, method, szQuery); @@ -136,7 +136,7 @@ Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*), const  template<class Class, typename ParamType1>  bool -Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1), ParamType1 param1, const char *format,...) +Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *format,...)  {      ASYNC_PQUERY_BODY(format, szQuery)      return AsyncQuery(object, method, param1, szQuery); @@ -144,7 +144,7 @@ Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamTy  template<class Class, typename ParamType1, typename ParamType2>  bool -Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) +Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...)  {      ASYNC_PQUERY_BODY(format, szQuery)      return AsyncQuery(object, method, param1, param2, szQuery); @@ -152,7 +152,7 @@ Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamTy  template<class Class, typename ParamType1, typename ParamType2, typename ParamType3>  bool -Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...) +Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...)  {      ASYNC_PQUERY_BODY(format, szQuery)      return AsyncQuery(object, method, param1, param2, param3, szQuery); @@ -162,7 +162,7 @@ Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamTy  template<typename ParamType1>  bool -Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1), ParamType1 param1, const char *format,...) +Database::AsyncPQuery(void (*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *format,...)  {      ASYNC_PQUERY_BODY(format, szQuery)      return AsyncQuery(method, param1, szQuery); @@ -170,7 +170,7 @@ Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1), ParamType1 param  template<typename ParamType1, typename ParamType2>  bool -Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) +Database::AsyncPQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...)  {      ASYNC_PQUERY_BODY(format, szQuery)      return AsyncQuery(method, param1, param2, szQuery); @@ -178,7 +178,7 @@ Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2), Para  template<typename ParamType1, typename ParamType2, typename ParamType3>  bool -Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...) +Database::AsyncPQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...)  {      ASYNC_PQUERY_BODY(format, szQuery)      return AsyncQuery(method, param1, param2, param3, szQuery); @@ -188,18 +188,18 @@ Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2, Param  template<class Class>  bool -Database::DelayQueryHolder(Class *object, void (Class::*method)(QueryResult*, SqlQueryHolder*), SqlQueryHolder *holder) +Database::DelayQueryHolder(Class *object, void (Class::*method)(QueryResult_AutoPtr, SqlQueryHolder*), SqlQueryHolder *holder)  {      ASYNC_DELAYHOLDER_BODY(holder, itr) -    return holder->Execute(new Trinity::QueryCallback<Class, SqlQueryHolder*>(object, method, (QueryResult*)NULL, holder), m_threadBody, itr->second); +    return holder->Execute(new Trinity::QueryCallback<Class, SqlQueryHolder*>(object, method, (QueryResult_AutoPtr)NULL, holder), m_threadBody, itr->second);  }  template<class Class, typename ParamType1>  bool -Database::DelayQueryHolder(Class *object, void (Class::*method)(QueryResult*, SqlQueryHolder*, ParamType1), SqlQueryHolder *holder, ParamType1 param1) +Database::DelayQueryHolder(Class *object, void (Class::*method)(QueryResult_AutoPtr, SqlQueryHolder*, ParamType1), SqlQueryHolder *holder, ParamType1 param1)  {      ASYNC_DELAYHOLDER_BODY(holder, itr) -    return holder->Execute(new Trinity::QueryCallback<Class, SqlQueryHolder*, ParamType1>(object, method, (QueryResult*)NULL, holder, param1), m_threadBody, itr->second); +    return holder->Execute(new Trinity::QueryCallback<Class, SqlQueryHolder*, ParamType1>(object, method, (QueryResult_AutoPtr)NULL, holder, param1), m_threadBody, itr->second);  }  #undef ASYNC_QUERY_BODY diff --git a/src/shared/Database/DatabaseMysql.cpp b/src/shared/Database/DatabaseMysql.cpp index 6412ed9312f..cc94ca3540d 100644 --- a/src/shared/Database/DatabaseMysql.cpp +++ b/src/shared/Database/DatabaseMysql.cpp @@ -235,7 +235,7 @@ bool DatabaseMysql::_Query(const char *sql, MYSQL_RES **pResult, MYSQL_FIELD **p      return true;  } -QueryResult* DatabaseMysql::Query(const char *sql) +QueryResult_AutoPtr DatabaseMysql::Query(const char *sql)  {      MYSQL_RES *result = NULL;      MYSQL_FIELD *fields = NULL; @@ -243,13 +243,13 @@ QueryResult* DatabaseMysql::Query(const char *sql)      uint32 fieldCount = 0;      if(!_Query(sql,&result,&fields,&rowCount,&fieldCount)) -        return NULL; +        return QueryResult_AutoPtr(NULL);      QueryResultMysql *queryResult = new QueryResultMysql(result, fields, rowCount, fieldCount);      queryResult->NextRow(); -    return queryResult; +    return QueryResult_AutoPtr(queryResult);  }  QueryNamedResult* DatabaseMysql::QueryNamed(const char *sql) diff --git a/src/shared/Database/DatabaseMysql.h b/src/shared/Database/DatabaseMysql.h index d4e440f96f6..4f7ab2b88b7 100644 --- a/src/shared/Database/DatabaseMysql.h +++ b/src/shared/Database/DatabaseMysql.h @@ -49,7 +49,7 @@ class TRINITY_DLL_SPEC DatabaseMysql : public Database          bool Initialize(const char *infoString);          void InitDelayThread();          void HaltDelayThread(); -        QueryResult* Query(const char *sql); +        QueryResult_AutoPtr Query(const char *sql);          QueryNamedResult* QueryNamed(const char *sql);          bool Execute(const char *sql);          bool DirectExecute(const char* sql); diff --git a/src/shared/Database/DatabasePostgre.cpp b/src/shared/Database/DatabasePostgre.cpp index 983932dc03d..a1283538b20 100644 --- a/src/shared/Database/DatabasePostgre.cpp +++ b/src/shared/Database/DatabasePostgre.cpp @@ -158,22 +158,22 @@ bool DatabasePostgre::_Query(const char *sql, PGresult** pResult, uint64* pRowCo      return true;  } -QueryResult* DatabasePostgre::Query(const char *sql) +QueryResult_AutoPtr DatabasePostgre::Query(const char *sql)  {      if (!mPGconn) -        return 0; +        return QueryResult_AutoPtr(NULL);      PGresult* result = NULL;      uint64 rowCount = 0;      uint32 fieldCount = 0;      if(!_Query(sql,&result,&rowCount,&fieldCount)) -        return NULL; +        return QueryResult_AutoPtr(NULL);      QueryResultPostgre * queryResult = new QueryResultPostgre(result, rowCount, fieldCount);      queryResult->NextRow(); -    return queryResult; +    return QueryResult_AutoPtr(queryResult);  }  QueryNamedResult* DatabasePostgre::QueryNamed(const char *sql) diff --git a/src/shared/Database/DatabasePostgre.h b/src/shared/Database/DatabasePostgre.h index fcd420ef8e4..cd93f416bfe 100644 --- a/src/shared/Database/DatabasePostgre.h +++ b/src/shared/Database/DatabasePostgre.h @@ -45,7 +45,7 @@ class DatabasePostgre : public Database          bool Initialize(const char *infoString);          void InitDelayThread();          void HaltDelayThread(); -        QueryResult* Query(const char *sql); +        QueryResult_AutoPtr Query(const char *sql);          QueryNamedResult* QueryNamed(const char *sql);          bool Execute(const char *sql);          bool DirectExecute(const char* sql); diff --git a/src/shared/Database/QueryResult.h b/src/shared/Database/QueryResult.h index a0c77752300..f9488f5a030 100644 --- a/src/shared/Database/QueryResult.h +++ b/src/shared/Database/QueryResult.h @@ -21,6 +21,11 @@  #if !defined(QUERYRESULT_H)  #define QUERYRESULT_H +#include <ace/Refcounted_Auto_Ptr.h> +#include <ace/Null_Mutex.h> + +#include "Field.h" +  class TRINITY_DLL_SPEC QueryResult  {      public: @@ -44,6 +49,8 @@ class TRINITY_DLL_SPEC QueryResult          uint64 mRowCount;  }; +typedef ACE_Refcounted_Auto_Ptr<QueryResult, ACE_Null_Mutex> QueryResult_AutoPtr; +  typedef std::vector<std::string> QueryFieldNames;  class TRINITY_DLL_SPEC QueryNamedResult diff --git a/src/shared/Database/SQLStorageImpl.h b/src/shared/Database/SQLStorageImpl.h index 5ad8a66679a..c74be48c34c 100644 --- a/src/shared/Database/SQLStorageImpl.h +++ b/src/shared/Database/SQLStorageImpl.h @@ -122,7 +122,7 @@ void SQLStorageLoaderBase<T>::Load(SQLStorage &store)  {      uint32 maxi;      Field *fields; -    QueryResult *result  = WorldDatabase.PQuery("SELECT MAX(%s) FROM %s", store.entry_field, store.table); +    QueryResult_AutoPtr result  = WorldDatabase.PQuery("SELECT MAX(%s) FROM %s", store.entry_field, store.table);      if(!result)      {          sLog.outError("Error loading %s table (not exist?)\n", store.table); @@ -130,14 +130,12 @@ void SQLStorageLoaderBase<T>::Load(SQLStorage &store)      }      maxi = (*result)[0].GetUInt32()+1; -    delete result;      result = WorldDatabase.PQuery("SELECT COUNT(*) FROM %s", store.table);      if(result)      {          fields = result->Fetch();          store.RecordCount = fields[0].GetUInt32(); -        delete result;      }      else          store.RecordCount = 0; @@ -158,7 +156,6 @@ void SQLStorageLoaderBase<T>::Load(SQLStorage &store)      {          store.RecordCount = 0;          sLog.outError("Error in %s table, probably sql file format was updated (there should be %d fields in sql).\n", store.table, store.iNumFields); -        delete result;          exit(1);                                            // Stop server at loading broken or non-compatible table.      } @@ -206,8 +203,6 @@ void SQLStorageLoaderBase<T>::Load(SQLStorage &store)          ++count;      }while( result->NextRow() ); -    delete result; -      store.pIndex = newIndex;      store.MaxEntry = maxi;      store.data = _data; 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; -        }      }  } diff --git a/src/shared/Database/SqlOperations.h b/src/shared/Database/SqlOperations.h index acaffb29c70..18641c743e1 100644 --- a/src/shared/Database/SqlOperations.h +++ b/src/shared/Database/SqlOperations.h @@ -27,6 +27,7 @@  #include "LockedQueue.h"  #include <queue>  #include "Utilities/Callback.h" +#include "QueryResult.h"  /// ---- BASE --- @@ -95,7 +96,7 @@ class SqlQueryHolder  {      friend class SqlQueryHolderEx;      private: -        typedef std::pair<const char*, QueryResult*> SqlResultPair; +        typedef std::pair<const char*, QueryResult_AutoPtr> SqlResultPair;          std::vector<SqlResultPair> m_queries;      public:          SqlQueryHolder() {} @@ -103,8 +104,8 @@ class SqlQueryHolder          bool SetQuery(size_t index, const char *sql);          bool SetPQuery(size_t index, const char *format, ...) ATTR_PRINTF(3,4);          void SetSize(size_t size); -        QueryResult* GetResult(size_t index); -        void SetResult(size_t index, QueryResult *result); +        QueryResult_AutoPtr GetResult(size_t index); +        void SetResult(size_t index, QueryResult_AutoPtr result);          bool Execute(Trinity::IQueryCallback * callback, SqlDelayThread *thread, SqlResultQueue *queue);  };  | 
