X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzsets.c;h=e010d2238b8c8ef76bd7da097903aa70263bc598;hb=9ceac3e96fe083b93b6fd4a676003dd10482e465;hp=65e527268aeb69f16e0ec3f37a76035c019bbe44;hpb=f7a3769dede0071696bdcc13ae2ee1efe6d52d96;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index 65e5272..e010d22 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,4 +1,4 @@ -/* $Id: zsets.c,v 1.102 2006-05-18 12:03:05 adam Exp $ +/* $Id: zsets.c,v 1.105 2006-05-30 21:41:35 adam Exp $ Copyright (C) 1995-2006 Index Data ApS @@ -40,8 +40,7 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA struct zebra_set_term_entry { int reg_type; char *db; - int set; - int use; + char *index_name; char *term; }; @@ -181,9 +180,9 @@ ZEBRA_RES resultSetAddRPN (ZebraHandle zh, NMEM m, Z_RPNQuery *rpn, return res; } -void resultSetAddTerm (ZebraHandle zh, ZebraSet s, int reg_type, - const char *db, int set, - int use, const char *term) +void resultSetAddTerm(ZebraHandle zh, ZebraSet s, int reg_type, + const char *db, const char *index_name, + const char *term) { assert(zh); /* compiler shut up */ if (!s->nmem) @@ -202,9 +201,8 @@ void resultSetAddTerm (ZebraHandle zh, ZebraSet s, int reg_type, { s->term_entries[s->hits].reg_type = reg_type; s->term_entries[s->hits].db = nmem_strdup (s->nmem, db); - s->term_entries[s->hits].set = set; - s->term_entries[s->hits].use = use; - s->term_entries[s->hits].term = nmem_strdup (s->nmem, term); + s->term_entries[s->hits].index_name = nmem_strdup(s->nmem, index_name); + s->term_entries[s->hits].term = nmem_strdup(s->nmem, term); } (s->hits)++; } @@ -558,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) @@ -580,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; @@ -802,7 +804,6 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem, if (zh->m_staticrank) sysno_mem_index = 1; - assert(nmem); /* compiler shut up about unused param */ sset->sort_info->num_entries = 0; @@ -818,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) @@ -844,8 +854,18 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem, case Z_SortKey_sortField: yaz_log(log_level_sort, "key %d is of type sortField", i+1); - zebra_setError(zh, YAZ_BIB1_CANNOT_SORT_ACCORDING_TO_SEQUENCE, 0); - return ZEBRA_FAIL; + sort_criteria[i].numerical = 0; + sort_criteria[i].ord = + zebraExplain_lookup_attr_str(zh->reg->zei, 's', + sk->u.sortField); + if (sks->which != Z_SortKeySpec_null + && sort_criteria[i].ord == -1) + { + zebra_setError(zh, + YAZ_BIB1_CANNOT_SORT_ACCORDING_TO_SEQUENCE, 0); + return ZEBRA_FAIL; + } + break; case Z_SortKey_elementSpec: yaz_log(log_level_sort, "key %d is of type elementSpec", i+1); @@ -853,29 +873,11 @@ 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 (1) - { - int ord; - int use = zebra_maps_sort(zh->reg->zebra_maps, - sk->u.sortAttributes, - &sort_criteria[i].numerical); - yaz_log(log_level_sort, "use value = %d", use); - if (use == -1) - { - zebra_setError( - zh, YAZ_BIB1_USE_ATTRIBUTE_REQUIRED_BUT_NOT_SUPPLIED, 0); - return ZEBRA_FAIL; - } - ord = zebraExplain_lookup_attr_su_any_index(zh->reg->zei, - VAL_IDXPATH, use); - if (ord == -1) - { - zebra_setError( - zh, YAZ_BIB1_CANNOT_SORT_ACCORDING_TO_SEQUENCE, 0); - return ZEBRA_FAIL; - } - sort_criteria[i].ord = ord; - } + 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; } }