[odb-users] Sqlite and foreign key exception

Philipp Maluta ensoreus at mail.ru
Tue Nov 19 02:21:11 EST 2013


Hello, Boris!
Thank your for your attention, you are really helped me. 
The bug was in the DB fulfilling.

So another trouble came up.
I have a code like this 
shared_ptr<TagEntity> tag1( new TagEntity("tag1", "common1") );
     shared_ptr<TagEntity> tag2( new TagEntity("tag2", "common1") );

     shared_ptr<NoteEntity> note1( new NoteEntity("vis1", "text1", "acts1") );
     shared_ptr<NoteEntity> note2( new NoteEntity("vis2", "text2", "acts2") );

     note1->get_tags().push_back(tag1);
     note1->get_tags().push_back(tag2);
     note2->get_tags().push_back(tag2);

     tag1->get_notes().push_back(note1);
     tag2->get_notes().push_back(note1);
     tag2->get_notes().push_back(note2);

    odb::transaction t( db->begin() );

    db->persist(tag1);
    db->persist(tag2);

    db->persist(note1);
    db->persist(note2);

    t.commit();


But how do you think, what this error message means?
/opt/local/include/odb/database.ixx:106:27: error: no viable conversion from 'const shared_ptr<NoteEntity>' to 'const object_pointer' (aka 'NoteEntity *const')
const object_pointer& pobj (p);
^ ~
/opt/local/include/odb/database.ixx:131:12: note: in instantiation of function template specialization 'odb::database::persist<NoteEntity, shared_ptr>' requested here
return persist<T, P> (cr);
^
../rpersistant/main.cpp:51:9: note: in instantiation of function template specialization 'odb::database::persist<NoteEntity, shared_ptr>' requested here
db->persist(note1);
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/tr1/boost_shared_ptr.h:678:7: note: candidate function
operator __unspecified_bool_type() const // never throws


8 нояб. 2013, в 09:22, Boris Kolpackov <boris at codesynthesis.com> написал(а):

> Hi Philipp,
> 
> Philipp Maluta <ensoreus at mail.ru> writes:
> 
>> I added a lines you provided and:
>> ./rpersistant --create --database notes.db
>> forein key ...
>> schema created
>> foreign keys enabled
>> 19: foreign key constraint failed
> 
> Which confirms my suspicion: the exception is thrown by some other
> code in your application.
> 
> Try to find out which transaction causes it (the exception will be
> thrown from commit()). Then make sure all the objects that you
> point to are actually made persistent. The common cause of the
> foreign key exception is forgetting to call persist() for the
> other end of the relationship (or calling it in incorrect order
> if you use auto ids).
> 
> Boris
> 



More information about the odb-users mailing list