X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Frpnscan.c;h=341acb2ac38461898ee83a7094c55b745c5a20ee;hp=1d6f628ca38b9e5671e554dfbb3d1e99ab24b4f8;hb=6c5467571389a21c91196ce1608945633c1cf92a;hpb=ef21c46268e6bbdd5783099a822933ac78cf1a81 diff --git a/index/rpnscan.c b/index/rpnscan.c index 1d6f628..341acb2 100644 --- a/index/rpnscan.c +++ b/index/rpnscan.c @@ -1,8 +1,5 @@ -/* $Id: rpnscan.c,v 1.25 2008-01-24 16:17:03 adam Exp $ - Copyright (C) 1995-2007 - Index Data ApS - -This file is part of the Zebra server. +/* This file is part of the Zebra server. + Copyright (C) 1994-2011 Index Data 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 @@ -20,6 +17,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#if HAVE_CONFIG_H +#include +#endif #include #include #ifdef WIN32 @@ -149,11 +149,6 @@ static int scan_handle2(char *name, const char *info, int pos, void *client) len_prefix = strlen(scan_info->prefix); if (memcmp(name, scan_info->prefix, len_prefix)) return 1; - - /* skip special terms such as first-in-field specials */ - if (name[len_prefix] < CHR_BASE_CHAR) - return 1; - wrbuf_rewind(scan_info->term); wrbuf_puts(scan_info->term, name+len_prefix); @@ -187,29 +182,32 @@ static int scan_save_set(ZebraHandle zh, ODR stream, NMEM nmem, { if (ar[i].isam_p && strcmp(wrbuf_cstr(ar[i].term), term) == 0) { - struct ord_list *ol = ord_list_create(nmem); - RSET rset_t; - - ol = ord_list_append(nmem, ol, ar[i].ord); - - assert(ol); - rset_t = rset_trunc( + if (strcmp(term, FIRST_IN_FIELD_STR)) + { + struct ord_list *ol = ord_list_create(nmem); + RSET rset_t; + + ol = ord_list_append(nmem, ol, ar[i].ord); + + assert(ol); + rset_t = rset_trunc( zh, &ar[i].isam_p, 1, wrbuf_buf(ar[i].term), wrbuf_len(ar[i].term), NULL, 1, zapt->term->which, nmem, kc, kc->scope, ol, index_type, 0 /* hits_limit_value */, 0 /* term_ref_id_str */); - if (!rset) - rset = rset_t; - else - { - RSET rsets[2]; - - rsets[0] = rset; - rsets[1] = rset_t; - rset = rset_create_or(nmem, kc, kc->scope, 0 /* termid */, - 2, rsets); + if (!rset) + rset = rset_t; + else + { + RSET rsets[2]; + + rsets[0] = rset; + rsets[1] = rset_t; + rset = rset_create_or(nmem, kc, kc->scope, 0 /* termid */, + 2, rsets); + } } ar[i].isam_p = 0; } @@ -302,13 +300,6 @@ static ZEBRA_RES rpn_scan_norm(ZebraHandle zh, ODR stream, NMEM nmem, odr_malloc(stream, *num_entries * sizeof(*glist)); *is_partial = 0; - if (*position > *num_entries+1) - { - *is_partial = 1; - *position = 1; - *num_entries = 0; - return ZEBRA_OK; - } rpn_char_map_prepare(zh->reg, zm, &rcmi); for (i = 0; i < ord_no; i++) @@ -378,9 +369,13 @@ static ZEBRA_RES rpn_scan_norm(ZebraHandle zh, ODR stream, NMEM nmem, { /* did not get all terms; adjust the real position and reduce number of entries */ - yaz_log(YLOG_LOG, "before terms dif=%d", dif); - glist = glist + dif; - *num_entries -= dif; + if (dif < *num_entries) + { + glist = glist + dif; + *num_entries -= dif; + } + else + *num_entries = 0; *position -= dif; *is_partial = 1; } @@ -441,7 +436,7 @@ static ZEBRA_RES rpn_scan_norm(ZebraHandle zh, ODR stream, NMEM nmem, pos++; } - if (pos != *num_entries) + if (pos < *num_entries) { if (pos >= 0) *num_entries = pos; @@ -585,6 +580,7 @@ ZEBRA_RES rpn_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab