diff options
-rw-r--r-- | odb/mssql/polymorphic-object-result.txx | 1 | ||||
-rw-r--r-- | odb/mssql/simple-object-statements.txx | 11 |
2 files changed, 5 insertions, 7 deletions
diff --git a/odb/mssql/polymorphic-object-result.txx b/odb/mssql/polymorphic-object-result.txx index 53244a3..ebc51f3 100644 --- a/odb/mssql/polymorphic-object-result.txx +++ b/odb/mssql/polymorphic-object-result.txx @@ -173,6 +173,7 @@ namespace odb ce = callback_event::post_load; pi.dispatch (info_type::call_callback, this->db_, pobj, &ce); + object_traits::pointer_cache_traits::initialize (ig.position ()); ig.release (); } diff --git a/odb/mssql/simple-object-statements.txx b/odb/mssql/simple-object-statements.txx index 2cac2de..1c58752 100644 --- a/odb/mssql/simple-object-statements.txx +++ b/odb/mssql/simple-object-statements.txx @@ -79,7 +79,7 @@ namespace odb while (!dls.empty ()) { delayed_load l (dls.back ()); - typename pointer_cache_traits::insert_guard g (l.pos); + typename pointer_cache_traits::insert_guard ig (l.pos); dls.pop_back (); if (l.loader == 0) @@ -121,7 +121,8 @@ namespace odb else l.loader (db, l.id, *l.obj); - g.release (); + pointer_cache_traits::initialize (ig.position ()); + ig.release (); } } @@ -129,11 +130,7 @@ namespace odb void object_statements<T>:: clear_delayed_ () { - // Remove the objects from the session cache. This is not the most - // efficient way to do this (cache_traits::erase() will check for - // a session on every iteration), but the delay vector won't be - // empty only if something goes wrong (i.e., we are throwing an - // exception). + // Remove the objects from the session cache. // for (typename delayed_loads::iterator i (delayed_.begin ()), e (delayed_.end ()); i != e; ++i) |