X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fclient.c;h=08cc49157bfa1bda5e53ee08f6db55e6c0c8c19d;hb=03931e4f790152dfec6ae6ca615d49e84940b987;hp=31c254337d9d5989498b4be7c01d5e30952e6deb;hpb=75b739a3a4548b5c4c1875f23e765c101bf3aed2;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index 31c2543..08cc491 100644 --- a/src/client.c +++ b/src/client.c @@ -59,10 +59,11 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #endif #include "pazpar2.h" - +#include "parameters.h" #include "client.h" #include "connection.h" #include "settings.h" +#include "relevance.h" /** \brief Represents client state for a connection to one search target */ struct client { @@ -101,7 +102,7 @@ static const char *client_states[] = { "Client_Disconnected" }; -static struct client *client_freelist = 0; +static struct client *client_freelist = 0; /* thread pr */ const char *client_get_state_str(struct client *cl) { @@ -253,6 +254,13 @@ int client_show_raw_begin(struct client *cl, int position, return 0; } +static void client_show_raw_delete(struct show_raw *r) +{ + xfree(r->syntax); + xfree(r->esn); + xfree(r); +} + void client_show_raw_remove(struct client *cl, void *data) { struct show_raw *rr = data; @@ -262,7 +270,7 @@ void client_show_raw_remove(struct client *cl, void *data) if (*rrp) { *rrp = rr->next; - xfree(rr); + client_show_raw_delete(rr); } } @@ -271,7 +279,7 @@ void client_show_raw_dequeue(struct client *cl) struct show_raw *rr = cl->show_raw; cl->show_raw = rr->next; - xfree(rr); + client_show_raw_delete(rr); } static void client_show_raw_error(struct client *cl, const char *addinfo) @@ -488,6 +496,7 @@ void client_start_search(struct client *cl) const char *opt_requestsyn = session_setting_oneval(sdb, PZ_REQUESTSYNTAX); const char *opt_maxrecs = session_setting_oneval(sdb, PZ_MAXRECS); const char *opt_sru = session_setting_oneval(sdb, PZ_SRU); + const char *opt_sort = session_setting_oneval(sdb, PZ_SORT); assert(link); @@ -511,11 +520,8 @@ void client_start_search(struct client *cl) if (*opt_maxrecs) ZOOM_connection_option_set(link, "count", opt_maxrecs); else - { - char n[128]; - sprintf(n, "%d", global_parameters.toget); - ZOOM_connection_option_set(link, "count", n); - } + ZOOM_connection_option_set(link, "count", "100"); + if (databaseName) ZOOM_connection_option_set(link, "databaseName", databaseName); @@ -526,6 +532,8 @@ void client_start_search(struct client *cl) ZOOM_query q = ZOOM_query_create(); yaz_log(YLOG_LOG, "Search %s CQL: %s", sdb->database->url, cl->cqlquery); ZOOM_query_cql(q, cl->cqlquery); + if (*opt_sort) + ZOOM_query_sortby(q, opt_sort); rs = ZOOM_connection_search(link, q); ZOOM_query_destroy(q); } @@ -643,17 +651,20 @@ static char *make_cqlquery(struct client *cl) char *r; WRBUF wrb = wrbuf_alloc(); int status; + ODR odr_out = odr_createmem(ODR_ENCODE); - zquery = p_query_rpn(global_parameters.odr_out, cl->pquery); + zquery = p_query_rpn(odr_out, cl->pquery); if ((status = cql_transform_rpn2cql_wrbuf(cqlt, wrb, zquery))) { yaz_log(YLOG_WARN, "failed to generate CQL query, code=%d", status); - return 0; + r = 0; } - r = xstrdup(wrbuf_cstr(wrb)); - + else + { + r = xstrdup(wrbuf_cstr(wrb)); + } wrbuf_destroy(wrb); - odr_reset(global_parameters.odr_out); // releases the zquery + odr_destroy(odr_out); cql_transform_close(cqlt); return r; } @@ -706,9 +717,8 @@ int client_parse_query(struct client *cl, const char *query) char *p[512]; extract_terms(se->nmem, cn, p); se->relevance = relevance_create( - global_parameters.server->relevance_pct, - se->nmem, (const char **) p, - se->expected_maxrecs); + se->service->relevance_pct, + se->nmem, (const char **) p); } ccl_rpn_delete(cn);