X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Flogic.c;h=28061a31a826f0553aaf71e994f72d8a71f5a28f;hb=d0fc1a702b50978db129c169c8c309af42f0746b;hp=e131fb37d17592c0f05720395011b601726b0fce;hpb=52793fbdcc6099f1c86e0b4c2c918767c22f7bcc;p=pazpar2-moved-to-github.git diff --git a/src/logic.c b/src/logic.c index e131fb3..28061a3 100644 --- a/src/logic.c +++ b/src/logic.c @@ -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; }