From 1e78bdc724e95898c04a3409b0b192aa7f77780b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 15 Oct 2012 13:17:30 +0200 Subject: Implement early connection release --- odb/connection.hxx | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'odb/connection.hxx') diff --git a/odb/connection.hxx b/odb/connection.hxx index b4a9d5b..f1cb41a 100644 --- a/odb/connection.hxx +++ b/odb/connection.hxx @@ -123,6 +123,12 @@ namespace odb virtual ~connection (); + // Recycle the connection to be used by another thread. This call + // invalidates uncached prepared queries. + // + void + recycle (); + protected: connection (database_type&); @@ -132,13 +138,13 @@ namespace odb struct query_; virtual void - cache_query_ (details::shared_ptr pq, + cache_query_ (prepared_query_impl* pq, const std::type_info& ti, void* params, const std::type_info* params_info, void (*params_deleter) (void*)); - details::shared_ptr + prepared_query_impl* lookup_query_ (const char* name, const std::type_info& ti, void** params, // out @@ -170,10 +176,29 @@ namespace odb prepared_map_type prepared_map_; + void + clear_prepared_map (); + protected: database_type& database_; tracer_type* tracer_; + // Active query result list. + // + protected: + friend class result_impl; + result_impl* results_; + + void + invalidate_results (); + + // Prepared but uncached query list (cached ones are stored in + // prepared_map_). + // + protected: + friend class prepared_query_impl; + prepared_query_impl* prepared_queries_; + protected: friend class transaction; tracer_type* transaction_tracer_; -- cgit v1.1