From d33b95fff7f790d669c5798fdab913d38fc4ae79 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 5 Jan 2011 13:50:34 +0200 Subject: Factor out id initialization and container loading into separate functions --- odb/mysql/header.cxx | 27 ++++++++-- odb/mysql/inline.cxx | 11 ++++ odb/mysql/source.cxx | 150 +++++++++++++++++++++++++-------------------------- 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&, 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&," << endl - << "details::shared_ptr&);" + << "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 ()) -- cgit v1.1