aboutsummaryrefslogtreecommitdiff
path: root/odb/session.txx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/session.txx')
-rw-r--r--odb/session.txx26
1 files changed, 19 insertions, 7 deletions
diff --git a/odb/session.txx b/odb/session.txx
index 941f059..e89e439 100644
--- a/odb/session.txx
+++ b/odb/session.txx
@@ -12,7 +12,11 @@ namespace odb
{
typedef odb::object_traits<T> object_traits;
- type_map& tm (db_map_[&db]);
+ session* s (current_pointer ());
+ if (s == 0)
+ return position<T> ();
+
+ type_map& tm (s->db_map_[&db]);
details::shared_ptr<object_map_base>& pom (tm[&typeid (T)]);
if (!pom)
@@ -36,13 +40,17 @@ namespace odb
template <typename T>
typename object_traits<T>::pointer_type session::
- find (database_type& db, const typename object_traits<T>::id_type& id) const
+ find (database_type& db, const typename object_traits<T>::id_type& id)
{
typedef typename object_traits<T>::pointer_type pointer_type;
- database_map::const_iterator di (db_map_.find (&db));
+ const session* s (current_pointer ());
+ if (s == 0)
+ return pointer_type ();
+
+ database_map::const_iterator di (s->db_map_.find (&db));
- if (di == db_map_.end ())
+ if (di == s->db_map_.end ())
return pointer_type ();
const type_map& tm (di->second);
@@ -64,9 +72,13 @@ namespace odb
void session::
erase (database_type& db, const typename object_traits<T>::id_type& id)
{
- database_map::iterator di (db_map_.find (&db));
+ session* s (current_pointer ());
+ if (s == 0)
+ return;
+
+ database_map::iterator di (s->db_map_.find (&db));
- if (di == db_map_.end ())
+ if (di == s->db_map_.end ())
return;
type_map& tm (di->second);
@@ -87,6 +99,6 @@ namespace odb
tm.erase (ti);
if (tm.empty ())
- db_map_.erase (di);
+ s->db_map_.erase (di);
}
}