From 1f777ed4b8cc816817e1ce6cb8d9af970ad9b423 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 2 Nov 2012 12:18:43 +0200 Subject: Rework query alias tag system Now each object pointer or view-associated object with alias gets its own unique tag. --- odb/relational/common.hxx | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'odb/relational/common.hxx') diff --git a/odb/relational/common.hxx b/odb/relational/common.hxx index b951d15..1e7143f 100644 --- a/odb/relational/common.hxx +++ b/odb/relational/common.hxx @@ -222,33 +222,32 @@ namespace relational } }; - // Generate alias tags and alias_traits specializations for pointers - // in this objects. + // Generate alias_traits specializations for pointers in this objects. // struct query_alias_traits: object_columns_base, virtual context { typedef query_alias_traits base; - query_alias_traits (std::set& tags, std::set& specs) - : tags_ (tags), specs_ (specs) {} + query_alias_traits (semantics::class_&, bool decl); virtual void traverse_object (semantics::class_&); virtual void + traverse_composite (semantics::data_member*, semantics::class_&); + + virtual void traverse_pointer (semantics::data_member&, semantics::class_&); virtual void - generate (string const& alias, semantics::class_&); + generate_decl (string const& tag, semantics::class_&); - private: - void - generate_specialization (string const& alias, - string const& tag, - semantics::class_&); + virtual void + generate_def (string const& tag, semantics::class_&, string const& alias); - std::set& tags_; - std::set& specs_; + protected: + bool decl_; + string scope_; }; // @@ -257,8 +256,7 @@ namespace relational { typedef query_columns_base base; - query_columns_base (); - query_columns_base (semantics::class_&); + query_columns_base (semantics::class_&, bool decl); virtual void traverse_object (semantics::class_&); @@ -272,6 +270,7 @@ namespace relational protected: bool decl_; string scope_; + string tag_scope_; }; // -- cgit v1.1