Bug #288
XML形式でのHITSの数が、sortを行った場合に1offsetとなる。
| Status: | 完了 | Start: | 05/13/2010 | |
|---|---|---|---|---|
| Priority: | Urgent | Due date: | ||
| Assigned to: | % Done: | 0% |
||
| Category: | - | Spent time: | - | |
| Target version: | - |
Description
XMLでのHITSの数が、offsetを指定してsortを行った場合に必ず1から始まってしまう。
方式検討中。
History
Updated by Tasuku SUENAGA 4 months ago
- Assigned to changed from daijiro MORI to Tasuku SUENAGA
13ec7d35f8265fbc612c595ed5823392afc43d7b
にて対応。
- grn_select()は、結果の出力についてgrn_text_otoj()/grn_text_otoxml()の出力に依存している。
- grn_select()は、ソートキーが指定されているか・いないかによって2つのパスを通る。
- ソートされている場合には、grn_table_sort()を用いてソートが行われるが、このときにoffset/limitパラメータによって結果集合が部分集合となってしまう。その部分集合がgrn_text_otoxml()に渡される。このとき、offsetは0扱いとなる。なぜなら、offset処理はすでになされているからである。
- ソートされていない場合には、offset/limit処理が行われず、grn_text_otoxml()にてoffset/limitの処理を行う。
- 旧実装では、grn_text_otoxml()にて、HITSタグのOFFSET属性や、HITタグのNO属性の初期値は、offset + 1であった。ソートが行われた場合には、常にoffsetが0として呼び出される。よって、OFFSET属性やNO属性の初期値は必ず1かとなってしまう。
- grn_text_otoj()/grn_text_otoxml()に渡すformatに、あらたにhits_offsetというメンバを追加した。このメンバは、<HIT NO="">の値のオフセット-1の値が渡される。
- hits_offsetメンバも初期化できるように、GRN_OBJ_FORMAT_INITマクロに引数を1つ増やした。
- GRN_OBJ_FORMAT_INITマクロを使用しているところすべてに対して、適切なhits_offsetの値を指定するようにした。
- HITSタグのOFFSET属性/HITタグのNO属性の値は、hits_offsetの値を用いて表示するようにした。
問題は修正されたが、それほどきれいな修正方法ではない。
#306 にも書いたが、grn_text_otoj()/grn_text_otoxml()がformat引数をとってtableの細かい表現方法まで指定するのは、単に文字列・数値のgrn_objをJSON化・XMLテキスト化する用途では面倒である。
grn_table_otoj()のような「内部」APIを作って、そちらではformat引数をとる、というのはどうだろうか。
Updated by Tasuku SUENAGA 3 months ago
- Status changed from 新規 to 完了チェック待ち
Updated by Tasuku SUENAGA 3 months ago
sortbyが指定されていない場合に問題が生じるようになっていた。
ed46924fe5b6a7bb616fa9aa56bb655d5f56d426
にて修正。
Updated by daijiro MORI 3 months ago
- Status changed from 完了チェック待ち to 完了