diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-10-19 10:47:41 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-10-21 19:25:06 +0200 |
commit | 6bd95f51beb26d87fd5d5db22391c73f333eee6e (patch) | |
tree | 59621cec994f55fce7a1ced5c3b9edb93a41b084 /odb/relational/pgsql/source.cxx | |
parent | 7623fb5259da19c33ffe6623b0f306f6c39ede27 (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.cxx | 49 |
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 |