X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fclient.c;h=e3b34cb1ec7b272ed2cd51d3ddcaf8ff06cd96f0;hb=83518ddb5165d783b37a0244bb0f3c79cd1b8398;hp=117a557c443e97d9e0fb5e3773b8301a53c11248;hpb=300ea88b2932fee0882363e5a18d059fc00d9475;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index 117a557..e3b34cb 100644 --- a/src/client.c +++ b/src/client.c @@ -74,6 +74,8 @@ struct client { char *cqlquery; // used for SRU targets only int hits; int record_offset; + int maxrecs; + int startrecs; int diagnostic; enum client_state state; struct show_raw *show_raw; @@ -403,7 +405,7 @@ void client_search_response(struct client *cl) } else { - cl->record_offset = 0; + cl->record_offset = cl->startrecs; cl->hits = ZOOM_resultset_size(resultset); se->total_hits += cl->hits; } @@ -497,6 +499,7 @@ void client_start_search(struct client *cl) 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); + char maxrecs_str[24]; assert(link); @@ -517,19 +520,31 @@ void client_start_search(struct client *cl) ZOOM_connection_option_set(link, "elementSetName", opt_elements); if (*opt_requestsyn) ZOOM_connection_option_set(link, "preferredRecordSyntax", opt_requestsyn); - if (*opt_maxrecs) - ZOOM_connection_option_set(link, "count", opt_maxrecs); + + if (!*opt_maxrecs) + { + sprintf(maxrecs_str, "%d", cl->maxrecs); + opt_maxrecs = maxrecs_str; + } + ZOOM_connection_option_set(link, "count", opt_maxrecs); + + + if (atoi(opt_maxrecs) > 20) + ZOOM_connection_option_set(link, "presentChunk", "20"); else + ZOOM_connection_option_set(link, "presentChunk", opt_maxrecs); + + if (cl->startrecs) { - char n[128]; - sprintf(n, "%d", global_parameters.toget); - ZOOM_connection_option_set(link, "count", n); + char startrecs_str[24]; + sprintf(startrecs_str, "%d", cl->startrecs); + + ZOOM_connection_option_set(link, "start", startrecs_str); } + if (databaseName) ZOOM_connection_option_set(link, "databaseName", databaseName); - ZOOM_connection_option_set(link, "presentChunk", "20"); - if (cl->cqlquery) { ZOOM_query q = ZOOM_query_create(); @@ -560,6 +575,8 @@ struct client *client_create(void) } else r = xmalloc(sizeof(struct client)); + r->maxrecs = 100; + r->startrecs = 0; r->pquery = 0; r->cqlquery = 0; r->database = 0; @@ -723,8 +740,7 @@ int client_parse_query(struct client *cl, const char *query) extract_terms(se->nmem, cn, p); se->relevance = relevance_create( se->service->relevance_pct, - se->nmem, (const char **) p, - se->expected_maxrecs); + se->nmem, (const char **) p); } ccl_rpn_delete(cn); @@ -784,6 +800,16 @@ const char *client_get_url(struct client *cl) return client_get_database(cl)->database->url; } +void client_set_maxrecs(struct client *cl, int v) +{ + cl->maxrecs = v; +} + +void client_set_startrecs(struct client *cl, int v) +{ + cl->startrecs = v; +} + /* * Local variables: * c-basic-offset: 4