aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-01-05 13:50:34 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-01-05 13:50:34 +0200
commitd33b95fff7f790d669c5798fdab913d38fc4ae79 (patch)
treee74894a0de77c08af673e1356915b29a2b7b1a92
parent320ca6d1a967621ac319922d1a4dfd17f8a03d60 (diff)
Factor out id initialization and container loading into separate functions
-rw-r--r--odb/mysql/header.cxx27
-rw-r--r--odb/mysql/inline.cxx11
-rw-r--r--odb/mysql/source.cxx150
3 files changed, 105 insertions, 83 deletions
diff --git a/odb/mysql/header.cxx b/odb/mysql/header.cxx
index cd9eeec..12f3e4d 100644
--- a/odb/mysql/header.cxx
+++ b/odb/mysql/header.cxx
@@ -857,6 +857,12 @@ namespace mysql
<< "init (object_type&, const image_type&, database&);"
<< endl;
+ // init (id_image, id)
+ //
+ os << "static void" << endl
+ << "init (id_image_type&, const id_type&);"
+ << endl;
+
// persist ()
//
os << "static void" << endl
@@ -897,17 +903,28 @@ namespace mysql
// Implementation details.
//
- os << "public:" << endl
- << "static bool" << endl
- << "find_ (mysql::object_statements<object_type>&, const id_type&);"
+ os << "public:" << endl;
+
+ // Load the object image.
+ //
+ os << "static bool" << endl
+ << "find_ (mysql::object_statements< object_type >&, const id_type&);"
+ << endl;
+
+ // Load the rest of the object (containers, etc). Expects the id
+ // image in the object statements to be initialized to the object
+ // id.
+ //
+ os << "static void" << endl
+ << "load_ (mysql::object_statements< object_type >&, object_type&);"
<< endl;
if (options.generate_query ())
os << "static void" << endl
<< "query_ (database&," << endl
<< "const query_type&," << endl
- << "mysql::object_statements<object_type>&," << endl
- << "details::shared_ptr<mysql::select_statement>&);"
+ << "mysql::object_statements< object_type >&," << endl
+ << "details::shared_ptr< mysql::select_statement >&);"
<< endl;
os << "};";
diff --git a/odb/mysql/inline.cxx b/odb/mysql/inline.cxx
index 1178557..1ab16ca 100644
--- a/odb/mysql/inline.cxx
+++ b/odb/mysql/inline.cxx
@@ -74,6 +74,17 @@ namespace mysql
<< "{"
<< "return obj." << id.name () << ";" << endl
<< "}";
+
+ // load_()
+ //
+ if (!has_a (c, test_container))
+ {
+ os << "inline" << endl
+ << "void " << traits << "::" << endl
+ << "load_ (mysql::object_statements< object_type >&, object_type&)"
+ << "{"
+ << "}";
+ }
}
virtual void
diff --git a/odb/mysql/source.cxx b/odb/mysql/source.cxx
index 916c7fc..82ce9f4 100644
--- a/odb/mysql/source.cxx
+++ b/odb/mysql/source.cxx
@@ -2339,28 +2339,39 @@ namespace mysql
case persist_call:
{
if (!inverse)
- os << traits << "::persist (obj." << obj_name << ", i, " <<
- "sts.container_statment_cache ()." << sts_name << ");";
+ os << traits << "::persist (" << endl
+ << "obj." << obj_name << "," << endl
+ << "i," << endl
+ << "sts.container_statment_cache ()." << sts_name << ");"
+ << endl;
break;
}
case load_call:
{
- os << traits << "::load (obj." << obj_name << ", i, " <<
- "sts.container_statment_cache ()." << sts_name << ");";
+ os << traits << "::load (" << endl
+ << "obj." << obj_name << "," << endl
+ << "i," << endl
+ << "sts.container_statment_cache ()." << sts_name << ");"
+ << endl;
break;
}
case update_call:
{
if (!inverse)
- os << traits << "::update (obj." << obj_name << ", i, " <<
- "sts.container_statment_cache ()." << sts_name << ");";
+ os << traits << "::update (" << endl
+ << "obj." << obj_name << "," << endl
+ << "i," << endl
+ << "sts.container_statment_cache ()." << sts_name << ");"
+ << endl;
break;
}
case erase_call:
{
if (!inverse)
- os << traits << "::erase (i, sts.container_statment_cache ()." <<
- sts_name << ");";
+ os << traits << "::erase (" << endl
+ << "i," << endl
+ << "sts.container_statment_cache ()." << sts_name << ");"
+ << endl;
break;
}
}
@@ -2647,6 +2658,24 @@ namespace mysql
os << "}";
+ // init (id_image, id)
+ //
+ os << "void " << traits << "::" << endl
+ << "init (id_image_type& i, const id_type& id)"
+ << "{";
+
+ if (grow_id)
+ os << "bool grew (false);";
+
+ init_id_image_member_.traverse (id);
+
+ if (grow_id)
+ os << endl
+ << "if (grew)" << endl
+ << "i.version++;";
+
+ os << "}";
+
// persist ()
//
os << "void " << traits << "::" << endl
@@ -2684,26 +2713,14 @@ namespace mysql
if (straight_containers)
{
- os << "{";
-
// Initialize id_image.
//
- if (grow_id)
- os << "bool grew (false);";
-
- os << "const id_type& id (obj." << id.name () << ");"
- << "id_image_type& i (sts.id_image ());";
- init_id_image_member_.traverse (id);
-
- if (grow_id)
- os << "if (grew)" << endl
- << "i.version++;"
- << endl;
+ os << "id_image_type& i (sts.id_image ());"
+ << "init (i, obj." << id.name () << ");"
+ << endl;
container_calls t (*this, container_calls::persist_call);
t.traverse (c);
-
- os << "}";
}
os << "}";
@@ -2722,17 +2739,9 @@ namespace mysql
// Initialize id image.
//
- if (grow_id)
- os << "bool grew (false);";
-
- os << "const id_type& id (obj." << id.name () << ");"
- << "id_image_type& i (sts.id_image ());";
- init_id_image_member_.traverse (id);
-
- if (grow_id)
- os << "if (grew)" << endl
- << "i.version++;"
- << endl;
+ os << "id_image_type& i (sts.id_image ());"
+ << "init (i, obj." << id.name () << ");"
+ << endl;
os << "binding& idb (sts.id_image_binding ());"
<< "if (i.version != sts.id_image_version () || idb.version == 0)"
@@ -2779,16 +2788,9 @@ namespace mysql
// Initialize id image.
//
- if (grow_id)
- os << "bool grew (false);";
-
- os << "id_image_type& i (sts.id_image ());";
- init_id_image_member_.traverse (id);
-
- if (grow_id)
- os << "if (grew)" << endl
- << "i.version++;"
- << endl;
+ os << "id_image_type& i (sts.id_image ());"
+ << "init (i, id);"
+ << endl;
os << "binding& idb (sts.id_image_binding ());"
<< "if (i.version != sts.id_image_version () || idb.version == 0)"
@@ -2838,18 +2840,9 @@ namespace mysql
<< endl
<< "if (l.locked ())"
<< "{"
- << "init (obj, sts.image (), db);";
-
- if (containers)
- {
- os << endl
- << "id_image_type& i (sts.id_image ());";
- container_calls t (*this, container_calls::load_call);
- t.traverse (c);
- os << endl;
- }
-
- os << "sts.load_delayed ();"
+ << "init (obj, sts.image (), db);"
+ << "load_ (sts, obj);"
+ << "sts.load_delayed ();"
<< "l.unlock ();"
<< "}"
<< "else" << endl
@@ -2882,18 +2875,9 @@ namespace mysql
<< endl
<< "if (l.locked ())"
<< "{"
- << "init (obj, sts.image (), db);";
-
- if (containers)
- {
- os << endl
- << "id_image_type& i (sts.id_image ());";
- container_calls t (*this, container_calls::load_call);
- t.traverse (c);
- os << endl;
- }
-
- os << "sts.load_delayed ();"
+ << "init (obj, sts.image (), db);"
+ << "load_ (sts, obj);"
+ << "sts.load_delayed ();"
<< "l.unlock ();"
<< "}"
<< "else" << endl
@@ -2904,6 +2888,8 @@ namespace mysql
<< "return true;"
<< "}";
+ //
+ //
os << "bool " << traits << "::" << endl
<< "find_ (mysql::object_statements< object_type >& sts, " <<
"const id_type& id)"
@@ -2913,16 +2899,9 @@ namespace mysql
// Initialize id image.
//
- if (grow_id)
- os << "bool grew (false);";
-
- os << "id_image_type& i (sts.id_image ());";
- init_id_image_member_.traverse (id);
-
- if (grow_id)
- os << "if (grew)" << endl
- << "i.version++;"
- << endl;
+ os << "id_image_type& i (sts.id_image ());"
+ << "init (i, id);"
+ << endl;
os << "binding& idb (sts.id_image_binding ());"
<< "if (i.version != sts.id_image_version () || idb.version == 0)"
@@ -2966,6 +2945,21 @@ namespace mysql
<< "return r != select_statement::no_data;"
<< "}";
+ // load_()
+ //
+ if (containers)
+ {
+ os << "void " << traits << "::" << endl
+ << "load_ (mysql::object_statements< object_type >& sts, " <<
+ "object_type& obj)"
+ << "{"
+ << "id_image_type& i (sts.id_image ());"
+ << endl;
+ container_calls t (*this, container_calls::load_call);
+ t.traverse (c);
+ os << "}";
+ }
+
// query ()
//
if (options.generate_query ())