X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzrpn.c;h=f7ff740d0c192ad5ddb1b5c29926a50915769e62;hb=388742fccf1ecb74c539c70fd1ac7f15f329932a;hp=9cf39d43ffeec5853358bb7c600a6d10bf68d4ea;hpb=34552d7bc714468512b1873f1d6b75608d6b4655;p=idzebra-moved-to-github.git diff --git a/index/zrpn.c b/index/zrpn.c index 9cf39d4..f7ff740 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -1,5 +1,5 @@ -/* $Id: zrpn.c,v 1.207 2005-11-09 11:51:30 adam Exp $ - Copyright (C) 1995-2005 +/* $Id: zrpn.c,v 1.213 2006-05-17 17:46:45 adam Exp $ + Copyright (C) 1995-2006 Index Data ApS This file is part of the Zebra server. @@ -181,8 +181,12 @@ void zebra_term_untrans(ZebraHandle zh, int reg_type, { const char *cp = zebra_maps_output(zh->reg->zebra_maps, reg_type, &src); - if (!cp && len < IT_MAX_WORD-1) - dst[len++] = *src++; + if (!cp) + { + if (len < IT_MAX_WORD-1) + dst[len++] = *src; + src++; + } else while (*cp && len < IT_MAX_WORD-1) dst[len++] = *cp++; @@ -241,7 +245,7 @@ static void add_isam_p(const char *name, const char *info, zebra_term_untrans (p->zh, p->reg_type, term_tmp, name+len+1); yaz_log(log_level_rpn, "grep: %d %c %s", ord, name[len], term_tmp); zebraExplain_lookup_ord (p->zh->reg->zei, - ord, 0 /* index_type */, &db, &set, &use); + ord, 0 /* index_type */, &db, &set, &use, 0); yaz_log(log_level_rpn, "grep: set=%d use=%d db=%s", set, use, db); resultSetAddTerm(p->zh, p->termset, name[len], db, @@ -965,7 +969,10 @@ static int string_relation(ZebraHandle zh, Z_AttributesPlusTerm *zapt, break; case 3: case 102: + case 103: case -1: + if (!**term_sub) + return 1; yaz_log(log_level_rpn, "Relation ="); if (!term_100(zh->reg->zebra_maps, reg_type, term_sub, term_component, space_split, term_dst)) @@ -1005,7 +1012,7 @@ static ZEBRA_RES term_limits_APT(ZebraHandle zh, attr_init(&term_ref_id_attr, zapt, 10); term_ref_id_int = attr_find_ex(&term_ref_id_attr, NULL, term_ref_id_str); - if (term_ref_id_int != -1) + if (term_ref_id_int >= 0) { char *res = nmem_malloc(nmem, 20); sprintf(res, "%d", term_ref_id_int); @@ -1235,6 +1242,8 @@ static ZEBRA_RES string_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, term_dict[prefix_len++] = 1; term_dict[prefix_len++] = ord_buf[i]; } + if (ord_len > init_pos) + init_pos = ord_len; } bases_ok++; if (prefix_len) @@ -1314,7 +1323,6 @@ static ZEBRA_RES string_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, case 103: /* Regexp-2 */ regex_range = 1; term_dict[j++] = '('; - init_pos = 2; if (!term_103(zh->reg->zebra_maps, reg_type, &termp, term_dict + j, ®ex_range, space_split, term_dst)) @@ -1563,7 +1571,9 @@ static ZEBRA_RES term_list_trunc(ZebraHandle zh, struct grep_info grep_info; const char *termp = termz; int alloc_sets = 0; + int empty_term = *termz ? 0 : 1; + empty_term = 0; *num_result_sets = 0; *term_dst = 0; if (grep_info_prepare(zh, zapt, &grep_info, reg_type) == ZEBRA_FAIL) @@ -1601,6 +1611,11 @@ static ZEBRA_RES term_list_trunc(ZebraHandle zh, if ((*result_sets)[*num_result_sets] == 0) break; (*num_result_sets)++; + + if (empty_term) + break; + if (!*termp) + break; } grep_info_delete(&grep_info); return ZEBRA_OK; @@ -2406,6 +2421,15 @@ static ZEBRA_RES rpn_search_APT(ZebraHandle zh, Z_AttributesPlusTerm *zapt, num_bases, basenames, rset_nmem, rset, kc); } + else if (!strcmp(search_type, "always")) + { + *termz = '\0'; + res = rpn_search_APT_phrase(zh, zapt, termz, attributeSet, stream, + reg_id, complete_flag, rank_type, + xpath_use, + num_bases, basenames, rset_nmem, + rset, kc); + } else { zebra_setError(zh, YAZ_BIB1_UNSUPP_STRUCTURE_ATTRIBUTE, 0); @@ -3122,3 +3146,11 @@ ZEBRA_RES rpn_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, return ZEBRA_OK; } +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +