X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzsets.c;h=57b7e4b88dc4187a6a7bbb94b79b6860e5f782da;hb=528c6d510de470a02e97881492001002008eab44;hp=d3fb047732d98372147043768ac307a0beaf9475;hpb=47ea1fc957c7b97bb30a26698f072109cae275e4;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index d3fb047..57b7e4b 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,10 +1,26 @@ -/* - * Copyright (C) 1994-2002, Index Data - * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss - * - * $Id: zsets.c,v 1.37 2002-07-25 13:06:43 adam Exp $ - */ +/* $Id: zsets.c,v 1.48 2004-06-07 22:09:32 adam Exp $ + Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 + Index Data Aps + +This file is part of the Zebra server. + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Zebra; see the file LICENSE.zebra. If not, write to the +Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. +*/ + + #include #include #ifdef WIN32 @@ -54,7 +70,7 @@ struct zset_sort_info { struct zset_sort_entry **entries; }; -ZebraSet resultSetAddRPN (ZebraHandle zh, ODR input, ODR output, +ZebraSet resultSetAddRPN (ZebraHandle zh, NMEM m, Z_RPNQuery *rpn, int num_bases, char **basenames, const char *setname) @@ -71,7 +87,7 @@ ZebraSet resultSetAddRPN (ZebraHandle zh, ODR input, ODR output, return 0; zebraSet->locked = 1; zebraSet->rpn = 0; - zebraSet->nmem = nmem_create (); + zebraSet->nmem = m; zebraSet->num_bases = num_bases; zebraSet->basenames = @@ -80,7 +96,7 @@ ZebraSet resultSetAddRPN (ZebraHandle zh, ODR input, ODR output, zebraSet->basenames[i] = nmem_strdup (zebraSet->nmem, basenames[i]); - zebraSet->rset = rpn_search (zh, output->mem, rpn, + zebraSet->rset = rpn_search (zh, zebraSet->nmem, rpn, zebraSet->num_bases, zebraSet->basenames, zebraSet->name, zebraSet); @@ -144,13 +160,13 @@ int zebra_resultSetTerms (ZebraHandle zh, const char *setname, size_t inleft = strlen(inbuf); size_t outleft = *len - 1; int converted = 0; -#if HAVE_ICONV_H - if (zh->iconv_from_utf8 != (iconv_t)(-1)) + + if (zh->iconv_from_utf8 != 0) { char *outbuf = out; size_t ret; - ret = iconv(zh->iconv_from_utf8, &inbuf, &inleft, + ret = yaz_iconv(zh->iconv_from_utf8, &inbuf, &inleft, &outbuf, &outleft); if (ret == (size_t)(-1)) *len = 0; @@ -158,7 +174,6 @@ int zebra_resultSetTerms (ZebraHandle zh, const char *setname, *len = outbuf - out; converted = 1; } -#endif if (!converted) { if (inleft > outleft) @@ -182,7 +197,7 @@ ZebraSet resultSetAdd (ZebraHandle zh, const char *name, int ov) break; if (s) { - logf (LOG_DEBUG, "updating result set %s", name); + yaz_log (LOG_DEBUG, "updating result set %s", name); if (!ov || s->locked) return NULL; if (s->rset) @@ -192,7 +207,9 @@ ZebraSet resultSetAdd (ZebraHandle zh, const char *name, int ov) } else { - logf (LOG_DEBUG, "adding result set %s", name); + const char *sort_max_str = zebra_get_resource(zh, "sortmax", "1000"); + + yaz_log (LOG_DEBUG, "adding result set %s", name); s = (ZebraSet) xmalloc (sizeof(*s)); s->next = zh->sets; zh->sets = s; @@ -201,7 +218,10 @@ ZebraSet resultSetAdd (ZebraHandle zh, const char *name, int ov) s->sort_info = (struct zset_sort_info *) xmalloc (sizeof(*s->sort_info)); - s->sort_info->max_entries = 1000; + s->sort_info->max_entries = atoi(sort_max_str); + if (s->sort_info->max_entries < 2) + s->sort_info->max_entries = 2; + s->sort_info->entries = (struct zset_sort_entry **) xmalloc (sizeof(*s->sort_info->entries) * s->sort_info->max_entries); @@ -348,7 +368,7 @@ ZebraPosSet zebraPosSetCreate (ZebraHandle zh, const char *name, position = positions[i]; if (position > 0 && position <= sort_info->num_entries) { - logf (LOG_DEBUG, "got pos=%d (sorted)", position); + yaz_log (LOG_DEBUG, "got pos=%d (sorted)", position); sr[i].sysno = sort_info->entries[position-1]->sysno; sr[i].score = sort_info->entries[position-1]->score; } @@ -393,7 +413,7 @@ ZebraPosSet zebraPosSetCreate (ZebraHandle zh, const char *name, if (position == positions[num_i]) { sr[num_i].sysno = psysno; - logf (LOG_DEBUG, "got pos=%d (unsorted)", position); + yaz_log (LOG_DEBUG, "got pos=%d (unsorted)", position); sr[num_i].score = -1; num_i++; } @@ -555,7 +575,7 @@ void resultSetSort (ZebraHandle zh, NMEM nmem, zh->errCode = 230; return; } - logf (LOG_DEBUG, "result set sort input=%s output=%s", + yaz_log (LOG_DEBUG, "result set sort input=%s output=%s", *input_setnames, output_setname); sset = resultSetGet (zh, input_setnames[0]); if (!sset) @@ -590,7 +610,7 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, int term_index; RSFD rfd; - logf (LOG_LOG, "resultSetSortSingle start"); + yaz_log (LOG_LOG, "resultSetSortSingle start"); sset->sort_info->num_entries = 0; sset->hits = 0; @@ -602,9 +622,9 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, Z_SortKeySpec *sks = sort_sequence->specs[i]; Z_SortKey *sk; - if (*sks->sortRelation == Z_SortRelation_ascending) + if (*sks->sortRelation == Z_SortKeySpec_ascending) sort_criteria[i].relation = 'A'; - else if (*sks->sortRelation == Z_SortRelation_descending) + else if (*sks->sortRelation == Z_SortKeySpec_descending) sort_criteria[i].relation = 'D'; else { @@ -625,20 +645,20 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, switch (sk->which) { case Z_SortKey_sortField: - logf (LOG_DEBUG, "Sort: key %d is of type sortField", i+1); + yaz_log (LOG_DEBUG, "Sort: key %d is of type sortField", i+1); zh->errCode = 207; return; case Z_SortKey_elementSpec: - logf (LOG_DEBUG, "Sort: key %d is of type elementSpec", i+1); + yaz_log (LOG_DEBUG, "Sort: key %d is of type elementSpec", i+1); zh->errCode = 207; return; case Z_SortKey_sortAttributes: - logf (LOG_DEBUG, "Sort: key %d is of type sortAttributes", i+1); + yaz_log (LOG_DEBUG, "Sort: key %d is of type sortAttributes", i+1); sort_criteria[i].attrUse = zebra_maps_sort (zh->reg->zebra_maps, sk->u.sortAttributes, &sort_criteria[i].numerical); - logf (LOG_DEBUG, "use value = %d", sort_criteria[i].attrUse); + yaz_log (LOG_DEBUG, "use value = %d", sort_criteria[i].attrUse); if (sort_criteria[i].attrUse == -1) { zh->errCode = 116; @@ -672,11 +692,11 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, rset->rset_terms[i]->flags, rset->rset_terms[i]->count); - *sort_status = Z_SortStatus_success; - logf (LOG_LOG, "resultSetSortSingle end"); + *sort_status = Z_SortResponse_success; + yaz_log (LOG_LOG, "resultSetSortSingle end"); } -RSET resultSetRef (ZebraHandle zh, Z_ResultSetId *resultSetId) +RSET resultSetRef (ZebraHandle zh, const char *resultSetId) { ZebraSet s; @@ -702,7 +722,7 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) yaz_log (LOG_LOG, "resultSetRank"); - rank_class = zebraRankLookup (zh, "rank-1"); + rank_class = zebraRankLookup (zh, res_get_def(zh->res, "rank", "rank-1")); rc = rank_class->control; if (rset_read (rset, rfd, &key, &term_index)) @@ -750,7 +770,7 @@ ZebraRankClass zebraRankLookup (ZebraHandle zh, const char *name) if (p && !p->init_flag) { if (p->control->create) - p->class_handle = (*p->control->create)(zh->reg); + p->class_handle = (*p->control->create)(zh); p->init_flag = 1; } return p;