[odb-users] Data migration question
Andrew Cunningham
odb at a-cunningham.com
Tue Sep 29 11:42:06 EDT 2020
Thanks, you are confirming what I expect to happen.
If the database being migrated is at version 2, and the current database
version is at version 3 *or greater*, then 2->3 migration entries will be
called.
On Tue, Sep 29, 2020 at 7:07 AM Boris Kolpackov <boris at codesynthesis.com>
wrote:
> Andrew Cunningham <odb at a-cunningham.com> writes:
>
> > The documentation is not 100% clear on one point about data migration.
> >
> > As per the example, this function migrates some object types in the
> > database from any version in the range [MYAPP_BASE_VERSION,2] to version
> 3
> >
> > static const odb::data_migration_entry<3, MYAPP_BASE_VERSION>
> > migrate_gender_entry (&migrate_gender);
>
> Not exactly: this function is called if and when migrating from version
> 2 to version 3. The second template argument is there to detect when this
> entry is no longer necessary. Quoting the manual:
>
> "The first template argument to the data_migration_entry class template is
> the
> version we want this data migration function to be called for. The second
> template argument is the base model version. This second argument is
> necessary to detect the situation where we no longer need this data
> migration
> function. Remember that when we move the base model version forward,
> migrations from any version below the new base are no longer possible. We,
> however, may still have migration functions registered for those lower
> versions. Since these functions will never be called, they are effectively
> dead code and it would be useful to identify and remove them. [...]"
>
>
> > What is not 100% clear is what happens when the current database version
> is
> > >3 ( say 4). Will this function still be called to migrate the objects or
> > do I need to update it to
> >
> > static const odb::data_migration_entry<4, MYAPP_BASE_VERSION>
> > migrate_gender_entry (&migrate_gender);
>
> Normally not. This entry is a migration "step" when migrating from version
> 2 to version 3. If the database is currently at version 2, then it will
> be called for the 2->3 step (which will then be followed by 3->4). If,
> however, the database is already at version 3 then presumably the data
> is already in the desired state (from this step's point of view).
>
More information about the odb-users
mailing list