X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzrpn.c;h=eeee1b728d7e63fca1c0ef40efe6bf3abdfa1c05;hb=d79f0901b184c1bcf383be8500aee3cfd197ca1d;hp=415200fe87fcf339c3624e3e67a27b1adba46632;hpb=3d01abbe1238c82d62e4c01eb7cac760d3d53377;p=idzebra-moved-to-github.git diff --git a/index/zrpn.c b/index/zrpn.c index 415200f..eeee1b7 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -1,10 +1,24 @@ /* - * Copyright (C) 1994-1997, Index Data I/S + * Copyright (C) 1994-1998, Index Data I/S * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: zrpn.c,v $ - * Revision 1.68 1997-10-27 14:33:06 adam + * Revision 1.72 1998-01-07 13:53:41 adam + * Queries using simple ranked operands returns right number of hits. + * + * Revision 1.71 1997/12/18 10:54:24 adam + * New method result set method rs_hits that returns the number of + * hits in result-set (if known). The ranked result set returns real + * number of hits but only when not combined with other operands. + * + * Revision 1.70 1997/10/31 12:34:43 adam + * Changed a few log statements. + * + * Revision 1.69 1997/10/29 12:05:02 adam + * Server produces diagnostic "Unsupported Attribute Set" when appropriate. + * + * Revision 1.68 1997/10/27 14:33:06 adam * Moved towards generic character mapping depending on "structure" * field in abstract syntax file. Fixed a few memory leaks. Fixed * bug with negative integers when doing searches with relational @@ -351,8 +365,7 @@ static void add_isam_p (const char *info, struct grep_info *p) ISAM_P *new_isam_p_buf; #ifdef TERM_COUNT int *new_term_no; -#endif - +#endif p->isam_p_size = 2*p->isam_p_size + 100; new_isam_p_buf = xmalloc (sizeof(*new_isam_p_buf) * p->isam_p_size); @@ -727,11 +740,14 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, int max_pos, prefix_len = 0; termp = *term_sub; - if (!att_getentbyatt (zi, &attp, curAttributeSet, use_value)) + if ((r=att_getentbyatt (zi, &attp, curAttributeSet, use_value))) { - logf (LOG_DEBUG, "att_getentbyatt fail. set=%d use=%d", - curAttributeSet, use_value); - zi->errCode = 114; + logf (LOG_DEBUG, "att_getentbyatt fail. set=%d use=%d r=%d", + curAttributeSet, use_value, r); + if (r == -1) + zi->errCode = 114; + else + zi->errCode = 121; return -1; } if (zebTargetInfo_curDatabase (zi->zti, basenames[base_no])) @@ -764,7 +780,7 @@ static int field_term (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, term_dict[prefix_len++] = ')'; term_dict[prefix_len++] = 1; term_dict[prefix_len++] = reg_type; - logf (LOG_LOG, "reg_type = %d", term_dict[prefix_len-1]); + logf (LOG_DEBUG, "reg_type = %d", term_dict[prefix_len-1]); term_dict[prefix_len] = '\0'; if (!relational_term (zi, zapt, &termp, term_dict, attributeSet, grep_info, &max_pos, reg_type)) @@ -901,12 +917,13 @@ static RSET rpn_search_APT_relevance (ZServerInfo *zi, int r; parms.key_size = sizeof(struct it_key); - parms.max_rec = 1000; + parms.max_rec = 200; parms.cmp = key_compare_it; parms.get_pos = key_get_pos; parms.is = zi->isam; parms.isc = zi->isamc; parms.no_terms = 0; + parms.method = RSREL_METHOD_A; if (zapt->term->which != Z_Term_general) { @@ -1152,7 +1169,7 @@ static RSET rpn_search_APT_phrase (ZServerInfo *zi, while (1) { - logf (LOG_LOG, "APT_phrase termp=%s", termp); + logf (LOG_DEBUG, "APT_phrase termp=%s", termp); grep_info.isam_p_indx = 0; r = field_term (zi, zapt, &termp, attributeSet, &grep_info, reg_type, complete_flag, num_bases, basenames); @@ -1389,6 +1406,7 @@ static void count_set (RSET r, int *count) RSFD rfd; logf (LOG_DEBUG, "count_set"); + *count = 0; rfd = rset_open (r, RSETF_READ|RSETF_SORT_SYSNO); while (rset_read (r, rfd, &key)) @@ -1408,6 +1426,7 @@ int rpn_search (ZServerInfo *zi, Z_RPNQuery *rpn, int num_bases, char **basenames, const char *setname, int *hits) { + int i; RSET rset; oident *attrset; oid_value attributeSet; @@ -1424,7 +1443,9 @@ int rpn_search (ZServerInfo *zi, if (!rset) return zi->errCode; if (rset_is_volatile(rset)) - count_set_save(zi, &rset,hits); + count_set_save(zi, &rset, hits); + else if ((i = rset_hits (rset)) >= 0) + *hits = i; else count_set (rset, hits); resultSetAdd (zi, setname, 1, rset); @@ -1525,14 +1546,18 @@ int rpn_scan (ZServerInfo *zi, Z_AttributesPlusTerm *zapt, use_value = 1016; for (base_no = 0; base_no < num_bases && ord_no < 32; base_no++) { + int r; attent attp; data1_local_attribute *local_attr; - if (!att_getentbyatt (zi, &attp, attributeset, use_value)) + if ((r=att_getentbyatt (zi, &attp, attributeset, use_value))) { logf (LOG_DEBUG, "att_getentbyatt fail. set=%d use=%d", attributeset, use_value); - return zi->errCode = 114; + if (r == -1) + zi->errCode = 114; + else + zi->errCode = 121; } if (zebTargetInfo_curDatabase (zi->zti, basenames[base_no])) {