diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2013-09-10 14:09:54 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2013-09-10 14:09:54 +0200 |
commit | 5ecb61d9ee61a53ddbba6b9dea93e7a4adc448b8 (patch) | |
tree | 825ac9d4048faa0044f389bc6dd8e270731a0176 /odb/relational/mysql | |
parent | a2bd159c93aced832cae1927c32703d3306d1b03 (diff) |
Schema versioning support for rest of database
Diffstat (limited to 'odb/relational/mysql')
-rw-r--r-- | odb/relational/mysql/source.cxx | 59 |
1 files changed, 56 insertions, 3 deletions
diff --git a/odb/relational/mysql/source.cxx b/odb/relational/mysql/source.cxx index e9cb6cc..df7f19c 100644 --- a/odb/relational/mysql/source.cxx +++ b/odb/relational/mysql/source.cxx @@ -327,15 +327,68 @@ namespace relational e = ostr.str (); if (var_override_.empty ()) + { os << "// " << mi.m.name () << endl << "//" << endl; + // If the member is soft- added or deleted, check the version. + // + unsigned long long av (added (mi.m)); + unsigned long long dv (deleted (mi.m)); + + // If the addition/deletion version is the same as the section's, + // then we don't need the test. + // + if (user_section* s = dynamic_cast<user_section*> (section_)) + { + if (av == added (*s->member)) + av = 0; + + if (dv == deleted (*s->member)) + dv = 0; + } + + if (av != 0 || dv != 0) + { + os << "if ("; + + if (av != 0) + os << "svm >= schema_version_migration (" << av << "ULL, true)"; + + if (av != 0 && dv != 0) + os << " &&" << endl; + + if (dv != 0) + os << "svm <= schema_version_migration (" << dv << "ULL, true)"; + + os << ")" + << "{"; + } + } + return true; } virtual void post (member_info& mi) { + if (var_override_.empty ()) + { + unsigned long long av (added (mi.m)); + unsigned long long dv (deleted (mi.m)); + if (user_section* s = dynamic_cast<user_section*> (section_)) + { + if (av == added (*s->member)) + av = 0; + + if (dv == deleted (*s->member)) + dv = 0; + } + + if (av != 0 || dv != 0) + os << "}"; + } + if (semantics::class_* c = composite (mi.t)) index_ += column_count (*c).total; else @@ -347,10 +400,10 @@ namespace relational { os << "if (composite_value_traits< " << mi.fq_type () << ", id_mysql >::grow (" << endl - << "i." << mi.var << "value, t + " << index_ << "UL))" - << "{" + << "i." << mi.var << "value, t + " << index_ << "UL" << + (versioned (*composite (mi.t)) ? ", svm" : "") << "))" << endl << "grew = true;" - << "}"; + << endl; } virtual void |