[groonga-dev,00233] grn_table_sort()がoffsetの値が0以外で呼ばれると完全にソートされない

Back to archive index

Ryo Onodera onode****@clear*****
2009年 10月 15日 (木) 17:47:59 JST


小野寺です。

マージしていただいたコミットについてなのですが、自分のmasterブランチに
は、まだこのメーリングリストで説明していないバグの修正やテストケースのコ
ミットが三つ混ざっていました。このメールではまず一つ目を説明し、残りの二
つについては、次以降のメールで説明します。

grn_table_sort()がoffsetの値が0以外で呼ばれた場合のテストケースを追加し
たところ完全にソートされない場合があることが分かりました。そのテストケー
スが以下に当たります。

add tests for grn_table_sort with offset and limit options
http://github.com/groonga/groonga/commit/fd84a489628e37629ab2825cac910b4212794b82
refine tests for grn_table_sort
http://github.com/groonga/groonga/commit/14105e7c4e29c35702cbcf185d2f2c3eee62c0f1

その後、このバグを修正するパッチを作成してみました。その修正が以下に当たります。

fix a bug in grn_table_sort with offset and limit options
http://github.com/groonga/groonga/commit/7fb4f96820a66ef4988d74c66cd2e149b469e7bb

ただ、いくつか気になる点がありました。しかしまだ自分はgroongaのコード
ベースに詳しくないので、もしかしたら間違っているのかもしれません。

1. resultに書き出すループ内の次のifが真になることは無いかもしれません。
なぜならば、pack()でsort_entryの配列を作成するときに、
grn_table_cursor_next()から返されてきたidがGRN_ID_NILの時はsort_entryの
配列にはrecordが追加されないように思えるからです。

if (!(*v = ep->id)) { break; }

2. _sort()の引数にoffsetも追加すれば、使われないと分かっているoffset個の
先頭のレコードのソート処理を省略できるかもしれません。

以上がマージされているコミットの中のうちの一つ目のバグに関する説明です。

そのマージの後、このバグのテストケースを簡潔にしたコミットを作成し、私の
masterブランチにpushしましたので、pullして頂けると幸いです。

make test_array_sort() use gcut_add_datum()
http://github.com/ryoqun/groonga/commit/ff3ec6edc195f915bf773c5b6114cb70095ac613

今度からは私のmasterにはupstream用のコミットのみをpushするように気をつけ
ます。

-- 
小野寺 諒 <onode****@clear*****>
株式会社クリアコード (http://www.clear-code.com/)




groonga-dev メーリングリストの案内
Back to archive index