// file : odb/database.ixx // author : Boris Kolpackov // copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC // license : GNU GPL v2; see accompanying LICENSE file #include // std::string namespace odb { inline database:: database () { } template inline typename object_traits::id_type database:: persist (T* p) { typedef typename object_traits::pointer_type object_pointer; // The passed pointer should be the same or implicit-convertible // to the object pointer. This way we make sure the object pointer // does not assume ownership of the passed object. // const object_pointer& pobj (p); return persist_ (pobj); } template class P> inline typename object_traits::id_type database:: persist (const P& p) { typedef typename object_traits::pointer_type object_pointer; // The passed pointer should be the same or implicit-convertible // to the object pointer. This way we make sure the object pointer // does not assume ownership of the passed object. // const object_pointer& pobj (p); return persist_ (pobj); } template class P> inline typename object_traits::id_type database:: persist (P& p) { const P& cr (p); return persist (cr); } template inline typename object_traits::id_type database:: persist (const typename object_traits::pointer_type& pobj) { return persist_ (pobj); } template inline void database:: update (T* p) { typedef typename object_traits::pointer_type object_pointer; // The passed pointer should be the same or implicit-convertible // to the object pointer. This way we make sure the object pointer // does not assume ownership of the passed object. // const object_pointer& pobj (p); update_ (pobj); } template class P> inline void database:: update (const P& p) { typedef typename object_traits::pointer_type object_pointer; // The passed pointer should be the same or implicit-convertible // to the object pointer. This way we make sure the object pointer // does not assume ownership of the passed object. // const object_pointer& pobj (p); update_ (pobj); } template class P> inline void database:: update (P& p) { const P& cr (p); update (cr); } template inline void database:: update (const typename object_traits::pointer_type& pobj) { update_ (pobj); } template inline void database:: erase (T& obj) { // T can be const T while object_type will always be T. // typedef typename odb::object_traits::object_type object_type; typedef odb::object_traits object_traits; erase (object_traits::id (obj)); } template inline void database:: erase (T* p) { typedef typename object_traits::pointer_type object_pointer; // The passed pointer should be the same or implicit-convertible // to the object pointer. This way we make sure the object pointer // does not assume ownership of the passed object. // const object_pointer& pobj (p); erase_ (pobj); } template class P> inline void database:: erase (const P& p) { typedef typename object_traits::pointer_type object_pointer; // The passed pointer should be the same or implicit-convertible // to the object pointer. This way we make sure the object pointer // does not assume ownership of the passed object. // const object_pointer& pobj (p); erase_ (pobj); } template class P> inline void database:: erase (P& p) { const P& cr (p); erase (cr); } template inline void database:: erase (const typename object_traits::pointer_type& pobj) { erase_ (pobj); } template inline void database:: erase_ (const typename object_traits::pointer_type& pobj) { // T can be const T while object_type will always be T. // typedef typename odb::object_traits::object_type object_type; typedef odb::object_traits object_traits; typedef typename odb::object_traits::pointer_type pointer_type; typedef odb::pointer_traits pointer_traits; erase (object_traits::id (pointer_traits::get_ref (pobj))); } template inline result database:: query (bool cache) { // T can be const T while object_type will always be T. // typedef typename odb::object_traits::object_type object_type; return query (odb::query (), cache); } template inline result database:: query (const char* q, bool cache) { // T can be const T while object_type will always be T. // typedef typename odb::object_traits::object_type object_type; return query (odb::query (q), cache); } template inline result database:: query (const std::string& q, bool cache) { // T can be const T while object_type will always be T. // typedef typename odb::object_traits::object_type object_type; return query (odb::query (q), cache); } inline unsigned long long database:: execute (const char* statement) { return execute (statement, std::strlen (statement)); } inline unsigned long long database:: execute (const std::string& statement) { return execute (statement.c_str (), statement.size ()); } }