Added include of sys/time.h
[pazpar2-moved-to-github.git] / src / logic.c
index e131fb3..28061a3 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: logic.c,v 1.47 2007-06-28 09:36:10 adam Exp $
+/* $Id: logic.c,v 1.49 2007-07-06 14:31:06 adam Exp $
    Copyright (c) 2006-2007, Index Data.
 
 This file is part of Pazpar2.
@@ -170,6 +170,18 @@ xmlDoc *record_to_xml(struct session_database *sdb, Z_External *rec)
             return 0;
         }
     }
+    else if (rec->which == Z_External_OPAC)
+    {
+        /* OPAC gets converted to XML too */
+        WRBUF wrbuf_opac = wrbuf_alloc();
+        yaz_display_OPAC(wrbuf_opac, rec->u.opac, 0);
+
+        rdoc = xmlParseMemory((char*) wrbuf_buf(wrbuf_opac),
+                              wrbuf_len(wrbuf_opac));
+        if (!rdoc)
+            yaz_log(YLOG_WARN, "Unable to parse OPAC XML");
+        wrbuf_destroy(wrbuf_opac);
+    }
     else if (oid && yaz_oid_is_iso2709(oid))
     {
         /* ISO2709 gets converted to MARCXML */
@@ -497,6 +509,8 @@ enum pazpar2_error_code search(struct session *se,
                                const char **addinfo)
 {
     int live_channels = 0;
+    int no_working = 0;
+    int no_failed = 0;
     struct client *cl;
     struct database_criterion *criteria;
 
@@ -528,17 +542,22 @@ enum pazpar2_error_code search(struct session *se,
             *addinfo = client_get_database(cl)->database->url;
             return PAZPAR2_CONFIG_TARGET;
         }
-        // Query must parse for all targets
+        // Parse query for target
         if (client_parse_query(cl, query) < 0)
+            no_failed++;
+        else
         {
-            *addinfo = "query";
-            return PAZPAR2_MALFORMED_PARAMETER_VALUE;
+            no_working++;
+            client_prep_connection(cl);
         }
     }
 
-    for (cl = se->clients; cl; cl = client_next_in_session(cl))
-        client_prep_connection(cl);
-
+    // If no queries could be mapped, we signal an error
+    if (no_working == 0)
+    {
+        *addinfo = "query";
+        return PAZPAR2_MALFORMED_PARAMETER_VALUE;
+    }
     return PAZPAR2_NO_ERROR;
 }