// file : odb/database.hxx // copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC // license : GNU GPL v2; see accompanying LICENSE file #ifndef ODB_DATABASE_HXX #define ODB_DATABASE_HXX #include #include #include // std::size_t #include #include #include #include #include #include #include namespace odb { class transaction_impl; class LIBODB_EXPORT database { public: virtual ~database (); // Object persistence API. // public: // Make the object persistent. // template typename object_traits::id_type persist (T& object); template typename object_traits::id_type persist (T* obj_ptr); template class P> typename object_traits::id_type persist (const P& obj_ptr); template class P> typename object_traits::id_type persist (P& obj_ptr); template typename object_traits::id_type persist (const typename object_traits::pointer_type& obj_ptr); // Throw object_not_persistent if not found. // template typename object_traits::pointer_type load (const typename object_traits::id_type& id); template void load (const typename object_traits::id_type& id, T& object); template void reload (T& object); template void reload (T* obj_ptr); template class P> void reload (const P& obj_ptr); template class P> void reload (P& obj_ptr); template void reload (const typename object_traits::pointer_type& obj_ptr); // Return NULL/false if not found. // template typename object_traits::pointer_type find (const typename object_traits::id_type& id); template bool find (const typename object_traits::id_type& id, T& object); // Update the state of a modified objects. // template void update (T& object); template void update (T* obj_ptr); template class P> void update (const P& obj_ptr); template class P> void update (P& obj_ptr); template void update (const typename object_traits::pointer_type& obj_ptr); // Make the object transient. Throw object_not_persistent if not // found. // template void erase (const typename object_traits::id_type& id); template void erase (T& object); template void erase (T* obj_ptr); template class P> void erase (const P& obj_ptr); template class P> void erase (P& obj_ptr); template void erase (const typename object_traits::pointer_type& obj_ptr); // Erase multiple objects matching a query predicate. // template unsigned long long erase_query (); template unsigned long long erase_query (const char*); template unsigned long long erase_query (const std::string&); template unsigned long long erase_query (const odb::query&); // Query API. // template result query (bool cache = true); template result query (const char*, bool cache = true); template result query (const std::string&, bool cache = true); template result query (const odb::query&, bool cache = true); // Native database statement execution. // public: unsigned long long execute (const char* statement); unsigned long long execute (const std::string& statement); unsigned long long execute (const char* statement, std::size_t length); // Transactions. // public: virtual transaction_impl* begin () = 0; // Connections. // public: connection_ptr connection (); // SQL statement tracing. // public: typedef odb::tracer tracer_type; void tracer (tracer_type&); void tracer (tracer_type*); tracer_type* tracer () const; protected: database (); private: database (const database&); database& operator= (const database&); protected: typedef odb::connection connection_type; virtual connection_type* connection_ () = 0; protected: template typename object_traits::id_type persist_ (const typename object_traits::pointer_type&); template void update_ (const typename object_traits::pointer_type&); template void erase_ (const typename object_traits::pointer_type&); template struct query_; protected: tracer_type* tracer_; }; } #include #include #include #endif // ODB_DATABASE_HXX