Fix problem hit count caching in async mode
[yaz-moved-to-github.git] / src / zoom-c.c
index 241444f..b1874ea 100644 (file)
@@ -96,8 +96,6 @@ int ZOOM_uri_to_code(const char *uri)
     return code;
 }
 
-
-
 void ZOOM_set_error(ZOOM_connection c, int error, const char *addinfo)
 {
     ZOOM_set_dset_error(c, error, "ZOOM", addinfo, 0);
@@ -700,7 +698,7 @@ ZOOM_resultset ZOOM_resultset_create(void)
     yaz_log(log_details0, "%p ZOOM_resultset_create", r);
     r->refcount = 1;
     r->size = 0;
-    r->odr = odr_createmem(ODR_ENCODE);
+    r->odr = odr_createmem(ODR_DECODE);
     r->piggyback = 1;
     r->setname = 0;
     r->step = 0;
@@ -752,6 +750,7 @@ ZOOM_API(ZOOM_resultset)
     yaz_log(c->log_api, "%p ZOOM_connection_search set %p query %p", c, r, q);
     r->r_sort_spec = ZOOM_query_get_sortspec(q);
     r->query = q;
+    ZOOM_query_addref(q);
 
     r->options = ZOOM_options_create_with_parent(c->options);
 
@@ -777,26 +776,20 @@ ZOOM_API(ZOOM_resultset)
 
 #if HAVE_LIBMEMCACHED_MEMCACHED_H
     r->mc_key = wrbuf_alloc();
+    wrbuf_puts(r->mc_key, "0;");
     wrbuf_puts(r->mc_key, c->host_port);
     wrbuf_puts(r->mc_key, ";");
-    wrbuf_puts(r->mc_key, ZOOM_query_get_query_string(q));
-    if (c->mc_st)
-    {
-        size_t v_len;
-        uint32_t flags;
-        memcached_return_t rc;
-        char *v = memcached_get(c->mc_st, wrbuf_buf(r->mc_key),
-                                wrbuf_len(r->mc_key), &v_len, &flags, &rc);
-        if (v)
-        {
-            yaz_log(YLOG_LOG, "For key %s got value %.*s",
-                    wrbuf_cstr(r->mc_key), (int) v_len, v);
-        }
-        else
-        {
-            yaz_log(YLOG_LOG, "For key %s got NO value", wrbuf_cstr(r->mc_key));
-        }
-    }
+    if (c->user)
+        wrbuf_puts(r->mc_key, c->user);
+    wrbuf_puts(r->mc_key, ";");
+    if (c->group)
+        wrbuf_puts(r->mc_key, c->group);
+    wrbuf_puts(r->mc_key, ";");
+    if (c->password)
+        wrbuf_sha1_puts(r->mc_key, c->password, 1);
+    wrbuf_puts(r->mc_key, ";");
+    wrbuf_sha1_puts(r->mc_key, ZOOM_query_get_query_string(q), 1);
+    wrbuf_puts(r->mc_key, ";");
 #endif
 
     if (c->host_port && c->proto == PROTO_HTTP)
@@ -817,7 +810,6 @@ ZOOM_API(ZOOM_resultset)
     task->u.search.resultset = r;
     task->u.search.start = start;
     task->u.search.count = count;
-    task->u.search.recv_search_fired = 0;
 
     syntax = ZOOM_options_get(r->options, "preferredRecordSyntax");
     task->u.search.syntax = syntax ? xstrdup(syntax) : 0;
@@ -829,8 +821,6 @@ ZOOM_API(ZOOM_resultset)
 
     ZOOM_resultset_addref(r);
 
-    ZOOM_query_addref(q);
-
     if (!c->async)
     {
         while (ZOOM_event(1, &c))
@@ -1027,30 +1017,30 @@ ZOOM_API(void)
 }
 
 ZOOM_API(size_t)
-    ZOOM_resultset_facets_size(ZOOM_resultset r) {
+    ZOOM_resultset_facets_size(ZOOM_resultset r)
+{
     return r->num_facets;
 }
 
 ZOOM_API(ZOOM_facet_field)
-    ZOOM_resultset_get_facet_field(ZOOM_resultset r, const char *name) {
+    ZOOM_resultset_get_facet_field(ZOOM_resultset r, const char *name)
+{
     int num = r->num_facets;
     ZOOM_facet_field *facets = r->facets;
-    int index;
-    for (index = 0; index < num; index++) {
-        if (!strcmp(facets[index]->facet_name, name)) {
-            return facets[index];
-        }
-    }
+    int i;
+    for (i = 0; i < num; i++)
+        if (!strcmp(facets[i]->facet_name, name))
+            return facets[i];
     return 0;
 }
 
 ZOOM_API(ZOOM_facet_field)
-    ZOOM_resultset_get_facet_field_by_index(ZOOM_resultset r, int index) {
+    ZOOM_resultset_get_facet_field_by_index(ZOOM_resultset r, int idx)
+{
     int num = r->num_facets;
     ZOOM_facet_field *facets = r->facets;
-    if (index >= 0 && index < num) {
-        return facets[index];
-    }
+    if (idx >= 0 && idx < num)
+        return facets[idx];
     return 0;
 }
 
@@ -1079,7 +1069,8 @@ ZOOM_API(size_t)
 }
 
 ZOOM_API(const char*)
-    ZOOM_facet_field_get_term(ZOOM_facet_field field, size_t idx, int *freq) {
+    ZOOM_facet_field_get_term(ZOOM_facet_field field, size_t idx, int *freq)
+{
     *freq = field->facet_terms[idx].frequency;
     return field->facet_terms[idx].term;
 }
@@ -1492,7 +1483,7 @@ ZOOM_API(int)
             if (c->proto == PROTO_HTTP)
                 ret = ZOOM_connection_srw_send_search(c);
             else
-                ret = ZOOM_connection_Z3950_send_search(c);
+                ret = ZOOM_connection_Z3950_search(c);
             break;
         case ZOOM_TASK_CONNECT:
             ret = do_connect(c);