X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Fzserver.c;h=a59fa6a4d5785a77a18cefa1ebd5e4f29709f34a;hp=de9ec00a9e55cb7c202b85399565d74c9f29a266;hb=69da23537c6bb71ab948e079708bf8ea090de73f;hpb=4bf05517c81b30c6cc2e16fb5e475c02be45d117 diff --git a/index/zserver.c b/index/zserver.c index de9ec00..a59fa6a 100644 --- a/index/zserver.c +++ b/index/zserver.c @@ -1,10 +1,12 @@ /* - * Copyright (C) 1995-1999, Index Data + * Copyright (C) 1995-2000, Index Data * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss * * $Log: zserver.c,v $ - * Revision 1.77 2000-03-20 19:08:36 adam + * Revision 1.78 2000-04-05 09:49:35 adam + * On Unix, zebra/z'mbol uses automake. + * + * Revision 1.77 2000/03/20 19:08:36 adam * Added remote record import using Z39.50 extended services and Segment * Requests. * @@ -300,6 +302,9 @@ static int bend_sort (void *handle, bend_sort_rr *rr); static int bend_delete (void *handle, bend_delete_rr *rr); static int bend_esrequest (void *handle, bend_esrequest_rr *rr); static int bend_segment (void *handle, bend_segment_rr *rr); +static int bend_search (void *handle, bend_search_rr *r); +static int bend_fetch (void *handle, bend_fetch_rr *r); +static int bend_scan (void *handle, bend_scan_rr *r); bend_initresult *bend_init (bend_initrequest *q) { @@ -316,6 +321,9 @@ bend_initresult *bend_init (bend_initrequest *q) q->bend_delete = bend_delete; q->bend_esrequest = bend_esrequest; q->bend_segment = bend_segment; + q->bend_search = bend_search; + q->bend_fetch = bend_fetch; + q->bend_scan = bend_scan; q->implementation_name = "Z'mbol Information Server"; q->implementation_version = "Z'mbol 1.0"; @@ -355,22 +363,20 @@ bend_initresult *bend_init (bend_initrequest *q) return r; } -bend_searchresult *bend_search (void *handle, bend_searchrequest *q, int *fd) +int bend_search (void *handle, bend_search_rr *r) { ZebraHandle zh = (ZebraHandle) handle; - bend_searchresult *r = (bend_searchresult *) - odr_malloc (q->stream, sizeof(*r)); r->hits = 0; r->errcode = 0; r->errstring = NULL; - logf (LOG_LOG, "ResultSet '%s'", q->setname); - switch (q->query->which) + logf (LOG_LOG, "ResultSet '%s'", r->setname); + switch (r->query->which) { case Z_Query_type_1: case Z_Query_type_101: - zebra_search_rpn (zh, q->decode, q->stream, q->query->u.type_1, - q->num_bases, q->basenames, q->setname); + zebra_search_rpn (zh, r->decode, r->stream, r->query->u.type_1, + r->num_bases, r->basenames, r->setname); r->errcode = zh->errCode; r->errstring = zh->errString; r->hits = zh->hits; @@ -382,21 +388,19 @@ bend_searchresult *bend_search (void *handle, bend_searchrequest *q, int *fd) default: r->errcode = 107; } - return r; + return 0; } -bend_fetchresult *bend_fetch (void *handle, bend_fetchrequest *q, int *num) +int bend_fetch (void *handle, bend_fetch_rr *r) { ZebraHandle zh = (ZebraHandle) handle; - bend_fetchresult *r = (bend_fetchresult *) - odr_malloc (q->stream, sizeof(*r)); ZebraRetrievalRecord retrievalRecord; - retrievalRecord.position = q->number; + retrievalRecord.position = r->number; r->last_in_set = 0; - zebra_records_retrieve (zh, q->stream, q->setname, q->comp, - q->format, 1, &retrievalRecord); + zebra_records_retrieve (zh, r->stream, r->setname, r->comp, + r->request_format, 1, &retrievalRecord); if (zh->errCode) /* non Surrogate Diagnostic */ { r->errcode = zh->errCode; @@ -404,7 +408,7 @@ bend_fetchresult *bend_fetch (void *handle, bend_fetchrequest *q, int *num) } else if (retrievalRecord.errCode) /* Surrogate Diagnostic */ { - q->surrogate_flag = 1; + r->surrogate_flag = 1; r->errcode = retrievalRecord.errCode; r->errstring = retrievalRecord.errString; r->basename = retrievalRecord.base; @@ -415,27 +419,22 @@ bend_fetchresult *bend_fetch (void *handle, bend_fetchrequest *q, int *num) r->basename = retrievalRecord.base; r->record = retrievalRecord.buf; r->len = retrievalRecord.len; - r->format = retrievalRecord.format; + r->output_format = retrievalRecord.format; } - return r; + return 0; } -bend_scanresult *bend_scan (void *handle, bend_scanrequest *q, int *num) +static int bend_scan (void *handle, bend_scan_rr *r) { ZebraScanEntry *entries; ZebraHandle zh = (ZebraHandle) handle; - bend_scanresult *r = (bend_scanresult *) - odr_malloc (q->stream, sizeof(*r)); int is_partial, i; - r->term_position = q->term_position; - r->num_entries = q->num_entries; - r->entries = (struct scan_entry *) - odr_malloc (q->stream, sizeof(*r->entries) * q->num_entries); - zebra_scan (zh, q->stream, q->term, - q->attributeset, - q->num_bases, q->basenames, + odr_malloc (r->stream, sizeof(*r->entries) * r->num_entries); + zebra_scan (zh, r->stream, r->term, + r->attributeset, + r->num_bases, r->basenames, &r->term_position, &r->num_entries, &entries, &is_partial); if (is_partial) @@ -449,7 +448,7 @@ bend_scanresult *bend_scan (void *handle, bend_scanrequest *q, int *num) } r->errcode = zh->errCode; r->errstring = zh->errString; - return r; + return 0; } void bend_close (void *handle) @@ -489,8 +488,8 @@ static int es_admin_request (ZebraHandle zh, Z_AdminEsRequest *r) case Z_ESAdminOriginPartToKeep_truncate: yaz_log(LOG_LOG, "adm-truncate"); break; - case Z_ESAdminOriginPartToKeep_delete: - yaz_log(LOG_LOG, "adm-delete"); + case Z_ESAdminOriginPartToKeep_drop: + yaz_log(LOG_LOG, "adm-drop"); break; case Z_ESAdminOriginPartToKeep_create: yaz_log(LOG_LOG, "adm-create"); @@ -498,6 +497,7 @@ static int es_admin_request (ZebraHandle zh, Z_AdminEsRequest *r) break; case Z_ESAdminOriginPartToKeep_import: yaz_log(LOG_LOG, "adm-import"); + zebra_admin_import_begin (zh, r->toKeep->databaseName); break; case Z_ESAdminOriginPartToKeep_refresh: yaz_log(LOG_LOG, "adm-refresh"); @@ -545,8 +545,12 @@ static int es_admin (ZebraHandle zh, Z_Admin *r) int bend_segment (void *handle, bend_segment_rr *rr) { ZebraHandle zh = (ZebraHandle) handle; + Z_Segment *segment = rr->segment; - zebra_admin_import_segment (zh, rr->segment); + if (segment->num_segmentRecords) + zebra_admin_import_segment (zh, rr->segment); + else + zebra_admin_import_end (zh); return 0; } @@ -826,12 +830,7 @@ int main (int argc, char **argv) sob->bend_start = bend_start; sob->bend_stop = bend_stop; - if (sob->dynamic) - { - sob->dynamic = 0; - sob->threads = 1; - } statserv_setcontrol (sob); - return statserv_main (argc, argv); + return statserv_main (argc, argv, bend_init, bend_close); }