aboutsummaryrefslogtreecommitdiff
path: root/odb/mssql/statement.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-03-07 10:21:07 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-03-07 10:21:07 +0200
commitc1b8b6f16e4881e57aa0da67e6f09ad71ee6099d (patch)
treeda1f5c81451d5a75f5ed12ae6752eb3feac969f7 /odb/mssql/statement.hxx
parent2534b3aa626d6a426559c556b20faf7b69b47717 (diff)
Use RAII to free select statement results
Diffstat (limited to 'odb/mssql/statement.hxx')
-rw-r--r--odb/mssql/statement.hxx34
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