aboutsummaryrefslogtreecommitdiff
path: root/odb/mysql
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-09-20 16:05:01 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-09-20 16:05:01 +0200
commit6d8864d805c2cce550e7f2149b2b244466af4fb8 (patch)
tree6313d1193fabb0761cd66b31e9235cff2bbabd1d /odb/mysql
parenta81b6977c9aa75e9754fd74417278da943c48883 (diff)
Add persist(const) version, make update()'s argument const
Diffstat (limited to 'odb/mysql')
-rw-r--r--odb/mysql/header.cxx24
-rw-r--r--odb/mysql/source.cxx20
2 files changed, 23 insertions, 21 deletions
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