diff options
Diffstat (limited to 'odb/pgsql/object-statements.txx')
-rw-r--r-- | odb/pgsql/object-statements.txx | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/odb/pgsql/object-statements.txx b/odb/pgsql/object-statements.txx index b64d5b8..c568ca7 100644 --- a/odb/pgsql/object-statements.txx +++ b/odb/pgsql/object-statements.txx @@ -80,7 +80,18 @@ namespace odb if (!delayed_.empty ()) load_delayed_ (); - object_traits::callback (db, *l.obj, callback_event::post_load); + // Temporarily unlock the statement for the post_load call so that + // it can load objects of this type recursively. This is safe to do + // because we have completely loaded the current object. Also the + // delayed_ list is clear before the unlock and should be clear on + // re-lock (since a callback can only call public API functions + // which will make sure all the delayed loads are processed before + // returning). + // + { + auto_unlock u (*this); + object_traits::callback (db, *l.obj, callback_event::post_load); + } g.release (); } |