diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-11-09 18:14:37 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-11-09 18:14:37 +0200 |
commit | 0bf77eaad1fb2ad23f9aec64ea0fe3ab7cf06a28 (patch) | |
tree | 49d0ff8ee2f193c9eabfc67b06f1a2134d21a8b3 /odb/mssql/connection.hxx | |
parent | ea61e19c6c0a52be4740448d0d21605e090b460d (diff) |
Make database class move-constructible
This means it can be returned by value from a function in C++11.
Diffstat (limited to 'odb/mssql/connection.hxx')
-rw-r--r-- | odb/mssql/connection.hxx | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/odb/mssql/connection.hxx b/odb/mssql/connection.hxx index ae185e5..3401f31 100644 --- a/odb/mssql/connection.hxx +++ b/odb/mssql/connection.hxx @@ -28,6 +28,7 @@ namespace odb namespace mssql { class statement_cache; + class connection_factory; class connection; typedef details::shared_ptr<connection> connection_ptr; @@ -41,14 +42,11 @@ namespace odb virtual ~connection (); - connection (database_type&); - connection (database_type&, SQLHDBC handle); + connection (connection_factory&); + connection (connection_factory&, SQLHDBC handle); database_type& - database () - { - return db_; - } + database (); public: virtual transaction_impl* @@ -138,7 +136,6 @@ namespace odb friend class transaction_impl; // invalidate_results() private: - database_type& db_; auto_handle<SQL_HANDLE_DBC> handle_; enum @@ -154,6 +151,33 @@ namespace odb details::unique_ptr<statement_cache_type> statement_cache_; details::buffer long_data_buffer_; }; + + class LIBODB_MSSQL_EXPORT connection_factory: + public odb::connection_factory + { + public: + typedef mssql::database database_type; + + virtual void + database (database_type&); + + database_type& + database () {return *db_;} + + virtual connection_ptr + connect () = 0; + + virtual + ~connection_factory (); + + connection_factory (): db_ (0) {} + + // Needed to break the circular connection_factory-database dependency + // (odb::connection_factory has the odb::database member). + // + protected: + database_type* db_; + }; } } |