aboutsummaryrefslogtreecommitdiff
path: root/odb/database.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-09-12 13:01:49 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-09-12 13:01:49 +0200
commita051c451c178152dc0b37bf955bf60022d226843 (patch)
treec7efcf5f5a62499c0a39c87bb6cb26690216d5f2 /odb/database.cxx
parent6d7abb297bf7a4dcef4f90b4dfb3d46b7977e526 (diff)
Optimize schema version access for default schema
Diffstat (limited to 'odb/database.cxx')
-rw-r--r--odb/database.cxx33
1 files changed, 33 insertions, 0 deletions
diff --git a/odb/database.cxx b/odb/database.cxx
index ad71b4f..c9692ba 100644
--- a/odb/database.cxx
+++ b/odb/database.cxx
@@ -4,6 +4,8 @@
#include <odb/database.hxx>
+using namespace std;
+
namespace odb
{
database::
@@ -17,4 +19,35 @@ namespace odb
connection_type& c (transaction::current ().connection ());
return c.execute (st, n);
}
+
+ const database::schema_version_info& database::
+ schema_version_migration_ (const string& name) const
+ {
+ schema_version_map::const_iterator i (schema_version_map_.find (name));
+ const schema_version_info& svi (
+ i != schema_version_map_.end () && i->second.version != 0
+ ? i->second
+ : load_schema_version (name));
+
+ if (default_schema_version_ == 0 && name.empty ())
+ default_schema_version_ = &svi;
+
+ return svi;
+ }
+
+ void database::
+ schema_version_migration (const schema_version_migration_type& svm,
+ const string& name)
+ {
+ schema_version_info& svi (schema_version_map_[name]);
+ if (svi.version != svm.version || svi.migration != svm.migration)
+ {
+ svi.version = svm.version;
+ svi.migration = svm.migration;
+ schema_version_seq_++;
+ }
+
+ if (default_schema_version_ == 0 && name.empty ())
+ default_schema_version_ = &svi;
+ }
}