Kouhei Sutou
kou****@clear*****
2012年 3月 28日 (水) 12:34:42 JST
須藤です。 In <20120****@gmo-m*****> "[groonga-dev,00732] Re: SELECT COUNT(*)時に数値が取れない" on Wed, 28 Mar 2012 11:57:44 +0900, 河野 隆志 <takas****@gmo-m*****> wrote: >> masterで修正したので明日のリリースに含まれる予定です。 >> リリースバージョンを試してもらえると嬉しいです。 > なにか挙動不審になりえそうな箇所がありましたでしょうか? > 自分の環境だけで起こる現象なのかと思う節もあったものですから… いえ、一般的なmroongaの問題でした。 そのため、どの環境でも発生します。 最小のケースだと INSERT INTO diaries VALUES("Hello mroonga!"); INSERT INTO diaries VALUES("Hello groonga!"); SELECT COUNT(*) FROM diaries WHERE MATCH(title) AGAINST("mroonga" IN BOOLEAN MODE); で発生します。 初期化漏れがあり、INSERTやUPDATEなど内部でレコードを作成した り参照したりする処理が走ったあとにSELECT COUNT(*)を実行する と前の処理で使ったレコードが見えてしまっていました。 (↑の例だと"Hello groonga!"の方のレコード。) この、見えてしまったレコードがマッチしたレコードではない場合、 0件になっていました。 (↑の例で2番目のレコードも"Wow mroonga!"のように"mroonga"が 入っているレコードなら再現しない。) 今回の修正で、ちゃんと初期化してこのようなことが起こらないよ うになりました。 という感じでイメージを掴んでもらえるでしょうか。。。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) プログラミングが好きなソフトウェア開発者を募集中: http://www.clear-code.com/recruitment/