aboutsummaryrefslogtreecommitdiff
path: root/odb/database.txx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-01-09 14:50:26 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-01-16 07:42:54 +0200
commitd2c1f5f1a3063553483d09dec261efa44c6bc9bf (patch)
tree1503cbf2f20c5a2525d3fa0044addac4e8132a53 /odb/database.txx
parent821e1bdf35c6fc208c421fa630ad3f77e841b60e (diff)
Implement two-phase session insertion
On the first step an uninitialized object is inserted into the cache as before (this is necessary to handle recursive loading). The second step is to notify the session that the object has been initialized. On this second step the session can perform change tracking preparations, such as make a copy of the object or reset the modification flag. New test: common/session/custom (implements a custom session that uses copies to track changes).
Diffstat (limited to 'odb/database.txx')
-rw-r--r--odb/database.txx14
1 files changed, 10 insertions, 4 deletions
diff --git a/odb/database.txx b/odb/database.txx
index df58f35..b5f9640 100644
--- a/odb/database.txx
+++ b/odb/database.txx
@@ -36,8 +36,11 @@ namespace odb
object_traits::persist (*this, obj);
- object_traits::reference_cache_traits::insert (
- *this, reference_cache_type<T>::convert (obj));
+ typename object_traits::reference_cache_traits::position_type p (
+ object_traits::reference_cache_traits::insert (
+ *this, reference_cache_type<T>::convert (obj)));
+
+ object_traits::reference_cache_traits::initialize (p);
return object_traits::id (obj);
}
@@ -58,8 +61,11 @@ namespace odb
// Get the canonical object pointer and insert it into object cache.
//
- object_traits::pointer_cache_traits::insert (
- *this, pointer_cache_type<pointer_type>::convert (pobj));
+ typename object_traits::pointer_cache_traits::position_type p (
+ object_traits::pointer_cache_traits::insert (
+ *this, pointer_cache_type<pointer_type>::convert (pobj)));
+
+ object_traits::pointer_cache_traits::initialize (p);
return object_traits::id (obj);
}