Get rid of size member of Odr_oct
[yaz-moved-to-github.git] / src / seshigh.c
index 30bf9e2..fccb4e3 100644 (file)
@@ -56,6 +56,7 @@
 #include <libxml/tree.h>
 #endif
 
+#include <yaz/facet.h>
 #include <yaz/xmalloc.h>
 #include <yaz/comstack.h>
 #include "eventl.h"
@@ -1008,6 +1009,11 @@ static void srw_bend_search(association *assoc,
             rr.errstring = 0;
             rr.search_info = 0;
             rr.search_input = 0;
+
+            if (srw_req->facetList)
+                yaz_oi_set_facetlist(&rr.search_input, assoc->encode,
+                                     srw_req->facetList);
+
             yaz_log_zquery_level(log_requestdetail,rr.query);
 
             (assoc->init->bend_search)(assoc->backend, &rr);
@@ -1046,6 +1052,7 @@ static void srw_bend_search(association *assoc,
                         odr_intdup(assoc->encode, *rr.srw_setnameIdleTime );
                }
 
+                srw_res->facetList = yaz_oi_get_facetlist(&rr.search_info);
                 if (start > rr.hits || start < 1)
                 {
                     /* if hits<=0 and start=1 we don't return a diagnostic */
@@ -1160,7 +1167,19 @@ static void srw_bend_search(association *assoc,
                     res->extraResponseData_buf = rr.extra_response_data;
                     res->extraResponseData_len = strlen(rr.extra_response_data);
                 }
-                if (rr.estimated_hit_count || rr.partial_resultset)
+                if (strcmp(res->srw_version, "2.") > 0)
+                {
+                    if (rr.estimated_hit_count)
+                        srw_res->resultCountPrecision =
+                            odr_strdup(assoc->encode, "estimate");
+                    else if (rr.partial_resultset)
+                        srw_res->resultCountPrecision =
+                            odr_strdup(assoc->encode, "minimum");
+                    else
+                        srw_res->resultCountPrecision =
+                            odr_strdup(assoc->encode, "exact");
+                }
+                else if (rr.estimated_hit_count || rr.partial_resultset)
                 {
                     yaz_add_srw_diagnostic(
                         assoc->encode,
@@ -3109,8 +3128,11 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb)
                 t->term->u.general = o =
                     (Odr_oct *)odr_malloc(assoc->encode, sizeof(Odr_oct));
                 o->buf = (unsigned char *)
-                    odr_malloc(assoc->encode, o->len = o->size =
+                    odr_malloc(assoc->encode, o->len =
                                strlen(bsrr->entries[i].term));
+#if OCT_SIZE
+                o->size = o->len;
+#endif
                 memcpy(o->buf, bsrr->entries[i].term, o->len);
                 yaz_log(YLOG_DEBUG, "  term #%d: '%s' (" ODR_INT_PRINTF ")", i,
                          bsrr->entries[i].term, bsrr->entries[i].occurrences);