[odb-users] Polymorphism and lazy/weak pointers

Andreas Gerasch gerasch at informatik.uni-tuebingen.de
Mon Jan 30 04:00:33 EST 2012


Hi Boris,

in our project we use ODB for serializing polymorphic objects. Since 
polymorphism isn't yet supported by odb, we use the callback 
functionality and encode the correct types in the object ids.

Currently, we're using boost::shared_ptr for relations, which works 
quite well, but we would like to introduce lazy (weak) loading.

Do you know if polymorphism works together with lazy loading? In the 
callback method (below an example from our code) we could create lazy 
pointers instead of loading instances, but I have no idea if this would 
result in the correct types or if odb is able to locate the 
(polymorphic) objects in the correct database table after casting the 
lazy_pointers.

void UniPAX::Pathway::init (odb::callback_event e, odb::database& db)
{
   UniPAX::Entity::init(e,db);

   if (e == odb::callback_event::post_load)
   {
     // load the object pointer
     {
       pathwayComponent.clear();
       std::vector<unsigned long long>::iterator it;
       for (it = id_pathwayComponent.begin(); it !=
id_pathwayComponent.end(); it++)
       {
 
pathwayComponent.push_back(boost::shared_dynamic_cast<UniPAX::Entity>(getObjectByID(db,
*it)));
        }
      }
   (...)
)

Second, is there a possibility to change the caching of objects in a 
session from shared to weak without changing the pointer types of the 
objects? We need to implement an object cache which will deallocate 
unused objects again automatically, but we could live with shared_ptr in 
our data model, because it has no bidirectional links.

Thanks for your help,

Andreas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gerasch.vcf
Type: text/x-vcard
Size: 435 bytes
Desc: not available
Url : http://codesynthesis.com/pipermail/odb-users/attachments/20120130/7b466e0f/gerasch.vcf


More information about the odb-users mailing list