aboutsummaryrefslogtreecommitdiff
path: root/common/inverse/test.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-11-22 14:20:22 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-11-22 14:20:22 +0200
commit73bcedf1a812136d338da7f274a37b02d0b30b0a (patch)
treed6b3c1f80839474c304b3b04980fd180022f9def /common/inverse/test.hxx
parentececaecd27d0a9f3d52a5886f68bc8eac4fc5227 (diff)
Test one-to-{one,many} inverse relationships
Diffstat (limited to 'common/inverse/test.hxx')
-rw-r--r--common/inverse/test.hxx132
1 files changed, 132 insertions, 0 deletions
diff --git a/common/inverse/test.hxx b/common/inverse/test.hxx
new file mode 100644
index 0000000..df93e5d
--- /dev/null
+++ b/common/inverse/test.hxx
@@ -0,0 +1,132 @@
+// file : common/inverse/test.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef TEST_HXX
+#define TEST_HXX
+
+#include <set>
+#include <vector>
+#include <string>
+#include <memory>
+#include "tr1-memory.hxx"
+
+#include <odb/core.hxx>
+
+struct obj1;
+struct obj2;
+struct obj3;
+
+typedef obj1* obj1_ptr;
+typedef obj2* obj2_ptr;
+typedef obj3* obj3_ptr;
+
+typedef std::set<obj3_ptr> obj3_ptr_set;
+
+#pragma db object
+struct obj1
+{
+ obj1 (): o2 (0) {}
+ ~obj1 ();
+
+ #pragma db id
+ std::string id;
+
+ obj2_ptr o2;
+
+ #pragma db id_column("obj1_id") value_column("obj3_id")
+ obj3_ptr_set o3;
+};
+
+#pragma db object
+struct obj2
+{
+ #pragma db id auto
+ int id;
+
+ std::string str;
+
+ // one-to-one
+ //
+ #pragma db inverse(o2)
+ obj1_ptr o1;
+};
+
+#pragma db object
+struct obj3
+{
+ #pragma db id auto
+ int id;
+
+ std::string str;
+
+ // one-to-many
+ //
+ #pragma db inverse (o3)
+ obj1_ptr o1;
+};
+
+inline obj1::
+~obj1 ()
+{
+ delete o2;
+ for (obj3_ptr_set::iterator i (o3.begin ()); i != o3.end (); ++i)
+ delete *i;
+}
+
+// TR1 version
+//
+#ifdef HAVE_TR1_MEMORY
+struct tr1_obj1;
+struct tr1_obj2;
+struct tr1_obj3;
+
+typedef std::tr1::shared_ptr<tr1_obj1> tr1_obj1_ptr;
+typedef std::tr1::shared_ptr<tr1_obj2> tr1_obj2_ptr;
+typedef std::tr1::shared_ptr<tr1_obj3> tr1_obj3_ptr;
+
+typedef std::tr1::weak_ptr<tr1_obj1> tr1_obj1_wptr;
+
+typedef std::vector<tr1_obj3_ptr> tr1_obj3_ptr_vec;
+
+#pragma db object pointer(tr1_obj1_ptr)
+struct tr1_obj1
+{
+ #pragma db id
+ std::string id;
+
+ tr1_obj2_ptr o2;
+
+ #pragma db id_column("tr1_obj1_id") value_column("tr1_obj3_id")
+ tr1_obj3_ptr_vec o3;
+};
+
+#pragma db object pointer(tr1_obj2_ptr)
+struct tr1_obj2
+{
+ #pragma db id auto
+ int id;
+
+ std::string str;
+
+ #pragma db inverse(o2)
+ tr1_obj1_wptr o1;
+};
+
+#pragma db object pointer(tr1_obj3_ptr)
+struct tr1_obj3
+{
+ #pragma db id auto
+ int id;
+
+ std::string str;
+
+ // one-to-many
+ //
+ #pragma db inverse (o3)
+ tr1_obj1_wptr o1;
+};
+#endif
+
+#endif // TEST_HXX