X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fclient.c;h=39190c0098616c18277b2953239304d6fc4951ef;hb=e07a5d5dfcf5be4cc9eb3ab91a60866ff0aee09c;hp=05f654179a5c3b3e85b76e5261168e0e81898fc5;hpb=e7b239d4c86d0bd72517054aed2887ba246de50f;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index 05f6541..39190c0 100644 --- a/src/client.c +++ b/src/client.c @@ -659,8 +659,8 @@ int client_has_facet(struct client *cl, const char *name) return 0; } -void client_start_search(struct client *cl, const char *sort_strategy, - const char *sort_spec) +void client_start_search(struct client *cl, const char *sort_strategy_and_spec, + int increasing) { struct session_database *sdb = client_get_database(cl); struct connection *co = client_get_connection(cl); @@ -676,6 +676,7 @@ void client_start_search(struct client *cl, const char *sort_strategy, const char *opt_preferred = session_setting_oneval(sdb, PZ_PREFERRED); const char *extra_args = session_setting_oneval(sdb, PZ_EXTRA_ARGS); char maxrecs_str[24], startrecs_str[24]; + ZOOM_query q; assert(link); @@ -727,38 +728,42 @@ void client_start_search(struct client *cl, const char *sort_strategy, /* facets definition is in PQF */ client_set_facets_request(cl, link); + q = ZOOM_query_create(); if (cl->cqlquery) { - ZOOM_query q = ZOOM_query_create(); yaz_log(YLOG_LOG, "Search %s CQL: %s", client_get_id(cl), cl->cqlquery); ZOOM_query_cql(q, cl->cqlquery); if (*opt_sort) ZOOM_query_sortby(q, opt_sort); - if (sort_strategy && sort_spec) - { - yaz_log(YLOG_LOG, "applying %s %s", sort_strategy, sort_spec); - ZOOM_query_sortby2(q, sort_strategy, sort_spec); - } - rs = ZOOM_connection_search(link, q); - ZOOM_query_destroy(q); } else { - ZOOM_query q = ZOOM_query_create(); - yaz_log(YLOG_LOG, "Search %s PQF: %s", client_get_id(cl), cl->pquery); - + ZOOM_query_prefix(q, cl->pquery); - - if (sort_strategy && sort_spec) + } + if (sort_strategy_and_spec && + strlen(sort_strategy_and_spec) < 40 /* spec below */) + { + char spec[50], *p; + strcpy(spec, sort_strategy_and_spec); + p = strchr(spec, ':'); + if (p) { - yaz_log(YLOG_LOG, "applying %s %s", sort_strategy, sort_spec); - ZOOM_query_sortby2(q, sort_strategy, sort_spec); + *p++ = '\0'; /* cut the string in two */ + while (*p == ' ') + p++; + if (increasing) + strcat(p, " <"); + else + strcat(p, " >"); + yaz_log(YLOG_LOG, "applying %s %s", spec, p); + ZOOM_query_sortby2(q, spec, p); } - rs = ZOOM_connection_search(link, q); - ZOOM_query_destroy(q); } + rs = ZOOM_connection_search(link, q); + ZOOM_query_destroy(q); ZOOM_resultset_destroy(cl->resultset); cl->resultset = rs; connection_continue(co);