X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fseshigh.c;h=0e3186b5d38695cbe89454434181928b0b47b167;hb=f183d2f4776c9161eb229eb6ad85260bc65af54e;hp=5394cc4b6dfe5d776f5594cf830fa570649741ed;hpb=8d691989077a0addcbd840d769dce6700f3d9622;p=yaz-moved-to-github.git diff --git a/src/seshigh.c b/src/seshigh.c index 5394cc4..0e3186b 100644 --- a/src/seshigh.c +++ b/src/seshigh.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: seshigh.c,v 1.108 2007-01-03 08:42:15 adam Exp $ + * $Id: seshigh.c,v 1.111 2007-03-13 09:12:09 adam Exp $ */ /** * \file seshigh.c @@ -612,7 +612,8 @@ static int retrieve_fetch(association *assoc, bend_fetch_rr *rr) else if (r == 1 || r == 3) { const char *details = input_schema; - rr->errcode = YAZ_BIB1_ELEMENT_SET_NAMES_UNSUPP; + rr->errcode = + YAZ_BIB1_SPECIFIED_ELEMENT_SET_NAME_NOT_VALID_FOR_SPECIFIED_; if (details) rr->errstring = odr_strdup(rr->stream, details); return -1; @@ -676,6 +677,7 @@ static int retrieve_fetch(association *assoc, bend_fetch_rr *rr) #else (*assoc->init->bend_fetch)(assoc->backend, rr); #endif + return 0; } static int srw_bend_fetch(association *assoc, int pos, @@ -884,6 +886,8 @@ static void srw_bend_search(association *assoc, request *req, rr.srw_sortKeys = 0; rr.srw_setname = 0; rr.srw_setnameIdleTime = 0; + rr.estimated_hit_count = 0; + rr.partial_resultset = 0; rr.query = (Z_Query *) odr_malloc (assoc->decode, sizeof(*rr.query)); rr.query->u.type_1 = 0; @@ -1105,6 +1109,15 @@ static void srw_bend_search(association *assoc, request *req, srw_res->records = 0; } } + if (rr.estimated_hit_count || rr.partial_resultset) + { + yaz_add_srw_diagnostic( + assoc->encode, + &srw_res->diagnostics, + &srw_res->num_diagnostics, + YAZ_SRW_RESULT_SET_CREATED_WITH_VALID_PARTIAL_RESULTS_AVAILABLE, + 0); + } } } } @@ -2351,7 +2364,7 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) assoc->init->implementation_name, odr_prepend(assoc->encode, "GFS", resp->implementationName)); - version = odr_strdup(assoc->encode, "$Revision: 1.108 $"); + version = odr_strdup(assoc->encode, "$Revision: 1.111 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; resp->implementationVersion = odr_prepend(assoc->encode, @@ -2634,13 +2647,15 @@ static Z_APDU *process_searchRequest(association *assoc, request *reqb, bsrr->srw_sortKeys = 0; bsrr->srw_setname = 0; bsrr->srw_setnameIdleTime = 0; + bsrr->estimated_hit_count = 0; + bsrr->partial_resultset = 0; yaz_log (log_requestdetail, "ResultSet '%s'", req->resultSetName); if (req->databaseNames) { int i; for (i = 0; i < req->num_databaseNames; i++) - yaz_log (log_requestdetail, "Database '%s'", req->databaseNames[i]); + yaz_log(log_requestdetail, "Database '%s'", req->databaseNames[i]); } yaz_log_zquery_level(log_requestdetail,req->query); @@ -2702,10 +2717,9 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, Z_SearchResponse *resp = (Z_SearchResponse *) odr_malloc (assoc->encode, sizeof(*resp)); int *nulint = odr_intdup (assoc->encode, 0); - bool_t *sr = odr_intdup(assoc->encode, 1); int *next = odr_intdup(assoc->encode, 0); int *none = odr_intdup(assoc->encode, Z_SearchResponse_none); - int returnedrecs=0; + int returnedrecs = 0; apdu->which = Z_APDU_searchResponse; apdu->u.searchResponse = resp; @@ -2730,8 +2744,8 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, } else { + bool_t *sr = odr_intdup(assoc->encode, 1); int *toget = odr_intdup(assoc->encode, 0); - int *presst = odr_intdup(assoc->encode, 0); Z_RecordComposition comp, *compp = 0; yaz_log (log_requestdetail, "resultCount: %d", bsrt->hits); @@ -2762,6 +2776,7 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, { oident *prefformat; oid_value form; + int *presst = odr_intdup(assoc->encode, 0); if (!(prefformat = oid_getentbyoid(req->preferredRecordSyntax))) form = VAL_NONE; @@ -2804,9 +2819,6 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, return 0; resp->numberOfRecordsReturned = toget; returnedrecs = *toget; - resp->nextResultSetPosition = next; - resp->searchStatus = sr; - resp->resultSetStatus = 0; resp->presentStatus = presst; } else @@ -2814,11 +2826,21 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, if (*resp->resultCount) *next = 1; resp->numberOfRecordsReturned = nulint; - resp->nextResultSetPosition = next; - resp->searchStatus = sr; - resp->resultSetStatus = 0; resp->presentStatus = 0; } + resp->nextResultSetPosition = next; + resp->searchStatus = sr; + resp->resultSetStatus = 0; + if (bsrt->estimated_hit_count) + { + resp->resultSetStatus = odr_intdup(assoc->encode, + Z_SearchResponse_estimate); + } + else if (bsrt->partial_resultset) + { + resp->resultSetStatus = odr_intdup(assoc->encode, + Z_SearchResponse_subset); + } } resp->additionalSearchInfo = bsrt->search_info;