aboutsummaryrefslogtreecommitdiff
path: root/src/shared/Database/DatabasePostgre.cpp
diff options
context:
space:
mode:
authormegamage <none@none>2009-06-01 21:52:17 -0500
committermegamage <none@none>2009-06-01 21:52:17 -0500
commit7344a5ef6f776f355cda34da77d2aed01f228b47 (patch)
tree8f02e0317c9a53de26f59f64f43456f397a4724c /src/shared/Database/DatabasePostgre.cpp
parentb05ebfa8e90def21baa98707a1d5e9185950de74 (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/DatabasePostgre.cpp')
-rw-r--r--src/shared/Database/DatabasePostgre.cpp65
1 files changed, 48 insertions, 17 deletions
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<ACE_Thread_Mutex> 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)
{