aboutsummaryrefslogtreecommitdiff
path: root/src/shared/Database/DatabaseMysql.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/DatabaseMysql.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/DatabaseMysql.cpp')
-rw-r--r--src/shared/Database/DatabaseMysql.cpp62
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)