X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Fzserver.c;h=62e3387e7e7f8a4ba591170320e60a9cdfb91dc1;hp=118887a3b7849d93a9360c66af542dc5b07b4695;hb=c944571888712854653be0d2debf903b8651c8e2;hpb=be0203ee07adfeda7821a2c44ba6dd31a532b792 diff --git a/index/zserver.c b/index/zserver.c index 118887a..62e3387 100644 --- a/index/zserver.c +++ b/index/zserver.c @@ -1,4 +1,4 @@ -/* $Id: zserver.c,v 1.139 2005-08-22 09:04:18 adam Exp $ +/* $Id: zserver.c,v 1.144 2005-12-09 11:33:32 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -76,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; @@ -207,38 +207,37 @@ static void search_terms(ZebraHandle zh, bend_search_rr *r) sizeof(*sr->elements)); for (i = 0; isetname, i, &count, &approx, outbuf, &len, - 0 /* term_ref_id */ ); - - 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 = + &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; @@ -249,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; } } @@ -409,8 +408,9 @@ int bend_delete (void *handle, bend_delete_rr *rr) return 0; } -static int es_admin_request (ZebraHandle zh, Z_AdminEsRequest *r) +static void es_admin_request (bend_esrequest_rr *rr, ZebraHandle zh, Z_AdminEsRequest *r) { + ZEBRA_RES res = ZEBRA_OK; if (r->toKeep->databaseName) { yaz_log(YLOG_LOG, "adm request database %s", r->toKeep->databaseName); @@ -419,22 +419,26 @@ static int es_admin_request (ZebraHandle zh, Z_AdminEsRequest *r) { case Z_ESAdminOriginPartToKeep_reIndex: yaz_log(YLOG_LOG, "adm-reindex"); + rr->errcode = YAZ_BIB1_ES_IMMEDIATE_EXECUTION_FAILED; + rr->errstring = "adm-reindex not implemented yet"; break; case Z_ESAdminOriginPartToKeep_truncate: + rr->errcode = YAZ_BIB1_ES_IMMEDIATE_EXECUTION_FAILED; + rr->errstring = "adm-reindex not implemented yet"; yaz_log(YLOG_LOG, "adm-truncate"); break; case Z_ESAdminOriginPartToKeep_drop: yaz_log(YLOG_LOG, "adm-drop"); - zebra_drop_database (zh, r->toKeep->databaseName); + res = zebra_drop_database (zh, r->toKeep->databaseName); break; case Z_ESAdminOriginPartToKeep_create: yaz_log(YLOG_LOG, "adm-create %s", r->toKeep->databaseName); - zebra_create_database (zh, r->toKeep->databaseName); + res = zebra_create_database (zh, r->toKeep->databaseName); break; case Z_ESAdminOriginPartToKeep_import: yaz_log(YLOG_LOG, "adm-import"); - zebra_admin_import_begin (zh, r->toKeep->databaseName, - r->toKeep->u.import->recordType); + res = zebra_admin_import_begin (zh, r->toKeep->databaseName, + r->toKeep->u.import->recordType); break; case Z_ESAdminOriginPartToKeep_refresh: yaz_log(YLOG_LOG, "adm-refresh"); @@ -447,7 +451,7 @@ static int es_admin_request (ZebraHandle zh, Z_AdminEsRequest *r) break; case Z_ESAdminOriginPartToKeep_shutdown: yaz_log(YLOG_LOG, "shutdown"); - zebra_admin_shutdown(zh); + res = zebra_admin_shutdown(zh); break; case Z_ESAdminOriginPartToKeep_start: yaz_log(YLOG_LOG, "start"); @@ -455,24 +459,26 @@ static int es_admin_request (ZebraHandle zh, Z_AdminEsRequest *r) break; default: yaz_log(YLOG_LOG, "unknown admin"); + rr->errcode = YAZ_BIB1_ES_IMMEDIATE_EXECUTION_FAILED; + rr->errstring = "adm-reindex not implemented yet"; } - return 0; + if (res != ZEBRA_OK) + zebra_result(zh, &rr->errcode, &rr->errstring); } -static int es_admin (ZebraHandle zh, Z_Admin *r) +static void es_admin (bend_esrequest_rr *rr, ZebraHandle zh, Z_Admin *r) { switch (r->which) { case Z_Admin_esRequest: - es_admin_request (zh, r->u.esRequest); - break; - case Z_Admin_taskPackage: - yaz_log (YLOG_LOG, "adm taskpackage (unhandled)"); - break; + es_admin_request (rr, zh, r->u.esRequest); + return; default: break; } - return 0; + yaz_log (YLOG_WARN, "adm taskpackage (unhandled)"); + rr->errcode = YAZ_BIB1_ES_IMMEDIATE_EXECUTION_FAILED; + rr->errstring = "adm-task package (unhandled)"; } int bend_segment (void *handle, bend_segment_rr *rr) @@ -502,9 +508,7 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) } else if (rr->esr->taskSpecificParameters->which == Z_External_ESAdmin) { - es_admin (zh, rr->esr->taskSpecificParameters->u.adminService); - - zebra_result (zh, &rr->errcode, &rr->errstring); + es_admin(rr, zh, rr->esr->taskSpecificParameters->u.adminService); } else if (rr->esr->taskSpecificParameters->which == Z_External_update) { @@ -573,7 +577,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) { @@ -583,7 +588,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; } } @@ -657,9 +663,8 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) action); if (r) { - rr->errcode = - YAZ_BIB1_ES_IMMEDIATE_EXECUTION_FAILED; - rr->errstring = "record exchange failed"; + zebra_result(zh, &rr->errcode, + &rr->errstring); break; } } @@ -671,7 +676,7 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) r = zebra_insert_record( zh, 0, /* recordType */ - &sysno, + sysno, 0, /* match */ 0, /* fname */ (const char *) rec->u.octet_aligned->buf, @@ -689,7 +694,7 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) r = zebra_update_record( zh, 0, /* recordType */ - &sysno, + sysno, 0, /* match */ 0, /* fname */ (const char *) rec->u.octet_aligned->buf, @@ -706,7 +711,7 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) r = zebra_delete_record( zh, 0, /* recordType */ - &sysno, + sysno, 0, /* match */ 0, /* fname */ (const char *) rec->u.octet_aligned->buf,