dashmarkのバージョンアップ

dashmarkをバージョンアップしました。ブックマークレットも更新しています。dashmarkBookmarkletに更新してください(ブックマークレットもドライバだけにしてサーバに置けるようにしておこう)。

データベースのバージョンアップ処理(changeVersion()を用いた処理)

今回のバージョンアップのために、Client side databaseのバージョンアップ処理を行いました。。
サーバサイドデータベースの場合は自分で管理しているデータベースを直接編集すればいいけれど、Client-side databaseストレージの場合はアプリケーション側で更新する必要があります。
今回はtitleというコラムの追加を行いました。ソースコードを以下に示します。太字の部分がHTML 5のClient-side database storageで提案されているchangeVersion()を用いたバージョンアップ処理です。

データベースは正しくバージョンアップされるのですが、Safariがデータベースをキャッシュしてしまっているので、継続してバージョンアップしたデータベースを使うことができません。とりあえず再起動してもらうことにしていますが、正しい方法があるのかもしれません。


try {
if (window.openDatabase) {
var dbname = "bm_comments";
if(development) dbname += "_dev";
db = openDatabase(dbname,"1.1","[database名]",200000);
if (!db)
alert("何らかの問題あり");
} else
alert("データベースに対応していない(あるいは無効にしている)旨の警告");
} catch(err){
db = null;//データベースの初期化(意味があるのかどうか分からないですが……)
db = openDatabase(dbname,"","[database名]",200000);
//データベースをバージョン未指定で開く
db.changeVersion("1.0", "1.1",//1.0から1.1にバージョンアップする
function(tx){
alert('データベースのバージョンアップを行います。');
tx.executeSql("ALTER TABLE ELEMENT_DB ADD title TEXT");
//テーブルにtitleカラムを追加する処理を行った。
//本当ならここでselect title fromなどを実行しておいてエラーを出すと
//より確実になる、はず。でも、transactionをネスとしていいのかどうかわからない。
},
function(err){
alert("データベースのバージョンアップに失敗しました。
\n" + err + "ERROR");
//バージョンアップに失敗したときの処理を書く。手の打ちようがない
//ので告知のみ……ごめん。
},
function(){
alert("データベースのバージョンアップに成功しました。
\nSafariを再起動してください。");
//バージョンアップに成功したときの処理
db = null;
}
);

}

dashmarkについて

dashmarkSafari 3.1で搭載されたclient-side database storageを利用するコンセプトを示すサンプルアプリケーションです。いかなる意味での機能保証もいたしません。

追記

ブックマークレットのリンクタグを修正しました。isanaさん、感謝です。