Defined log level bits app2 and app3
[yaz-moved-to-github.git] / zutil / zoom-c.c
index 377c2b5..578c57f 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 2000-2003, Index Data
  * See the file LICENSE for details.
  *
- * $Id: zoom-c.c,v 1.31 2003-04-23 20:38:19 adam Exp $
+ * $Id: zoom-c.c,v 1.35 2003-05-20 08:22:33 adam Exp $
  *
  * ZOOM layer for C, connections, result sets, queries.
  */
@@ -68,7 +68,10 @@ static ZOOM_Event ZOOM_connection_get_event(ZOOM_connection c)
 {
     ZOOM_Event event = c->m_queue_front;
     if (!event)
+    {
+        c->last_event = ZOOM_EVENT_NONE;
        return 0;
+    }
     assert (c->m_queue_back);
     c->m_queue_front = event->prev;
     if (c->m_queue_front)
@@ -106,11 +109,13 @@ static void set_dset_error (ZOOM_connection c, int error,
                 addinfo2 ? addinfo2 : "");
 }
 
+#if HAVE_XML2
 static void set_HTTP_error (ZOOM_connection c, int error,
                             const char *addinfo, const char *addinfo2)
 {
     set_dset_error(c, error, "HTTP", addinfo, addinfo2);
 }
+#endif
 
 static void set_ZOOM_error (ZOOM_connection c, int error,
                            const char *addinfo)
@@ -172,6 +177,7 @@ void ZOOM_connection_remove_task (ZOOM_connection c)
        switch (task->which)
        {
        case ZOOM_TASK_SEARCH:
+
            ZOOM_resultset_destroy (task->u.search.resultset);
            break;
        case ZOOM_TASK_RETRIEVE:
@@ -502,6 +508,7 @@ ZOOM_resultset ZOOM_resultset_create ()
     r->setname = 0;
     r->schema = 0;
     r->count = 0;
+    r->step = 0;
     r->record_cache = 0;
     r->r_sort_spec = 0;
     r->query = 0;
@@ -537,6 +544,7 @@ ZOOM_connection_search(ZOOM_connection c, ZOOM_query q)
 
     r->start = ZOOM_options_get_int(r->options, "start", 0);
     r->count = ZOOM_options_get_int(r->options, "count", 0);
+    r->step = ZOOM_options_get_int(r->options, "step", 0);
     r->piggyback = ZOOM_options_get_bool (r->options, "piggyback", 1);
     cp = ZOOM_options_get (r->options, "setname");
     if (cp)
@@ -1111,7 +1119,8 @@ static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
         return zoom_complete;
     }
     sr->u.request->startRecord = odr_intdup (c->odr_out, resultset->start + 1);
-    sr->u.request->maximumRecords = odr_intdup (c->odr_out, resultset->count);
+    sr->u.request->maximumRecords = odr_intdup (
+        c->odr_out, resultset->step>0 ? resultset->step : resultset->count);
     sr->u.request->recordSchema = resultset->schema;
 
     recordPacking = ZOOM_resultset_option_get (resultset, "recordPacking");
@@ -1185,7 +1194,7 @@ static zoom_ret ZOOM_connection_send_search (ZOOM_connection c)
        /* Regular piggyback - do it unless we're going to do sort */
        *search_req->largeSetLowerBound = 2000000000;
        *search_req->smallSetUpperBound = 0;
-       *search_req->mediumSetPresentNumber = r->count;
+       *search_req->mediumSetPresentNumber = r->step>0 ? r->step : r->count;
        smallSetElementSetName = 0;
     }
     else
@@ -1307,8 +1316,14 @@ ZOOM_resultset_record_immediate (ZOOM_resultset s,size_t pos)
 ZOOM_API(ZOOM_record)
 ZOOM_resultset_record (ZOOM_resultset r, size_t pos)
 {
-    ZOOM_resultset_retrieve (r, 1, pos, 1);
-    return ZOOM_resultset_record_immediate (r, pos);
+    ZOOM_record rec = ZOOM_resultset_record_immediate(r, pos);
+
+    if (!rec)
+    {
+        ZOOM_resultset_retrieve (r, 1, pos, 1);
+        rec = ZOOM_resultset_record_immediate (r, pos);
+    }
+    return rec;
 }
 
 ZOOM_API(void)
@@ -1526,6 +1541,9 @@ static void record_cache_add (ZOOM_resultset r, Z_NamePlusRecord *npr,
     const char *syntax = 
         ZOOM_resultset_option_get (r, "preferredRecordSyntax");
     
+    ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_RECV_RECORD);
+    ZOOM_connection_put_event(r->connection, event);
+
     for (rc = r->record_cache; rc; rc = rc->next)
     {
        if (pos == rc->pos)
@@ -1665,11 +1683,15 @@ static void handle_present_response (ZOOM_connection c, Z_PresentResponse *pr)
 static void handle_search_response (ZOOM_connection c, Z_SearchResponse *sr)
 {
     ZOOM_resultset resultset;
-
+    ZOOM_Event event;
+    
     yaz_log (LOG_DEBUG, "got search response");
-
+    
     if (!c->tasks || c->tasks->which != ZOOM_TASK_SEARCH)
        return ;
+    
+    event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH);
+    ZOOM_connection_put_event(c, event);
 
     resultset = c->tasks->u.search.resultset;
 
@@ -1795,7 +1817,8 @@ static zoom_ret send_present (ZOOM_connection c)
     resultset->start += i;
     resultset->count -= i;
     *req->resultSetStartPoint = resultset->start + 1;
-    *req->numberOfRecordsRequested = resultset->count;
+    *req->numberOfRecordsRequested = resultset->step>0 ?
+        resultset->step : resultset->count;
     assert (*req->numberOfRecordsRequested > 0);
 
     if (syntax && *syntax)
@@ -2449,6 +2472,7 @@ static void handle_srw_response(ZOOM_connection c,
     ZOOM_resultset resultset = 0;
     int i;
     NMEM nmem;
+    ZOOM_Event event;
 
     if (!c->tasks)
         return;
@@ -2460,6 +2484,9 @@ static void handle_srw_response(ZOOM_connection c,
     else
        return ;
 
+    event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH);
+    ZOOM_connection_put_event(c, event);
+
     resultset->size = 0;
 
     yaz_log(LOG_DEBUG, "got SRW response OK");