[mew-dist 29471] cmew sometimes stores id as blob

Kei Tsuji ktsujister at example.com
2012年 3月 19日 (月) 20:20:49 JST


辻と申します。

再びVがメールを集めてくれなくなったので、調べていたのですが、
cmewがid.dbにデータを保存する際に、一部のmessage-idが長過ぎたからか、
blobで保存されていました。
ちなみに、当該メールは76 bytesのmessage-idでした。
このため、
select * from mew where id={id}というSQLがヒットしていませんでした。

Typeを確認したSQL:
select typeof(id) from mew where date={date};

私の環境:
----------
% uname -a
Darwin ktsuji-gnmb.local 11.3.0 Darwin Kernel Version 11.3.0: Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64
% ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]
% sqlite3 -version
3.7.10 2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204
% gem list sqlite3

*** LOCAL GEMS ***

sqlite3 (1.3.5)
----------

以下のパッチで直るようになりました。

diff --git a/bin/cmew b/bin/cmew
index d44abde..c9ac3bb 100755
--- a/bin/cmew
+++ b/bin/cmew
@@ -144,7 +144,7 @@ end

 def register(db, maildir, ignore_regex, target, last_mod)
   Dir.chdir(maildir)
-  add_entry = db.prepare('INSERT INTO mew VALUES(:id, :path, :parid, :date);')
+  add_entry = db.prepare('INSERT INTO mew VALUES(cast(:id as text), :path, :parid, :date);')
   get_entry = db.prepare('SELECT * FROM mew WHERE id = ?;')
   del_entry = db.prepare('DELETE FROM mew WHERE id = ? AND path = ?;')
   db.results_as_hash = true

-- 
ktsuji


Mew-dist メーリングリストの案内