X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fclient.c;h=d3491035c5aa8ea9e7cedc4c5d90e1dbcc21d57b;hb=20bc8b17d60373c2c93ab6bb777d19dd92ed2960;hp=d3265c3c07d2244093a5eb262d01e439317aff7f;hpb=712b255c55155f11cc1e0106b7115ec2df2cea8a;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index d3265c3..d349103 100644 --- a/src/client.c +++ b/src/client.c @@ -115,6 +115,7 @@ struct client { char *addinfo; // diagnostic info for most resent error Odr_int hits; int record_offset; + int show_stat_no; int filtered; // When using local:, this will count the number of filtered records. int maxrecs; int startrecs; @@ -645,7 +646,7 @@ static void client_record_ingest(struct client *cl) } } -void client_record_response(struct client *cl) +void client_record_response(struct client *cl, int *got_records) { struct connection *co = cl->connection; ZOOM_connection link = connection_get_link(co); @@ -678,6 +679,7 @@ void client_record_response(struct client *cl) else { client_record_ingest(cl); + *got_records = 1; } } } @@ -762,20 +764,39 @@ static const char *get_strategy_plus_sort(struct client *l, const char *field) return strategy_plus_sort; } +void client_update_show_stat(struct client *cl, int cmd) +{ + if (cmd == 0) + cl->show_stat_no = 0; + else if (cmd == 1) + cl->show_stat_no++; +} + int client_fetch_more(struct client *cl) { struct session_database *sdb = client_get_database(cl); const char *str; - int extra = cl->hits - cl->record_offset; + int extend_recs = 0; + int number; + + yaz_log(YLOG_LOG, "cl=%s show_stat_no=%d got=%d", + client_get_id(cl), cl->show_stat_no, cl->record_offset); + if (cl->show_stat_no < cl->record_offset) + return 0; + yaz_log(YLOG_LOG, "cl=%s Trying to get more", client_get_id(cl)); + + str = session_setting_oneval(sdb, PZ_EXTENDRECS); + if (str && *str) + extend_recs = atoi(str); - if (extra > 0) + if (extend_recs > cl->hits) + extend_recs = cl->hits; + + number = extend_recs - cl->record_offset; + if (number > 0) { ZOOM_resultset set = cl->resultset; struct connection *co = client_get_connection(cl); - int max_extra = 10; - - if (extra > max_extra) - extra = max_extra; str = session_setting_oneval(sdb, PZ_REQUESTSYNTAX); ZOOM_resultset_option_set(set, "preferredRecordSyntax", str); @@ -783,11 +804,15 @@ int client_fetch_more(struct client *cl) if (str && *str) ZOOM_resultset_option_set(set, "elementSetName", str); - ZOOM_resultset_records(set, 0, cl->record_offset, extra); + ZOOM_resultset_records(set, 0, cl->record_offset, number); client_set_state(cl, Client_Working); connection_continue(co); return 1; } + else + { + yaz_log(YLOG_LOG, "cl=%s. OK no more in total set", client_get_id(cl)); + } return 0; } @@ -1292,8 +1317,8 @@ static int apply_limit(struct session_database *sdb, sdb->database->id, cvalue); ret = -1; /* bad limitmap */ } - break; } + break; } } if (!s)