diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2013-09-12 06:56:02 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2013-09-12 06:56:02 +0200 |
commit | c3c42b69ee9cda9634573497c4476a05c1f3d049 (patch) | |
tree | ecdfa79a83653b4f8286fb3c0ca4b249a51c8129 /odb/context.hxx | |
parent | 5ecb61d9ee61a53ddbba6b9dea93e7a4adc448b8 (diff) |
Make sure that soft-add/delete version is current version
Diffstat (limited to 'odb/context.hxx')
-rw-r--r-- | odb/context.hxx | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/odb/context.hxx b/odb/context.hxx index 416c7c6..f188a41 100644 --- a/odb/context.hxx +++ b/odb/context.hxx @@ -136,9 +136,10 @@ struct default_value }; }; -// Database potentially-qualified name. +// Database potentially-qualified and unqualifed names. // using semantics::relational::qname; +using semantics::relational::uname; // Object or table associated with the view. // @@ -771,6 +772,28 @@ public: return r; } + static semantics::data_member* + deleted_member (data_member_path const& mp) + { + semantics::data_member* m (0); + + // Find the earliest version since this member was deleted. + // + unsigned long long r (0); + for (data_member_path::const_reverse_iterator i (mp.rbegin ()); + i != mp.rend (); ++i) + { + unsigned long long v ((*i)->get<unsigned long long> ("deleted", 0)); + if (v != 0 && (r == 0 || v < r)) + { + r = v; + m = *i; + } + } + + return m; + } + // Return the addition version or 0 if not soft-added. // static unsigned long long @@ -797,6 +820,28 @@ public: return r; } + static semantics::data_member* + added_member (data_member_path const& mp) + { + semantics::data_member* m (0); + + // Find the latest version since this member was added. + // + unsigned long long r (0); + for (data_member_path::const_reverse_iterator i (mp.rbegin ()); + i != mp.rend (); ++i) + { + unsigned long long v ((*i)->get<unsigned long long> ("added", 0)); + if (v != 0 && v > r) + { + r = v; + m = *i; + } + } + + return m; + } + static bool id (semantics::data_member& m) { |