From 9ad0acf37561de9bf359a561faed53de17c2ca3b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 21 Nov 2012 13:11:43 +0200 Subject: Add dynamic multi-database query support --- odb/common.hxx | 97 +++------------------------------------------------------- 1 file changed, 5 insertions(+), 92 deletions(-) (limited to 'odb/common.hxx') diff --git a/odb/common.hxx b/odb/common.hxx index b351d3d..7ce59a5 100644 --- a/odb/common.hxx +++ b/odb/common.hxx @@ -11,6 +11,7 @@ #include #include +#include // Traverse object members recursively by going into bases and // composite members. @@ -357,6 +358,8 @@ private: struct object_columns_list: object_columns_base { + typedef object_columns_list base; + object_columns_list (bool ignore_inverse = true) : ignore_inverse_ (ignore_inverse) { @@ -426,98 +429,8 @@ private: bool included_; }; -// Generate query tags for object pointers. +// Other common parts. // -struct query_tags: object_columns_base, virtual context -{ - typedef query_tags base; - - query_tags (): nl_ (false) {} - - virtual void - traverse (semantics::class_& c) - { - if (object (c)) - { - object_columns_base::traverse (c); - } - else if (c.get ("object-count") != 0) // View. - { - view_objects& objs (c.get ("objects")); - - for (view_objects::const_iterator i (objs.begin ()); - i < objs.end (); - ++i) - { - if (i->kind != view_object::object) - continue; // Skip tables. - - if (i->alias.empty ()) - continue; - - generate (i->alias); - } - } - - if (nl_) - os << endl; - } - - virtual void - traverse_object (semantics::class_& c) - { - names (c); // We don't want to traverse bases. - } - - virtual void - traverse_composite (semantics::data_member* m, semantics::class_& c) - { - // Base type. - // - if (m == 0) - { - object_columns_base::traverse_composite (m, c); - return; - } - - // Don't generate an empty struct if we don't have any pointers. - // - if (!has_a (c, test_pointer)) - return; - - if (nl_) - os << endl; - - os << "struct " << public_name (*m) << "_tag" - << "{"; - - object_columns_base::traverse_composite (m, c); - - os << "};"; - - nl_ = false; - } - - virtual void - traverse_pointer (semantics::data_member& m, semantics::class_&) - { - // Ignore polymorphic id references. - // - if (m.count ("polymorphic-ref")) - return; - - generate (public_name (m)); - } - - virtual void - generate (string const& name) - { - os << "struct " << name << "_tag;"; - nl_ = true; - } - -private: - bool nl_; -}; +#include #endif // ODB_COMMON_HXX -- cgit v1.1