X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fretrieve.c;h=fcf6c76360715f2652b1a0d336873a0206930a74;hb=00bacc2ba5811fbffb27d32541df068858a84d03;hp=f5e6bb6834a8f6bf0de5445cbdb1ffd495112833;hpb=6d6696e506bce609bb0d1b4977f14a132c05c155;p=idzebra-moved-to-github.git
diff --git a/index/retrieve.c b/index/retrieve.c
index f5e6bb6..fcf6c76 100644
--- a/index/retrieve.c
+++ b/index/retrieve.c
@@ -209,16 +209,6 @@ int zebra_special_sort_fetch(
int ord;
ZebraHandle zh = fi->zh;
- /* only accept XML and SUTRS requests */
- 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 = 0;
- return YAZ_BIB1_NO_SYNTAXES_AVAILABLE_FOR_THIS_REQUEST;
- }
-
if (!parse_zebra_elem(elemsetname,
&retrieval_index, &retrieval_index_len,
&retrieval_type, &retrieval_type_len))
@@ -248,43 +238,66 @@ int zebra_special_sort_fetch(
return -1; /* is not a sort index */
else
{
- char dst_buf[IT_MAX_WORD];
- char str[IT_MAX_WORD];
+ WRBUF wrbuf_str = wrbuf_alloc();
const char *index_type;
const char *db = 0;
const char *string_index = 0;
- WRBUF wrbuf = result;
-
- zebra_sort_sysno(zh->reg->sort_index, fi->sysno);
- zebra_sort_type(zh->reg->sort_index, ord);
- zebra_sort_read(zh->reg->sort_index, str);
-
- zebraExplain_lookup_ord(zh->reg->zei, ord, &index_type, &db, &string_index);
+ WRBUF wrbuf_result = result;
+ int off = 0;
- zebra_term_untrans(zh, index_type, dst_buf, str);
-
+ zebraExplain_lookup_ord(zh->reg->zei, ord, &index_type, &db,
+ &string_index);
if (!oid_oidcmp(input_format, yaz_oid_recsyn_xml))
{
*output_format = yaz_oid_recsyn_xml;
- wrbuf_printf(wrbuf, ZEBRA_XML_HEADER_STR
+ wrbuf_printf(wrbuf_result, ZEBRA_XML_HEADER_STR
" sysno=\"" ZINT_FORMAT "\""
" set=\"zebra::index%s/\">\n",
fi->sysno, elemsetname);
-
- wrbuf_printf(wrbuf, " ", index_type);
- wrbuf_xmlputs(wrbuf, dst_buf);
- wrbuf_printf(wrbuf, "\n");
- wrbuf_printf(wrbuf, "\n");
}
else if (!oid_oidcmp(input_format, yaz_oid_recsyn_sutrs))
{
*output_format = yaz_oid_recsyn_sutrs;
+ }
+ else
+ {
+ yaz_log(YLOG_WARN, "unsupported format for element set zebra::%s",
+ elemsetname);
+ *output_format = 0;
+ wrbuf_destroy(wrbuf_str);
+ return YAZ_BIB1_NO_SYNTAXES_AVAILABLE_FOR_THIS_REQUEST;
+ }
+ zebra_sort_type(zh->reg->sort_index, ord);
+ zebra_sort_sysno(zh->reg->sort_index, fi->sysno);
+ zebra_sort_read(zh->reg->sort_index, wrbuf_str);
+
+ while (off != wrbuf_len(wrbuf_str))
+ {
+ char dst_buf[IT_MAX_WORD];
+ assert(off < wrbuf_len(wrbuf_str));
+ zebra_term_untrans(zh, index_type, dst_buf,
+ wrbuf_buf(wrbuf_str)+off);
- wrbuf_printf(wrbuf, "%s %s %s\n", string_index, index_type,
- dst_buf);
+ if (!oid_oidcmp(input_format, yaz_oid_recsyn_xml))
+ {
+ wrbuf_printf(wrbuf_result, " ", index_type);
+ wrbuf_xmlputs(wrbuf_result, dst_buf);
+ wrbuf_printf(wrbuf_result, "\n");
+ }
+ else if (!oid_oidcmp(input_format, yaz_oid_recsyn_sutrs))
+ {
+ wrbuf_printf(wrbuf_result, "%s %s %s\n", string_index, index_type,
+ dst_buf);
+ }
+ off += strlen(wrbuf_buf(wrbuf_str)+off) + 1;
+ }
+ if (!oid_oidcmp(input_format, yaz_oid_recsyn_xml))
+ {
+ wrbuf_printf(wrbuf_result, "\n");
}
+ wrbuf_destroy(wrbuf_str);
return 0;
}
}