aboutsummaryrefslogtreecommitdiff
path: root/common/wrapper/test.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-08-26 12:13:19 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-08-28 14:15:45 +0200
commit0e4095ffecdc1f65a48d21730b0c8a0d96bc0c93 (patch)
treee6497bdbd52b112e44f41c2f8d5a83815e1cf4c8 /common/wrapper/test.hxx
parent70ed1235b68bf7a36cfefabf0aa078608c83dfd1 (diff)
Add wrapper support for composite values
NULL semantics for composite values is not yet supported.
Diffstat (limited to 'common/wrapper/test.hxx')
-rw-r--r--common/wrapper/test.hxx74
1 files changed, 73 insertions, 1 deletions
diff --git a/common/wrapper/test.hxx b/common/wrapper/test.hxx
index 68a8750..b28d7a0 100644
--- a/common/wrapper/test.hxx
+++ b/common/wrapper/test.hxx
@@ -21,6 +21,10 @@
using odb::nullable;
+//
+// Simple values.
+//
+
typedef nullable<std::string> nullable_string;
#ifdef HAVE_TR1_MEMORY
@@ -33,7 +37,7 @@ struct object
#pragma db id auto
unsigned long id_;
- std::auto_ptr<unsigned long> num;
+ std::auto_ptr<int> num;
#pragma db null
std::auto_ptr<std::string> str;
@@ -50,4 +54,72 @@ struct object
#endif
};
+//
+// Composite values.
+//
+
+#pragma db value
+struct comp1
+{
+ comp1 () {}
+ comp1 (const std::string& s, int n): str (s), num (n) {}
+
+ std::string str;
+ int num;
+};
+
+inline bool
+operator== (const comp1& x, const comp1 y)
+{
+ return x.str == y.str && x.num == y.num;
+}
+
+
+#pragma db value
+struct comp2
+{
+ comp2 () {}
+ comp2 (const std::string& s, int n): str (s), num (n) {}
+
+ std::string str;
+ int num;
+
+ std::vector<std::string> strs;
+};
+
+inline bool
+operator== (const comp2& x, const comp2 y)
+{
+ return x.str == y.str && x.num == y.num && x.strs == y.strs;
+}
+
+#pragma db object
+struct comp_object
+{
+ #pragma db id auto
+ unsigned long id_;
+
+ std::auto_ptr<comp1> c1; // Wrapped comp value.
+ std::vector<nullable<comp1> > vc1; // Container of wrapped comp values.
+ std::auto_ptr<comp2> c2; // Container inside wrapped comp value.
+};
+
+// This one is just a compilation test to cover more convolute cases.
+//
+#pragma db value
+struct comp3: comp2
+{
+ std::auto_ptr<comp1> c1;
+ std::vector<nullable<comp1> > vc1;
+};
+
+#pragma db object
+struct comp_object2
+{
+ #pragma db id auto
+ unsigned long id_;
+
+ std::auto_ptr<comp3> c3;
+};
+
#endif // TEST_HXX