aboutsummaryrefslogtreecommitdiff
path: root/common/composite-id/driver.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-04-27 11:36:43 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-04-27 11:36:43 +0200
commitc8458a266eb258cf61b1e66066c72a2dc0f0ad8b (patch)
treec51449d2e0ad3100d80eedb91178e55264d13882 /common/composite-id/driver.cxx
parent6a3ddb6bd80f3c0c4d7b6957cb7be1f3d8713720 (diff)
Add support for NULL pointers to objects with composite object ids
Diffstat (limited to 'common/composite-id/driver.cxx')
-rw-r--r--common/composite-id/driver.cxx71
1 files changed, 71 insertions, 0 deletions
diff --git a/common/composite-id/driver.cxx b/common/composite-id/driver.cxx
index 2066335..8a230eb 100644
--- a/common/composite-id/driver.cxx
+++ b/common/composite-id/driver.cxx
@@ -624,6 +624,77 @@ main (int argc, char* argv[])
}
}
+ // Test 8.
+ //
+ {
+ using namespace test8;
+
+ object2 o2a, o2b;
+ object3 o3;
+
+ o2b.o1 = new object1 (scomp ("222", "aaa", "bbb"), 123);
+ o3.o1.push_back (0);
+ o3.o1.push_back (new object1 (scomp ("333", "aaa", "bbb"), 234));
+
+ // Persist.
+ //
+ {
+ transaction t (db->begin ());
+ db->persist (o2a);
+ db->persist (o2b);
+ db->persist (o2b.o1);
+ db->persist (o3);
+ db->persist (o3.o1[1]);
+ t.commit ();
+ }
+
+ // Load.
+ //
+ {
+ transaction t (db->begin ());
+ auto_ptr<object2> p2a (db->load<object2> (o2a.id));
+ auto_ptr<object2> p2b (db->load<object2> (o2b.id));
+ auto_ptr<object3> p3 (db->load<object3> (o3.id));
+ t.commit ();
+
+ assert (p2a->o1 == 0);
+ assert (p2b->o1 != 0 && *p2b->o1 == *o2b.o1);
+ assert (p3->o1[0] == 0);
+ assert (p3->o1[1] != 0 && *p3->o1[1] == *o3.o1[1]);
+ }
+
+ // Update.
+ //
+ {
+ object1* o1 (o3.o1[1]);
+
+ o3.o1.clear ();
+ o3.o1.push_back (o2b.o1);
+ o3.o1.push_back (0);
+
+ o2a.o1 = o1;
+ o2b.o1 = 0;
+
+ transaction t (db->begin ());
+ db->update (o2a);
+ db->update (o2b);
+ db->update (o3);
+ t.commit ();
+ }
+
+ {
+ transaction t (db->begin ());
+ auto_ptr<object2> p2a (db->load<object2> (o2a.id));
+ auto_ptr<object2> p2b (db->load<object2> (o2b.id));
+ auto_ptr<object3> p3 (db->load<object3> (o3.id));
+ t.commit ();
+
+ assert (p2a->o1 != 0 && *p2a->o1 == *o2a.o1);
+ assert (p2b->o1 == 0);
+ assert (p3->o1[0] != 0 && *p3->o1[0] == *o3.o1[0]);
+ assert (p3->o1[1] == 0);
+ }
+ }
}
catch (const odb::exception& e)
{