aboutsummaryrefslogtreecommitdiff
path: root/odb/database.ixx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-09-02 08:33:25 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-09-02 08:33:25 +0200
commit7fb59e3beca03493426d0b4c4153d7e6b6d2f34b (patch)
tree8e40e361dbd5f7c0dd9491e3c932887048760d21 /odb/database.ixx
parent0770beace3b6f944209417f1b4541fa31d443529 (diff)
Support for versioning simple value in object
Diffstat (limited to 'odb/database.ixx')
-rw-r--r--odb/database.ixx28
1 files changed, 23 insertions, 5 deletions
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 ()
{