2008年10月 7日

[mew-dist 28650] Re: cmew

Message-Id: <20081007.153125.235203375.kazu@xxxxx>
Date: Tue, 07 Oct 2008 15:31:25 +0900 (JST)
From: Kazu Yamamoto (山本和彦) <kazu@xxxxx>
Subject: [mew-dist 28649] cmew

| というわけで、cmew を変更したところ、"V" などが劇的に速くなりました。

「Generation search algorithm for smew」が不要なほど速くなったので

quoteの問題をスマートなplace-holder '?'で直すパッチです。

Index: smew
===================================================================
RCS file: /cvsmew/mew/bin/smew,v
retrieving revision 1.8
diff -u -p -r1.8 smew
--- smew 24 Sep 2008 05:47:30 -0000 1.8
+++ smew 7 Oct 2008 09:22:28 -0000
@@ -15,13 +15,9 @@ require 'sqlite3'
## DB search
##

-def xxquote(s)
- s ? SQLite3::Database.quote(s) : nil
-end
-
def select_by_id(hash, db, id, mydir)
ret = nil
- db.execute("SELECT * FROM mew WHERE (mew.id = '#{xxquote(id)}');") do |ent|
+ db.execute("SELECT * FROM mew WHERE (mew.id = ?);", id) do |ent|
if push_results(hash, ent, mydir)
ret = ent
end
@@ -29,16 +25,9 @@ def select_by_id(hash, db, id, mydir)
return ret
end

-def select_by_parid(hash, db, idvec, mydir)
+def select_by_parid(hash, db, id, mydir)
ret = []
- cond = ""
- idvec.each do |id|
- if cond != ""
- cond += " OR "
- end
- cond += "mew.parid = '#{xxquote(id)}'"
- end
- db.execute("SELECT * FROM mew WHERE (#{cond});") do |ent|
+ db.execute("SELECT * FROM mew WHERE (mew.parid = ?);", id) do |ent|
if push_results(hash, ent, mydir)
ret.push(ent)
end
@@ -91,13 +80,13 @@ def search_ancestors(hash, db, parid, my
end

def search_descendants(hash, db, myid, mydir)
- parents = select_by_parid(hash, db, [myid], mydir)
+ parents = select_by_parid(hash, db, myid, mydir)
while parents != []
- idvec = []
+ children = []
parents.each do |ent|
- idvec.push(ent['id'])
+ children += select_by_parid(hash, db, ent['id'], mydir)
end
- parents = select_by_parid(hash, db, idvec, mydir)
+ parents = children
end
end

--
KOIE Hidetaka <hide@xxxxx>


投稿者 xml-rpc : 2008年10月 7日 18:24
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/77874
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。