diff options
author | megamage <none@none> | 2009-06-01 21:52:17 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-06-01 21:52:17 -0500 |
commit | 7344a5ef6f776f355cda34da77d2aed01f228b47 (patch) | |
tree | 8f02e0317c9a53de26f59f64f43456f397a4724c /src/shared/Database/DatabaseMysql.cpp | |
parent | b05ebfa8e90def21baa98707a1d5e9185950de74 (diff) |
[7935] Move seldom used access to query data by field names to independent object. Author: VladimirMangos
This let not do preparation code for unused later functionlity.
--HG--
branch : trunk
Diffstat (limited to 'src/shared/Database/DatabaseMysql.cpp')
-rw-r--r-- | src/shared/Database/DatabaseMysql.cpp | 62 |
1 files changed, 46 insertions, 16 deletions
diff --git a/src/shared/Database/DatabaseMysql.cpp b/src/shared/Database/DatabaseMysql.cpp index 9574d3dc2ac..0189b5883f7 100644 --- a/src/shared/Database/DatabaseMysql.cpp +++ b/src/shared/Database/DatabaseMysql.cpp @@ -192,15 +192,11 @@ bool DatabaseMysql::Initialize(const char *infoString) } } -QueryResult* DatabaseMysql::Query(const char *sql) +bool DatabaseMysql::_Query(const char *sql, MYSQL_RES **pResult, MYSQL_FIELD **pFields, uint64* pRowCount, uint32* pFieldCount) { if (!mMysql) return 0; - MYSQL_RES *result = 0; - uint64 rowCount = 0; - uint32 fieldCount = 0; - { // guarded block for thread-safe mySQL request ACE_Guard<ACE_Thread_Mutex> query_connection_guard(mMutex); @@ -211,7 +207,7 @@ QueryResult* DatabaseMysql::Query(const char *sql) { sLog.outErrorDb( "SQL: %s", sql ); sLog.outErrorDb("query ERROR: %s", mysql_error(mMysql)); - return NULL; + return false; } else { @@ -220,29 +216,63 @@ QueryResult* DatabaseMysql::Query(const char *sql) #endif } - result = mysql_store_result(mMysql); - - rowCount = mysql_affected_rows(mMysql); - fieldCount = mysql_field_count(mMysql); + *pResult = mysql_store_result(mMysql); + *pRowCount = mysql_affected_rows(mMysql); + *pFieldCount = mysql_field_count(mMysql); // end guarded block } - if (!result ) - return NULL; + if (!*pResult ) + return false; - if (!rowCount) + if (!*pRowCount) { - mysql_free_result(result); - return NULL; + mysql_free_result(*pResult); + return false; } - QueryResultMysql *queryResult = new QueryResultMysql(result, rowCount, fieldCount); + *pFields = mysql_fetch_fields(*pResult); + return true; +} + +QueryResult* DatabaseMysql::Query(const char *sql) +{ + MYSQL_RES *result = NULL; + MYSQL_FIELD *fields = NULL; + uint64 rowCount = 0; + uint32 fieldCount = 0; + + if(!_Query(sql,&result,&fields,&rowCount,&fieldCount)) + return NULL; + + QueryResultMysql *queryResult = new QueryResultMysql(result, fields, rowCount, fieldCount); queryResult->NextRow(); return queryResult; } +QueryNamedResult* DatabaseMysql::QueryNamed(const char *sql) +{ + MYSQL_RES *result = NULL; + MYSQL_FIELD *fields = NULL; + uint64 rowCount = 0; + uint32 fieldCount = 0; + + if(!_Query(sql,&result,&fields,&rowCount,&fieldCount)) + return NULL; + + QueryFieldNames names(fieldCount); + for (uint32 i = 0; i < fieldCount; i++) + names[i] = fields[i].name; + + QueryResultMysql *queryResult = new QueryResultMysql(result, fields, rowCount, fieldCount); + + queryResult->NextRow(); + + return new QueryNamedResult(queryResult,names); +} + bool DatabaseMysql::Execute(const char *sql) { if (!mMysql) |