Renamed Z_SRW_searchRetrieve to Z_SRW_PDU
[yaz-moved-to-github.git] / zutil / zoom-c.c
index 8281575..82c7c3e 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 2000-2003, Index Data
  * See the file LICENSE for details.
  *
- * $Id: zoom-c.c,v 1.23 2003-02-18 09:12:14 adam Exp $
+ * $Id: zoom-c.c,v 1.28 2003-02-23 14:26:58 adam Exp $
  *
  * ZOOM layer for C, connections, result sets, queries.
  */
@@ -100,7 +100,7 @@ static void set_dset_error (ZOOM_connection c, int error,
     else if (addinfo)
         c->addinfo = xstrdup(addinfo);
     if (error)
-        yaz_log(LOG_LOG, "Error %s %s:%d %s %s",
+        yaz_log(LOG_DEBUG, "Error %s %s:%d %s %s",
                 c->host_port ? c->host_port : "<>", dset, error,
                 addinfo ? addinfo : "",
                 addinfo2 ? addinfo2 : "");
@@ -388,6 +388,7 @@ ZOOM_query_create(void)
     s->z_query = 0;
     s->sort_spec = 0;
     s->odr = odr_createmem (ODR_ENCODE);
+    s->query_string = 0;
 
     return s;
 }
@@ -410,6 +411,7 @@ ZOOM_query_destroy(ZOOM_query s)
 ZOOM_API(int)
 ZOOM_query_prefix(ZOOM_query s, const char *str)
 {
+    s->query_string = odr_strdup(s->odr, str);
     s->z_query = (Z_Query *) odr_malloc (s->odr, sizeof(*s->z_query));
     s->z_query->which = Z_Query_type_1;
     s->z_query->u.type_1 =  p_query_rpn(s->odr, PROTO_Z3950, str);
@@ -423,16 +425,19 @@ ZOOM_query_cql(ZOOM_query s, const char *str)
 {
     Z_External *ext;
 
+    s->query_string = odr_strdup(s->odr, str);
+
     ext = (Z_External *) odr_malloc(s->odr, sizeof(*ext));
     ext->direct_reference = odr_getoidbystr(s->odr, "1.2.840.10003.16.2");
     ext->indirect_reference = 0;
     ext->descriptor = 0;
     ext->which = Z_External_CQL;
-    ext->u.cql = odr_strdup(s->odr, str);
+    ext->u.cql = s->query_string;
     
     s->z_query = (Z_Query *) odr_malloc (s->odr, sizeof(*s->z_query));
     s->z_query->which = Z_Query_type_104;
     s->z_query->u.type_104 =  ext;
+
     return 0;
 }
 
@@ -499,8 +504,7 @@ ZOOM_resultset ZOOM_resultset_create ()
     r->count = 0;
     r->record_cache = 0;
     r->r_sort_spec = 0;
-    r->z_query = 0;
-    r->search = 0;
+    r->query = 0;
     r->connection = 0;
     r->next = 0;
     return r;
@@ -527,8 +531,7 @@ ZOOM_connection_search(ZOOM_connection c, ZOOM_query q)
     const char *cp;
 
     r->r_sort_spec = q->sort_spec;
-    r->z_query = q->z_query;
-    r->search = q;
+    r->query = q;
 
     r->options = ZOOM_options_create_with_parent(c->options);
 
@@ -547,7 +550,7 @@ ZOOM_connection_search(ZOOM_connection c, ZOOM_query q)
     r->next = c->resultsets;
     c->resultsets = r;
 
-    if (c->host_port && c->proto == PROTO_SRW)
+    if (c->host_port && c->proto == PROTO_HTTP)
     {
         if (!c->cs)
         {
@@ -605,7 +608,7 @@ ZOOM_resultset_destroy(ZOOM_resultset r)
                rp = &(*rp)->next;
            }
        }
-       ZOOM_query_destroy (r->search);
+       ZOOM_query_destroy (r->query);
        ZOOM_options_destroy (r->options);
        odr_destroy (r->odr);
         xfree (r->setname);
@@ -642,7 +645,7 @@ static void ZOOM_resultset_retrieve (ZOOM_resultset r,
     if (!c)
        return;
 
-    if (c->host_port && c->proto == PROTO_SRW)
+    if (c->host_port && c->proto == PROTO_HTTP)
     {
         if (!c->cs)
         {
@@ -714,7 +717,7 @@ static zoom_ret do_connect (ZOOM_connection c)
     {
 #if HAVE_XML2
         const char *path;
-        c->proto = PROTO_SRW;
+        c->proto = PROTO_HTTP;
         effective_host = c->host_port + 5;
         if (*effective_host == '/')
             effective_host++;
@@ -976,7 +979,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c)
 }
 
 #if HAVE_XML2
-static zoom_ret send_srw (ZOOM_connection c, Z_SRW_searchRetrieve *sr)
+static zoom_ret send_srw (ZOOM_connection c, Z_SRW_PDU *sr)
 {
     Z_SOAP_Handler h[2] = {
         {"http://www.loc.gov/zing/srw/v1.0/", 0, (Z_SOAP_fun) yaz_srw_codec},
@@ -1023,7 +1026,7 @@ static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
 {
     int i;
     ZOOM_resultset resultset = 0;
-    Z_SRW_searchRetrieve *sr = 0;
+    Z_SRW_PDU *sr = 0;
 
     if (c->error)                  /* don't continue on error */
        return zoom_complete;
@@ -1056,17 +1059,22 @@ static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
         if (i == resultset->count)
             return zoom_complete;
     }
-    assert(resultset->z_query);
+    assert(resultset->query);
         
     sr = yaz_srw_get(c->odr_out, Z_SRW_searchRetrieve_request);
 
-    if (resultset->z_query->which == Z_Query_type_104
-        && resultset->z_query->u.type_104->which == Z_External_CQL)
-        sr->u.request->query = resultset->z_query->u.type_104->u.cql;
-    else if (resultset->z_query->which == Z_Query_type_1)
-    { 
-        set_ZOOM_error(c, ZOOM_ERROR_UNSUPPORTED_QUERY, "Type-1");
-        return zoom_complete;
+    if (resultset->query->z_query->which == Z_Query_type_104
+        && resultset->query->z_query->u.type_104->which == Z_External_CQL)
+    {
+
+        sr->u.request->query_type = Z_SRW_query_type_cql;
+        sr->u.request->query.cql =resultset->query->z_query->u.type_104->u.cql;
+    }
+    else if (resultset->query->z_query->which == Z_Query_type_1 &&
+             resultset->query->z_query->u.type_1)
+    {
+        sr->u.request->query_type = Z_SRW_query_type_pqf;
+        sr->u.request->query.pqf = resultset->query->query_string;
     }
     else
     {
@@ -1117,10 +1125,10 @@ static zoom_ret ZOOM_connection_send_search (ZOOM_connection c)
        mediumSetElementSetName = elementSetName;
 
     assert (r);
-    assert (r->z_query);
+    assert (r->query);
 
     /* prepare query for the search request */
-    search_req->query = r->z_query;
+    search_req->query = r->query->z_query;
 
     search_req->databaseNames =
        set_DatabaseNames (c, r->options, &search_req->num_databaseNames);
@@ -2216,13 +2224,13 @@ static int ZOOM_connection_exec_task (ZOOM_connection c)
         switch (task->which)
         {
         case ZOOM_TASK_SEARCH:
-            if (c->proto == PROTO_SRW)
+            if (c->proto == PROTO_HTTP)
                 ret = ZOOM_connection_srw_send_search(c);
             else
                 ret = ZOOM_connection_send_search(c);
             break;
         case ZOOM_TASK_RETRIEVE:
-            if (c->proto == PROTO_SRW)
+            if (c->proto == PROTO_HTTP)
                 ret = ZOOM_connection_srw_send_search(c);
             else
                 ret = send_present (c);
@@ -2411,7 +2419,7 @@ static void handle_srw_response(ZOOM_connection c,
 
     resultset->size = 0;
 
-    yaz_log(LOG_LOG, "got SRW response OK");
+    yaz_log(LOG_DEBUG, "got SRW response OK");
     
     if (res->numberOfRecords)
         resultset->size = *res->numberOfRecords;
@@ -2445,7 +2453,6 @@ static void handle_srw_response(ZOOM_connection c,
             npr->u.databaseRecord->u.octet_aligned->size = 
             res->records[i].recordData_len;
         record_cache_add (resultset, npr, pos);
-        yaz_log(LOG_LOG, "add SRW record to cache to pos %d", pos);
     }
     if (res->num_diagnostics > 0)
     {
@@ -2484,7 +2491,7 @@ static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres)
         if (!ret && soap_package->which == Z_SOAP_generic &&
             soap_package->u.generic->no == 0)
         {
-            Z_SRW_searchRetrieve *sr = soap_package->u.generic->p;
+            Z_SRW_PDU *sr = soap_package->u.generic->p;
             if (sr->which == Z_SRW_searchRetrieve_response)
                 handle_srw_response(c, sr->u.response);
             else
@@ -2729,7 +2736,7 @@ ZOOM_connection_error_x (ZOOM_connection c, const char **cp,
         else if (!strcmp(c->diagset, "Bib-1"))
             *cp = ZOOM_diag_str(error);
         else if (!strcmp(c->diagset, "SRW"))
-            *cp = yaz_srw_error_str(c->error);
+            *cp = yaz_diag_srw_str(c->error);
         else
             *cp = "Unknown error and diagnostic set";
     }