X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fclient.c;h=ad5f44a16c398a5d39783e548e657e6dabcd24fc;hb=c1a0d1230f98bfb0fd88cfc39eec90cbb8782fad;hp=61e0a8ae06965a33b73b9bdfc0c5658580449600;hpb=bf3573774d1f82286d33cd1a410e0500d3dd1955;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index 61e0a8a..ad5f44a 100644 --- a/src/client.c +++ b/src/client.c @@ -67,23 +67,26 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "relevance.h" #include "incref.h" -/* client counting (1) , disable client counting (0) */ -#if 1 static YAZ_MUTEX g_mutex = 0; static int no_clients = 0; -static void client_use(int delta) +static int client_use(int delta) { + int clients; if (!g_mutex) yaz_mutex_create(&g_mutex); yaz_mutex_enter(g_mutex); no_clients += delta; + clients = no_clients; yaz_mutex_leave(g_mutex); - yaz_log(YLOG_DEBUG, "%s clients=%d", delta > 0 ? "INC" : "DEC", no_clients); + yaz_log(YLOG_DEBUG, "%s clients=%d", delta == 0 ? "" : (delta > 0 ? "INC" : "DEC"), clients); + return clients; } -#else -#define client_use(x) -#endif + +int clients_count(void) { + return client_use(0); +} + /** \brief Represents client state for a connection to one search target */ struct client { @@ -636,15 +639,12 @@ static int client_set_facets_request(struct client *cl, ZOOM_connection link) int client_has_facet(struct client *cl, const char *name) { ZOOM_facet_field facet_field; if (!cl || !cl->resultset || !name) { - yaz_log(YLOG_DEBUG, "client has facet: Missing %p %p %s", cl, (cl ? cl->resultset: 0), name); return 0; } facet_field = ZOOM_resultset_get_facet_field(cl->resultset, name); if (facet_field) { - yaz_log(YLOG_DEBUG, "client: has facets for %s", name); return 1; } - yaz_log(YLOG_DEBUG, "client: No facets for %s", name); return 0; } @@ -664,6 +664,7 @@ void client_start_search(struct client *cl) const char *opt_sru = session_setting_oneval(sdb, PZ_SRU); const char *opt_sort = session_setting_oneval(sdb, PZ_SORT); 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]; assert(link); @@ -672,6 +673,9 @@ void client_start_search(struct client *cl) cl->record_offset = 0; cl->diagnostic = 0; + if (extra_args && *extra_args) + ZOOM_connection_option_set(link, "extraArgs", extra_args); + if (opt_preferred) { cl->preferred = atoi(opt_preferred); if (cl->preferred) @@ -931,7 +935,7 @@ int client_parse_query(struct client *cl, const char *query) const char *sru = session_setting_oneval(sdb, PZ_SRU); const char *pqf_prefix = session_setting_oneval(sdb, PZ_PQF_PREFIX); const char *pqf_strftime = session_setting_oneval(sdb, PZ_PQF_STRFTIME); - + const char *query_syntax = session_setting_oneval(sdb, PZ_QUERY_SYNTAX); if (!ccl_map) return -1; @@ -975,7 +979,11 @@ int client_parse_query(struct client *cl, const char *query) cl->pquery = xstrdup(wrbuf_cstr(se->wrbuf)); xfree(cl->cqlquery); - if (*sru) + + /* Support for PQF on SRU targets. + * TODO Refactor */ + yaz_log(YLOG_DEBUG, "Query syntax: %s", query_syntax); + if (strcmp(query_syntax, "pqf") != 0 && *sru) { if (!strcmp(sru, "solr")) { if (!(cl->cqlquery = make_solrquery(cl)))