aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-09-11 13:55:48 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-09-11 13:55:48 +0200
commitd87a78e24d5988cfa3556707b7beffd1b0c15901 (patch)
tree32115e06a1bdade66efea1e304ba5863feaa5a21 /common
parent32fcd732e2535090174142dd15b8b74fc444a9c2 (diff)
Add support for mapping std::array to BLOB and char[16] to UUID types
Diffstat (limited to 'common')
-rw-r--r--common/blob/driver.cxx6
-rw-r--r--common/blob/test.hxx36
2 files changed, 34 insertions, 8 deletions
diff --git a/common/blob/driver.cxx b/common/blob/driver.cxx
index b280771..ec507ce 100644
--- a/common/blob/driver.cxx
+++ b/common/blob/driver.cxx
@@ -5,6 +5,8 @@
// Test BLOB mapping.
//
+#include <common/config.hxx> // HAVE_CXX11
+
#include <memory> // std::auto_ptr
#include <cassert>
#include <iostream>
@@ -47,6 +49,10 @@ main (int argc, char* argv[])
o.vuc.assign (udata, udata + sizeof (data));
memcpy (o.c, data, sizeof (data));
memcpy (o.uc, udata, sizeof (data));
+#ifdef HAVE_CXX11
+ memcpy (o.a.data (), data, sizeof (data));
+ memcpy (o.ua.data (), udata, sizeof (data));
+#endif
o.cont.push_back (1);
o.cont.push_back (2);
o.cont.push_back (3);
diff --git a/common/blob/test.hxx b/common/blob/test.hxx
index 9e6434b..5d88d8b 100644
--- a/common/blob/test.hxx
+++ b/common/blob/test.hxx
@@ -5,17 +5,25 @@
#ifndef TEST_HXX
#define TEST_HXX
+#include <common/config.hxx> // HAVE_CXX11
+
#include <vector>
#include <cstring> // std::memcmp
+#ifdef HAVE_CXX11
+# include <array>
+#endif
+
#include <odb/core.hxx>
#ifdef ODB_COMPILER
# if defined(ODB_DATABASE_PGSQL)
# define BLOB_TYPE "BYTEA"
# elif defined(ODB_DATABASE_MSSQL)
+//# define BLOB_TYPE "VARBINARY(1024)"
# define BLOB_TYPE "VARBINARY(max)"
# else
+//# define BLOB_TYPE "RAW(1024)"
# define BLOB_TYPE "BLOB"
# endif
#endif
@@ -41,7 +49,16 @@ struct object
#pragma db type(BLOB_TYPE)
unsigned char uc[1024];
- // Make sure we can still use std::vector<char> as a container.
+#ifdef HAVE_CXX11
+ #pragma db type(BLOB_TYPE)
+ std::array<char, 1024> a;
+
+ #pragma db type(BLOB_TYPE)
+ std::array<char, 1024> ua;
+#endif
+
+ // Make sure we can still use std::vector<char> and std::array<char>
+ // as containers.
//
std::vector<unsigned char> cont;
};
@@ -49,13 +66,16 @@ struct object
inline bool
operator== (const object& x, const object& y)
{
- return
- x.id_ == y.id_ &&
- x.vc == y.vc &&
- x.vuc == y.vuc &&
- std::memcmp (x.c, y.c, sizeof (x.c)) == 0 &&
- std::memcmp (x.uc, y.uc, sizeof (x.uc)) == 0 &&
- x.cont == y.cont;
+ return x.id_ == y.id_
+ && x.vc == y.vc
+ && x.vuc == y.vuc
+ && std::memcmp (x.c, y.c, sizeof (x.c)) == 0
+ && std::memcmp (x.uc, y.uc, sizeof (x.uc)) == 0
+#ifdef HAVE_CXX11
+ && x.a == y.a
+ && x.ua == y.ua
+#endif
+ && x.cont == y.cont;
}
#endif // TEST_HXX