X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fclient.c;h=9cb51409633e8b37c013d79cb6e2a83ab3f5a43c;hb=c4c6f81c993175e3445af4d6da2c5d152aa33365;hp=ad63e3c5dd76750d429e08fe00714a443e92407d;hpb=f8892da7570d4e365d36d2de128cc581f5240980;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index ad63e3c..9cb5140 100644 --- a/src/client.c +++ b/src/client.c @@ -271,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); @@ -290,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) @@ -304,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); @@ -383,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)) @@ -456,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); }