summaryrefslogtreecommitdiff
path: root/odb/relational/source.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/relational/source.hxx')
-rw-r--r--odb/relational/source.hxx114
1 files changed, 73 insertions, 41 deletions
diff --git a/odb/relational/source.hxx b/odb/relational/source.hxx
index b73cd01..8d57b1b 100644
--- a/odb/relational/source.hxx
+++ b/odb/relational/source.hxx
@@ -937,8 +937,9 @@ namespace relational
virtual void
traverse_composite (member_info& mi)
{
- os << "composite_value_traits< " << mi.fq_type () <<
- " >::bind (b + n, " << arg << "." << mi.var << "value, sk);";
+ os << "composite_value_traits< " << mi.fq_type () << ", id_" <<
+ db << " >::bind (" << endl
+ << "b + n, " << arg << "." << mi.var << "value, sk);";
}
protected:
@@ -973,8 +974,12 @@ namespace relational
os << "if (sk != statement_update)"
<< "{";
- os << (obj ? "object" : "composite_value") << "_traits< " <<
- class_fq_name (c) << " >::bind (b + n, i, sk);";
+ if (obj)
+ os << "object_traits_impl< ";
+ else
+ os << "composite_value_traits< ";
+
+ os << class_fq_name (c) << ", id_" << db << " >::bind (b + n, i, sk);";
column_count_type const& cc (column_count (c));
@@ -1067,8 +1072,15 @@ namespace relational
os << "// " << class_name (c) << " base" << endl
<< "//" << endl;
- os << "if (" << (obj ? "object" : "composite_value") << "_traits< " <<
- class_fq_name (c) << " >::grow (i, t + " << index_ << "UL))" << endl
+ os << "if (";
+
+ if (obj)
+ os << "object_traits_impl< ";
+ else
+ os << "composite_value_traits< ";
+
+ os << class_fq_name (c) << ", id_" << db << " >::grow (" << endl
+ << "i, t + " << index_ << "UL))" << endl
<< "grew = true;"
<< endl;
@@ -1232,10 +1244,11 @@ namespace relational
if (null (mi.m, key_prefix_) &&
mi.wrapper->template get<bool> ("wrapper-null-handler"))
{
- os << "if (wrapper_traits< " + wt + " >::get_null (" <<
+ os << "if (wrapper_traits< " << wt << " >::get_null (" <<
member << "))" << endl
- << "composite_value_traits< " + mi.fq_type () + " >::" <<
- "set_null (i." << mi.var << "value, sk);"
+ << "composite_value_traits< " << mi.fq_type () << ", id_" <<
+ db << " >::set_null (" << endl
+ << "i." << mi.var << "value, sk);"
<< "else"
<< "{";
}
@@ -1307,7 +1320,8 @@ namespace relational
}
if (comp)
- traits = "composite_value_traits< " + type + " >";
+ traits = "composite_value_traits< " + type + ", id_" +
+ db.string () + " >";
else
{
db_type_id = member_database_type_id_->database_type_id (mi.m);
@@ -1403,8 +1417,12 @@ namespace relational
if (generate_grow)
os << "if (";
- os << (obj ? "object" : "composite_value") << "_traits< " <<
- class_fq_name (c) << " >::init (i, o, sk)";
+ if (obj)
+ os << "object_traits_impl< ";
+ else
+ os << "composite_value_traits< ";
+
+ os << class_fq_name (c) << ", id_" << db << " >::init (i, o, sk)";
if (generate_grow)
os << ")" << endl
@@ -1571,9 +1589,10 @@ namespace relational
if (null (mi.m, key_prefix_) &&
mi.wrapper->template get<bool> ("wrapper-null-handler"))
{
- os << "if (composite_value_traits< " + mi.fq_type () + " >::" <<
- "get_null (i." << mi.var << "value))" << endl
- << "wrapper_traits< " + wt + " >::set_null (" << member + ");"
+ os << "if (composite_value_traits< " << mi.fq_type () <<
+ ", id_" << db << " >::get_null (" << endl
+ << "i." << mi.var << "value))" << endl
+ << "wrapper_traits< " << wt << " >::set_null (" << member + ");"
<< "else" << endl;
}
@@ -1595,8 +1614,9 @@ namespace relational
os << "if (";
if (comp)
- os << "composite_value_traits< " + type + " >::get_null (i." <<
- mi.var << "value)";
+ os << "composite_value_traits< " << type << ", id_" << db <<
+ " >::get_null (" << endl
+ << "i." << mi.var << "value)";
else
get_null (mi);
@@ -1618,7 +1638,8 @@ namespace relational
type = mi.fq_type ();
if (comp)
- traits = "composite_value_traits< " + type + " >";
+ traits = "composite_value_traits< " + type + ", id_" +
+ db.string () + " >";
else
{
db_type_id = member_database_type_id_->database_type_id (mi.m);
@@ -1645,7 +1666,8 @@ namespace relational
semantics::type& pt (member_utype (mi.m, key_prefix_));
if (lazy_pointer (pt))
- os << member << " = ptr_traits::pointer_type (*db, id);";
+ os << member << " = ptr_traits::pointer_type (" << endl
+ << "*static_cast<" << db << "::database*> (db), id);";
else
{
os << "// If a compiler error points to the line below, then" << endl
@@ -1653,7 +1675,8 @@ namespace relational
<< "// cannot be initialized from an object pointer." << endl
<< "//" << endl
<< member << " = ptr_traits::pointer_type (" << endl
- << "db->load< obj_traits::object_type > (id));";
+ << "static_cast<" << db << "::database*> (db)->load<" << endl
+ << " obj_traits::object_type > (id));";
// If we are loading into an eager weak pointer, make sure there
// is someone else holding a strong pointer to it (normally a
@@ -1730,9 +1753,14 @@ namespace relational
return;
os << "// " << class_name (c) << " base" << endl
- << "//" << endl
- << (obj ? "object" : "composite_value") << "_traits< " <<
- class_fq_name (c) << " >::init (o, i, db);"
+ << "//" << endl;
+
+ if (obj)
+ os << "object_traits_impl< ";
+ else
+ os << "composite_value_traits< ";
+
+ os << class_fq_name (c) << ", id_" << db << " >::init (o, i, db);"
<< endl;
}
};
@@ -1750,12 +1778,11 @@ namespace relational
false),
c_ (c)
{
- string const& type (class_fq_name (c));
+ scope_ = object (c)
+ ? "access::object_traits_impl< "
+ : "access::composite_value_traits< ";
- if (object (c))
- scope_ = "access::object_traits< " + type + " >";
- else
- scope_ = "access::composite_value_traits< " + type + " >";
+ scope_ += class_fq_name (c) + ", id_" + db.string () + " >";
}
// Unless the database system can execute several interleaving
@@ -3381,7 +3408,7 @@ namespace relational
//
virtual void
- post_query_ (type&)
+ post_query_ (type&, bool /*once_off*/)
{
}
@@ -3400,11 +3427,13 @@ namespace relational
}
virtual void
- object_query_statement_ctor_args (type&)
+ object_query_statement_ctor_args (type&,
+ std::string const& q,
+ bool /*prepared*/)
{
- os << "sts.connection ()," << endl
- << "query_statement + q.clause ()," << endl
- << "q.parameters_binding ()," << endl
+ os << "conn," << endl
+ << "query_statement + " << q << ".clause ()," << endl
+ << q << ".parameters_binding ()," << endl
<< "imb";
}
@@ -3429,11 +3458,13 @@ namespace relational
}
virtual void
- view_query_statement_ctor_args (type&)
+ view_query_statement_ctor_args (type&,
+ string const& q,
+ bool /*prepared*/)
{
- os << "sts.connection ()," << endl
- << "qs.clause ()," << endl
- << "qs.parameters_binding ()," << endl
+ os << "conn," << endl
+ << q << ".clause ()," << endl
+ << q << ".parameters_binding ()," << endl
<< "imb";
}
@@ -3469,7 +3500,8 @@ namespace relational
traverse_composite (type& c)
{
string const& type (class_fq_name (c));
- string traits ("access::composite_value_traits< " + type + " >");
+ string traits ("access::composite_value_traits< " + type + ", id_" +
+ db.string () + " >");
os << "// " << class_name (c) << endl
<< "//" << endl
@@ -3637,9 +3669,6 @@ namespace relational
if (embedded_schema)
os << "#include <odb/schema-catalog-impl.hxx>" << endl;
- if (options.generate_query ())
- os << "#include <odb/details/shared-ptr.hxx>" << endl;
-
os << endl;
os << "#include <odb/" << db << "/traits.hxx>" << endl
@@ -3666,6 +3695,9 @@ namespace relational
if (options.generate_query ())
{
+ if (options.generate_prepared ())
+ os << "#include <odb/" << db << "/prepared-query.hxx>" << endl;
+
if (features.simple_object)
os << "#include <odb/" << db << "/simple-object-result.hxx>" << endl;