aboutsummaryrefslogtreecommitdiff
path: root/odb/database.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-11-22 12:03:11 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-11-22 12:03:11 +0200
commit531c792dd4eecd246cc1ccebac812d6888464a78 (patch)
tree9bed050c98a2c407c68e808ae1f1d296a65c5fee /odb/database.hxx
parent1cddfd09a7007f77fc243f178b1ca88ea4d0f4f6 (diff)
Add session, database operations on pointers and const objects
Currently, session is just an object cache. The persist, update, and erase database operations are overloaded to also work on object pointers. All the database operations and the query facility now support const objects. New session-related exceptions: not_in_session, already_in_session, const_object.
Diffstat (limited to 'odb/database.hxx')
-rw-r--r--odb/database.hxx70
1 files changed, 64 insertions, 6 deletions
diff --git a/odb/database.hxx b/odb/database.hxx
index 7db04c8..e7ea91a 100644
--- a/odb/database.hxx
+++ b/odb/database.hxx
@@ -36,11 +36,23 @@ namespace odb
//
template <typename T>
typename object_traits<T>::id_type
- persist (const T& object);
+ persist (T& object);
template <typename T>
typename object_traits<T>::id_type
- persist (T& object);
+ persist (T* obj_ptr);
+
+ template <typename T, template <typename> class P>
+ typename object_traits<T>::id_type
+ persist (const P<T>& obj_ptr);
+
+ template <typename T, template <typename> class P>
+ typename object_traits<T>::id_type
+ persist (P<T>& obj_ptr);
+
+ template <typename T>
+ typename object_traits<T>::id_type
+ persist (const typename object_traits<T>::pointer_type& obj_ptr);
// Throw object_not_persistent if not found.
//
@@ -66,18 +78,50 @@ namespace odb
//
template <typename T>
void
- update (const T& object);
+ update (T& object);
+
+ template <typename T>
+ void
+ update (T* obj_ptr);
+
+ template <typename T, template <typename> class P>
+ void
+ update (const P<T>& obj_ptr);
+
+ template <typename T, template <typename> class P>
+ void
+ update (P<T>& obj_ptr);
+
+ template <typename T>
+ void
+ update (const typename object_traits<T>::pointer_type& obj_ptr);
// Make the object transient. Throw object_not_persistent if not
// found.
//
template <typename T>
void
- erase (const T& object);
+ erase (const typename object_traits<T>::id_type& id);
template <typename T>
void
- erase (const typename object_traits<T>::id_type& id);
+ erase (T& object);
+
+ template <typename T>
+ void
+ erase (T* obj_ptr);
+
+ template <typename T, template <typename> class P>
+ void
+ erase (const P<T>& obj_ptr);
+
+ template <typename T, template <typename> class P>
+ void
+ erase (P<T>& obj_ptr);
+
+ template <typename T>
+ void
+ erase (const typename object_traits<T>::pointer_type& obj_ptr);
// Query API.
//
@@ -95,7 +139,8 @@ namespace odb
template <typename T>
result<T>
- query (const odb::query<T>&, bool cache = true);
+ query (const odb::query<typename object_traits<T>::object_type>&,
+ bool cache = true);
// Transaction API.
//
@@ -106,6 +151,19 @@ namespace odb
protected:
database ();
+ protected:
+ template <typename T>
+ typename object_traits<T>::id_type
+ persist_ (const typename object_traits<T>::pointer_type&);
+
+ template <typename T>
+ void
+ update_ (const typename object_traits<T>::pointer_type&);
+
+ template <typename T>
+ void
+ erase_ (const typename object_traits<T>::pointer_type&);
+
private:
database (const database&);
database& operator= (const database&);