ZOOM: initial experiments with memcached
[yaz-moved-to-github.git] / src / zoom-z3950.c
index 797ffb3..a16a809 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2013 Index Data
+ * Copyright (C) Index Data
  * See the file LICENSE for details.
  */
 /**
@@ -126,9 +126,7 @@ static Z_External *encode_ill_request(ZOOM_package p)
         r->which = Z_External_single;
 
         r->u.single_ASN1_type =
-            odr_create_Odr_oct(out,
-                               (unsigned char *)illRequest_buf,
-                               illRequest_size);
+            odr_create_Odr_oct(out, illRequest_buf, illRequest_size);
     }
     return r;
 }
@@ -272,8 +270,7 @@ static Z_APDU *create_xmlupdate_package(ZOOM_package p)
     ext->indirect_reference = 0;
 
     ext->which = Z_External_octet;
-    ext->u.single_ASN1_type =
-        odr_create_Odr_oct(p->odr_out, (const unsigned char *) doc, len);
+    ext->u.single_ASN1_type = odr_create_Odr_oct(p->odr_out, doc, len);
     return apdu;
 }
 
@@ -417,8 +414,7 @@ static Z_APDU *create_update_package(ZOOM_package p)
         if (recordIdOpaque)
         {
             notToKeep->elements[0]->u.opaque =
-                odr_create_Odr_oct(p->odr_out,
-                                   (const unsigned char *) recordIdOpaque,
+                odr_create_Odr_oct(p->odr_out, recordIdOpaque,
                                    recordIdOpaque_len);
         }
         else if (recordIdNumber)
@@ -674,8 +670,7 @@ zoom_ret ZOOM_connection_Z3950_send_search(ZOOM_connection c)
     if (facets) {
         Z_FacetList *facet_list = yaz_pqf_parse_facet_list(c->odr_out, facets);
         if (facet_list) {
-            Z_OtherInformation **oi;
-            yaz_oi_APDU(apdu, &oi);
+            Z_OtherInformation **oi = &search_req->additionalSearchInfo;
             yaz_oi_set_facetlist(oi, c->odr_out, facet_list);
         }
         else
@@ -783,15 +778,6 @@ zoom_ret ZOOM_connection_Z3950_send_search(ZOOM_connection c)
                result sets on the server. */
             for (ord = 1; ; ord++)
             {
-#if ZOOM_RESULT_LISTS
-                ZOOM_resultsets rsp;
-                sprintf(setname, "%d", ord);
-                for (rsp = c->resultsets; rsp; rsp = rsp->next)
-                    if (rsp->resultset->setname && !strcmp(rsp->resultset->setname, setname))
-                        break;
-                if (!rsp)
-                    break;
-#else
                 ZOOM_resultset rp;
                 sprintf(setname, "%d", ord);
                 for (rp = c->resultsets; rp; rp = rp->next)
@@ -799,8 +785,6 @@ zoom_ret ZOOM_connection_Z3950_send_search(ZOOM_connection c)
                         break;
                 if (!rp)
                     break;
-#endif
-
             }
             r->setname = xstrdup(setname);
             yaz_log(c->log_details, "%p ZOOM_connection_send_search: "
@@ -1289,6 +1273,24 @@ static void handle_Z3950_search_response(ZOOM_connection c,
     handle_facet_result(c, resultset, sr->additionalSearchInfo);
 
     resultset->size = *sr->resultCount;
+
+#if HAVE_LIBMEMCACHED_MEMCACHED_H
+    if (c->mc_st)
+    {
+        uint32_t flags = 0;
+        memcached_return_t rc;
+        time_t expiration = 36000;
+        char str[40];
+
+        sprintf(str, ODR_INT_PRINTF, *sr->resultCount);
+        rc = memcached_set(c->mc_st,
+                           wrbuf_buf(resultset->mc_key),wrbuf_len(resultset->mc_key),
+                           str, strlen(str), expiration, flags);
+        yaz_log(YLOG_LOG, "Key=%s value=%s rc=%u %s",
+                wrbuf_cstr(resultset->mc_key), str, (unsigned) rc,
+                memcached_last_error_message(c->mc_st));
+    }
+#endif
     handle_Z3950_records(c, sr->records, 0);
 }
 
@@ -1402,6 +1404,7 @@ static void handle_Z3950_records(ZOOM_connection c, Z_Records *sr,
                         "ZOOM C generated. Present phase and no records");
                 ZOOM_record_cache_add(resultset, myrec, *start,
                                       syntax, elementSetName, schema, 0);
+                *count = 0;
             }
         }
         else if (present_phase)
@@ -1414,6 +1417,7 @@ static void handle_Z3950_records(ZOOM_connection c, Z_Records *sr,
                     "ZOOM C generated: Present response and no records");
             ZOOM_record_cache_add(resultset, myrec, *start,
                                   syntax, elementSetName, schema, 0);
+            *count = 0;
         }
     }
 }