From 52793dc8860e38f725dc0ca8300c4e2ca9d4ceb9 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 27 Apr 2012 13:57:34 +0200 Subject: Don't generate grow code for databases that don't need it --- odb/relational/header.cxx | 2 +- odb/relational/header.hxx | 2 +- odb/relational/source.cxx | 60 +++++++++++++++++++++++++++++++++++------------ odb/relational/source.hxx | 41 ++++++++++++++++++++++---------- 4 files changed, 75 insertions(+), 30 deletions(-) diff --git a/odb/relational/header.cxx b/odb/relational/header.cxx index 48bca91..45f58b8 100644 --- a/odb/relational/header.cxx +++ b/odb/relational/header.cxx @@ -322,7 +322,7 @@ traverse_object (type& c) // init (image, object) // - os << "static bool" << endl + os << "static " << (generate_grow ? "bool" : "void") << endl << "init (image_type&, const object_type&, " << db << "::statement_kind);" << endl; diff --git a/odb/relational/header.hxx b/odb/relational/header.hxx index 09a2d39..9d8dcba 100644 --- a/odb/relational/header.hxx +++ b/odb/relational/header.hxx @@ -1176,7 +1176,7 @@ namespace relational // init (image, value) // - os << "static bool" << endl + os << "static " << (generate_grow ? "bool" : "void") << endl << "init (image_type&, const value_type&, " << db << "::statement_kind);" << endl; diff --git a/odb/relational/source.cxx b/odb/relational/source.cxx index eb909ce..6e864d7 100644 --- a/odb/relational/source.cxx +++ b/odb/relational/source.cxx @@ -302,7 +302,7 @@ traverse_object (type& c) // init (image, object) // - os << "bool " << traits << "::" << endl + os << (generate_grow ? "bool " : "void ") << traits << "::" << endl << "init (image_type& i, const object_type& o, " << db << "::statement_kind sk)" << "{" @@ -319,16 +319,19 @@ traverse_object (type& c) init_image_pre (c); - os << "bool grew (false);" - << endl; + if (generate_grow) + os << "bool grew (false);" + << endl; if (!poly_derived) inherits (c, init_image_base_inherits_); names (c, init_image_member_names_); - os << "return grew;" - << "}"; + if (generate_grow) + os << "return grew;"; + + os << "}"; // init (object, image) // @@ -873,9 +876,18 @@ traverse_object (type& c) if (poly_derived) os << "const binding& idb (sts.id_image_binding ());"; - os << endl - << "if (init (im, obj, statement_insert))" << endl - << "im.version++;" + os << endl; + + if (generate_grow) + os << "if ("; + + os << "init (im, obj, statement_insert)"; + + if (generate_grow) + os << ")" << endl + << "im.version++"; + + os << ";" << endl; if (!poly_derived && auto_id && insert_send_auto_id) @@ -1104,9 +1116,18 @@ traverse_object (type& c) { // Initialize the object image. // - os << "image_type& im (sts.image ());" - << "if (init (im, obj, statement_update))" << endl - << "im.version++;" + os << "image_type& im (sts.image ());"; + + if (generate_grow) + os << "if ("; + + os << "init (im, obj, statement_update)"; + + if (generate_grow) + os << ")" << endl + << "im.version++"; + + os << ";" << endl; os << "binding& imb (sts.update_image_binding ());" @@ -1158,10 +1179,19 @@ traverse_object (type& c) optimistic->name () << ");"; os << endl - << "image_type& im (sts.image ());" - << "if (init (im, obj, statement_update))" << endl - << "im.version++;" - << endl; + << "image_type& im (sts.image ());"; + + if (generate_grow) + os << "if ("; + + os << "init (im, obj, statement_update)"; + + if (generate_grow) + os << ")" << endl + << "im.version++"; + + os << ";" + << endl; // Update binding is bound to two images (object and id) // so we have to track both versions. diff --git a/odb/relational/source.hxx b/odb/relational/source.hxx index 2f2a61e..de0e6bd 100644 --- a/odb/relational/source.hxx +++ b/odb/relational/source.hxx @@ -1347,9 +1347,17 @@ namespace relational os << "if (sk != statement_update)" << "{"; - os << "if (" << (obj ? "object" : "composite_value") << "_traits< " << - class_fq_name (c) << " >::init (i, o, sk))" << endl - << "grew = true;"; + if (generate_grow) + os << "if ("; + + os << (obj ? "object" : "composite_value") << "_traits< " << + class_fq_name (c) << " >::init (i, o, sk)"; + + if (generate_grow) + os << ")" << endl + << "grew = true"; + + os << ";"; if (check) os << "}"; @@ -2270,10 +2278,12 @@ namespace relational << endl << "statement_kind sk (statement_insert);" << "ODB_POTENTIALLY_UNUSED (sk);" - << endl - << "bool grew (false);" << endl; + if (generate_grow) + os << "bool grew (false);" + << endl; + switch (ck) { case ck_ordered: @@ -2316,9 +2326,11 @@ namespace relational im->traverse (m); } - os << "if (grew)" << endl - << "i.version++;" - << "}"; + if (generate_grow) + os << "if (grew)" << endl + << "i.version++;"; + + os << "}"; } // init (data) @@ -3297,7 +3309,7 @@ namespace relational // init (image, value) // - os << "bool " << traits << "::" << endl + os << (generate_grow ? "bool " : "void ") << traits << "::" << endl << "init (image_type& i, const value_type& o, " << db << "::statement_kind sk)" << "{" @@ -3312,14 +3324,17 @@ namespace relational os << "assert (sk != statement_update);" << endl; - os << "bool grew (false);" - << endl; + if (generate_grow) + os << "bool grew (false);" + << endl; inherits (c, init_image_base_inherits_); names (c, init_image_member_names_); - os << "return grew;" - << "}"; + if (generate_grow) + os << "return grew;"; + + os << "}"; // init (value, image) // -- cgit v1.1