X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=index%2Fzserver.c;h=89890876c857ce88605872b3153c9ffdc3a4851d;hb=ecb3935e78cd9bcfdebafdee0834cfb1060d7b5e;hp=f1c92c4c241a356180c2367d776442d7f5488408;hpb=3d3d0cebd23fa527a7e9d5d728e3c744acb37580;p=idzebra-moved-to-github.git diff --git a/index/zserver.c b/index/zserver.c index f1c92c4..8989087 100644 --- a/index/zserver.c +++ b/index/zserver.c @@ -1,4 +1,4 @@ -/* $Id: zserver.c,v 1.140 2005-09-13 11:51:06 adam Exp $ +/* $Id: zserver.c,v 1.146 2006-05-10 08:13:23 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -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; } } @@ -392,10 +391,11 @@ int bend_sort (void *handle, bend_sort_rr *rr) { ZebraHandle zh = (ZebraHandle) handle; - zebra_sort (zh, rr->stream, - rr->num_input_setnames, (const char **) rr->input_setnames, - rr->output_setname, rr->sort_sequence, &rr->sort_status); - zebra_result (zh, &rr->errcode, &rr->errstring); + if (zebra_sort (zh, rr->stream, + rr->num_input_setnames, (const char **) rr->input_setnames, + rr->output_setname, rr->sort_sequence, &rr->sort_status) + != ZEBRA_OK) + zebra_result (zh, &rr->errcode, &rr->errstring); return 0; } @@ -409,8 +409,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 +420,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"); @@ -442,12 +447,17 @@ static int es_admin_request (ZebraHandle zh, Z_AdminEsRequest *r) case Z_ESAdminOriginPartToKeep_commit: yaz_log(YLOG_LOG, "adm-commit"); if (r->toKeep->databaseName) - zebra_select_database(zh, r->toKeep->databaseName); + { + if (zebra_select_database(zh, r->toKeep->databaseName) != + ZEBRA_OK) + yaz_log(YLOG_WARN, "zebra_select_database failed in " + "adm-commit"); + } zebra_commit(zh); 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 +465,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 +514,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 +583,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 +594,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 +669,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 +682,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 +700,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 +717,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, @@ -723,7 +734,11 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) } } } - zebra_end_trans (zh); + if (zebra_end_trans (zh) != ZEBRA_OK) + { + yaz_log(YLOG_WARN, "zebra_end_trans failed for" + " extended service operation"); + } } } } @@ -826,3 +841,11 @@ int main (int argc, char **argv) return statserv_main (argc, argv, bend_init, bend_close); } +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +