X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fretrieve.c;h=f166dc23a4bb5ed225f4ffa4e0d367b1dc64cd99;hb=ca820b5e84bec416bf0f5790d1aac509842b4faf;hp=4b162c88a83f2a1d948e9bfabb98edea0da60828;hpb=103492ea21e1a93e78e865157e811873ff4f32f8;p=idzebra-moved-to-github.git diff --git a/index/retrieve.c b/index/retrieve.c index 4b162c8..f166dc2 100644 --- a/index/retrieve.c +++ b/index/retrieve.c @@ -1,4 +1,4 @@ -/* $Id: retrieve.c,v 1.65 2007-02-28 18:43:06 adam Exp $ +/* $Id: retrieve.c,v 1.70 2007-05-08 12:50:04 adam Exp $ Copyright (C) 1995-2007 Index Data ApS @@ -35,7 +35,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "index.h" #include #include - +#include #define ZEBRA_XML_HEADER_STR "\n", @@ -198,9 +199,9 @@ int zebra_special_sort_fetch(ZebraHandle zh, zint sysno, ODR odr, wrbuf_printf(wrbuf, "\n"); wrbuf_printf(wrbuf, "\n"); } - else if (input_format == VAL_SUTRS) + else if (!oid_oidcmp(input_format, yaz_oid_recsyn_sutrs)) { - *output_format = VAL_SUTRS; + *output_format = yaz_oid_recsyn_sutrs; wrbuf_printf(wrbuf, "%s %c %s\n", string_index, index_type, dst_buf); @@ -208,7 +209,7 @@ int zebra_special_sort_fetch(ZebraHandle zh, zint sysno, ODR odr, *rec_lenp = wrbuf_len(wrbuf); *rec_bufp = odr_malloc(odr, *rec_lenp); memcpy(*rec_bufp, wrbuf_buf(wrbuf), *rec_lenp); - wrbuf_free(wrbuf, 1); + wrbuf_destroy(wrbuf); return 0; } } @@ -216,26 +217,27 @@ int zebra_special_sort_fetch(ZebraHandle zh, zint sysno, ODR odr, int zebra_special_index_fetch(ZebraHandle zh, zint sysno, ODR odr, Record rec, const char *elemsetname, - oid_value input_format, - oid_value *output_format, + const Odr_oid *input_format, + const Odr_oid **output_format, char **rec_bufp, int *rec_lenp) { const char *retrieval_index; size_t retrieval_index_len; const char *retrieval_type; size_t retrieval_type_len; - WRBUF wrbuf = 0; zebra_rec_keys_t keys; + int ret_code = 0; /* set output variables before processing possible error states */ /* *rec_lenp = 0; */ /* only accept XML and SUTRS requests */ - if (input_format != VAL_TEXT_XML && input_format != VAL_SUTRS) + if (oid_oidcmp(input_format, yaz_oid_recsyn_xml) + && oid_oidcmp(input_format, yaz_oid_recsyn_sutrs)) { yaz_log(YLOG_WARN, "unsupported format for element set zebra::%s", elemsetname); - *output_format = VAL_NONE; + *output_format = 0; return YAZ_BIB1_NO_SYNTAXES_AVAILABLE_FOR_THIS_REQUEST; } @@ -271,22 +273,27 @@ int zebra_special_index_fetch(ZebraHandle zh, zint sysno, ODR odr, zebra_rec_keys_set_buf(keys, rec->info[recInfo_delKeys], rec->size[recInfo_delKeys], 0); - wrbuf = wrbuf_alloc(); - if (zebra_rec_keys_rewind(keys)){ + if (!zebra_rec_keys_rewind(keys)) + { + ret_code = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; + } + else + { size_t slen; const char *str; struct it_key key_in; - - if (input_format == VAL_TEXT_XML) + WRBUF wrbuf = wrbuf_alloc(); + + if (!oid_oidcmp(input_format, yaz_oid_recsyn_xml)) { - *output_format = VAL_TEXT_XML; + *output_format = input_format; wrbuf_printf(wrbuf, ZEBRA_XML_HEADER_STR " sysno=\"" ZINT_FORMAT "\"" " set=\"zebra::index%s/\">\n", sysno, elemsetname); } - else if (input_format == VAL_SUTRS) - *output_format = VAL_SUTRS; + else if (!oid_oidcmp(input_format, yaz_oid_recsyn_sutrs)) + *output_format = input_format; while (zebra_rec_keys_read(keys, &str, &slen, &key_in)) { @@ -317,7 +324,8 @@ int zebra_special_index_fetch(ZebraHandle zh, zint sysno, ODR odr, zebra_term_untrans(zh, index_type, dst_buf, str); if (strlen(dst_buf)) { - if (input_format == VAL_TEXT_XML){ + if (!oid_oidcmp(input_format, yaz_oid_recsyn_xml)) + { wrbuf_printf(wrbuf, " \n"); } - else if (input_format == VAL_SUTRS){ + else + { wrbuf_printf(wrbuf, "%s ", string_index); wrbuf_printf(wrbuf, "%c", index_type); @@ -337,8 +346,8 @@ int zebra_special_index_fetch(ZebraHandle zh, zint sysno, ODR odr, for (i = 1; i < key_in.len; i++) wrbuf_printf(wrbuf, " " ZINT_FORMAT, key_in.mem[i]); - - /* zebra_term_untrans(zh, index_type, dst_buf, str); */ + + /* zebra_term_untrans(zh, index_type, dst_buf, str); */ wrbuf_printf(wrbuf, " %s", dst_buf); wrbuf_printf(wrbuf, "\n"); @@ -348,15 +357,15 @@ int zebra_special_index_fetch(ZebraHandle zh, zint sysno, ODR odr, } } } - if (input_format == VAL_TEXT_XML) + if (!oid_oidcmp(input_format, yaz_oid_recsyn_xml)) wrbuf_printf(wrbuf, "\n"); + *rec_lenp = wrbuf_len(wrbuf); + *rec_bufp = odr_malloc(odr, *rec_lenp); + memcpy(*rec_bufp, wrbuf_buf(wrbuf), *rec_lenp); + wrbuf_destroy(wrbuf); } - *rec_lenp = wrbuf_len(wrbuf); - *rec_bufp = odr_malloc(odr, *rec_lenp); - memcpy(*rec_bufp, wrbuf_buf(wrbuf), *rec_lenp); - wrbuf_free(wrbuf, 1); zebra_rec_keys_close(keys); - return 0; + return ret_code; } @@ -391,10 +400,10 @@ static void retrieve_puts_int(WRBUF wrbuf, const char *name, } int zebra_special_fetch(ZebraHandle zh, zint sysno, int score, ODR odr, - const char *elemsetname, - oid_value input_format, - oid_value *output_format, - char **rec_bufp, int *rec_lenp) + const char *elemsetname, + const Odr_oid *input_format, + const Odr_oid **output_format, + char **rec_bufp, int *rec_lenp) { Record rec; @@ -408,24 +417,24 @@ int zebra_special_fetch(ZebraHandle zh, zint sysno, int score, ODR odr, { int ret = 0; WRBUF wrbuf = wrbuf_alloc(); - if (input_format == VAL_SUTRS) + if (!oid_oidcmp(input_format, yaz_oid_recsyn_sutrs)) { wrbuf_printf(wrbuf, ZINT_FORMAT, sysno); - *output_format = VAL_SUTRS; + *output_format = input_format; } - else if (input_format == VAL_TEXT_XML) + else if (!oid_oidcmp(input_format, yaz_oid_recsyn_xml)) { wrbuf_printf(wrbuf, ZEBRA_XML_HEADER_STR " sysno=\"" ZINT_FORMAT "\"/>\n", sysno); - *output_format = VAL_TEXT_XML; + *output_format = input_format; } *rec_lenp = wrbuf_len(wrbuf); if (*rec_lenp) - *rec_bufp = odr_strdup(odr, wrbuf_buf(wrbuf)); + *rec_bufp = odr_strdup(odr, wrbuf_cstr(wrbuf)); else ret = YAZ_BIB1_NO_SYNTAXES_AVAILABLE_FOR_THIS_REQUEST; - wrbuf_free(wrbuf, 1); + wrbuf_destroy(wrbuf); return ret; } @@ -466,7 +475,8 @@ int zebra_special_fetch(ZebraHandle zh, zint sysno, int score, ODR odr, } /* only accept XML and SUTRS requests from now */ - if (input_format != VAL_TEXT_XML && input_format != VAL_SUTRS) + if (oid_oidcmp(input_format, yaz_oid_recsyn_xml) + && oid_oidcmp(input_format, yaz_oid_recsyn_sutrs)) { yaz_log(YLOG_WARN, "unsupported format for element set zebra::%s", elemsetname); @@ -481,9 +491,9 @@ int zebra_special_fetch(ZebraHandle zh, zint sysno, int score, ODR odr, WRBUF wrbuf = wrbuf_alloc(); RecordAttr *recordAttr = rec_init_attr(zh->reg->zei, rec); - if (input_format == VAL_TEXT_XML) + if (!oid_oidcmp(input_format, yaz_oid_recsyn_xml)) { - *output_format = VAL_TEXT_XML; + *output_format = input_format; wrbuf_printf(wrbuf, ZEBRA_XML_HEADER_STR " sysno=\"" ZINT_FORMAT "\"", sysno); @@ -501,9 +511,9 @@ int zebra_special_fetch(ZebraHandle zh, zint sysno, int score, ODR odr, recordAttr->recordSize, elemsetname); } - else if (input_format == VAL_SUTRS) + else if (!oid_oidcmp(input_format, yaz_oid_recsyn_sutrs)) { - *output_format = VAL_SUTRS; + *output_format = input_format; wrbuf_printf(wrbuf, "sysno " ZINT_FORMAT "\n", sysno); retrieve_puts_str(wrbuf, "base", rec->info[recInfo_databaseName]); retrieve_puts_str(wrbuf, "file", rec->info[recInfo_filename]); @@ -521,11 +531,11 @@ int zebra_special_fetch(ZebraHandle zh, zint sysno, int score, ODR odr, } *rec_lenp = wrbuf_len(wrbuf); if (*rec_lenp) - *rec_bufp = odr_strdup(odr, wrbuf_buf(wrbuf)); + *rec_bufp = odr_strdup(odr, wrbuf_cstr(wrbuf)); else ret = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; - wrbuf_free(wrbuf, 1); + wrbuf_destroy(wrbuf); rec_free(&rec); return ret; } @@ -550,8 +560,8 @@ int zebra_special_fetch(ZebraHandle zh, zint sysno, int score, ODR odr, int zebra_record_fetch(ZebraHandle zh, zint sysno, int score, zebra_snippets *hit_snippet, ODR odr, - oid_value input_format, Z_RecordComposition *comp, - oid_value *output_format, + const Odr_oid *input_format, Z_RecordComposition *comp, + const Odr_oid **output_format, char **rec_bufp, int *rec_lenp, char **basenamep, char **addinfo) {