diff options
-rw-r--r-- | odb/mysql/query.hxx | 50 | ||||
-rw-r--r-- | odb/mysql/traits.hxx | 121 |
2 files changed, 118 insertions, 53 deletions
diff --git a/odb/mysql/query.hxx b/odb/mysql/query.hxx index d58fb30..f4845cf 100644 --- a/odb/mysql/query.hxx +++ b/odb/mysql/query.hxx @@ -1030,7 +1030,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, signed char, id_tiny>::set_image (image_, dummy, v); + value_traits<T, id_tiny>::set_image (image_, dummy, v); } private: @@ -1063,7 +1063,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, unsigned char, id_utiny>::set_image (image_, dummy, v); + value_traits<T, id_utiny>::set_image (image_, dummy, v); } private: @@ -1098,7 +1098,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, short, id_short>::set_image (image_, dummy, v); + value_traits<T, id_short>::set_image (image_, dummy, v); } private: @@ -1131,8 +1131,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, unsigned short, id_ushort>::set_image ( - image_, dummy, v); + value_traits<T, id_ushort>::set_image (image_, dummy, v); } private: @@ -1167,7 +1166,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, int, id_long>::set_image (image_, dummy, v); + value_traits<T, id_long>::set_image (image_, dummy, v); } private: @@ -1200,7 +1199,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, unsigned int, id_ulong>::set_image (image_, dummy, v); + value_traits<T, id_ulong>::set_image (image_, dummy, v); } private: @@ -1235,7 +1234,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, long long, id_longlong>::set_image (image_, dummy, v); + value_traits<T, id_longlong>::set_image (image_, dummy, v); } private: @@ -1268,8 +1267,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, unsigned long long, id_ulonglong>::set_image ( - image_, dummy, v); + value_traits<T, id_ulonglong>::set_image (image_, dummy, v); } private: @@ -1304,7 +1302,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, float, id_float>::set_image (image_, dummy, v); + value_traits<T, id_float>::set_image (image_, dummy, v); } private: @@ -1339,7 +1337,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, double, id_double>::set_image (image_, dummy, v); + value_traits<T, id_double>::set_image (image_, dummy, v); } private: @@ -1375,8 +1373,7 @@ namespace odb { bool dummy; std::size_t size, cap (buffer_.capacity ()); - value_traits<T, details::buffer, id_decimal>::set_image ( - buffer_, size, dummy, v); + value_traits<T, id_decimal>::set_image (buffer_, size, dummy, v); size_ = static_cast<unsigned long> (size); return cap != buffer_.capacity (); } @@ -1413,7 +1410,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, MYSQL_TIME, id_date>::set_image (image_, dummy, v); + value_traits<T, id_date>::set_image (image_, dummy, v); } private: @@ -1447,7 +1444,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, MYSQL_TIME, id_time>::set_image (image_, dummy, v); + value_traits<T, id_time>::set_image (image_, dummy, v); } private: @@ -1481,7 +1478,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, MYSQL_TIME, id_datetime>::set_image (image_, dummy, v); + value_traits<T, id_datetime>::set_image (image_, dummy, v); } private: @@ -1515,8 +1512,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, MYSQL_TIME, id_timestamp>::set_image ( - image_, dummy, v); + value_traits<T, id_timestamp>::set_image (image_, dummy, v); } private: @@ -1551,7 +1547,7 @@ namespace odb init (const T& v) { bool dummy; - value_traits<T, short, id_year>::set_image (image_, dummy, v); + value_traits<T, id_year>::set_image (image_, dummy, v); } private: @@ -1587,8 +1583,7 @@ namespace odb { bool dummy; std::size_t size, cap (buffer_.capacity ()); - value_traits<T, details::buffer, id_string>::set_image ( - buffer_, size, dummy, v); + value_traits<T, id_string>::set_image (buffer_, size, dummy, v); size_ = static_cast<unsigned long> (size); return cap != buffer_.capacity (); } @@ -1627,8 +1622,7 @@ namespace odb { bool dummy; std::size_t size, cap (buffer_.capacity ()); - value_traits<T, details::buffer, id_blob>::set_image ( - buffer_, size, dummy, v); + value_traits<T, id_blob>::set_image (buffer_, size, dummy, v); size_ = static_cast<unsigned long> (size); return cap != buffer_.capacity (); } @@ -1668,7 +1662,7 @@ namespace odb { bool dummy; std::size_t size; - value_traits<T, details::buffer, id_bit>::set_image ( + value_traits<T, id_bit>::set_image ( buffer_, sizeof (buffer_), size, dummy, v); size_ = static_cast<unsigned long> (size); } @@ -1709,8 +1703,7 @@ namespace odb { bool dummy; std::size_t size, cap (buffer_.capacity ()); - value_traits<T, details::buffer, id_enum>::set_image ( - buffer_, size, dummy, v); + value_traits<T, id_enum>::set_image (buffer_, size, dummy, v); size_ = static_cast<unsigned long> (size); return cap != buffer_.capacity (); } @@ -1749,8 +1742,7 @@ namespace odb { bool dummy; std::size_t size, cap (buffer_.capacity ()); - value_traits<T, details::buffer, id_set>::set_image ( - buffer_, size, dummy, v); + value_traits<T, id_set>::set_image (buffer_, size, dummy, v); size_ = static_cast<unsigned long> (size); return cap != buffer_.capacity (); } diff --git a/odb/mysql/traits.hxx b/odb/mysql/traits.hxx index 63673ff..5418fa1 100644 --- a/odb/mysql/traits.hxx +++ b/odb/mysql/traits.hxx @@ -54,26 +54,99 @@ namespace odb }; // + // image_traits + // + + template <database_type_id> + struct image_traits; + + template <> + struct image_traits<id_tiny> {typedef signed char image_type;}; + + template <> + struct image_traits<id_utiny> {typedef unsigned char image_type;}; + + template <> + struct image_traits<id_short> {typedef short image_type;}; + + template <> + struct image_traits<id_ushort> {typedef unsigned short image_type;}; + + template <> + struct image_traits<id_long> {typedef int image_type;}; + + template <> + struct image_traits<id_ulong> {typedef unsigned int image_type;}; + + template <> + struct image_traits<id_longlong> {typedef long long image_type;}; + + template <> + struct image_traits<id_ulonglong> {typedef unsigned long long image_type;}; + + template <> + struct image_traits<id_float> {typedef float image_type;}; + + template <> + struct image_traits<id_double> {typedef double image_type;}; + + template <> + struct image_traits<id_decimal> {typedef details::buffer image_type;}; + + template <> + struct image_traits<id_date> {typedef MYSQL_TIME image_type;}; + + template <> + struct image_traits<id_time> {typedef MYSQL_TIME image_type;}; + + template <> + struct image_traits<id_datetime> {typedef MYSQL_TIME image_type;}; + + template <> + struct image_traits<id_timestamp> {typedef MYSQL_TIME image_type;}; + + template <> + struct image_traits<id_year> {typedef short image_type;}; + + template <> + struct image_traits<id_string> {typedef details::buffer image_type;}; + + template <> + struct image_traits<id_blob> {typedef details::buffer image_type;}; + + template <> + struct image_traits<id_bit> {typedef unsigned char* image_type;}; + + // Note: default mapping is to integer. Alternative mapping is to + // string. + // + template <> + struct image_traits<id_enum> {typedef unsigned short image_type;}; + + template <> + struct image_traits<id_set> {typedef details::buffer image_type;}; + + // // value_traits // - template <typename T, typename I, database_type_id> + template <typename T, database_type_id> struct default_value_traits; - template <typename T, typename I, database_type_id ID> - class value_traits: public default_value_traits<T, I, ID> + template <typename T, database_type_id ID> + class value_traits: public default_value_traits<T, ID> { }; - template <typename T, typename I, database_type_id> + template <typename T, database_type_id ID> struct default_value_traits { typedef T value_type; typedef T query_type; - typedef I image_type; + typedef typename image_traits<ID>::image_type image_type; static void - set_value (T& v, I i, bool is_null) + set_value (T& v, const image_type& i, bool is_null) { if (!is_null) v = T (i); @@ -82,10 +155,10 @@ namespace odb } static void - set_image (I& i, bool& is_null, T v) + set_image (image_type& i, bool& is_null, T v) { is_null = false; - i = I (v); + i = image_type (v); } }; @@ -118,26 +191,26 @@ namespace odb }; template <> - struct LIBODB_MYSQL_EXPORT default_value_traits< - std::string, details::buffer, id_string>: string_value_traits + struct LIBODB_MYSQL_EXPORT default_value_traits<std::string, id_string>: + string_value_traits { }; template <> - struct LIBODB_MYSQL_EXPORT default_value_traits< - std::string, details::buffer, id_decimal>: string_value_traits + struct LIBODB_MYSQL_EXPORT default_value_traits<std::string, id_decimal>: + string_value_traits { }; template <> - struct LIBODB_MYSQL_EXPORT default_value_traits< - std::string, details::buffer, id_enum>: string_value_traits + struct LIBODB_MYSQL_EXPORT default_value_traits<std::string, id_enum>: + string_value_traits { }; template <> - struct LIBODB_MYSQL_EXPORT default_value_traits< - std::string, details::buffer, id_set>: string_value_traits + struct LIBODB_MYSQL_EXPORT default_value_traits<std::string, id_set>: + string_value_traits { }; @@ -162,26 +235,26 @@ namespace odb }; template <> - struct LIBODB_MYSQL_EXPORT default_value_traits< - const char*, details::buffer, id_string>: c_string_value_traits + struct LIBODB_MYSQL_EXPORT default_value_traits<const char*, id_string>: + c_string_value_traits { }; template <> - struct LIBODB_MYSQL_EXPORT default_value_traits< - const char*, details::buffer, id_decimal>: c_string_value_traits + struct LIBODB_MYSQL_EXPORT default_value_traits<const char*, id_decimal>: + c_string_value_traits { }; template <> - struct LIBODB_MYSQL_EXPORT default_value_traits< - const char*, details::buffer, id_enum>: c_string_value_traits + struct LIBODB_MYSQL_EXPORT default_value_traits<const char*, id_enum>: + c_string_value_traits { }; template <> - struct LIBODB_MYSQL_EXPORT default_value_traits< - const char*, details::buffer, id_set>: c_string_value_traits + struct LIBODB_MYSQL_EXPORT default_value_traits<const char*, id_set>: + c_string_value_traits { }; |