X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzsets.c;h=3d7b61d68f5a12cad5ee73e97e917fa2758d878b;hb=bd3a317131488141726cedfba9f86b9e479c5385;hp=5dd1eefe426a5bc07665c6171d0a319b0995a0e4;hpb=1369748dd7899789c97d94801048bf942e0cc6e6;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index 5dd1eef..3d7b61d 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,4 +1,4 @@ -/* $Id: zsets.c,v 1.104 2006-05-19 23:20:24 adam Exp $ +/* $Id: zsets.c,v 1.108 2006-06-22 15:07:20 adam Exp $ Copyright (C) 1995-2006 Index Data ApS @@ -556,8 +556,12 @@ void resultSetInsertSort (ZebraHandle zh, ZebraSet sset, sortIdx_sysno (zh->reg->sortIdx, sysno); for (i = 0; ireg->sortIdx, criteria[i].ord); - sortIdx_read (zh->reg->sortIdx, this_entry.buf[i]); + memset(this_entry.buf[i], '\0', SORT_IDX_ENTRYSIZE); + if (criteria[i].ord != -1) + { + sortIdx_type (zh->reg->sortIdx, criteria[i].ord); + sortIdx_read (zh->reg->sortIdx, this_entry.buf[i]); + } } i = sort_info->num_entries; while (--i >= 0) @@ -578,7 +582,7 @@ void resultSetInsertSort (ZebraHandle zh, ZebraSet sset, else { rel = memcmp (this_entry.buf[j], sort_info->entries[i]->buf[j], - SORT_IDX_ENTRYSIZE); + SORT_IDX_ENTRYSIZE); } if (rel) break; @@ -815,7 +819,16 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem, { Z_SortKeySpec *sks = sort_sequence->specs[i]; Z_SortKey *sk; + ZEBRA_RES res; + + sort_criteria[i].ord = -1; + sort_criteria[i].numerical = 0; + if (sks->which == Z_SortKeySpec_missingValueData) + { + zebra_setError(zh, YAZ_BIB1_UNSUPP_MISSING_DATA_ACTION, 0); + return ZEBRA_FAIL; + } if (*sks->sortRelation == Z_SortKeySpec_ascending) sort_criteria[i].relation = 'A'; else if (*sks->sortRelation == Z_SortKeySpec_descending) @@ -843,9 +856,12 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem, i+1); sort_criteria[i].numerical = 0; sort_criteria[i].ord = - zebraExplain_lookup_attr_str(zh->reg->zei, 's', + zebraExplain_lookup_attr_str(zh->reg->zei, + zinfo_index_category_sort, + 's', sk->u.sortField); - if (sort_criteria[i].ord == -1) + if (sks->which != Z_SortKeySpec_null + && sort_criteria[i].ord == -1) { zebra_setError(zh, YAZ_BIB1_CANNOT_SORT_ACCORDING_TO_SEQUENCE, 0); @@ -859,10 +875,10 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem, return ZEBRA_FAIL; case Z_SortKey_sortAttributes: yaz_log(log_level_sort, "key %d is of type sortAttributes", i+1); - if (zebra_sort_get_ord(zh, sk->u.sortAttributes, - &sort_criteria[i].ord, - &sort_criteria[i].numerical) - != ZEBRA_OK) + res = zebra_sort_get_ord(zh, sk->u.sortAttributes, + &sort_criteria[i].ord, + &sort_criteria[i].numerical); + if (sks->which != Z_SortKeySpec_null && res != ZEBRA_OK) return ZEBRA_FAIL; break; } @@ -940,7 +956,7 @@ ZEBRA_RES resultSetRank(ZebraHandle zh, ZebraSet zebraSet, { RSFD rfd = rset_open(rset, RSETF_READ); struct rank_control *rc = rank_class->control; - double score; + int score; zint count = 0; void *handle = @@ -1158,8 +1174,8 @@ ZEBRA_RES zebra_snippets_hit_vector(ZebraHandle zh, const char *setname, NMEM nmem = nmem_create(); struct it_key key; RSET rsets[2], rset_comb; - RSET rset_temp = rstemp_create(nmem, kc, kc->scope, - res_get (zh->res, "setTmpDir"),0 ); + RSET rset_temp = rset_create_temp(nmem, kc, kc->scope, + res_get (zh->res, "setTmpDir"),0 ); TERMID termid; RSFD rsfd = rset_open(rset_temp, RSETF_WRITE); @@ -1175,7 +1191,7 @@ ZEBRA_RES zebra_snippets_hit_vector(ZebraHandle zh, const char *setname, rsets[0] = rset_temp; rsets[1] = rset_dup(sset->rset); - rset_comb = rsmulti_and_create(nmem, kc, kc->scope, 2, rsets); + rset_comb = rset_create_and(nmem, kc, kc->scope, 2, rsets); rsfd = rset_open(rset_comb, RSETF_READ);