diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2010-09-20 16:05:01 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2010-09-20 16:05:01 +0200 |
commit | 6d8864d805c2cce550e7f2149b2b244466af4fb8 (patch) | |
tree | 6313d1193fabb0761cd66b31e9235cff2bbabd1d | |
parent | a81b6977c9aa75e9754fd74417278da943c48883 (diff) |
Add persist(const) version, make update()'s argument const
-rw-r--r-- | doc/manual.xhtml | 2 | ||||
-rw-r--r-- | odb/mysql/header.cxx | 24 | ||||
-rw-r--r-- | odb/mysql/source.cxx | 20 | ||||
-rw-r--r-- | odb/tracer/header.cxx | 20 | ||||
-rw-r--r-- | odb/tracer/source.cxx | 14 |
5 files changed, 43 insertions, 37 deletions
diff --git a/doc/manual.xhtml b/doc/manual.xhtml index 3d3d731..173b964 100644 --- a/doc/manual.xhtml +++ b/doc/manual.xhtml @@ -1558,7 +1558,7 @@ t.commit (); <pre class="c++"> template <typename T> void - update (T& object); + update (const T& object); </pre> <p>If the object passed to this function does not exist in the diff --git a/odb/mysql/header.cxx b/odb/mysql/header.cxx index 6cd3569..870698f 100644 --- a/odb/mysql/header.cxx +++ b/odb/mysql/header.cxx @@ -216,6 +216,10 @@ namespace mysql string const& type (c.fq_name ()); + id_member_.traverse (c); + semantics::data_member& id (*id_member_.member ()); + bool auto_id (id.count ("auto")); + member_count_.traverse (c); size_t column_count (member_count_.count ()); @@ -235,14 +239,9 @@ namespace mysql // id_type // - { - id_member_.traverse (c); - semantics::data_member& id (*id_member_.member ()); - - os << "typedef " << id.type ().fq_name (id.belongs ().hint ()) << - " id_type;" - << endl; - } + os << "typedef " << id.type ().fq_name (id.belongs ().hint ()) << + " id_type;" + << endl; // image_type // @@ -319,25 +318,26 @@ namespace mysql // init (image, object) // os << "static bool" << endl - << "init (image_type&, object_type&);" + << "init (image_type&, const object_type&);" << endl; // init (object, image) // os << "static void" << endl - << "init (object_type&, image_type&);" + << "init (object_type&, const image_type&);" << endl; // persist () // os << "static void" << endl - << "persist (database&, object_type&);" + << "persist (database&, " << (auto_id ? "" : "const ") << + "object_type&);" << endl; // update () // os << "static void" << endl - << "update (database&, object_type&);" + << "update (database&, const object_type&);" << endl; // erase () diff --git a/odb/mysql/source.cxx b/odb/mysql/source.cxx index 9502a1b..b9f51c8 100644 --- a/odb/mysql/source.cxx +++ b/odb/mysql/source.cxx @@ -654,6 +654,7 @@ namespace mysql id_member_.traverse (c); semantics::data_member& id (*id_member_.member ()); + bool auto_id (id.count ("auto")); member_count_.traverse (c); size_t column_count (member_count_.count ()); @@ -808,7 +809,7 @@ namespace mysql // init (image, object) // os << "bool " << traits << "::" << endl - << "init (image_type& i, object_type& o)" + << "init (image_type& i, const object_type& o)" << "{" << "bool grew (false);" << "bool is_null;" @@ -820,7 +821,7 @@ namespace mysql // init (object, image) // os << "void " << traits << "::" << endl - << "init (object_type& o, image_type& i)" + << "init (object_type& o, const image_type& i)" << "{"; names (c, init_value_member_names_); os << "}"; @@ -828,7 +829,8 @@ namespace mysql // persist () // os << "void " << traits << "::" << endl - << "persist (database&, object_type& obj)" + << "persist (database&, " << (auto_id ? "" : "const ") << + "object_type& obj)" << "{" << "using namespace mysql;" << endl @@ -838,17 +840,17 @@ namespace mysql << "binding& b (sts.image_binding ());" << endl; - if (id.count ("auto")) - os << "obj." << id.name () << " = 0;"; + if (auto_id) + os << "obj." << id.name () << " = 0;" + << endl; - os << endl - << "if (init (sts.image (), obj) || b.version == 0)" << endl + os << "if (init (sts.image (), obj) || b.version == 0)" << endl << "bind (b, sts.image ());" << endl << "mysql::persist_statement& st (sts.persist_statement ());" << "st.execute ();"; - if (id.count ("auto")) + if (auto_id) os << "obj." << id.name () << " = static_cast<id_type> (st.id ());"; os << "}"; @@ -856,7 +858,7 @@ namespace mysql // update () // os << "void " << traits << "::" << endl - << "update (database&, object_type& obj)" + << "update (database&, const object_type& obj)" << "{" << "using namespace mysql;" << endl diff --git a/odb/tracer/header.cxx b/odb/tracer/header.cxx index 28926bf..b3dad8e 100644 --- a/odb/tracer/header.cxx +++ b/odb/tracer/header.cxx @@ -28,6 +28,10 @@ namespace tracer string const& type (c.fq_name ()); + id_member_.traverse (c); + semantics::data_member& id (*id_member_.member ()); + bool auto_id (id.count ("auto")); + os << "// " << c.name () << endl << "//" << endl; @@ -44,14 +48,9 @@ namespace tracer // id_type // - { - id_member_.traverse (c); - semantics::data_member& id (*id_member_.member ()); - - os << "typedef " << id.type ().fq_name (id.belongs ().hint ()) << - " id_type;" - << endl; - } + os << "typedef " << id.type ().fq_name (id.belongs ().hint ()) << + " id_type;" + << endl; // type_name () // @@ -68,13 +67,14 @@ namespace tracer // persist () // os << "static void" << endl - << "persist (database&, object_type&);" + << "persist (database&, " << (auto_id ? "" : "const ") << + "object_type&);" << endl; // update () // os << "static void" << endl - << "update (database&, object_type&);" + << "update (database&, const object_type&);" << endl; // erase () diff --git a/odb/tracer/source.cxx b/odb/tracer/source.cxx index 1c61916..4cb4b32 100644 --- a/odb/tracer/source.cxx +++ b/odb/tracer/source.cxx @@ -29,9 +29,9 @@ namespace tracer string const& type (c.fq_name ()); string traits ("access::object_traits< " + type + " >"); - id_member t; - t.traverse (c); - semantics::data_member& id (*t.member ()); + id_member_.traverse (c); + semantics::data_member& id (*id_member_.member ()); + bool auto_id (id.count ("auto")); os << "// " << c.name () << endl << "//" << endl @@ -48,7 +48,8 @@ namespace tracer // persist () // os << "void " << traits << "::" << endl - << "persist (database&, object_type& obj)" + << "persist (database&, " << (auto_id ? "" : "const ") << + "object_type& obj)" << "{" << "std::cout << \"insert \" << type_name () << \" id \" << " << "id (obj) << std::endl;" @@ -60,7 +61,7 @@ namespace tracer // update () // os << "void " << traits << "::" << endl - << "update (database&, object_type& obj)" + << "update (database&, const object_type& obj)" << "{" << "std::cout << \"update \" << type_name () << \" id \" << " << "id (obj) << std::endl;" @@ -114,6 +115,9 @@ namespace tracer << "return true;" << "}"; } + + private: + id_member id_member_; }; } |