X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=server%2Fseshigh.c;h=8a651400b4363e7f5d638eaea67e3dcbe91fd5e0;hb=26fdcc5e41254131ef755b14243c19d202b14d8e;hp=ced78e1a5000e4ccac3898854ab5ad6dc77dff5a;hpb=3060b77b776350c6e677c06b3070542dba5c42b6;p=yaz-moved-to-github.git diff --git a/server/seshigh.c b/server/seshigh.c index ced78e1..8a65140 100644 --- a/server/seshigh.c +++ b/server/seshigh.c @@ -1,10 +1,39 @@ /* - * Copyright (c) 1995-1998, Index Data + * Copyright (c) 1995-1999, Index Data * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * * $Log: seshigh.c,v $ - * Revision 1.77 1998-07-20 12:38:42 adam + * Revision 1.86 1999-02-02 13:57:38 adam + * Uses preprocessor define WIN32 instead of WINDOWS to build code + * for Microsoft WIN32. + * + * Revision 1.85 1998/11/17 09:52:59 adam + * Fixed minor bug (introduced by previous commit). + * + * Revision 1.84 1998/11/16 16:02:32 adam + * Added loggin utilies, log_rpn_query and log_scan_term. These used + * to be part of Zebra. + * + * Revision 1.83 1998/11/03 10:09:36 adam + * Fixed bug regarding YC. + * + * Revision 1.82 1998/10/20 14:00:30 quinn + * Fixed Scan + * + * Revision 1.81 1998/10/13 16:12:24 adam + * Added support for Surrogate Diagnostics for Scan Term entries. + * + * Revision 1.80 1998/09/02 12:41:53 adam + * Added decode stream in bend search structures. + * + * Revision 1.79 1998/08/19 16:10:08 adam + * Changed som member names of DeleteResultSetRequest/Response. + * + * Revision 1.78 1998/08/03 10:23:55 adam + * Fixed bug regarding Options for Sort. + * + * Revision 1.77 1998/07/20 12:38:42 adam * Implemented delete result set service to server API. * * Revision 1.76 1998/05/27 16:57:07 adam @@ -273,7 +302,7 @@ #include #include #include -#ifdef WINDOWS +#ifdef WIN32 #include #else #include @@ -287,6 +316,7 @@ #include #include #include +#include #include #include @@ -814,7 +844,7 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) ODR_MASK_SET(resp->options, Z_Options_concurrentOperations); strcat(options, " concurop"); } - if (ODR_MASK_GET(req->options, Z_Options_sort && binitreq.bend_sort)) + if (ODR_MASK_GET(req->options, Z_Options_sort) && binitreq.bend_sort) { ODR_MASK_SET(resp->options, Z_Options_sort); strcat(options, " sort"); @@ -876,11 +906,15 @@ static void set_addinfo (Z_DefaultDiagFormat *dr, char *addinfo) static Z_Records *diagrec(association *assoc, int error, char *addinfo) { int oid[OID_SIZE]; - Z_Records *rec = (Z_Records *)odr_malloc (assoc->encode, sizeof(*rec)); + Z_Records *rec = (Z_Records *) + odr_malloc (assoc->encode, sizeof(*rec)); oident bib1; - int *err = (int *)odr_malloc (assoc->encode, sizeof(*err)); - Z_DiagRec *drec = (Z_DiagRec *)odr_malloc (assoc->encode, sizeof(*drec)); - Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *)odr_malloc (assoc->encode, sizeof(*dr)); + int *err = (int *) + odr_malloc (assoc->encode, sizeof(*err)); + Z_DiagRec *drec = (Z_DiagRec *) + odr_malloc (assoc->encode, sizeof(*drec)); + Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *) + odr_malloc (assoc->encode, sizeof(*dr)); bib1.proto = assoc->proto; bib1.oclass = CLASS_DIAGSET; @@ -953,7 +987,7 @@ static Z_DiagRecs *diagrecs(association *assoc, int error, char *addinfo) Z_DiagRec *drec = (Z_DiagRec *)odr_malloc (assoc->encode, sizeof(*drec)); Z_DefaultDiagFormat *rec = (Z_DefaultDiagFormat *)odr_malloc (assoc->encode, sizeof(*rec)); - logf(LOG_DEBUG, "DiagRecs: %d -- %s", error, addinfo); + logf(LOG_DEBUG, "DiagRecs: %d -- %s", error, addinfo ? addinfo : ""); bib1.proto = assoc->proto; bib1.oclass = CLASS_DIAGSET; bib1.value = VAL_BIB1; @@ -985,9 +1019,12 @@ static Z_Records *pack_records(association *a, char *setname, int start, { int oid[OID_SIZE]; int recno, total_length = 0, toget = *num, dumped_records = 0; - Z_Records *records = (Z_Records *)odr_malloc (a->encode, sizeof(*records)); - Z_NamePlusRecordList *reclist = (Z_NamePlusRecordList *)odr_malloc (a->encode, sizeof(*reclist)); - Z_NamePlusRecord **list = (Z_NamePlusRecord **)odr_malloc (a->encode, sizeof(*list) * toget); + Z_Records *records = + (Z_Records *) odr_malloc (a->encode, sizeof(*records)); + Z_NamePlusRecordList *reclist = + (Z_NamePlusRecordList *) odr_malloc (a->encode, sizeof(*reclist)); + Z_NamePlusRecord **list = + (Z_NamePlusRecord **) odr_malloc (a->encode, sizeof(*list) * toget); oident recform; records->which = Z_Records_DBOSD; @@ -998,7 +1035,7 @@ static Z_Records *pack_records(association *a, char *setname, int start, *num = 0; *next = 0; - logf(LOG_DEBUG, "Request to pack %d+%d", start, toget); + logf(LOG_LOG, "Request to pack %d+%d", start, toget); logf(LOG_DEBUG, "pms=%d, mrs=%d", a->preferredMessageSize, a->maximumRecordSize); for (recno = start; reclist->num_records < toget; recno++) @@ -1167,14 +1204,28 @@ static Z_APDU *process_searchRequest(association *assoc, request *reqb, int *fd) { Z_SearchRequest *req = reqb->request->u.searchRequest; - bend_search_rr *bsrr = (bend_search_rr *)nmem_malloc (reqb->request_mem, sizeof(*bsrr)); - + bend_search_rr *bsrr = + (bend_search_rr *)nmem_malloc (reqb->request_mem, sizeof(*bsrr)); + logf(LOG_LOG, "Got SearchRequest."); save_referenceId (reqb, req->referenceId); /* store ref id in request */ bsrr->fd = fd; bsrr->request = reqb; bsrr->association = assoc; + + logf (LOG_LOG, "ResultSet '%s'", req->resultSetName); + if (req->databaseNames) + { + int i; + for (i = 0; i < req->num_databaseNames; i++) + logf (LOG_LOG, "Database '%s'", req->databaseNames[i]); + } + switch (req->query->which) + { + case Z_Query_type_1: case Z_Query_type_101: + log_rpn_query (req->query->u.type_1); + } if (assoc->bend_search) { bsrr->setname = req->resultSetName; @@ -1183,10 +1234,12 @@ static Z_APDU *process_searchRequest(association *assoc, request *reqb, bsrr->basenames = req->databaseNames; bsrr->query = req->query; bsrr->stream = assoc->encode; + bsrr->decode = assoc->decode; bsrr->errcode = 0; bsrr->hits = 0; bsrr->errstring = NULL; - ((int (*)(void *, bend_search_rr *))(assoc->bend_search))(assoc->backend, bsrr); + ((int (*)(void *, bend_search_rr *))(assoc->bend_search)) + (assoc->backend, bsrr); if (!bsrr->request) return 0; } @@ -1201,6 +1254,7 @@ static Z_APDU *process_searchRequest(association *assoc, request *reqb, bsrq.basenames = req->databaseNames; bsrq.query = req->query; bsrq.stream = assoc->encode; + bsrq.decode = assoc->decode; if (!(bsrt = bend_search(assoc->backend, &bsrq, fd))) return 0; bsrr->hits = bsrt->hits; @@ -1429,14 +1483,10 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) res->numberOfEntriesReturned = numberOfEntriesReturned; res->positionOfTerm = 0; res->entries = ents; -#if ASN_COMPILED ents->num_entries = 0; ents->entries = NULL; ents->num_nonsurrogateDiagnostics = 0; ents->nonsurrogateDiagnostics = NULL; -#else - ents->which = Z_ListEntries_entries; -#endif res->attributeSet = 0; res->otherInfo = 0; @@ -1448,10 +1498,12 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) diagrecs_p = diagrecs(assoc, 205, 0); else { - if (req->termListAndStartPoint->term->which == Z_Term_general) - logf(LOG_DEBUG, " term: '%.*s'", - req->termListAndStartPoint->term->u.general->len, - req->termListAndStartPoint->term->u.general->buf); + if (req->databaseNames) + { + int i; + for (i = 0; i < req->num_databaseNames; i++) + logf (LOG_LOG, "Database '%s'", req->databaseNames[i]); + } srq.num_bases = req->num_databaseNames; srq.basenames = req->databaseNames; srq.num_entries = *req->numberOfTermsRequested; @@ -1462,6 +1514,7 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) srq.attributeset = VAL_NONE; else srq.attributeset = attset->value; + log_scan_term (req->termListAndStartPoint, attset->value); srq.term_position = req->preferredPositionInResponse ? *req->preferredPositionInResponse : 1; if (!(srs = bend_scan(assoc->backend, &srq, 0))) @@ -1471,11 +1524,6 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) else { int i; -#ifdef ASN_COMPILED -#else - Z_Entries *list = (Z_Entries *) - odr_malloc (assoc->encode, sizeof(*list)); -#endif Z_Entry **tab = (Z_Entry **) odr_malloc (assoc->encode, sizeof(*tab) * srs->num_entries); @@ -1483,16 +1531,9 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) *scanStatus = Z_Scan_partial_5; else *scanStatus = Z_Scan_success; -#ifdef ASN_COMPILED ents->entries = tab; ents->num_entries = srs->num_entries; res->numberOfEntriesReturned = &ents->num_entries; -#else - ents->u.entries = list; - list->entries = tab; - list->num_entries = srs->num_entries; - res->numberOfEntriesReturned = &list->num_entries; -#endif res->positionOfTerm = &srs->term_position; for (i = 0; i < srs->num_entries; i++) { @@ -1501,35 +1542,46 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) Odr_oct *o; tab[i] = e = (Z_Entry *)odr_malloc(assoc->encode, sizeof(*e)); - e->which = Z_Entry_termInfo; - e->u.termInfo = t = (Z_TermInfo *)odr_malloc(assoc->encode, sizeof(*t)); - t->suggestedAttributes = 0; - t->displayTerm = 0; - t->alternativeTerm = 0; - t->byAttributes = 0; - t->otherTermInfo = 0; - t->globalOccurrences = &srs->entries[i].occurrences; - t->term = (Z_Term *)odr_malloc(assoc->encode, sizeof(*t->term)); - t->term->which = Z_Term_general; - t->term->u.general = o = (Odr_oct *)odr_malloc(assoc->encode, - sizeof(Odr_oct)); - o->buf = (unsigned char *)odr_malloc(assoc->encode, o->len = o->size = - strlen(srs->entries[i].term)); - memcpy(o->buf, srs->entries[i].term, o->len); - logf(LOG_DEBUG, " term #%d: '%s' (%d)", i, - srs->entries[i].term, srs->entries[i].occurrences); + if (srs->entries[i].occurrences >= 0) + { + e->which = Z_Entry_termInfo; + e->u.termInfo = t = (Z_TermInfo *) + odr_malloc(assoc->encode, sizeof(*t)); + t->suggestedAttributes = 0; + t->displayTerm = 0; + t->alternativeTerm = 0; + t->byAttributes = 0; + t->otherTermInfo = 0; + t->globalOccurrences = &srs->entries[i].occurrences; + t->term = (Z_Term *) + odr_malloc(assoc->encode, sizeof(*t->term)); + t->term->which = Z_Term_general; + t->term->u.general = o = + (Odr_oct *)odr_malloc(assoc->encode, sizeof(Odr_oct)); + o->buf = (unsigned char *) + odr_malloc(assoc->encode, o->len = o->size = + strlen(srs->entries[i].term)); + memcpy(o->buf, srs->entries[i].term, o->len); + logf(LOG_DEBUG, " term #%d: '%s' (%d)", i, + srs->entries[i].term, srs->entries[i].occurrences); + } + else + { + Z_DiagRecs *drecs = diagrecs (assoc, + srs->entries[i].errcode, + srs->entries[i].errstring); + assert (drecs->num_diagRecs == 1); + e->which = Z_Entry_surrogateDiagnostic; + assert (drecs->diagRecs[0]); + e->u.surrogateDiagnostic = drecs->diagRecs[0]; + } } } } if (diagrecs_p) { -#ifdef ASN_COMPILED ents->num_nonsurrogateDiagnostics = diagrecs_p->num_diagRecs; ents->nonsurrogateDiagnostics = diagrecs_p->diagRecs; -#else - ents->u.nonSurrogateDiagnostics = diagrecs_p; - ents->which = Z_ListEntries_nonSurrogateDiagnostics; -#endif } return apdu; } @@ -1602,7 +1654,7 @@ static Z_APDU *process_deleteRequest(association *assoc, request *reqb, logf(LOG_LOG, "Got DeleteRequest."); - bdrr->num_setnames = req->num_ids; + bdrr->num_setnames = req->num_resultSetList; bdrr->setnames = req->resultSetList; bdrr->stream = assoc->encode; bdrr->function = *req->deleteFunction; @@ -1616,10 +1668,8 @@ static Z_APDU *process_deleteRequest(association *assoc, request *reqb, odr_malloc (assoc->encode, sizeof(*res->deleteOperationStatus)); *res->deleteOperationStatus = bdrr->delete_status; - res->num_statuses = 0; res->deleteListStatuses = 0; res->numberNotDeleted = 0; - res->num_bulkStatuses = 0; res->bulkStatuses = 0; res->deleteMessage = 0; res->otherInfo = 0;