From 7344a5ef6f776f355cda34da77d2aed01f228b47 Mon Sep 17 00:00:00 2001 From: megamage Date: Mon, 1 Jun 2009 21:52:17 -0500 Subject: [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 --- src/shared/Database/DatabasePostgre.cpp | 65 ++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 17 deletions(-) (limited to 'src/shared/Database/DatabasePostgre.cpp') diff --git a/src/shared/Database/DatabasePostgre.cpp b/src/shared/Database/DatabasePostgre.cpp index 12875b33200..c70067dfdba 100644 --- a/src/shared/Database/DatabasePostgre.cpp +++ b/src/shared/Database/DatabasePostgre.cpp @@ -117,32 +117,27 @@ bool DatabasePostgre::Initialize(const char *infoString) } -QueryResult* DatabasePostgre::Query(const char *sql) +bool DatabasePostgre::_Query(const char *sql, PGresult** pResult, uint64* pRowCount, uint32* pFieldCount) { if (!mPGconn) return 0; - uint64 rowCount = 0; - uint32 fieldCount = 0; - // guarded block for thread-safe request ACE_Guard query_connection_guard(mMutex); #ifdef MANGOS_DEBUG uint32 _s = getMSTime(); #endif // Send the query - PGresult * result = PQexec(mPGconn, sql); - if (!result ) - { - return NULL; - } + *pResult = PQexec(mPGconn, sql); + if(!*pResult ) + return false; - if (PQresultStatus(result) != PGRES_TUPLES_OK) + if (PQresultStatus(*pResult) != PGRES_TUPLES_OK) { sLog.outErrorDb( "SQL : %s", sql ); sLog.outErrorDb( "SQL %s", PQerrorMessage(mPGconn)); - PQclear(result); - return NULL; + PQclear(*pResult); + return false; } else { @@ -151,15 +146,29 @@ QueryResult* DatabasePostgre::Query(const char *sql) #endif } - rowCount = PQntuples(result); - fieldCount = PQnfields(result); + *pRowCount = PQntuples(*pResult); + *pFieldCount = PQnfields(*pResult); // end guarded block - if (!rowCount) + if (!*pRowCount) { - PQclear(result); - return NULL; + PQclear(*pResult); + return false; } + return true; +} + +QueryResult* DatabasePostgre::Query(const char *sql) +{ + if (!mPGconn) + return 0; + + PGresult* result = NULL; + uint64 rowCount = 0; + uint32 fieldCount = 0; + + if(!_Query(sql,&result,&rowCount,&fieldCount)) + return NULL; QueryResultPostgre * queryResult = new QueryResultPostgre(result, rowCount, fieldCount); queryResult->NextRow(); @@ -167,6 +176,28 @@ QueryResult* DatabasePostgre::Query(const char *sql) return queryResult; } +QueryNamedResult* DatabasePostgre::QueryNamed(const char *sql) +{ + if (!mPGconn) + return 0; + + PGresult* result = NULL; + uint64 rowCount = 0; + uint32 fieldCount = 0; + + if(!_Query(sql,&result,&rowCount,&fieldCount)) + return NULL; + + QueryFieldNames names(fieldCount); + for (uint32 i = 0; i < fieldCount; i++) + names[i] = PQfname(result, i); + + QueryResultPostgre * queryResult = new QueryResultPostgre(result, rowCount, fieldCount); + queryResult->NextRow(); + + return new QueryNamedResult(queryResult,names); +} + bool DatabasePostgre::Execute(const char *sql) { -- cgit v1.2.3