aboutsummaryrefslogtreecommitdiff
path: root/common/auto
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-12-21 11:01:44 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-01-20 15:45:46 +0200
commit07c02dcecd806810226db734f193bdcf4df8cae7 (patch)
treef7e8a7d0a661b572971afdc7aa98254f0ca8c38d /common/auto
parent8f8c17009691694fe42651a13972140bf4112678 (diff)
Add test for object with only auto-id member
This tests the generation of the INSERT ... DEFAULT VALUES special syntax in some databases.
Diffstat (limited to 'common/auto')
-rw-r--r--common/auto/driver.cxx81
-rw-r--r--common/auto/test.hxx9
2 files changed, 63 insertions, 27 deletions
diff --git a/common/auto/driver.cxx b/common/auto/driver.cxx
index 9b863f8..121cbe8 100644
--- a/common/auto/driver.cxx
+++ b/common/auto/driver.cxx
@@ -28,37 +28,64 @@ main (int argc, char* argv[])
{
auto_ptr<database> db (create_database (argc, argv));
- unsigned long id1, id2, id3;
+ // object
+ //
{
- object o1 ("one");
- object o2 ("two");
- object o3 ("three");
-
- transaction t (db->begin ());
- db->persist (o1);
- db->persist (o2);
- db->persist (o3);
- t.commit ();
-
- id1 = o1.id_;
- id2 = o2.id_;
- id3 = o3.id_;
-
- assert (id1 != id2);
- assert (id1 != id3);
- assert (id2 != id3);
+ unsigned long id1, id2, id3;
+ {
+ object o1 ("one");
+ object o2 ("two");
+ object o3 ("three");
+
+ transaction t (db->begin ());
+ db->persist (o1);
+ db->persist (o2);
+ db->persist (o3);
+ t.commit ();
+
+ id1 = o1.id_;
+ id2 = o2.id_;
+ id3 = o3.id_;
+
+ assert (id1 != id2);
+ assert (id1 != id3);
+ assert (id2 != id3);
+ }
+
+ {
+ transaction t (db->begin ());
+ auto_ptr<object> o1 (db->load<object> (id1));
+ auto_ptr<object> o2 (db->load<object> (id2));
+ auto_ptr<object> o3 (db->load<object> (id3));
+ t.commit ();
+
+ assert (o1->id_ == id1 && o1->str_ == "one");
+ assert (o2->id_ == id2 && o2->str_ == "two");
+ assert (o3->id_ == id3 && o3->str_ == "three");
+ }
}
+ // auto_only
+ //
{
- transaction t (db->begin ());
- auto_ptr<object> o1 (db->load<object> (id1));
- auto_ptr<object> o2 (db->load<object> (id2));
- auto_ptr<object> o3 (db->load<object> (id3));
- t.commit ();
-
- assert (o1->id_ == id1 && o1->str_ == "one");
- assert (o2->id_ == id2 && o2->str_ == "two");
- assert (o3->id_ == id3 && o3->str_ == "three");
+ unsigned long id;
+ {
+ auto_only o;
+
+ transaction t (db->begin ());
+ db->persist (o);
+ t.commit ();
+
+ id = o.id_;
+ }
+
+ {
+ transaction t (db->begin ());
+ auto_ptr<auto_only> o (db->load<auto_only> (id));
+ t.commit ();
+
+ assert (o->id_ == id);
+ }
}
}
catch (const odb::exception& e)
diff --git a/common/auto/test.hxx b/common/auto/test.hxx
index 6f8106f..6810767 100644
--- a/common/auto/test.hxx
+++ b/common/auto/test.hxx
@@ -30,4 +30,13 @@ private:
friend class odb::access;
};
+// Test the case where the object has just the auto id.
+//
+#pragma db object
+struct auto_only
+{
+ #pragma db auto id
+ unsigned long id_;
+};
+
#endif // TEST_HXX