Add ZOOM_resultset_release
authorAdam Dickmeiss <adam@indexdata.dk>
Fri, 18 Jun 2010 08:37:56 +0000 (10:37 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Fri, 18 Jun 2010 08:37:56 +0000 (10:37 +0200)
ZOOM_resultset_release releases a result set from a connection.
The result set will be on its own thereafter; no operations on it
will perform retrievals from a target. Only cached copies are
returned.

include/yaz/zoom.h
src/zoom-c.c

index 14247a3..668ff84 100644 (file)
@@ -170,6 +170,14 @@ ZOOM_connection_search_pqf(ZOOM_connection c, const char *q);
 ZOOM_API(void)
 ZOOM_resultset_destroy(ZOOM_resultset r);
 
+/** release result set from connection.
+
+    The result will will no longer be able to perform retrievals
+    from the connection from which it was created.
+*/
+ZOOM_API(void)
+ZOOM_resultset_release(ZOOM_resultset r);
+
 /* result set option */
 ZOOM_API(const char *)
 ZOOM_resultset_option_get(ZOOM_resultset r, const char *key);
index dd1698c..d79e4e2 100644 (file)
@@ -793,6 +793,29 @@ ZOOM_API(int)
 
 static zoom_ret do_write(ZOOM_connection c);
 
+ZOOM_API(void) ZOOM_resultset_release(ZOOM_resultset r)
+{
+#if ZOOM_RESULT_LISTS
+#else
+    if (r->connection)
+    {
+        /* remove ourselves from the resultsets in connection */
+        ZOOM_resultset *rp = &r->connection->resultsets;
+        while (1)
+        {
+            assert(*rp);   /* we must be in this list!! */
+            if (*rp == r)
+            {   /* OK, we're here - take us out of it */
+                *rp = (*rp)->next;
+                break;
+            }
+            rp = &(*rp)->next;
+        }
+        r->connection = 0;
+    }
+#endif
+}
+
 ZOOM_API(void)
     ZOOM_connection_destroy(ZOOM_connection c)
 {
@@ -1102,24 +1125,7 @@ static void resultset_destroy(ZOOM_resultset r)
 
         yaz_log(log_details, "%p ZOOM_connection resultset_destroy: Deleting resultset (%p) ", r->connection, r);
         ZOOM_resultset_cache_reset(r);
-#if ZOOM_RESULT_LISTS
-#else
-        if (r->connection)
-        {
-            /* remove ourselves from the resultsets in connection */
-            ZOOM_resultset *rp = &r->connection->resultsets;
-            while (1)
-            {
-                assert(*rp);   /* we must be in this list!! */
-                if (*rp == r)
-                {   /* OK, we're here - take us out of it */
-                    *rp = (*rp)->next;
-                    break;
-                }
-                rp = &(*rp)->next;
-            }
-        }
-#endif
+        ZOOM_resultset_release(r);
         ZOOM_query_destroy(r->query);
         ZOOM_options_destroy(r->options);
         odr_destroy(r->odr);