aboutsummaryrefslogtreecommitdiff
path: root/odb/mysql/traits.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-01-24 15:10:21 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-01-24 15:10:21 +0200
commitc0f11dd9391fc84ca2554af122d672cb9af3531f (patch)
treedc81cddb4f34f1a3e2cd06f637f7cc4ab187d2ae /odb/mysql/traits.cxx
parent1c15805b50657dc511428643d0822f359e79538c (diff)
Add support for mapping char[N] to CHAR/VARCHAR database types
Also improve query support for arrays (decaying).
Diffstat (limited to 'odb/mysql/traits.cxx')
-rw-r--r--odb/mysql/traits.cxx45
1 files changed, 45 insertions, 0 deletions
diff --git a/odb/mysql/traits.cxx b/odb/mysql/traits.cxx
index 31ffb14..39e54d7 100644
--- a/odb/mysql/traits.cxx
+++ b/odb/mysql/traits.cxx
@@ -53,6 +53,51 @@ namespace odb
}
//
+ // c_array_value_traits_base
+ //
+ void c_array_value_traits_base::
+ set_value (char* const& v,
+ const details::buffer& b,
+ size_t n,
+ bool is_null,
+ size_t N)
+ {
+ if (!is_null)
+ {
+ n = n < N ? n : N;
+
+ if (n != 0)
+ memcpy (v, b.data (), n);
+ }
+ else
+ n = 0;
+
+ if (n != N) // Append '\0' if there is space.
+ v[n] = '\0';
+ }
+
+ void c_array_value_traits_base::
+ set_image (details::buffer& b,
+ size_t& n,
+ bool& is_null,
+ const char* v,
+ size_t N)
+ {
+ is_null = false;
+
+ // Figure out the length. We cannot use strlen since it may
+ // not be 0-terminated (strnlen is not standard).
+ //
+ for (n = 0; n != N && v[n] != '\0'; ++n);
+
+ if (n > b.capacity ())
+ b.capacity (n);
+
+ if (n != 0)
+ memcpy (b.data (), v, n);
+ }
+
+ //
// default_value_traits<vector<char>, id_blob>
//