aboutsummaryrefslogtreecommitdiff
path: root/odb/polymorphic-map.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-10-08 16:09:07 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-10-08 16:09:07 +0200
commitbe97326d67365e16175cc599e23348feaf80e0fe (patch)
treeb38678104546ebd549824096683bd00f3f2be299 /odb/polymorphic-map.hxx
parent0b583b575ec00c544759cbf8d6481d35c34c5f63 (diff)
Ground work for multi-database support
All generated code now includes database id. The database-specific database class interface has been updated to include all the database operations. The database-specific tests now use this interface.
Diffstat (limited to 'odb/polymorphic-map.hxx')
-rw-r--r--odb/polymorphic-map.hxx33
1 files changed, 17 insertions, 16 deletions
diff --git a/odb/polymorphic-map.hxx b/odb/polymorphic-map.hxx
index c3c1374..5d23e6f 100644
--- a/odb/polymorphic-map.hxx
+++ b/odb/polymorphic-map.hxx
@@ -66,11 +66,11 @@ namespace odb
discriminator_map discriminator_map_;
};
- template <typename R>
+ template <typename R, database_id DB>
struct polymorphic_entry_impl
{
typedef R root_type;
- typedef object_traits<root_type> root_traits;
+ typedef object_traits_impl<root_type, DB> root_traits;
typedef polymorphic_concrete_info<root_type> info_type;
static void
@@ -103,18 +103,18 @@ namespace odb
return r;
}
- template <typename T, typename R>
+ template <typename T, database_id DB, typename R>
struct dispatch_load
{
static void
call (database& db, T& obj, std::size_t d)
{
- object_traits<T>::load_ (db, obj, d);
+ object_traits_impl<T, DB>::load_ (db, obj, d);
}
};
- template <typename R>
- struct dispatch_load<R, R>
+ template <typename R, database_id DB>
+ struct dispatch_load<R, DB, R>
{
static void
call (database&, R&, std::size_t)
@@ -123,7 +123,7 @@ namespace odb
}
};
- template <typename T, bool auto_id>
+ template <typename T, database_id DB, bool auto_id>
struct dispatch_persist
{
static void
@@ -131,23 +131,24 @@ namespace odb
{
// Top-level call, no dynamic type checking.
//
- object_traits<T>::persist (db, obj, true, false);
+ object_traits_impl<T, DB>::persist (db, obj, true, false);
}
};
- template <typename T>
- struct dispatch_persist<T, true>
+ template <typename T, database_id DB>
+ struct dispatch_persist<T, DB, true>
{
static void
call (database& db, const T& obj)
{
// Top-level call, no dynamic type checking.
//
- object_traits<T>::persist (db, const_cast<T&> (obj), true, false);
+ object_traits_impl<T, DB>::persist (
+ db, const_cast<T&> (obj), true, false);
}
};
- template <typename T>
+ template <typename T, database_id DB>
bool dispatch_impl (
typename polymorphic_concrete_info<
typename object_traits<T>::root_type>::call_type c,
@@ -155,9 +156,9 @@ namespace odb
const typename object_traits<T>::root_type* pobj,
const void* arg)
{
- typedef object_traits<T> derived_traits;
+ typedef object_traits_impl<T, DB> derived_traits;
typedef typename derived_traits::root_type root_type;
- typedef object_traits<root_type> root_traits;
+ typedef object_traits_impl<root_type, DB> root_traits;
typedef typename root_traits::id_type id_type;
typedef polymorphic_concrete_info<root_type> info_type;
@@ -175,7 +176,7 @@ namespace odb
}
case info_type::call_persist:
{
- dispatch_persist<T, root_traits::auto_id>::call (
+ dispatch_persist<T, DB, root_traits::auto_id>::call (
db,
*static_cast<const T*> (pobj));
break;
@@ -208,7 +209,7 @@ namespace odb
}
case info_type::call_load:
{
- dispatch_load<T, root_type>::call (
+ dispatch_load<T, DB, root_type>::call (
db,
*const_cast<T*> (static_cast<const T*> (pobj)),
*static_cast<const std::size_t*> (arg));