X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fclient.c;h=9cb51409633e8b37c013d79cb6e2a83ab3f5a43c;hb=c4c6f81c993175e3445af4d6da2c5d152aa33365;hp=edb5156f86e6cbf3820979e2e6e426bca2dc8451;hpb=5a8e7cac48386b731dc24e38619197075db96cbf;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index edb5156..9cb5140 100644 --- a/src/client.c +++ b/src/client.c @@ -35,7 +35,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #endif #include -#include #include #include @@ -272,7 +271,7 @@ static void client_send_raw_present(struct client *cl) connection_continue(co); } -static int nativesyntax_to_type(struct session_database *sdb, char *type) +static int nativesyntax_to_type(struct session_database *sdb, char *type, ZOOM_record rec) { const char *s = session_setting_oneval(sdb, PZ_NATIVESYNTAX); @@ -291,7 +290,25 @@ static int nativesyntax_to_type(struct session_database *sdb, char *type) return -1; return 0; } - return -1; + else /* attempt to deduce structure */ + { + const char *syntax = ZOOM_record_get(rec, "syntax", NULL); + if (syntax) + { + if (!strcmp(syntax, "XML")) + { + strcpy(type, "xml"); + return 0; + } + else if (!strcmp(syntax, "USmarc") || !strcmp(syntax, "MARC21")) + { + strcpy(type, "xml; charset=marc8-s"); + return 0; + } + else return -1; + } + else return -1; + } } static void ingest_raw_record(struct client *cl, ZOOM_record rec) @@ -305,7 +322,7 @@ static void ingest_raw_record(struct client *cl, ZOOM_record rec) else { struct session_database *sdb = client_get_database(cl); - nativesyntax_to_type(sdb, type); + nativesyntax_to_type(sdb, type, rec); } buf = ZOOM_record_get(rec, type, &len); @@ -384,7 +401,8 @@ void client_record_response(struct client *cl) struct session_database *sdb = client_get_database(cl); const char *xmlrec; char type[80]; - nativesyntax_to_type(sdb, type); + if (nativesyntax_to_type(sdb, type, rec)) + yaz_log(YLOG_WARN, "Failed to determine record type"); if ((xmlrec = ZOOM_record_get(rec, type, NULL))) { if (ingest_record(cl, xmlrec, cl->record_offset)) @@ -457,13 +475,17 @@ void client_start_search(struct client *cl) if (cl->cqlquery) { + yaz_log(YLOG_LOG, "Search %s CQL: %s", sdb->database->url, cl->cqlquery); ZOOM_query q = ZOOM_query_create(); ZOOM_query_cql(q, cl->cqlquery); rs = ZOOM_connection_search(link, q); ZOOM_query_destroy(q); } else + { + yaz_log(YLOG_LOG, "Search %s PQF: %s", sdb->database->url, cl->pquery); rs = ZOOM_connection_search_pqf(link, cl->pquery); + } connection_set_resultset(co, rs); connection_continue(co); } @@ -592,6 +614,7 @@ int client_parse_query(struct client *cl, const char *query) int cerror, cpos; CCL_bibset ccl_map = prepare_cclmap(cl); const char *sru = session_setting_oneval(sdb, PZ_SRU); + const char *pqf_prefix = session_setting_oneval(sdb, PZ_PQF_PREFIX); if (!ccl_map) return -1; @@ -606,6 +629,11 @@ int client_parse_query(struct client *cl, const char *query) return -1; } wrbuf_rewind(se->wrbuf); + if (*pqf_prefix) + { + wrbuf_puts(se->wrbuf, pqf_prefix); + wrbuf_puts(se->wrbuf, " "); + } ccl_pquery(se->wrbuf, cn); xfree(cl->pquery); cl->pquery = xstrdup(wrbuf_cstr(se->wrbuf));