X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzserver.c;h=aeddd418d9af8b1d653ce9ae94129f0035fcff18;hb=c6959870998f868e6a0e9201739fb54aef696bc6;hp=e2ec1b34b3c00f844ba2c24434cb3bb81b27e6a7;hpb=9eaad46fe45a09ea35d9ce6561748145ebd52838;p=idzebra-moved-to-github.git diff --git a/index/zserver.c b/index/zserver.c index e2ec1b3..aeddd41 100644 --- a/index/zserver.c +++ b/index/zserver.c @@ -1,4 +1,4 @@ -/* $Id: zserver.c,v 1.135 2005-06-13 10:29:20 adam Exp $ +/* $Id: zserver.c,v 1.143 2005-12-09 10:45:05 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -28,7 +28,8 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #include #include -#else +#endif +#if HAVE_UNISTD_H #include #endif @@ -75,7 +76,7 @@ bend_initresult *bend_init (bend_initrequest *q) yaz_log (YLOG_DEBUG, "bend_init"); sob = statserv_getcontrol (); - if (!(zh = zebra_open (sob->handle))) + if (!(zh = zebra_open (sob->handle, 0))) { yaz_log (YLOG_WARN, "Failed to read config `%s'", sob->configname); r->errcode = YAZ_BIB1_PERMANENT_SYSTEM_ERROR; @@ -206,37 +207,37 @@ static void search_terms(ZebraHandle zh, bend_search_rr *r) sizeof(*sr->elements)); for (i = 0; isetname, i, - &count, &approx, outbuf, &len); - - sr->elements[i] = odr_malloc (r->stream, sizeof(**sr->elements)); - sr->elements[i]->subqueryId = 0; - sr->elements[i]->fullQuery = odr_malloc (r->stream, - sizeof(bool_t)); - *sr->elements[i]->fullQuery = 0; - sr->elements[i]->subqueryExpression = + &count, &approx, outbuf, &len, + &term_ref_id); + se = sr->elements[i] = odr_malloc (r->stream, sizeof(**sr->elements)); + se->subqueryId = term_ref_id ? + odr_strdup(r->stream, term_ref_id) : 0; + + se->fullQuery = odr_intdup(r->stream, 0); + se->subqueryExpression = odr_malloc (r->stream, sizeof(Z_QueryExpression)); - sr->elements[i]->subqueryExpression->which = + se->subqueryExpression->which = Z_QueryExpression_term; - sr->elements[i]->subqueryExpression->u.term = + se->subqueryExpression->u.term = odr_malloc (r->stream, sizeof(Z_QueryExpressionTerm)); term = odr_malloc (r->stream, sizeof(Z_Term)); - sr->elements[i]->subqueryExpression->u.term->queryTerm = term; + se->subqueryExpression->u.term->queryTerm = term; switch (type) { case Z_Term_characterString: - yaz_log (YLOG_DEBUG, "term as characterString"); term->which = Z_Term_characterString; term->u.characterString = odr_strdup (r->stream, outbuf); break; case Z_Term_general: - yaz_log (YLOG_DEBUG, "term as general"); term->which = Z_Term_general; term->u.general = odr_malloc (r->stream, sizeof(*term->u.general)); term->u.general->size = term->u.general->len = len; @@ -247,14 +248,14 @@ static void search_terms(ZebraHandle zh, bend_search_rr *r) term->which = Z_Term_general; term->u.null = odr_nullval(); } - sr->elements[i]->subqueryExpression->u.term->termComment = 0; - sr->elements[i]->subqueryInterpretation = 0; - sr->elements[i]->subqueryRecommendation = 0; + se->subqueryExpression->u.term->termComment = 0; + se->subqueryInterpretation = 0; + se->subqueryRecommendation = 0; if (count > 2000000000) count = 2000000000; - sr->elements[i]->subqueryCount = odr_intdup (r->stream, (int) count); - sr->elements[i]->subqueryWeight = 0; - sr->elements[i]->resultsByDB = 0; + se->subqueryCount = odr_intdup(r->stream, (int) count); + se->subqueryWeight = 0; + se->resultsByDB = 0; } } @@ -357,7 +358,8 @@ static int bend_scan (void *handle, bend_scan_rr *r) res = zebra_scan(zh, r->stream, r->term, r->attributeset, &r->term_position, - &r->num_entries, &entries, &is_partial); + &r->num_entries, &entries, &is_partial, + 0 /* setname */); if (res == ZEBRA_OK) { if (is_partial) @@ -570,7 +572,8 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) Z_External *rec = notToKeep->elements[i]->record; struct oident *oident = 0; Odr_oct *opaque_recid = 0; - SYSNO sysno = 0; + SYSNO *sysno = 0; + SYSNO sysno_tmp; if (notToKeep->elements[i]->u.opaque) { @@ -580,7 +583,8 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) opaque_recid = notToKeep->elements[i]->u.opaque; break; /* OK, recid already set */ case Z_IUSuppliedRecords_elem_number: - sysno = *notToKeep->elements[i]->u.number; + sysno_tmp = *notToKeep->elements[i]->u.number; + sysno = &sysno_tmp; break; } } @@ -647,15 +651,15 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) { int r = zebra_admin_exchange_record ( zh, - rec->u.octet_aligned->buf, + (const char *) rec->u.octet_aligned->buf, rec->u.octet_aligned->len, - opaque_recid->buf, opaque_recid->len, + (const char *) opaque_recid->buf, + opaque_recid->len, action); if (r) { - rr->errcode = - YAZ_BIB1_ES_IMMEDIATE_EXECUTION_FAILED; - rr->errstring = "record exchange failed"; + zebra_result(zh, &rr->errcode, + &rr->errstring); break; } } @@ -667,10 +671,10 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) r = zebra_insert_record( zh, 0, /* recordType */ - &sysno, + sysno, 0, /* match */ 0, /* fname */ - rec->u.octet_aligned->buf, + (const char *) rec->u.octet_aligned->buf, rec->u.octet_aligned->len, 0); if (r == ZEBRA_FAIL) @@ -685,10 +689,10 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) r = zebra_update_record( zh, 0, /* recordType */ - &sysno, + sysno, 0, /* match */ 0, /* fname */ - rec->u.octet_aligned->buf, + (const char *) rec->u.octet_aligned->buf, rec->u.octet_aligned->len, 1); if (r == ZEBRA_FAIL) @@ -702,10 +706,10 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) r = zebra_delete_record( zh, 0, /* recordType */ - &sysno, + sysno, 0, /* match */ 0, /* fname */ - rec->u.octet_aligned->buf, + (const char *) rec->u.octet_aligned->buf, rec->u.octet_aligned->len, 0); if (r == ZEBRA_FAIL)