-/* $Id: zserver.c,v 1.134 2005-05-24 11:35:42 adam Exp $
- Copyright (C) 1995-2005
+/* $Id: zserver.c,v 1.148 2006-06-07 10:50:09 adam Exp $
+ Copyright (C) 1995-2006
Index Data ApS
This file is part of the Zebra server.
#include <io.h>
#include <process.h>
#include <sys/locking.h>
-#else
+#endif
+#if HAVE_UNISTD_H
#include <unistd.h>
#endif
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;
sizeof(*sr->elements));
for (i = 0; i<no_terms; i++)
{
+ Z_SearchInfoReport_s *se;
Z_Term *term;
zint count;
int approx;
char outbuf[1024];
size_t len = sizeof(outbuf);
+ const char *term_ref_id = 0;
zebra_result_set_term_info(zh, r->setname, 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;
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;
- 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->subqueryExpression->u.term->termComment = 0;
+ se->subqueryInterpretation = 0;
+ se->subqueryRecommendation = 0;
+ if (count > 2147483646)
+ count = 2147483647;
+ se->subqueryCount = odr_intdup(r->stream, CAST_ZINT_TO_INT(count));
+ se->subqueryWeight = 0;
+ se->resultsByDB = 0;
}
}
-int bend_search (void *handle, bend_search_rr *r)
+int bend_search(void *handle, bend_search_rr *r)
{
ZebraHandle zh = (ZebraHandle) handle;
zint zhits = 0;
zebra_result(zh, &r->errcode, &r->errstring);
else
{
- if (zhits > 2147483646)
- r->hits = 2147483647;
- else
- r->hits = (int) zhits;
+ if (zhits > 2147483646)
+ zhits = 2147483647;
+ r->hits = CAST_ZINT_TO_INT(zhits);
search_terms (zh, r);
}
break;
r->last_in_set = 0;
res = zebra_records_retrieve (zh, r->stream, r->setname, r->comp,
- r->request_format, 1, &retrievalRecord);
+ r->request_format, 1, &retrievalRecord);
if (res != ZEBRA_OK)
{
/* non-surrogate diagnostic */
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)
for (i = 0; i < r->num_entries; i++)
{
r->entries[i].term = entries[i].term;
- r->entries[i].occurrences = entries[i].occurrences;
+ r->entries[i].occurrences =
+ CAST_ZINT_TO_INT(entries[i].occurrences);
}
}
else
{
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;
}
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);
{
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");
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");
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)
}
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)
{
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)
{
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;
}
}
{
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;
}
}
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)
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)
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)
}
}
}
- zebra_end_trans (zh);
+ if (zebra_end_trans (zh) != ZEBRA_OK)
+ {
+ yaz_log(YLOG_WARN, "zebra_end_trans failed for"
+ " extended service operation");
+ }
}
}
}
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
+ */
+