From a1638d19a9088a3488b80163afe414a5355debd9 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 22 Sep 2010 18:40:58 +0200 Subject: Add database type id as value_traits template argument --- odb/mysql/traits.hxx | 134 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 93 insertions(+), 41 deletions(-) (limited to 'odb/mysql/traits.hxx') diff --git a/odb/mysql/traits.hxx b/odb/mysql/traits.hxx index c708726..e823eda 100644 --- a/odb/mysql/traits.hxx +++ b/odb/mysql/traits.hxx @@ -24,7 +24,7 @@ namespace odb { namespace mysql { - enum image_id_type + enum database_type_id { id_tiny, id_utiny, @@ -37,6 +37,7 @@ namespace odb id_float, id_double, + id_decimal, id_date, id_time, @@ -45,10 +46,14 @@ namespace odb id_year, id_string, - id_blob + id_blob, + + id_bit, + id_enum, + id_set }; - template + template class value_traits { public: @@ -75,8 +80,7 @@ namespace odb // std::string specialization. // - template <> - class LIBODB_MYSQL_EXPORT value_traits + class LIBODB_MYSQL_EXPORT string_value_traits { public: typedef std::string value_type; @@ -102,14 +106,37 @@ namespace odb const std::string&); }; + template <> + class LIBODB_MYSQL_EXPORT value_traits< + std::string, details::buffer, id_string>: public string_value_traits + { + }; + + template <> + class LIBODB_MYSQL_EXPORT value_traits< + std::string, details::buffer, id_decimal>: public string_value_traits + { + }; + + template <> + class LIBODB_MYSQL_EXPORT value_traits< + std::string, details::buffer, id_enum>: public string_value_traits + { + }; + + template <> + class LIBODB_MYSQL_EXPORT value_traits< + std::string, details::buffer, id_set>: public string_value_traits + { + }; + // const char* specialization // // Specialization for const char* which only supports initialization // of an image from the value but not the other way around. This way // we can pass such values to the queries. // - template <> - class LIBODB_MYSQL_EXPORT value_traits + class LIBODB_MYSQL_EXPORT c_string_value_traits { public: typedef const char* value_type; @@ -123,114 +150,139 @@ namespace odb const char*); }; + template <> + class LIBODB_MYSQL_EXPORT value_traits< + const char*, details::buffer, id_string>: public c_string_value_traits + { + }; + + template <> + class LIBODB_MYSQL_EXPORT value_traits< + const char*, details::buffer, id_decimal>: public c_string_value_traits + { + }; + + template <> + class LIBODB_MYSQL_EXPORT value_traits< + const char*, details::buffer, id_enum>: public c_string_value_traits + { + }; + + template <> + class LIBODB_MYSQL_EXPORT value_traits< + const char*, details::buffer, id_set>: public c_string_value_traits + { + }; + // - // image_traits + // type_traits // template - struct default_image_id; + struct default_type_traits; template - class image_traits + class type_traits { public: - static const image_id_type image_id = default_image_id::image_id; + static const database_type_id db_type_id = + default_type_traits::db_type_id; }; // Integral types. // template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_tiny; + static const database_type_id db_type_id = id_tiny; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_tiny; + static const database_type_id db_type_id = id_tiny; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_utiny; + static const database_type_id db_type_id = id_utiny; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_short; + static const database_type_id db_type_id = id_short; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_ushort; + static const database_type_id db_type_id = id_ushort; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_long; + static const database_type_id db_type_id = id_long; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_ulong; + static const database_type_id db_type_id = id_ulong; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_longlong; + static const database_type_id db_type_id = id_longlong; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_ulonglong; + static const database_type_id db_type_id = id_ulonglong; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_longlong; + static const database_type_id db_type_id = id_longlong; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_ulonglong; + static const database_type_id db_type_id = id_ulonglong; }; // Float types. // template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_float; + static const database_type_id db_type_id = id_float; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_double; + static const database_type_id db_type_id = id_double; }; // String type. // template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_string; + static const database_type_id db_type_id = id_string; }; template <> - struct default_image_id + struct default_type_traits { - static const image_id_type image_id = id_string; + static const database_type_id db_type_id = id_string; }; } } -- cgit v1.1