From 07c02dcecd806810226db734f193bdcf4df8cae7 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 21 Dec 2011 11:01:44 +0200 Subject: Add test for object with only auto-id member This tests the generation of the INSERT ... DEFAULT VALUES special syntax in some databases. --- common/auto/driver.cxx | 81 +++++++++++++++++++++++++++++++++----------------- common/auto/test.hxx | 9 ++++++ 2 files changed, 63 insertions(+), 27 deletions(-) (limited to 'common/auto') 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 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 o1 (db->load (id1)); + auto_ptr o2 (db->load (id2)); + auto_ptr o3 (db->load (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 o1 (db->load (id1)); - auto_ptr o2 (db->load (id2)); - auto_ptr o3 (db->load (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 o (db->load (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 -- cgit v1.1