aboutsummaryrefslogtreecommitdiff
path: root/odb/relational
diff options
context:
space:
mode:
authorConstantin Michael <constantin@codesynthesis.com>2011-10-06 09:01:48 +0200
committerConstantin Michael <constantin@codesynthesis.com>2011-10-21 11:47:12 +0200
commit213a61a1d9b41e71c886f0ff6a4762522cf68e63 (patch)
tree77ea5cc6da4ce9d3c508be8aa3d8467b765195c1 /odb/relational
parent3d1aa62e7f6dfeba4b81ea4716598fe680f1fffb (diff)
Add flag to context indicating whether to generate grow code
Diffstat (limited to 'odb/relational')
-rw-r--r--odb/relational/context.cxx2
-rw-r--r--odb/relational/context.hxx2
-rw-r--r--odb/relational/header.hxx36
-rw-r--r--odb/relational/mysql/context.cxx1
-rw-r--r--odb/relational/pgsql/context.cxx1
-rw-r--r--odb/relational/source.hxx117
-rw-r--r--odb/relational/sqlite/context.cxx1
7 files changed, 103 insertions, 57 deletions
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*";