ODBマニュアルchを読みました。13 で、データベースのバージョンを移行しようとしています。13.2 章の最後のサンプルを使用します。
schema_version v (db.schema_version ());
schema_version bv (schema_catalog::base_version (db));
schema_version cv (schema_catalog::current_version (db));
if (v == 0)
{
// No schema in the database. Create the schema and
// initialize the database.
//
transaction t (db.begin ());
schema_catalog::create_schema (db);
// Populate the database with initial data, if any.
t.commit ();
}
else if (v < cv)
{
// Old schema (and data) in the database, migrate them.
//
if (v < bv)
{
// Error: migration from this version is no longer supported.
}
for (v = schema_catalog::next_version (db, v);
v <= cv;
v = schema_catalog::next_version (db, v))
{
transaction t (db.begin ());
schema_catalog::migrate_schema_pre (db, v);
// Data migration goes here.
schema_catalog::migrate_schema_post (db, v);
t.commit ();
}
}
else if (v > cv)
{
// Error: old application trying to access new database.
}
しかし、データベースでこのコードを実行した後 (うまく機能し、正しく機能します)、データベースに新しく追加されたテーブル (クラス) はありません。次のように、新しいクラスにバージョン表記を追加しました。
#pragma db model version(2, 2, open)
古い(最初のバージョンのスキーム)では、クラスには次のような表記法があります。
#pragma db model version(1, 1, closed)
なぜ migrate_schema が新しいクラスのテーブルを作成しないのか? (データベースを削除すると、上記のコードはクラスを使用してデータベースを最初から正常に作成します)?