From da13cf5463a3d047c8b52c5b95b00b203e56eb2d Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sun, 29 Apr 2012 21:12:26 +0200 Subject: Factor TR1/C++11 shared_ptr test into separate object The current approach causes problems with foreign key constraints during table dropping. --- common/wrapper/driver.cxx | 64 ++++++++++++++++++++++++++--------------------- common/wrapper/test.hxx | 59 +++++++++++++++++++++++++------------------ 2 files changed, 70 insertions(+), 53 deletions(-) diff --git a/common/wrapper/driver.cxx b/common/wrapper/driver.cxx index d8985fa..b434dba 100644 --- a/common/wrapper/driver.cxx +++ b/common/wrapper/driver.cxx @@ -27,45 +27,55 @@ main (int argc, char* argv[]) { auto_ptr db (create_database (argc, argv)); + // Test 1: simple values. // - // Simple values. - // - unsigned long id; { - object o; - o.num.reset (new int (123)); - o.nstrs.push_back (nullable_string ()); - o.nstrs.push_back (nullable_string ("123")); + using namespace test1; + + unsigned long id1, id2; + { + object1 o1; + object2 o2; + + o1.num.reset (new int (123)); + o1.nstrs.push_back (nullable_string ()); + o1.nstrs.push_back (nullable_string ("123")); + #if defined(HAVE_CXX11) || defined(HAVE_TR1_MEMORY) - o.sstrs.push_back (str_sptr ()); - o.sstrs.push_back (str_sptr (new string ("123"))); + o2.sstrs.push_back (str_sptr ()); + o2.sstrs.push_back (str_sptr (new string ("123"))); #endif - transaction t (db->begin ()); - id = db->persist (o); - t.commit (); - } + transaction t (db->begin ()); + id1 = db->persist (o1); + id2 = db->persist (o2); + t.commit (); + } + + { + transaction t (db->begin ()); + auto_ptr o1 (db->load (id1)); + auto_ptr o2 (db->load (id2)); + t.commit (); + + assert (*o1->num == 123); + assert (o1->str.get () == 0); + assert (o1->nstr.null ()); + assert (o1->nstrs[0].null ()); + assert (o1->nstrs[1].get () == "123"); - { - transaction t (db->begin ()); - auto_ptr o (db->load (id)); - t.commit (); - - assert (*o->num == 123); - assert (o->str.get () == 0); - assert (o->nstr.null ()); - assert (o->nstrs[0].null ()); - assert (o->nstrs[1].get () == "123"); #if defined(HAVE_CXX11) || defined(HAVE_TR1_MEMORY) - assert (!o->sstr); - assert (!o->sstrs[0]); - assert (*o->sstrs[1] == "123"); + assert (!o2->sstr); + assert (!o2->sstrs[0]); + assert (*o2->sstrs[1] == "123"); #endif + } } // // Composite values. // + unsigned long id; { comp_object co; @@ -134,8 +144,6 @@ main (int argc, char* argv[]) { using namespace test5; - using test5::object; //@@ tmp - object o1, o2; o1.v.push_back (nullable ()); diff --git a/common/wrapper/test.hxx b/common/wrapper/test.hxx index 399073d..f308409 100644 --- a/common/wrapper/test.hxx +++ b/common/wrapper/test.hxx @@ -20,46 +20,55 @@ using odb::nullable; +// Test 1: simple values. // -// Simple values. -// - -typedef nullable nullable_string; +#pragma db namespace table("t1_") +namespace test1 +{ + typedef nullable nullable_string; #ifdef HAVE_CXX11 -typedef std::unique_ptr num_uptr; -typedef std::unique_ptr str_uptr; -typedef std::shared_ptr str_sptr; + typedef std::unique_ptr num_uptr; + typedef std::unique_ptr str_uptr; + typedef std::shared_ptr str_sptr; #else -typedef std::auto_ptr num_uptr; -typedef std::auto_ptr str_uptr; + typedef std::auto_ptr num_uptr; + typedef std::auto_ptr str_uptr; # ifdef HAVE_TR1_MEMORY -typedef std::tr1::shared_ptr str_sptr; + typedef std::tr1::shared_ptr str_sptr; # endif #endif -#pragma db object table("obj") -struct object -{ - #pragma db id auto - unsigned long id_; + #pragma db object table("obj1") + struct object1 + { + #pragma db id auto + unsigned long id_; + + num_uptr num; - num_uptr num; + #pragma db null + str_uptr str; - #pragma db null - str_uptr str; + nullable_string nstr; + std::vector nstrs; + }; - nullable_string nstr; - std::vector nstrs; + #pragma db object + struct object2 + { + #pragma db id auto + unsigned long id_; #if defined(HAVE_CXX11) || defined(HAVE_TR1_MEMORY) - #pragma db null - str_sptr sstr; + #pragma db null + str_sptr sstr; - #pragma db value_null - std::vector sstrs; + #pragma db value_null + std::vector sstrs; #endif -}; + }; +} // // Composite values. -- cgit v1.1