Firefox3.6からFirefox4にcookies.sqliteとplaces.sqliteが引き継げなかった原因が判明
原因は分かったけど、どうしよう。
変換プログラム作るか?Firefoxを箒するか?
原因はおそらく肥大化するplaces.sqliteやcookies.sqliteを軽くしてFirefoxの起動を速くしようとしたSQLite Manager または sqlite3 による両ファイルのreindexとvacuumが原因ではないかと推測される。
私のFirefox3.6のcookies.sqliteとplaces.sqliteのschemaと、sqliteファイルをいじっていない人の両ファイルのschemaを見比べたら一部に違いがあった。
私のcookies.sqlite
CREATE TABLE moz_cookies (id INTEGER PRIMARY KEY, name TEXT, value TEXT, host TEXT, path TEXT,expiry INTEGER, lastAccessed INTEGER, isSecure INTEGER, isHttpOnly INTEGER, baseDomain TEXT);
手を加えてない人のcookies.sqlite
CREATE TABLE moz_cookies (id INTEGER PRIMARY KEY, name TEXT, value TEXT, host TEXT, path TEXT,expiry INTEGER, lastAccessed INTEGER, isSecure INTEGER, isHttpOnly INTEGER, baseDomain TEXT, creationTime INTEGER);
欠けた項目を保管した物を(元のcookies.sqliteの数行だが)新しいcookies.sqliteに仕立て上げてやったらFirefox4でもちゃんとcookieを認識した。
因みにFirefox4を起動するとschemaの形は上記とは順番が入れ替わったりする。
CREATE TABLE moz_cookies (id INTEGER PRIMARY KEY, baseDomain TEXT, name TEXT, value TEXT, host TEXT, path TEXT, expiry INTEGER, lastAccessed INTEGER, creationTime INTEGER, isSecure INTEGER, isHttpOnly INTEGER, CONSTRAINT moz_uniqueid UNIQUE (name, host, path));
(朝、sqlite3でschemaが見られないと書いたのはsqlite3のバージョンが古かったからで、最新にしたら見えた。)
そう言う訳で、下手にvacuumか何かしてしまったせいでFirefox4がお気に召さない形になってしまったcookies.sqliteとplaces.sqliteなのだが、プログラムを作れば何とかなりそうな感じではある(実はplaces.sqliteの方はもっと複雑に変わってしまっていて、cookies.sqlite程簡単ではない。が、機械的な違いである事は確か)。
最低限プログラムを組む迄は私の手近のFirefox3.6は全てこのままだ。
Firefox3.6とFirefox4を比べるとFirefox3.6時代はsqlite3.dllを使っていたのが、mozsqlite.dllに変更になっていたので.sqliteファイルの扱いモジュールが変更されて今回の現象となったと思われる。
追ってmozillaからこの件を何とかしてくれるバージョンがすぐに出ないかなあ・・・