X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzsets.c;h=7bb569d79c7ce39a5599589ae4b29b07a353184c;hb=9b4f970d2816490fa4cc850fabc51f494ee5612b;hp=d2ebf5f66b15cb7ca9a2441c616c5ea76c9bfa1f;hpb=1c3797bc503c1e7a109c8887d89d3ddda93bba71;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index d2ebf5f..7bb569d 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: zsets.c,v $ - * Revision 1.28 2000-07-07 12:49:20 adam + * Revision 1.29 2001-01-22 10:42:56 adam + * Added numerical sort. + * + * Revision 1.28 2000/07/07 12:49:20 adam * Optimized resultSetInsert{Rank,Sort}. * * Revision 1.27 2000/04/05 09:49:36 adam @@ -371,6 +374,7 @@ void zebraPosSetDestroy (ZebraHandle zh, ZebraPosSet records, int num) struct sortKeyInfo { int relation; int attrUse; + int numerical; }; void resultSetInsertSort (ZebraHandle zh, ZebraSet sset, @@ -394,8 +398,21 @@ void resultSetInsertSort (ZebraHandle zh, ZebraSet sset, int rel = 0; for (j = 0; jentries[i]->buf[j], + if (criteria[j].numerical) + { + double diff = atof(this_entry.buf[j]) - + atof(sort_info->entries[i]->buf[j]); + rel = 0; + if (diff > 0.0) + rel = 1; + else if (diff < 0.0) + rel = -1; + } + else + { + rel = memcmp (this_entry.buf[j], sort_info->entries[i]->buf[j], SORT_IDX_ENTRYSIZE); + } if (rel) break; } @@ -580,7 +597,8 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, logf (LOG_DEBUG, "Sort: key %d is of type sortAttributes", i+1); sort_criteria[i].attrUse = zebra_maps_sort (zh->service->zebra_maps, - sk->u.sortAttributes); + sk->u.sortAttributes, + &sort_criteria[i].numerical); logf (LOG_DEBUG, "use value = %d", sort_criteria[i].attrUse); if (sort_criteria[i].attrUse == -1) {