aboutsummaryrefslogtreecommitdiff
path: root/odb/common.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-03-21 08:36:21 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-04-23 16:50:56 +0200
commit8d89bf37dd4ef3cb7373e1841ff57a53916fff0d (patch)
tree704b7de0338eba0e008a96a09b6d57e86846d1b1 /odb/common.hxx
parent68ff21c56fb287790440208907ad2a851a108f89 (diff)
Polymorphic inheritance support
Diffstat (limited to 'odb/common.hxx')
-rw-r--r--odb/common.hxx37
1 files changed, 28 insertions, 9 deletions
diff --git a/odb/common.hxx b/odb/common.hxx
index ffbd2d6..bc45d00 100644
--- a/odb/common.hxx
+++ b/odb/common.hxx
@@ -67,25 +67,33 @@ struct object_members_base: traversal::class_, virtual context
traverse_view (semantics::class_&);
public:
- object_members_base ()
- : member_ (*this)
+ object_members_base (bool traverse_poly_base = false)
+ : top_level_ (true), member_ (*this)
{
- init (false, false, false);
+ init (false, false, false, traverse_poly_base);
}
object_members_base (bool build_flat_prefix,
bool build_table_prefix,
- bool build_member_prefix)
- : member_ (*this)
+ bool build_member_prefix,
+ bool traverse_poly_base = false)
+ : top_level_ (true), member_ (*this)
{
- init (build_flat_prefix, build_table_prefix, build_member_prefix);
+ init (build_flat_prefix,
+ build_table_prefix,
+ build_member_prefix,
+ traverse_poly_base);
}
object_members_base (object_members_base const& x)
: context (), //@@ -Wextra
+ top_level_ (true),
member_ (*this)
{
- init (x.build_flat_prefix_, x.build_table_prefix_, x.build_member_prefix_);
+ init (x.build_flat_prefix_,
+ x.build_table_prefix_,
+ x.build_member_prefix_,
+ x.traverse_poly_base_);
}
virtual void
@@ -117,11 +125,13 @@ private:
void
init (bool build_flat_prefix,
bool build_table_prefix,
- bool build_member_prefix)
+ bool build_member_prefix,
+ bool traverse_poly_base)
{
build_flat_prefix_ = build_flat_prefix;
build_table_prefix_ = build_table_prefix;
build_member_prefix_ = build_member_prefix;
+ traverse_poly_base_ = traverse_poly_base;
*this >> names_ >> member_;
*this >> inherits_ >> *this;
@@ -149,6 +159,10 @@ private:
bool build_table_prefix_;
bool build_member_prefix_;
+ bool traverse_poly_base_;
+
+ bool top_level_;
+
member member_;
traversal::names names_;
traversal::inherits inherits_;
@@ -204,9 +218,11 @@ struct object_columns_base: traversal::class_, virtual context
public:
object_columns_base (bool first = true,
- string const& column_prefix = string ())
+ string const& column_prefix = string (),
+ bool traverse_poly_base = false)
: column_prefix_ (column_prefix),
root_ (0),
+ traverse_poly_base_ (traverse_poly_base),
first_ (first),
top_level_ (true),
member_ (*this)
@@ -218,6 +234,7 @@ public:
: context (), //@@ -Wextra
column_prefix_ (x.column_prefix_),
root_ (0),
+ traverse_poly_base_ (x.traverse_poly_base_),
first_ (x.first_),
top_level_ (true),
member_ (*this)
@@ -321,6 +338,8 @@ private:
object_columns_base& oc_;
};
+ bool traverse_poly_base_;
+
bool first_;
bool top_level_;