From 0982719f5fa3266adf655dc7e1541177e40c3b93 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Sun, 19 Sep 2010 12:16:29 +0200 Subject: 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 --- src/server/shared/Database/SQLOperation.h | 38 +++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) (limited to 'src/server/shared/Database/SQLOperation.h') 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 SQLResultPair; + typedef std::pair SQLResultPair; std::vector 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 QueryResultHolderFuture; -- cgit v1.2.3