diff options
author | Machiavelli <none@none> | 2010-09-19 12:16:29 +0200 |
---|---|---|
committer | Machiavelli <none@none> | 2010-09-19 12:16:29 +0200 |
commit | 0982719f5fa3266adf655dc7e1541177e40c3b93 (patch) | |
tree | 813e2983afd619dd34b3e69f9b0fc0b3ed42a2b7 /src/server/shared/Database/SQLOperation.h | |
parent | a25ef432233c7a9340179d3f694b2d240cdeafef (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.h | 38 |
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; |