diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2013-05-06 12:05:39 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2013-08-14 15:19:49 +0200 |
commit | 09d7377f81aeb8fde4aa1698e946457f03380d45 (patch) | |
tree | eaedf7045fde8354a3693ce77edc7d5f86824e4e /odb/common.hxx | |
parent | 548f0b10aa3adfc722198bf31f773ba85047f344 (diff) |
Add support for object sections
Sections are an optimization mechanism that allows the partitioning of
data members of a persistent class into groups that can be separately
loaded and/or updated.
Diffstat (limited to 'odb/common.hxx')
-rw-r--r-- | odb/common.hxx | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/odb/common.hxx b/odb/common.hxx index 5ca5107..c4ecbaf 100644 --- a/odb/common.hxx +++ b/odb/common.hxx @@ -67,9 +67,13 @@ struct object_members_base: traversal::class_, virtual context virtual void traverse_view (semantics::class_&); + virtual bool + section_test (data_member_path const&); + public: - object_members_base (bool traverse_poly_base = false) - : top_level_ (true), member_ (*this) + object_members_base (bool traverse_poly_base = false, + object_section* section = 0) + : section_ (section), top_level_ (true), member_ (*this) { init (false, false, false, traverse_poly_base); } @@ -77,8 +81,9 @@ public: object_members_base (bool build_flat_prefix, bool build_table_prefix, bool build_member_prefix, - bool traverse_poly_base = false) - : top_level_ (true), member_ (*this) + bool traverse_poly_base = false, + object_section* section = 0) + : section_ (section), top_level_ (true), member_ (*this) { init (build_flat_prefix, build_table_prefix, @@ -88,6 +93,7 @@ public: object_members_base (object_members_base const& x) : context (), //@@ -Wextra + section_ (x.section_), top_level_ (true), member_ (*this) { @@ -108,6 +114,8 @@ protected: data_member_path member_path_; data_member_scope member_scope_; + object_section* section_; + protected: semantics::data_member* id () const @@ -138,10 +146,7 @@ private: struct member: traversal::data_member { - member (object_members_base& om) - : om_ (om) - { - } + member (object_members_base& om): om_ (om) {} virtual void traverse (semantics::data_member&); @@ -211,10 +216,15 @@ struct object_columns_base: traversal::class_, virtual context virtual void flush (); + virtual bool + section_test (data_member_path const&); + public: object_columns_base (bool first = true, - column_prefix const& cp = column_prefix ()) + column_prefix const& cp = column_prefix (), + object_section* section = 0) : column_prefix_ (cp), + section_ (section), root_ (0), traverse_poly_base_ (false), first_ (first), @@ -224,8 +234,11 @@ public: init (); } - object_columns_base (bool first, bool traverse_poly_base) - : root_ (0), + object_columns_base (bool first, + bool traverse_poly_base, + object_section* section = 0) + : section_ (section), + root_ (0), traverse_poly_base_ (traverse_poly_base), first_ (first), top_level_ (true), @@ -237,6 +250,7 @@ public: object_columns_base (object_columns_base const& x) : context (), //@@ -Wextra column_prefix_ (x.column_prefix_), + section_ (x.section_), root_ (0), traverse_poly_base_ (x.traverse_poly_base_), first_ (x.first_), @@ -274,6 +288,8 @@ protected: data_member_path member_path_; data_member_scope member_scope_; + object_section* section_; + protected: semantics::data_member* id () const |