aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-04-27 13:57:34 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-04-27 13:57:34 +0200
commit52793dc8860e38f725dc0ca8300c4e2ca9d4ceb9 (patch)
tree88d868922e1903cc56236516c8ab44b4bc222a2d
parentf8b3ee6d42f5112c4e66a07cc7fdba43ce66aacd (diff)
Don't generate grow code for databases that don't need it
-rw-r--r--odb/relational/header.cxx2
-rw-r--r--odb/relational/header.hxx2
-rw-r--r--odb/relational/source.cxx60
-rw-r--r--odb/relational/source.hxx41
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)
//