/*
- * Copyright (C) 1995-1997, Index Data I/S
+ * Copyright (C) 1995-1998, Index Data I/S
* All rights reserved.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: zserver.c,v $
- * Revision 1.51 1997-10-27 14:33:06 adam
+ * Revision 1.55 1998-02-10 12:03:06 adam
+ * Implemented Sort.
+ *
+ * Revision 1.54 1998/01/29 13:39:13 adam
+ * Compress ISAM is default.
+ *
+ * Revision 1.53 1998/01/12 15:04:09 adam
+ * The test option (-s) only uses read-lock (and not write lock).
+ *
+ * Revision 1.52 1997/11/18 10:05:08 adam
+ * Changed character map facility so that admin can specify character
+ * mapping files for each register type, w, p, etc.
+ *
+ * Revision 1.51 1997/10/27 14:33:06 adam
* Moved towards generic character mapping depending on "structure"
* field in abstract syntax file. Fixed a few memory leaks. Fixed
* bug with negative integers when doing searches with relational
{
zebTargetInfo_close (zi->zti, 0);
dict_close (zi->dict);
+ sortIdx_close (zi->sortIdx);
if (zi->isam)
is_close (zi->isam);
if (zi->isamc)
zi->records = rec_open (zi->bfs, 0);
if (!(zi->dict = dict_open (zi->bfs, FNAME_DICT, 40, 0)))
return -1;
+ if (!(zi->sortIdx = sortIdx_open (zi->bfs, 0)))
+ return -1;
zi->isam = NULL;
zi->isamc = NULL;
- if (res_get_match (zi->res, "isam", "c", NULL))
+ if (!res_get_match (zi->res, "isam", "i", NULL))
{
if (!(zi->isamc = isc_open (zi->bfs, FNAME_ISAMC,
0, key_isamc_m(zi->res))))
zebra_server_unlock (zi, zi->registerState);
}
+static int bend_sort (void *handle, bend_sort_rr *rr);
+
bend_initresult *bend_init (bend_initrequest *q)
{
bend_initresult *r = odr_malloc (q->stream, sizeof(*r));
r->errcode = 0;
r->errstring = 0;
r->handle = zi;
+ q->bend_sort = bend_sort;
logf (LOG_DEBUG, "bend_init");
logf (LOG_LOG, "Reading resources from %s", sob->configname);
if (!(zi->res = res_open (sob->configname)))
{
- logf (LOG_FATAL, "Cannot open resource `%s'", sob->configname);
- exit (1);
+ logf (LOG_FATAL, "Failed to read resources `%s'", sob->configname);
+ r->errcode = 1;
+ return r;
}
zebra_server_lock_init (zi);
zi->dh = data1_create ();
zi->registerChange = 0;
zi->records = NULL;
- zi->odr = odr_createmem (ODR_ENCODE);
zi->registered_sets = NULL;
- zi->zebra_maps = zebra_maps_open (res_get(zi->res, "profilePath"));
+ zi->zebra_maps = zebra_maps_open (res_get(zi->res, "profilePath"),
+ zi->res);
return r;
}
r->hits = 0;
register_lock (zi);
- odr_reset (zi->odr);
zi->errCode = 0;
zi->errString = NULL;
switch (q->query->which)
{
case Z_Query_type_1: case Z_Query_type_101:
- r->errcode = rpn_search (zi, q->query->u.type_1,
+ r->errcode = rpn_search (zi, q->stream, q->query->u.type_1,
q->num_bases, q->basenames, q->setname,
&r->hits);
r->errstring = zi->errString;
if (!(rt = recType_byName (file_type, subType)))
{
- logf (LOG_FATAL|LOG_ERRNO, "Retrieve: Cannot handle type %s",
- file_type);
- exit (1);
+ logf (LOG_WARN, "Retrieve: Cannot handle type %s", file_type);
+ return 14;
}
logf (LOG_DEBUG, "retrieve localno=%d score=%d", sysno, score);
retrieveCtrl.fh = &fc;
r->last_in_set = 0;
r->basename = "base";
- odr_reset (zi->odr);
zi->errCode = 0;
positions[0] = q->number;
int status;
register_lock (zi);
- odr_reset (zi->odr);
zi->errCode = 0;
zi->errString = 0;
r->term_position = q->term_position;
r->num_entries = q->num_entries;
- r->errcode = rpn_scan (zi, q->term,
+ r->errcode = rpn_scan (zi, q->stream, q->term,
q->attributeset,
q->num_bases, q->basenames,
&r->term_position,
resultSetDestroy (zi);
zebTargetInfo_close (zi->zti, 0);
dict_close (zi->dict);
+ sortIdx_close (zi->sortIdx);
if (zi->isam)
is_close (zi->isam);
if (zi->isamc)
rec_close (&zi->records);
register_unlock (zi);
}
- odr_destroy (zi->odr);
zebra_maps_close (zi->zebra_maps);
bfs_destroy (zi->bfs);
data1_destroy (zi->dh);
}
#endif
+int bend_sort (void *handle, bend_sort_rr *rr)
+{
+ ZServerInfo *zi = handle;
+
+#if 1
+ register_lock (zi);
+
+ resultSetSort (zi, rr);
+
+ register_unlock (zi);
+#endif
+ return 0;
+}
+
int main (int argc, char **argv)
{
struct statserv_options_block *sob;