aboutsummaryrefslogtreecommitdiff
path: root/odb/relational/pgsql/source.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-10-19 10:47:41 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-10-21 19:25:06 +0200
commit6bd95f51beb26d87fd5d5db22391c73f333eee6e (patch)
tree59621cec994f55fce7a1ced5c3b9edb93a41b084 /odb/relational/pgsql/source.cxx
parent7623fb5259da19c33ffe6623b0f306f6c39ede27 (diff)
Add support for const data members
Const data members are automatically treated as readonly. New test: const-member.
Diffstat (limited to 'odb/relational/pgsql/source.cxx')
-rw-r--r--odb/relational/pgsql/source.cxx49
1 files changed, 32 insertions, 17 deletions
diff --git a/odb/relational/pgsql/source.cxx b/odb/relational/pgsql/source.cxx
index 8547df3..c45b40e 100644
--- a/odb/relational/pgsql/source.cxx
+++ b/odb/relational/pgsql/source.cxx
@@ -535,7 +535,7 @@ namespace relational
// When handling a pointer, mi.t is the id type of the referenced
// object.
//
- semantics::type& mt (member_type (mi.m, key_prefix_));
+ semantics::type& mt (member_utype (mi.m, key_prefix_));
if (semantics::class_* c = object_pointer (mt))
{
@@ -608,7 +608,7 @@ namespace relational
// When handling a pointer, mi.t is the id type of the referenced
// object.
//
- if (object_pointer (member_type (mi.m, key_prefix_)))
+ if (object_pointer (member_utype (mi.m, key_prefix_)))
{
os << "}";
@@ -756,6 +756,10 @@ namespace relational
string const& name (mi.m.name ());
member = "o." + name;
+ if (mi.cq)
+ member = "const_cast< " + mi.fq_type (false) + "& > (" +
+ member + ")";
+
os << "// " << name << endl
<< "//" << endl;
}
@@ -769,7 +773,7 @@ namespace relational
// Here we need the wrapper type, not the wrapped type.
//
member = "wrapper_traits< " + mi.fq_type (false) + " >::" +
- "set_ref (" + member + ")";
+ "set_ref (\n" + member + ")";
}
if (composite (mi.t))
@@ -779,7 +783,7 @@ namespace relational
// When handling a pointer, mi.t is the id type of the referenced
// object.
//
- semantics::type& mt (member_type (mi.m, key_prefix_));
+ semantics::type& mt (member_utype (mi.m, key_prefix_));
if (semantics::class_* c = object_pointer (mt))
{
@@ -830,13 +834,20 @@ namespace relational
// When handling a pointer, mi.t is the id type of the referenced
// object.
//
- semantics::type& mt (member_type (mi.m, key_prefix_));
+ semantics::type& mt (member_utype (mi.m, key_prefix_));
if (object_pointer (mt))
{
- member = member_override_.empty ()
- ? "o." + mi.m.name ()
- : member_override_;
+ if (!member_override_.empty ())
+ member = member_override_;
+ else
+ {
+ member = "o." + mi.m.name ();
+
+ if (mi.cq)
+ member = "const_cast< " + mi.fq_type (false) + "& > (" +
+ member + ")";
+ }
if (lazy_pointer (mt))
os << member << " = ptr_traits::pointer_type (db, id);";
@@ -867,8 +878,9 @@ namespace relational
traverse_integer (member_info& mi)
{
os << traits << "::set_value (" << endl
- << member << ", i." << mi.var << "value, " <<
- "i." << mi.var << "null);"
+ << member << "," << endl
+ << "i." << mi.var << "value," << endl
+ << "i." << mi.var << "null);"
<< endl;
}
@@ -876,8 +888,9 @@ namespace relational
traverse_float (member_info& mi)
{
os << traits << "::set_value (" << endl
- << member << ", i." << mi.var << "value, " <<
- "i." << mi.var << "null);"
+ << member << "," << endl
+ << "i." << mi.var << "value," << endl
+ << "i." << mi.var << "null);"
<< endl;
}
@@ -896,8 +909,9 @@ namespace relational
traverse_date_time (member_info& mi)
{
os << traits << "::set_value (" << endl
- << member << ", i." << mi.var << "value, " <<
- "i." << mi.var << "null);"
+ << member << "," << endl
+ << "i." << mi.var << "value," << endl
+ << "i." << mi.var << "null);"
<< endl;
}
@@ -942,8 +956,9 @@ namespace relational
traverse_uuid (member_info& mi)
{
os << traits << "::set_value (" << endl
- << member << ", i." << mi.var << "value, " <<
- "i." << mi.var << "null);"
+ << member << "," << endl
+ << "i." << mi.var << "value," << endl
+ << "i." << mi.var << "null);"
<< endl;
}
@@ -1190,7 +1205,7 @@ namespace relational
{
// many(i)-to-many
//
- if (container_wrapper (inv_m->type ()))
+ if (container_wrapper (utype (*inv_m)))
os << oids[column_sql_type (*inv_m, "value").type];
// many(i)-to-one