TitaniumでMigrationを行う

  • 2
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Titanium SDK:3.5.0GA
Alloy:1.5.1

Alloy で Migration

AlloyでデータベースのMigrationを行う。
どうやら、app/migrationsの下に、YYYYMMDDHHmmss_database.jsというファイルを置いて、中にデータやマイグレーションの方法を書いていくようだ。

詳しいことは Alloy Sync Adapters and Migrations を読もう。

例えば、photoというmodelに対し、マイグレーションデータを挿入する場合、以下のようになる。

  • photo.js (model)
exports.definition = {
    config : {
        columns : {
            "created_at" : "text",
            "updated_at" : "text",
            "photo" : "text",
            "favorite" : "integer",
            "title" : "text"
        },
        adapter : {
            type : "sql",
            collection_name : "photo",
        }
    },
    extendModel : function(Model) {
        _.extend(Model.prototype, {

        });

        return Model;
    },
    extendCollection : function(Collection) {
        _.extend(Collection.prototype, {
            // extended functions and properties go here
        });

        return Collection;
    }
}; 
  • 20150131049885_photo.js (migration file)
var preload_data = [{
    "created_at" : "1422712997727",
    "updated_at" : "1422712997727",
    "photo" : "1422712997727",
    "favorite" : 0,
    "title" : "タイトル1"
}, {
    "created_at" : '1422713050036',
    "updated_at" : '1422713050036',
    "photo" : '1422713050036',
    "favorite" : 0,
    "title" : "タイトル2"
}, {
    "created_at" : '1422713074352',
    "updated_at" : '1422713074352',
    "photo" : '1422713074352',
    "favorite" : 0,
    "title" : "タイトル3"
}];

migration.up = function(migrator) {
    migrator.createTable({
        columns : {
            "created_at" : "text",
            "updated_at" : "text",
            "photo" : "text",
            "favorite" : "integer",
            "title" : "text"
        },
    });
    for (var i = 0; i < preload_data.length; i++) {
        migrator.insertRow(preload_data[i]);
        // ここで別の処理を入れることも可能
    }
};

migration.down = function(migrator) {
    migrator.dropTable();
};

これで、アプリがバージョンアップとかされた時に1回だけ実行される。
適切な場所とファイルを設置しておくばよろしくやってくれるっぽい。

余談 - Migrationってどうやって管理してんの?

Migrationの管理はSQLiteで管理されているっぽい。
iOS Simulatorのアプリフォルダ配下に Library/Private Documents/_alloy_.sql というファイルがあり、この中を眺めてみるとmigrationsというテーブルが有る。
中身はlatest, modelとなっているので、どこまでMigrationしたのかをここで管理しているっぽい。

以上、Migrationについての話でした。
間違っていたら斧投げて下さい。