+static void search_terms (ZebraHandle zh, bend_search_rr *r)
+{
+ zint count = 0;
+ int no_terms;
+ int i;
+ int type = Z_Term_general;
+ struct Z_External *ext;
+ Z_SearchInfoReport *sr;
+
+ /* get no of terms for result set */
+ no_terms = 0; /* zebra_resultSetTerms (zh, r->setname, 0, 0, 0, 0, 0); */
+ /* FIXME - Rsets don't know number of terms no more ??? */
+ if (!no_terms)
+ return;
+
+ r->search_info = odr_malloc (r->stream, sizeof(*r->search_info));
+
+ r->search_info->num_elements = 1;
+ r->search_info->list =
+ odr_malloc (r->stream, sizeof(*r->search_info->list));
+ r->search_info->list[0] =
+ odr_malloc (r->stream, sizeof(**r->search_info->list));
+ r->search_info->list[0]->category = 0;
+ r->search_info->list[0]->which = Z_OtherInfo_externallyDefinedInfo;
+ ext = odr_malloc (r->stream, sizeof(*ext));
+ r->search_info->list[0]->information.externallyDefinedInfo = ext;
+ ext->direct_reference =
+ yaz_oidval_to_z3950oid (r->stream, CLASS_USERINFO, VAL_SEARCHRES1);
+ ext->indirect_reference = 0;
+ ext->descriptor = 0;
+ ext->which = Z_External_searchResult1;
+ sr = odr_malloc (r->stream, sizeof(Z_SearchInfoReport));
+ ext->u.searchResult1 = sr;
+ sr->num = no_terms;
+ sr->elements = odr_malloc (r->stream, sr->num *
+ sizeof(*sr->elements));
+ for (i = 0; i<no_terms; i++)
+ {
+ Z_Term *term;
+ char outbuf[1024];
+ size_t len = sizeof(outbuf);
+ /* FIXME - Can we just skip this ??? */
+ /*
+ zebra_resultSetTerms (zh, r->setname, i,
+ &count, &type, outbuf, &len);
+ */
+ sr->elements[i] = odr_malloc (r->stream, sizeof(**sr->elements));
+ sr->elements[i]->subqueryId = 0;
+ sr->elements[i]->fullQuery = odr_malloc (r->stream,
+ sizeof(bool_t));
+ *sr->elements[i]->fullQuery = 0;
+ sr->elements[i]->subqueryExpression =
+ odr_malloc (r->stream, sizeof(Z_QueryExpression));
+ sr->elements[i]->subqueryExpression->which =
+ Z_QueryExpression_term;
+ sr->elements[i]->subqueryExpression->u.term =
+ odr_malloc (r->stream, sizeof(Z_QueryExpressionTerm));
+ term = odr_malloc (r->stream, sizeof(Z_Term));
+ sr->elements[i]->subqueryExpression->u.term->queryTerm = term;
+ switch (type)
+ {
+ case Z_Term_characterString:
+ yaz_log (YLOG_DEBUG, "term as characterString");
+ term->which = Z_Term_characterString;
+ term->u.characterString = odr_strdup (r->stream, outbuf);
+ break;
+ case Z_Term_general:
+ yaz_log (YLOG_DEBUG, "term as general");
+ term->which = Z_Term_general;
+ term->u.general = odr_malloc (r->stream, sizeof(*term->u.general));
+ term->u.general->size = term->u.general->len = len;
+ term->u.general->buf = odr_malloc (r->stream, len);
+ memcpy (term->u.general->buf, outbuf, len);
+ break;
+ default:
+ term->which = Z_Term_general;
+ term->u.null = odr_nullval();
+ }
+ sr->elements[i]->subqueryExpression->u.term->termComment = 0;
+ sr->elements[i]->subqueryInterpretation = 0;
+ sr->elements[i]->subqueryRecommendation = 0;
+ if (count > 2000000000)
+ count = 2000000000;
+ sr->elements[i]->subqueryCount = odr_intdup (r->stream, (int) count);
+ sr->elements[i]->subqueryWeight = 0;
+ sr->elements[i]->resultsByDB = 0;
+ }
+}
+