X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Fzrpn.c;h=f3ef7a8afade7b2e8209bf42883a170efa8a2c7c;hp=e9eeea12347198e94a020f4d375da3bb14adddf8;hb=6cb032fd2ece4742e3516e0941507143f677e5cd;hpb=f00cbbbdc1df5478ce74c4a13efafc42257e4cc1 diff --git a/index/zrpn.c b/index/zrpn.c index e9eeea1..f3ef7a8 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -1,4 +1,4 @@ -/* $Id: zrpn.c,v 1.190 2005-05-09 13:24:09 adam Exp $ +/* $Id: zrpn.c,v 1.191 2005-05-11 12:39:37 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -975,7 +975,7 @@ static int string_relation(ZebraHandle zh, Z_AttributesPlusTerm *zapt, strcat(term_tmp, ")"); break; default: - *error_code = 117; + *error_code = YAZ_BIB1_UNSUPP_RELATION_ATTRIBUTE; return 0; } return 1; @@ -1080,8 +1080,8 @@ static ZEBRA_RES string_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no])) { - zh->errCode = YAZ_BIB1_DATABASE_UNAVAILABLE; - zh->errString = basenames[base_no]; + zebra_setError(zh, YAZ_BIB1_DATABASE_UNAVAILABLE, + basenames[base_no]); return ZEBRA_FAIL; } if (xpath_use > 0 && use_value == -2) @@ -1200,7 +1200,7 @@ static ZEBRA_RES string_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, { if (relation_error) { - zh->errCode = relation_error; + zebra_setError(zh, relation_error, 0); return ZEBRA_FAIL; } *term_sub = 0; @@ -1301,8 +1301,9 @@ static ZEBRA_RES string_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, strcat(term_dict, ")"); break; default: - zh->errCode = YAZ_BIB1_UNSUPP_TRUNCATION_ATTRIBUTE; - zh->errString = nmem_strdup_i(stream, truncation_value); + zebra_setError_zint(zh, + YAZ_BIB1_UNSUPP_TRUNCATION_ATTRIBUTE, + truncation_value); return ZEBRA_FAIL; } if (attr_ok) @@ -1323,8 +1324,7 @@ static ZEBRA_RES string_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, } if (!bases_ok) { - zh->errCode = errCode; - zh->errString = errString; + zebra_setError(zh, errCode, errString); return ZEBRA_FAIL; } *term_sub = termp; @@ -1356,9 +1356,11 @@ static ZEBRA_RES zapt_term_to_utf8(ZebraHandle zh, Z_AttributesPlusTerm *zapt, if (ret == (size_t)(-1)) { ret = yaz_iconv(zh->iconv_to_utf8, 0, 0, 0, 0); - zh->errCode = - YAZ_BIB1_QUERY_TERM_INCLUDES_CHARS_THAT_DO_NOT_TRANSLATE_INTO_; - return -1; + zebra_setError( + zh, + YAZ_BIB1_QUERY_TERM_INCLUDES_CHARS_THAT_DO_NOT_TRANSLATE_INTO_, + 0); + return ZEBRA_FAIL; } *outbuf = 0; } @@ -1379,7 +1381,7 @@ static ZEBRA_RES zapt_term_to_utf8(ZebraHandle zh, Z_AttributesPlusTerm *zapt, termz[sizez] = '\0'; break; default: - zh->errCode = YAZ_BIB1_UNSUPP_CODED_VALUE_FOR_TERM; + zebra_setError(zh, YAZ_BIB1_UNSUPP_CODED_VALUE_FOR_TERM, 0); return ZEBRA_FAIL; } return ZEBRA_OK; @@ -1475,11 +1477,10 @@ static void grep_info_delete(struct grep_info *grep_info) xfree(grep_info->isam_p_buf); } -static int grep_info_prepare(ZebraHandle zh, - Z_AttributesPlusTerm *zapt, - struct grep_info *grep_info, - int reg_type, - NMEM stream) +static ZEBRA_RES grep_info_prepare(ZebraHandle zh, + Z_AttributesPlusTerm *zapt, + struct grep_info *grep_info, + int reg_type) { AttrType termset; int termset_value_numeric; @@ -1495,7 +1496,7 @@ static int grep_info_prepare(ZebraHandle zh, grep_info->termset = 0; if (!zapt) - return 0; + return ZEBRA_OK; attr_init(&termset, zapt, 8); termset_value_numeric = attr_find_ex(&termset, NULL, &termset_value_string); @@ -1515,12 +1516,11 @@ static int grep_info_prepare(ZebraHandle zh, grep_info->termset = resultSetAdd(zh, termset_name, 1); if (!grep_info->termset) { - zh->errCode = YAZ_BIB1_ILLEGAL_RESULT_SET_NAME; - zh->errString = nmem_strdup(stream, termset_name); - return -1; + zebra_setError(zh, YAZ_BIB1_ILLEGAL_RESULT_SET_NAME, termset_name); + return ZEBRA_FAIL; } } - return 0; + return ZEBRA_OK; } @@ -1544,7 +1544,7 @@ static ZEBRA_RES term_list_trunc(ZebraHandle zh, *num_result_sets = 0; *term_dst = 0; - if (grep_info_prepare(zh, zapt, &grep_info, reg_type, stream)) + if (grep_info_prepare(zh, zapt, &grep_info, reg_type) == ZEBRA_FAIL) return ZEBRA_FAIL; while(1) { @@ -1744,7 +1744,7 @@ static int numeric_relation(ZebraHandle zh, Z_AttributesPlusTerm *zapt, sprintf(term_tmp, "(0*%d)", term_value); break; default: - *error_code = 117; + *error_code = YAZ_BIB1_UNSUPP_RELATION_ATTRIBUTE; return 0; } yaz_log(log_level_rpn, "dict_lookup_grep: %s", term_tmp); @@ -1830,9 +1830,9 @@ static ZEBRA_RES numeric_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, } if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no])) { - zh->errCode = YAZ_BIB1_DATABASE_UNAVAILABLE; - zh->errString = basenames[base_no]; - return -1; + zebra_setError(zh, YAZ_BIB1_DATABASE_UNAVAILABLE, + basenames[base_no]); + return ZEBRA_FAIL; } for (local_attr = attp.local_attributes; local_attr; local_attr = local_attr->next) @@ -1860,8 +1860,7 @@ static ZEBRA_RES numeric_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, } if (!prefix_len) { - errCode = YAZ_BIB1_UNSUPP_USE_ATTRIBUTE; - errString = nmem_strdup_i(stream, use_value); + zebra_setError_zint(zh, YAZ_BIB1_UNSUPP_USE_ATTRIBUTE, use_value); continue; } bases_ok++; @@ -1876,8 +1875,7 @@ static ZEBRA_RES numeric_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, { if (relation_error) { - zh->errCode = relation_error; - zh->errString = 0; + zebra_setError(zh, relation_error, 0); return ZEBRA_FAIL; } *term_sub = 0; @@ -1886,8 +1884,7 @@ static ZEBRA_RES numeric_term(ZebraHandle zh, Z_AttributesPlusTerm *zapt, } if (!bases_ok) { - zh->errCode = errCode; - zh->errString = errString; + zebra_setError(zh, errCode, errString); return ZEBRA_FAIL; } *term_sub = termp; @@ -1916,7 +1913,7 @@ static ZEBRA_RES rpn_search_APT_numeric(ZebraHandle zh, int alloc_sets = 0; yaz_log(log_level_rpn, "APT_numeric t='%s'", termz); - if (grep_info_prepare(zh, zapt, &grep_info, reg_type, stream)) + if (grep_info_prepare(zh, zapt, &grep_info, reg_type) == ZEBRA_FAIL) return ZEBRA_FAIL; while (1) { @@ -2108,7 +2105,7 @@ static RSET xpath_trunc(ZebraHandle zh, NMEM stream, int term_type = Z_Term_characterString; const char *flags = "void"; - if (grep_info_prepare(zh, 0 /* zapt */, &grep_info, '0', stream)) + if (grep_info_prepare(zh, 0 /* zapt */, &grep_info, '0') == ZEBRA_FAIL) return rsnull_create(rset_nmem, kc); if (ord < 0) @@ -2143,20 +2140,25 @@ static RSET xpath_trunc(ZebraHandle zh, NMEM stream, return rset; } -static RSET rpn_search_xpath(ZebraHandle zh, - oid_value attributeSet, - int num_bases, char **basenames, - NMEM stream, const char *rank_type, RSET rset, - int xpath_len, struct xpath_location_step *xpath, - NMEM rset_nmem, - struct rset_key_control *kc) +static +ZEBRA_RES rpn_search_xpath(ZebraHandle zh, + oid_value attributeSet, + int num_bases, char **basenames, + NMEM stream, const char *rank_type, RSET rset, + int xpath_len, struct xpath_location_step *xpath, + NMEM rset_nmem, + RSET *rset_out, + struct rset_key_control *kc) { oid_value curAttributeSet = attributeSet; int base_no; int i; if (xpath_len < 0) - return rset; + { + *rset_out = rset; + return ZEBRA_OK; + } yaz_log(YLOG_DEBUG, "xpath len=%d", xpath_len); for (i = 0; ireg->zei, basenames[base_no])) { - zh->errCode = YAZ_BIB1_DATABASE_UNAVAILABLE; - zh->errString = basenames[base_no]; - return rset; + zebra_setError(zh, YAZ_BIB1_DATABASE_UNAVAILABLE, + basenames[base_no]); + *rset_out = rset; + return ZEBRA_FAIL; } while (--level >= 0) { @@ -2283,8 +2286,8 @@ static RSET rpn_search_xpath(ZebraHandle zh, first_path = 0; } } - - return rset; + *rset_out = rset; + return ZEBRA_OK; } static ZEBRA_RES rpn_search_APT(ZebraHandle zh, Z_AttributesPlusTerm *zapt, @@ -2372,19 +2375,16 @@ static ZEBRA_RES rpn_search_APT(ZebraHandle zh, Z_AttributesPlusTerm *zapt, } else { - zh->errCode = YAZ_BIB1_UNSUPP_STRUCTURE_ATTRIBUTE; - return ZEBRA_FAIL; + zebra_setError(zh, YAZ_BIB1_UNSUPP_STRUCTURE_ATTRIBUTE, 0); + res = ZEBRA_FAIL; } if (res != ZEBRA_OK) return res; if (!*rset) return ZEBRA_FAIL; - *rset = rpn_search_xpath(zh, attributeSet, num_bases, basenames, - stream, rank_type, *rset, - xpath_len, xpath, rset_nmem, kc); - if (!*rset) - return ZEBRA_FAIL; - return ZEBRA_OK; + return rpn_search_xpath(zh, attributeSet, num_bases, basenames, + stream, rank_type, *rset, + xpath_len, xpath, rset_nmem, rset, kc); } static ZEBRA_RES rpn_search_structure(ZebraHandle zh, Z_RPNStructure *zs, @@ -2518,15 +2518,16 @@ ZEBRA_RES rpn_search_structure(ZebraHandle zh, Z_RPNStructure *zs, case Z_Operator_prox: if (zop->u.prox->which != Z_ProximityOperator_known) { - zh->errCode = YAZ_BIB1_UNSUPP_PROX_UNIT_CODE; + zebra_setError(zh, + YAZ_BIB1_UNSUPP_PROX_UNIT_CODE, + 0); return ZEBRA_FAIL; } if (*zop->u.prox->u.known != Z_ProxUnit_word) { - char *val = (char *) nmem_malloc(stream, 16); - zh->errCode = YAZ_BIB1_UNSUPP_PROX_UNIT_CODE; - zh->errString = val; - sprintf(val, "%d", *zop->u.prox->u.known); + zebra_setError_zint(zh, + YAZ_BIB1_UNSUPP_PROX_UNIT_CODE, + *zop->u.prox->u.known); return ZEBRA_FAIL; } else @@ -2542,7 +2543,7 @@ ZEBRA_RES rpn_search_structure(ZebraHandle zh, Z_RPNStructure *zs, } break; default: - zh->errCode = YAZ_BIB1_OPERATOR_UNSUPP; + zebra_setError(zh, YAZ_BIB1_OPERATOR_UNSUPP, 0); return ZEBRA_FAIL; } *num_result_sets = 1; @@ -2572,16 +2573,16 @@ ZEBRA_RES rpn_search_structure(ZebraHandle zh, Z_RPNStructure *zs, rset = resultSetRef(zh, zs->u.simple->u.resultSetId); if (!rset) { - zh->errCode = YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST; - zh->errString = - nmem_strdup(stream, zs->u.simple->u.resultSetId); + zebra_setError(zh, + YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST, + zs->u.simple->u.resultSetId); return ZEBRA_FAIL; } rset_dup(rset); } else { - zh->errCode = YAZ_BIB1_UNSUPP_SEARCH; + zebra_setError(zh, YAZ_BIB1_UNSUPP_SEARCH, 0); return ZEBRA_FAIL; } *num_result_sets = 1; @@ -2591,7 +2592,7 @@ ZEBRA_RES rpn_search_structure(ZebraHandle zh, Z_RPNStructure *zs, } else { - zh->errCode = YAZ_BIB1_UNSUPP_SEARCH; + zebra_setError(zh, YAZ_BIB1_UNSUPP_SEARCH, 0); return ZEBRA_FAIL; } return ZEBRA_OK; @@ -2763,7 +2764,7 @@ ZEBRA_RES rpn_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, rank_type, &complete_flag, &sort_flag)) { *num_entries = 0; - zh->errCode = YAZ_BIB1_UNSUPP_ATTRIBUTE_TYPE; + zebra_setError(zh, YAZ_BIB1_UNSUPP_ATTRIBUTE_TYPE, 0); return ZEBRA_FAIL; } yaz_log(YLOG_DEBUG, "use_value = %d", use_value); @@ -2778,8 +2779,8 @@ ZEBRA_RES rpn_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no])) { - zh->errString = basenames[base_no]; - zh->errCode = YAZ_BIB1_DATABASE_UNAVAILABLE; + zebra_setError(zh, YAZ_BIB1_DATABASE_UNAVAILABLE, + basenames[base_no]); *num_entries = 0; return ZEBRA_FAIL; } @@ -2806,16 +2807,16 @@ ZEBRA_RES rpn_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, { errCode = YAZ_BIB1_UNSUPP_USE_ATTRIBUTE; if (use_string) - errString = odr_strdup(stream, use_string); + zebra_setError(zh, YAZ_BIB1_UNSUPP_USE_ATTRIBUTE, + use_string); else - { - char val_str[32]; - sprintf(val_str, "%d", use_value); - errString = odr_strdup(stream, val_str); - } + zebra_setError_zint(zh, YAZ_BIB1_UNSUPP_USE_ATTRIBUTE, + use_value); } else - errCode = YAZ_BIB1_UNSUPP_ATTRIBUTE_SET; + { + zebra_setError(zh, YAZ_BIB1_UNSUPP_ATTRIBUTE_SET, 0); + } continue; } } @@ -2832,8 +2833,7 @@ ZEBRA_RES rpn_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, } if (!bases_ok && errCode) { - zh->errCode = errCode; - zh->errString = errString; + zebra_setError(zh, errCode, errString); *num_entries = 0; return ZEBRA_FAIL; }