From 213a61a1d9b41e71c886f0ff6a4762522cf68e63 Mon Sep 17 00:00:00 2001 From: Constantin Michael Date: Thu, 6 Oct 2011 09:01:48 +0200 Subject: Add flag to context indicating whether to generate grow code --- odb/relational/context.cxx | 2 + odb/relational/context.hxx | 2 + odb/relational/header.hxx | 36 ++++++++---- odb/relational/mysql/context.cxx | 1 + odb/relational/pgsql/context.cxx | 1 + odb/relational/source.hxx | 117 +++++++++++++++++++++++--------------- odb/relational/sqlite/context.cxx | 1 + 7 files changed, 103 insertions(+), 57 deletions(-) (limited to 'odb/relational') diff --git a/odb/relational/context.cxx b/odb/relational/context.cxx index e8be832..5dd94a3 100644 --- a/odb/relational/context.cxx +++ b/odb/relational/context.cxx @@ -23,6 +23,7 @@ namespace relational context:: context () : data_ (current ().data_), + generate_grow (data_->generate_grow_), bind_vector (data_->bind_vector_), truncated_vector (data_->truncated_vector_) { @@ -31,6 +32,7 @@ namespace relational context:: context (data* d) : data_ (d), + generate_grow (data_->generate_grow_), bind_vector (data_->bind_vector_), truncated_vector (data_->truncated_vector_) { diff --git a/odb/relational/context.hxx b/odb/relational/context.hxx index dfe1f9c..ba633d7 100644 --- a/odb/relational/context.hxx +++ b/odb/relational/context.hxx @@ -131,12 +131,14 @@ namespace relational { data (std::ostream& os): root_context::data (os) {} + bool generate_grow_; string bind_vector_; string truncated_vector_; }; data* data_; public: + bool generate_grow; string const& bind_vector; string const& truncated_vector; }; diff --git a/odb/relational/header.hxx b/odb/relational/header.hxx index 1380c49..4c1421c 100644 --- a/odb/relational/header.hxx +++ b/odb/relational/header.hxx @@ -684,9 +684,12 @@ namespace relational // grow () // - os << "static void" << endl - << "grow (data_image_type&, " << truncated_vector << ");" - << endl; + if (generate_grow) + { + os << "static void" << endl + << "grow (data_image_type&, " << truncated_vector << ");" + << endl; + } // init (data_image) // @@ -1015,9 +1018,12 @@ namespace relational // grow () // - os << "static bool" << endl - << "grow (image_type&, " << truncated_vector << ");" - << endl; + if (generate_grow) + { + os << "static bool" << endl + << "grow (image_type&, " << truncated_vector << ");" + << endl; + } // bind (image_type) // @@ -1359,9 +1365,12 @@ namespace relational // grow () // - os << "static bool" << endl - << "grow (image_type&, " << truncated_vector << ");" - << endl; + if (generate_grow) + { + os << "static bool" << endl + << "grow (image_type&, " << truncated_vector << ");" + << endl; + } // bind (image_type) // @@ -1450,9 +1459,12 @@ namespace relational // grow () // - os << "static bool" << endl - << "grow (image_type&, " << truncated_vector << ");" - << endl; + if (generate_grow) + { + os << "static bool" << endl + << "grow (image_type&, " << truncated_vector << ");" + << endl; + } // bind (image_type) // diff --git a/odb/relational/mysql/context.cxx b/odb/relational/mysql/context.cxx index 891f448..f8d92b0 100644 --- a/odb/relational/mysql/context.cxx +++ b/odb/relational/mysql/context.cxx @@ -75,6 +75,7 @@ namespace relational assert (current_ == 0); current_ = this; + data_->generate_grow_ = true; data_->bind_vector_ = "MYSQL_BIND*"; data_->truncated_vector_ = "my_bool*"; diff --git a/odb/relational/pgsql/context.cxx b/odb/relational/pgsql/context.cxx index b058696..148744d 100644 --- a/odb/relational/pgsql/context.cxx +++ b/odb/relational/pgsql/context.cxx @@ -75,6 +75,7 @@ namespace relational assert (current_ == 0); current_ = this; + data_->generate_grow_ = true; data_->bind_vector_ = "pgsql::bind*"; data_->truncated_vector_ = "bool*"; diff --git a/odb/relational/source.hxx b/odb/relational/source.hxx index 5422e0e..b2bf39b 100644 --- a/odb/relational/source.hxx +++ b/odb/relational/source.hxx @@ -797,15 +797,21 @@ namespace relational { it = &container_it (t); ordered = true; - grow = grow || context::grow (m, *it, "index"); + + if (generate_grow) + grow = grow || context::grow (m, *it, "index"); } + break; } case ck_map: case ck_multimap: { kt = &container_kt (t); - grow = grow || context::grow (m, *kt, "key"); + + if (generate_grow) + grow = grow || context::grow (m, *kt, "key"); + break; } case ck_set: @@ -815,7 +821,8 @@ namespace relational } } - grow = grow || context::grow (m, vt, "value"); + if (generate_grow) + grow = grow || context::grow (m, vt, "value"); bool eager_ptr (is_a (m, test_eager_pointer, vt, "value")); @@ -1190,6 +1197,7 @@ namespace relational // grow () // + if (generate_grow) { size_t index (0); @@ -2007,8 +2015,11 @@ namespace relational void init () { - grow_base_inherits_ >> grow_base_; - grow_member_names_ >> grow_member_; + if (generate_grow) + { + grow_base_inherits_ >> grow_base_; + grow_member_names_ >> grow_member_; + } bind_base_inherits_ >> bind_base_; bind_member_names_ >> bind_member_; @@ -2083,14 +2094,21 @@ namespace relational string const& type (c.fq_name ()); string traits ("access::object_traits< " + type + " >"); - bool grow (context::grow (c)); bool has_ptr (has_a (c, test_pointer)); semantics::data_member* id (id_member (c)); bool auto_id (id ? id->count ("auto") : false); - bool grow_id (id ? context::grow (*id) : false); bool base_id (id ? &id->scope () != &c : false); // Comes from base. + bool grow (false); + bool grow_id (false); + + if (generate_grow) + { + grow = context::grow (c); + grow_id = id ? context::grow (*id) : false; + } + os << "// " << c.name () << endl << "//" << endl << endl; @@ -2144,21 +2162,24 @@ namespace relational // grow () // - os << "bool " << traits << "::" << endl - << "grow (image_type& i, " << truncated_vector << " t)" - << "{" - << "ODB_POTENTIALLY_UNUSED (i);" - << "ODB_POTENTIALLY_UNUSED (t);" - << endl - << "bool grew (false);" - << endl; + if (generate_grow) + { + os << "bool " << traits << "::" << endl + << "grow (image_type& i, " << truncated_vector << " t)" + << "{" + << "ODB_POTENTIALLY_UNUSED (i);" + << "ODB_POTENTIALLY_UNUSED (t);" + << endl + << "bool grew (false);" + << endl; - index_ = 0; - inherits (c, grow_base_inherits_); - names (c, grow_member_names_); + index_ = 0; + inherits (c, grow_base_inherits_); + names (c, grow_member_names_); - os << "return grew;" - << "}"; + os << "return grew;" + << "}"; + } // bind (image_type) // @@ -3007,20 +3028,23 @@ namespace relational // grow () // - os << "bool " << traits << "::" << endl - << "grow (image_type& i, " << truncated_vector << " t)" - << "{" - << "ODB_POTENTIALLY_UNUSED (i);" - << "ODB_POTENTIALLY_UNUSED (t);" - << endl - << "bool grew (false);" - << endl; + if (generate_grow) + { + os << "bool " << traits << "::" << endl + << "grow (image_type& i, " << truncated_vector << " t)" + << "{" + << "ODB_POTENTIALLY_UNUSED (i);" + << "ODB_POTENTIALLY_UNUSED (t);" + << endl + << "bool grew (false);" + << endl; - index_ = 0; - names (c, grow_member_names_); + index_ = 0; + names (c, grow_member_names_); - os << "return grew;" - << "}"; + os << "return grew;" + << "}"; + } // bind (image_type) // @@ -3708,21 +3732,24 @@ namespace relational // grow () // - os << "bool " << traits << "::" << endl - << "grow (image_type& i, " << truncated_vector << " t)" - << "{" - << "ODB_POTENTIALLY_UNUSED (i);" - << "ODB_POTENTIALLY_UNUSED (t);" - << endl - << "bool grew (false);" - << endl; + if (generate_grow) + { + os << "bool " << traits << "::" << endl + << "grow (image_type& i, " << truncated_vector << " t)" + << "{" + << "ODB_POTENTIALLY_UNUSED (i);" + << "ODB_POTENTIALLY_UNUSED (t);" + << endl + << "bool grew (false);" + << endl; - index_ = 0; - inherits (c, grow_base_inherits_); - names (c, grow_member_names_); + index_ = 0; + inherits (c, grow_base_inherits_); + names (c, grow_member_names_); - os << "return grew;" - << "}"; + os << "return grew;" + << "}"; + } // bind (image_type) // diff --git a/odb/relational/sqlite/context.cxx b/odb/relational/sqlite/context.cxx index a135947..a7c9ea9 100644 --- a/odb/relational/sqlite/context.cxx +++ b/odb/relational/sqlite/context.cxx @@ -73,6 +73,7 @@ namespace relational assert (current_ == 0); current_ = this; + data_->generate_grow_ = true; data_->bind_vector_ = "sqlite::bind*"; data_->truncated_vector_ = "bool*"; -- cgit v1.1