diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2012-03-07 10:21:07 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2012-03-07 10:21:07 +0200 |
commit | c1b8b6f16e4881e57aa0da67e6f09ad71ee6099d (patch) | |
tree | da1f5c81451d5a75f5ed12ae6752eb3feac969f7 /odb/mssql/statement.hxx | |
parent | 2534b3aa626d6a426559c556b20faf7b69b47717 (diff) |
Use RAII to free select statement results
Diffstat (limited to 'odb/mssql/statement.hxx')
-rw-r--r-- | odb/mssql/statement.hxx | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/odb/mssql/statement.hxx b/odb/mssql/statement.hxx index eb95a35..86178e6 100644 --- a/odb/mssql/statement.hxx +++ b/odb/mssql/statement.hxx @@ -147,7 +147,39 @@ namespace odb private: binding& result_; std::size_t first_long_; // First long data column. - bool executed_; + }; + + struct LIBODB_MSSQL_EXPORT auto_result + { + explicit auto_result (select_statement& s): s_ (&s) {} + ~auto_result () {free ();} + + // Extended interface to support delayed freeing. + // + auto_result (): s_ (0) {} + + void + set (select_statement& s) {s_ = &s;} + + void + free () + { + if (s_ != 0) + { + s_->free_result (); + s_ = 0; + } + } + + void + release () {s_ = 0;} + + private: + auto_result (const auto_result&); + auto_result& operator= (const auto_result&); + + private: + select_statement* s_; }; class LIBODB_MSSQL_EXPORT insert_statement: public statement |