From 7fb59e3beca03493426d0b4c4153d7e6b6d2f34b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 2 Sep 2013 08:33:25 +0200 Subject: Support for versioning simple value in object --- odb/database.ixx | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'odb/database.ixx') diff --git a/odb/database.ixx b/odb/database.ixx index 2fa57b3..3de5bbc 100644 --- a/odb/database.ixx +++ b/odb/database.ixx @@ -11,7 +11,7 @@ namespace odb { inline database:: database (database_id id) - : id_ (id), tracer_ (0) + : id_ (id), tracer_ (0), schema_version_seq_ (1) { } @@ -36,6 +36,10 @@ namespace odb inline const database::schema_version_migration_type& database:: schema_version_migration (const std::string& name) const { + // Note that there is code that relies on the returned reference + // being valid until the version is changed or the database instance + // is destroyed. + // schema_version_map::const_iterator i (schema_version_map_.find (name)); return i != schema_version_map_.end () && i->second.version != 0 ? i->second @@ -48,8 +52,12 @@ namespace odb const std::string& name) { schema_version_info& svi (schema_version_map_[name]); - svi.version = v; - svi.migration = m; + if (svi.version != v || svi.migration != m) + { + svi.version = v; + svi.migration = m; + schema_version_seq_++; + } } inline void database:: @@ -57,8 +65,12 @@ namespace odb const std::string& name) { schema_version_info& svi (schema_version_map_[name]); - svi.version = svm.version; - svi.migration = svm.migration; + if (svi.version != svm.version || svi.migration != svm.migration) + { + svi.version = svm.version; + svi.migration = svm.migration; + schema_version_seq_++; + } } inline void database:: @@ -73,6 +85,12 @@ namespace odb schema_version_map_[sname].version_table = tname; } + inline unsigned int database:: + schema_version_sequence () const + { + return schema_version_seq_; + } + inline connection_ptr database:: connection () { -- cgit v1.1