From 08022a07eead928949be5581f1202a197bf68551 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 28 Aug 2013 07:52:50 +0200 Subject: Support for added and deleted data member pragmas --- odb/database.hxx | 11 +++++--- odb/database.ixx | 13 ++++++++- odb/forward.hxx | 11 ++------ odb/schema-catalog.cxx | 2 +- odb/schema-version.hxx | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+), 14 deletions(-) create mode 100644 odb/schema-version.hxx diff --git a/odb/database.hxx b/odb/database.hxx index a4ef058..ea5a37a 100644 --- a/odb/database.hxx +++ b/odb/database.hxx @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -349,9 +350,13 @@ namespace odb // Set schema version and migration state manually. // void - schema_version (schema_version_type, - bool migration, - const std::string& schema_name = ""); + schema_version_migration (schema_version_type, + bool migration, + const std::string& schema_name = ""); + + void + schema_version_migration (const schema_version_migration_type&, + const std::string& schema_name = ""); // Set default schema version table for all schema names. The table // name should already be quoted if necessary. diff --git a/odb/database.ixx b/odb/database.ixx index 817aebe..2fa57b3 100644 --- a/odb/database.ixx +++ b/odb/database.ixx @@ -43,7 +43,9 @@ namespace odb } inline void database:: - schema_version (schema_version_type v, bool m, const std::string& name) + schema_version_migration (schema_version_type v, + bool m, + const std::string& name) { schema_version_info& svi (schema_version_map_[name]); svi.version = v; @@ -51,6 +53,15 @@ namespace odb } inline void database:: + schema_version_migration (const schema_version_migration_type& svm, + const std::string& name) + { + schema_version_info& svi (schema_version_map_[name]); + svi.version = svm.version; + svi.migration = svm.migration; + } + + inline void database:: schema_version_table (const std::string& tname) { schema_version_table_ = tname; diff --git a/odb/forward.hxx b/odb/forward.hxx index 7a4cd98..c727215 100644 --- a/odb/forward.hxx +++ b/odb/forward.hxx @@ -28,15 +28,7 @@ namespace odb // // typedef unsigned long long schema_version; - - struct schema_version_migration - { - schema_version_migration (schema_version v = 0, bool m = false) - : version (v), migration (m) {} - - schema_version version; - bool migration; - }; + struct schema_version_migration; class database; class connection; @@ -49,6 +41,7 @@ namespace odb namespace common { using odb::schema_version; + using odb::schema_version_migration; using odb::session; using odb::section; } diff --git a/odb/schema-catalog.cxx b/odb/schema-catalog.cxx index fefb52c..8a5ce71 100644 --- a/odb/schema-catalog.cxx +++ b/odb/schema-catalog.cxx @@ -191,7 +191,7 @@ namespace odb // Update the schema version on the database instance. // - db.schema_version (v, m == migrate_pre, name); + db.schema_version_migration (v, m == migrate_pre, name); } void schema_catalog:: diff --git a/odb/schema-version.hxx b/odb/schema-version.hxx new file mode 100644 index 0000000..fc7ec0d --- /dev/null +++ b/odb/schema-version.hxx @@ -0,0 +1,73 @@ +// file : odb/schema-version.hxx +// copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC +// license : GNU GPL v2; see accompanying LICENSE file + +#ifndef ODB_SCHEMA_VERSION_HXX +#define ODB_SCHEMA_VERSION_HXX + +#include + +#include // schema_version +#include + +namespace odb +{ + struct LIBODB_EXPORT schema_version_migration + { + schema_version_migration (schema_version v = 0, bool m = false) + : version (v), migration (m) {} + + schema_version version; + bool migration; + }; + + // Version ordering is as follows: {1,f} < {2,t} < {2,f} < {3,t} + // + inline bool + operator== (const schema_version_migration& x, + const schema_version_migration& y) + { + return x.version == y.version && x.migration == y.migration; + } + + inline bool + operator!= (const schema_version_migration& x, + const schema_version_migration& y) + { + return !(x == y); + } + + inline bool + operator< (const schema_version_migration& x, + const schema_version_migration& y) + { + return x.version < y.version || + (x.version == y.version && x.migration && !y.migration); + } + + inline bool + operator> (const schema_version_migration& x, + const schema_version_migration& y) + { + return x.version > y.version || + (x.version == y.version && !x.migration && y.migration); + } + + inline bool + operator<= (const schema_version_migration& x, + const schema_version_migration& y) + { + return !(x > y); + } + + inline bool + operator>= (const schema_version_migration& x, + const schema_version_migration& y) + { + return !(x < y); + } +} + +#include + +#endif // ODB_SCHEMA_VERSION_HXX -- cgit v1.1