aboutsummaryrefslogtreecommitdiff
path: root/common/inverse/test.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-06-15 13:22:36 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-06-15 13:22:36 +0200
commitae6efed243e2ba2a611014707368de6a86d74940 (patch)
treeecca1ff08a83c0c00c8c6b9e0ad73c35fad8df4b /common/inverse/test.hxx
parent647b604fb0d68d9921e1457ebaaf70a244e22d81 (diff)
Support for inverse on points_to
Diffstat (limited to 'common/inverse/test.hxx')
-rw-r--r--common/inverse/test.hxx79
1 files changed, 79 insertions, 0 deletions
diff --git a/common/inverse/test.hxx b/common/inverse/test.hxx
index a245084..52a525d 100644
--- a/common/inverse/test.hxx
+++ b/common/inverse/test.hxx
@@ -232,4 +232,83 @@ namespace test2
}
#endif
+// Test inverse based on points_to.
+//
+#pragma db namespace table("t3_")
+namespace test3
+{
+ // Inverse pointer.
+ //
+ #pragma db value
+ struct comp
+ {
+ int i;
+ int j;
+ };
+
+ inline bool
+ operator< (comp x, comp y) {return x.i < y.i || (x.i == y.i && x.j < y.j);}
+
+ struct obj2;
+
+ #pragma db object
+ struct obj1
+ {
+ #pragma db id
+ comp id;
+
+ #pragma db inverse(o1)
+ obj2* o2;
+
+ obj1 (int i = 0, int j = 0): o2 (0) {id.i = i; id.j = j;}
+ ~obj1 ();
+ };
+
+ #pragma db object
+ struct obj2
+ {
+ #pragma db id auto
+ int id;
+
+ #pragma db points_to(obj1) on_delete(cascade)
+ comp o1;
+ };
+
+ inline obj1::
+ ~obj1 () {delete o2;}
+
+ // Inverse container of pointers.
+ //
+ struct obj4;
+
+ #pragma db object
+ struct obj3
+ {
+ #pragma db id auto
+ int id;
+
+ #pragma db inverse(o3)
+ std::vector<obj4*> o4;
+
+ ~obj3 ();
+ };
+
+ #pragma db object
+ struct obj4
+ {
+ #pragma db id auto
+ int id;
+
+ #pragma db points_to(obj3)
+ int o3;
+ };
+
+ inline obj3::
+ ~obj3 ()
+ {
+ for (std::vector<obj4*>::iterator i (o4.begin ()); i != o4.end (); ++i)
+ delete *i;
+ }
+};
+
#endif // TEST_HXX