Changeset 173 for trunk/src/shared

Show
Ignore:
Timestamp:
11/19/08 13:43:02 (17 years ago)
Author:
yumileroy
Message:

[svn] * Avoid access to bag item prototype for getting bag size, use related item update field instead as more fast source.
* Better check client inventory pos data received in some client packets to skip invalid cases.
* Removed some unnecessary database queries.
* Make guid lookup for adding ignore async.
* Added two parameter versions of the AsyncQuery? function
* Make queries for adding friends async. - Hunuza
* Replace some PQuery() calls with more simple Query() - Hunuza
* Mark spell as executed instead of deleteable to solve crash.
*** Source mangos.

**Its a big commit. so test with care... or without care.... whatever floats your boat.

Original author: KingPin?
Date: 2008-11-05 20:10:19-06:00

Location:
trunk/src/shared/Database
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/shared/Database/Database.h

    r102 r173  
    6262        template<class Class, typename ParamType1> 
    6363            bool AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1), ParamType1 param1, const char *sql); 
     64        template<class Class, typename ParamType1, typename ParamType2> 
     65            bool AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql); 
    6466        template<typename ParamType1> 
    6567            bool AsyncQuery(void (*method)(QueryResult*, ParamType1), ParamType1 param1, const char *sql); 
     68        template<typename ParamType1, typename ParamType2> 
     69            bool AsyncQuery(void (*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql); 
    6670        template<class Class> 
    6771            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult*), const char *format,...) ATTR_PRINTF(4,5); 
    6872        template<class Class, typename ParamType1> 
    6973            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1), ParamType1 param1, const char *format,...) ATTR_PRINTF(5,6); 
     74        template<class Class, typename ParamType1, typename ParamType2> 
     75            bool AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) ATTR_PRINTF(5,6); 
    7076        template<typename ParamType1> 
    7177            bool AsyncPQuery(void (*method)(QueryResult*, ParamType1), ParamType1 param1, const char *format,...) ATTR_PRINTF(5,6); 
     78        template<typename ParamType1, typename ParamType2> 
     79            bool AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) ATTR_PRINTF(5,6); 
    7280        template<class Class> 
    7381            bool DelayQueryHolder(Class *object, void (Class::*method)(QueryResult*, SqlQueryHolder*), SqlQueryHolder *holder); 
  • trunk/src/shared/Database/DatabaseImpl.h

    r102 r173  
    4848} 
    4949 
     50template<class Class, typename ParamType1, typename ParamType2> 
     51bool 
     52Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql) 
     53{ 
     54    if (!sql) return false; 
     55    ZThread::ThreadImpl * queryThread = ZThread::ThreadImpl::current(); 
     56    QueryQueues::iterator itr = m_queryQueues.find(queryThread); 
     57    if (itr == m_queryQueues.end()) return false; 
     58    m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback<Class, ParamType1, ParamType2>(object, method, (QueryResult*)NULL, param1, param2), itr->second)); 
     59    return true; 
     60} 
     61 
    5062template<typename ParamType1> 
    5163bool 
     
    6072} 
    6173 
     74template<typename ParamType1, typename ParamType2> 
     75bool 
     76Database::AsyncQuery(void (*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql) 
     77{ 
     78    if (!sql) return false; 
     79    ZThread::ThreadImpl * queryThread = ZThread::ThreadImpl::current(); 
     80    QueryQueues::iterator itr = m_queryQueues.find(queryThread); 
     81    if (itr == m_queryQueues.end()) return false; 
     82    m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback<ParamType1, ParamType2>(method, (QueryResult*)NULL, param1, param2), itr->second)); 
     83    return true; 
     84} 
     85 
    6286template<class Class> 
    6387bool 
     
    102126} 
    103127 
     128template<class Class, typename ParamType1, typename ParamType2> 
     129bool 
     130Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) 
     131{ 
     132    if(!format) return false; 
     133 
     134    va_list ap; 
     135    char szQuery [MAX_QUERY_LEN]; 
     136    va_start(ap, format); 
     137    int res = vsnprintf( szQuery, MAX_QUERY_LEN, format, ap ); 
     138    va_end(ap); 
     139 
     140    if(res==-1) 
     141    { 
     142        sLog.outError("SQL Query truncated (and not execute) for format: %s",format); 
     143        return false; 
     144    } 
     145 
     146    return AsyncQuery(object, method, param1, param2, szQuery); 
     147} 
     148 
    104149template<typename ParamType1> 
    105150bool 
     
    123168} 
    124169 
     170template<typename ParamType1, typename ParamType2> 
     171bool 
     172Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) 
     173{ 
     174    if(!format) return false; 
     175 
     176    va_list ap; 
     177    char szQuery [MAX_QUERY_LEN]; 
     178    va_start(ap, format); 
     179    int res = vsnprintf( szQuery, MAX_QUERY_LEN, format, ap ); 
     180    va_end(ap); 
     181 
     182    if(res==-1) 
     183    { 
     184        sLog.outError("SQL Query truncated (and not execute) for format: %s",format); 
     185        return false; 
     186    } 
     187 
     188    return AsyncQuery(method, param1, param2, szQuery); 
     189} 
    125190 
    126191template<class Class>