diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-09-29 11:33:08 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-09-29 11:33:08 +0200 |
commit | 1095648630d3b8d67c94d84004da085a5a93fc0d (patch) | |
tree | 298c90a488b4b3ec26e550611c216abb7c274b60 /odb/common-query.cxx | |
parent | 7ac7872103a868f4232f4284aeefc1762bd75a89 (diff) |
Initial take on virtual see-through memberssee_through_member
Notes:
1. Probably better to have a separate marker, like transient.
2. No reason to limit this to virtual members.
3. Probably makes sense to also automatically set column to empty.
Diffstat (limited to 'odb/common-query.cxx')
-rw-r--r-- | odb/common-query.cxx | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/odb/common-query.cxx b/odb/common-query.cxx index 22407fc..df2e92f 100644 --- a/odb/common-query.cxx +++ b/odb/common-query.cxx @@ -41,7 +41,9 @@ struct query_nested_types: object_columns_base, virtual context virtual void traverse_composite (semantics::data_member* m, semantics::class_& c) { - if (m != 0) + // Virtual data members that start with an underscore are "see-through". + // + if (m != 0 && (!m->count ("virtual") || m->name ()[0] != '_')) { string name (prefix_ + public_name (*m)); name += in_ptr_ ? "_column_class" : "_class"; @@ -172,9 +174,10 @@ traverse_object (semantics::class_& c) void query_tags:: traverse_composite (semantics::data_member* m, semantics::class_& c) { - // Base type. + // Base type or a virtual data member that starts with an underscore + // ("see-through"). // - if (m == 0) + if (m == 0 || (m->count ("virtual") && m->name ()[0] == '_')) { object_columns_base::traverse_composite (m, c); return; @@ -242,9 +245,10 @@ traverse_object (semantics::class_& c) void query_alias_traits:: traverse_composite (semantics::data_member* m, semantics::class_& c) { - // Base type. + // Base type or a virtual data member that starts with an underscore + // ("see-through"). // - if (m == 0) + if (m == 0 || (m->count ("virtual") && m->name ()[0] == '_')) { object_columns_base::traverse_composite (m, c); return; @@ -361,9 +365,10 @@ traverse_object (semantics::class_& c) void query_columns_base:: traverse_composite (semantics::data_member* m, semantics::class_& c) { - // Base type. + // Base type or a virtual data member that starts with an underscore + // ("see-through"). // - if (m == 0) + if (m == 0 || (m->count ("virtual") && m->name ()[0] == '_')) { object_columns_base::traverse_composite (m, c); return; @@ -516,9 +521,10 @@ traverse_object (semantics::class_& c) void query_columns:: traverse_composite (semantics::data_member* m, semantics::class_& c) { - // Base type. + // Base type or a virtual data member that starts with an underscore + // ("see-through"). // - if (m == 0) + if (m == 0 || (m->count ("virtual") && m->name ()[0] == '_')) { object_columns_base::traverse_composite (m, c); return; |