aboutsummaryrefslogtreecommitdiff
path: root/odb/connection.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-10-15 13:17:30 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-10-19 11:38:24 +0200
commit1e78bdc724e95898c04a3409b0b192aa7f77780b (patch)
treed26ae47ae9956612b5973f536219f0c9b455db03 /odb/connection.hxx
parent5b0430fdf4617b396e462872d438a663b174a3a8 (diff)
Implement early connection release
Diffstat (limited to 'odb/connection.hxx')
-rw-r--r--odb/connection.hxx29
1 files changed, 27 insertions, 2 deletions
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<prepared_query_impl> 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>
+ 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_;