aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Database/SQLOperation.h
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-09-19 12:16:29 +0200
committerMachiavelli <none@none>2010-09-19 12:16:29 +0200
commit0982719f5fa3266adf655dc7e1541177e40c3b93 (patch)
tree813e2983afd619dd34b3e69f9b0fc0b3ed42a2b7 /src/server/shared/Database/SQLOperation.h
parenta25ef432233c7a9340179d3f694b2d240cdeafef (diff)
Core/DBLayer:
- Declare the datatypes used to determine transaction element data (prepared statement/adhoc query string) on a generic level in SQLOperation.h - Implement variable SQL element data for SQLQueryHolder class so it can execute both prepared statements and adhoc queries - Make MySQLConnection::Query for adhoc queries return pointer to type instead of an autopointer, the autopointer is now applied on higher level code just like the function for querying prepared statements --HG-- branch : trunk
Diffstat (limited to 'src/server/shared/Database/SQLOperation.h')
-rw-r--r--src/server/shared/Database/SQLOperation.h38
1 files changed, 36 insertions, 2 deletions
diff --git a/src/server/shared/Database/SQLOperation.h b/src/server/shared/Database/SQLOperation.h
index 976e458a4f2..e5d7f7c7180 100644
--- a/src/server/shared/Database/SQLOperation.h
+++ b/src/server/shared/Database/SQLOperation.h
@@ -25,6 +25,37 @@
#include "Common.h"
#include "Callback.h"
+//- Forward declare (don't include header to prevent circular includes)
+class PreparedStatement;
+
+//- Union that holds element data
+union SQLElementUnion
+{
+ PreparedStatement* stmt;
+ const char* query;
+};
+
+//- Type specifier of our element data
+enum SQLElementDataType
+{
+ SQL_ELEMENT_RAW,
+ SQL_ELEMENT_PREPARED,
+};
+
+//- The element
+struct SQLElementData
+{
+ SQLElementUnion element;
+ SQLElementDataType type;
+};
+
+//- For ambigious resultsets
+union SQLResultSetUnion
+{
+ PreparedResultSet* presult;
+ ResultSet* qresult;
+};
+
class MySQLConnection;
class SQLOperation : public ACE_Method_Request
@@ -65,16 +96,19 @@ class SQLQueryHolder
{
friend class SQLQueryHolderTask;
private:
- typedef std::pair<const char*, QueryResult> SQLResultPair;
+ typedef std::pair<SQLElementData, SQLResultSetUnion> SQLResultPair;
std::vector<SQLResultPair> m_queries;
public:
SQLQueryHolder() {}
~SQLQueryHolder();
bool SetQuery(size_t index, const char *sql);
bool SetPQuery(size_t index, const char *format, ...) ATTR_PRINTF(3,4);
+ bool SetPreparedQuery(size_t index, PreparedStatement* stmt);
void SetSize(size_t size);
QueryResult GetResult(size_t index);
- void SetResult(size_t index, QueryResult result);
+ PreparedQueryResult GetPreparedResult(size_t index);
+ void SetResult(size_t index, ResultSet* result);
+ void SetPreparedResult(size_t index, PreparedResultSet* result);
};
typedef ACE_Future<SQLQueryHolder*> QueryResultHolderFuture;