X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fclient.c;h=426b2897a2423ce30d3cd2a10c10fe31371d34cf;hb=6969c366e0d8c8fa7e57f2cdd8c93669561b96a4;hp=9033a342be9df72c3d985c6c6c2f691c4d90d7a8;hpb=176376dff9970a7e34c8cabcbf2d08d01e9fa9e7;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index 9033a34..426b289 100644 --- a/src/client.c +++ b/src/client.c @@ -969,6 +969,8 @@ int client_destroy(struct client *c) xfree(c->addinfo); c->addinfo = 0; xfree(c->id); + xfree(c->sort_strategy); + xfree(c->sort_criteria); assert(!c->connection); facet_limits_destroy(c->facet_limits); @@ -1224,8 +1226,9 @@ static int apply_limit(struct session_database *sdb, } // Parse the query given the settings specific to this client -// return 0 if query is OK but different from before -// return 1 if query is OK but same as before +// client variable same_search is set as below as well as returned: +// 0 if query is OK but different from before +// 1 if query is OK but same as before // return -1 on query error // return -2 on limit error int client_parse_query(struct client *cl, const char *query, @@ -1268,7 +1271,7 @@ int client_parse_query(struct client *cl, const char *query, facet_limits_destroy(cl->facet_limits); cl->facet_limits = facet_limits_dup(facet_limits); - yaz_log(YLOG_LOG, "Client %s: CCL query: %s limit: %s", client_get_id(cl), wrbuf_cstr(w_ccl), wrbuf_cstr(w_pdf)); + yaz_log(YLOG_LOG, "Client %s: CCL query: %s limit: %s", client_get_id(cl), wrbuf_cstr(w_ccl), wrbuf_cstr(w_pqf)); cn = ccl_find_str(ccl_map, wrbuf_cstr(w_ccl), &cerror, &cpos); ccl_qual_rm(&ccl_map); if (!cn) @@ -1307,9 +1310,15 @@ int client_parse_query(struct client *cl, const char *query, /* Compares query and limit with old one. If different we need to research */ if (!cl->pquery || strcmp(cl->pquery, wrbuf_cstr(w_pqf))) { + if (cl->pquery) + session_log(se, YLOG_LOG, "Client %s: Re-search due query/limit change: %s to %s", + client_get_id(cl), cl->pquery, wrbuf_cstr(w_pqf)); xfree(cl->pquery); cl->pquery = xstrdup(wrbuf_cstr(w_pqf)); + // return value is no longer used. ret_value = 0; + // Need to (re)search + cl->same_search= 0; } wrbuf_destroy(w_pqf); @@ -1339,6 +1348,9 @@ int client_parse_query(struct client *cl, const char *query, cl->cqlquery = make_cqlquery(cl, zquery); if (!cl->cqlquery) ret_value = -1; + else + session_log(se, YLOG_LOG, "Client %s native query: %s (%s)", + client_get_id(cl), cl->cqlquery, sru); } } odr_destroy(odr_out); @@ -1359,14 +1371,11 @@ int client_parse_query(struct client *cl, const char *query, int client_parse_sort(struct client *cl, struct reclist_sortparms *sp) { - struct session *se = client_get_session(cl); if (sp) - { /* first entry is current sorting ! */ + { const char *sort_strategy_and_spec = - get_strategy_plus_sort(cl, se->sorted_results->name); - - int increasing = se->sorted_results->increasing; - // int type = se->sorted_results->type; + get_strategy_plus_sort(cl, sp->name); + int increasing = sp->increasing; if (sort_strategy_and_spec && strlen(sort_strategy_and_spec) < 40) { char strategy[50], *p; @@ -1388,23 +1397,29 @@ int client_parse_sort(struct client *cl, struct reclist_sortparms *sp) if (!cl->sort_criteria || strcmp(cl->sort_criteria, p)) cl->same_search = 0; if (cl->same_search == 0) { - cl->sort_strategy = nmem_strdup(se->nmem, strategy); - cl->sort_criteria = nmem_strdup(se->nmem, p); + xfree(cl->sort_strategy); + cl->sort_strategy = xstrdup(strategy); + xfree(cl->sort_criteria); + cl->sort_criteria = xstrdup(p); } } else { yaz_log(YLOG_LOG, "Client %s: Invalid sort strategy and spec found %s", client_get_id(cl), sort_strategy_and_spec); + xfree(cl->sort_strategy); cl->sort_strategy = 0; + xfree(cl->sort_criteria); cl->sort_criteria = 0; } } else { yaz_log(YLOG_LOG, "Client %s: No sort strategy and spec found.", client_get_id(cl)); + xfree(cl->sort_strategy); cl->sort_strategy = 0; + xfree(cl->sort_criteria); cl->sort_criteria = 0; } } - return cl->same_search; + return !cl->same_search; } void client_set_session(struct client *cl, struct session *se)