diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2010-09-21 19:55:14 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2010-09-21 19:55:14 +0200 |
commit | 26d4b0a333e327d7ef42c67db4c06918bafb1d84 (patch) | |
tree | 74a424a54bdbe0d79d15e8dec7188d6b5f6df6b6 /mysql/types | |
parent | e291e5d0661c7980a969a243f8a6512d1b9cf5df (diff) |
Redesign value_traits
Diffstat (limited to 'mysql/types')
-rw-r--r-- | mysql/types/traits.hxx | 61 |
1 files changed, 28 insertions, 33 deletions
diff --git a/mysql/types/traits.hxx b/mysql/types/traits.hxx index d113e7d..726135d 100644 --- a/mysql/types/traits.hxx +++ b/mysql/types/traits.hxx @@ -17,11 +17,12 @@ namespace odb namespace mysql { template <> - class value_traits<date_time> + class value_traits<date_time, MYSQL_TIME> { public: - typedef date_time type; typedef date_time value_type; + typedef date_time query_type; + typedef MYSQL_TIME image_type; static void set_value (date_time& v, const MYSQL_TIME& i, bool is_null) @@ -56,39 +57,26 @@ namespace odb }; template <> - class value_traits<buffer> + class value_traits<buffer, details::buffer> { public: - typedef buffer type; typedef buffer value_type; + typedef buffer query_type; + typedef details::buffer image_type; static void - set_value (buffer& v, const char* s, std::size_t n, bool is_null) + set_value (buffer& v, + const details::buffer& b, + std::size_t n, + bool is_null) { if (!is_null) - v.assign (s, n); + v.assign (b.data (), n); else v.assign (0, 0); } static void - set_image (char* s, - std::size_t c, - std::size_t& n, - bool& is_null, - const buffer& v) - { - is_null = false; - n = v.size (); - - if (n > c) - n = c; - - if (n != 0) - std::memcpy (s, v.data (), n); - } - - static void set_image (details::buffer& b, std::size_t& n, bool& is_null, @@ -106,11 +94,12 @@ namespace odb }; template <> - class value_traits<bitfield> + class value_traits<bitfield, unsigned char*> { public: - typedef bitfield type; typedef bitfield value_type; + typedef bitfield query_type; + typedef unsigned char* image_type; static void set_value (bitfield& v, @@ -139,19 +128,24 @@ namespace odb }; template <> - class value_traits<set> + class value_traits<set, details::buffer> { public: - typedef set type; typedef set value_type; + typedef set query_type; + typedef details::buffer image_type; static void - set_value (set& v, const char* s, std::size_t n, bool is_null) + set_value (set& v, + const details::buffer& b, + std::size_t n, + bool is_null) { v.clear (); if (!is_null) { + const char* s (b.data ()); const char* e (s + n); while (s < e) @@ -196,19 +190,20 @@ namespace odb }; template <> - class value_traits<std::auto_ptr<std::string> > + class value_traits<std::auto_ptr<std::string>, details::buffer> { public: - typedef std::auto_ptr<std::string> type; - typedef std::string value_type; + typedef std::auto_ptr<std::string> value_type; + typedef std::string query_type; + typedef details::buffer image_type; static void set_value (std::auto_ptr<std::string>& v, - const char* s, + const details::buffer& b, std::size_t n, bool is_null) { - v.reset (is_null ? 0 : new std::string (s, n)); + v.reset (is_null ? 0 : new std::string (b.data (), n)); } static void |