X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzsets.c;h=5187cf4ac10e5a736ca95379725c1331f1afe92d;hb=af102b1fb451ba27bfa7343528c4240b3ab3a80b;hp=a9067052d7f3d3a7a025739699dd10572331cabe;hpb=bdef6b61d9565342be2f314b5947ada0e2f2099a;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index a906705..5187cf4 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -576,10 +576,27 @@ void resultSetInsertSort(ZebraHandle zh, ZebraSet sset, criteria[i].ord[database_no]); zebra_sort_type(zh->reg->sort_index, criteria[i].ord[database_no]); wrbuf_rewind(w); - zebra_sort_read(zh->reg->sort_index, w); - memcpy(this_entry_buf, wrbuf_buf(w), - (wrbuf_len(w) >= SORT_IDX_ENTRYSIZE) ? - SORT_IDX_ENTRYSIZE : wrbuf_len(w)); + if (zebra_sort_read(zh->reg->sort_index, w)) + { + int off = 0; + while (off != wrbuf_len(w)) + { + assert(off < wrbuf_len(w)); + if (off == 0) + strcpy(this_entry_buf, wrbuf_buf(w)); + else if (criteria[i].relation == 'A') + { + if (strcmp(wrbuf_buf(w)+off, this_entry_buf) < 0) + strcpy(this_entry_buf, wrbuf_buf(w)+off); + } + else if (criteria[i].relation == 'D') + { + if (strcmp(wrbuf_buf(w)+off, this_entry_buf) > 0) + strcpy(this_entry_buf, wrbuf_buf(w)+off); + } + off += 1 + strlen(wrbuf_buf(w)+off); + } + } } else {