X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=index%2Fzsets.c;h=00258a090a046c64ccb9da2f1a2b9ed149efb5e0;hb=083d994896c30d9c560580daa19c9ca370901e3a;hp=636c5e4ae966a95ba7db744747193f9ef43e9133;hpb=aebdede4bcc1dfe05728dac36b51a1cda85cc70e;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index 636c5e4..00258a0 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: zsets.c,v $ - * Revision 1.4 1995-09-07 13:58:36 adam + * Revision 1.5 1995-09-27 16:17:32 adam + * More work on retrieve. + * + * Revision 1.4 1995/09/07 13:58:36 adam * New parameter: result-set file descriptor (RSFD) to support multiple * positions within the same result-set. * Boolean operators: and, or, not implemented. @@ -59,8 +62,62 @@ ZServerSet *resultSetGet (ZServerInfo *zi, const char *name) return NULL; } -ZServerRecord *resultSetRecordGet (ZServerInfo *zi, const char *name, - int num, int *positions) +ZServerSetSysno *resultSetSysnoGet (ZServerInfo *zi, const char *name, + int num, int *positions) +{ + ZServerSet *sset; + ZServerSetSysno *sr; + RSET rset; + int num_i = 0; + int position = 0; + int psysno = 0; + struct it_key key; + RSFD rfd; + + if (!(sset = resultSetGet (zi, name))) + return NULL; + if (!(rset = sset->rset)) + return NULL; + logf (LOG_DEBUG, "resultSetRecordGet"); + sr = xmalloc (sizeof(*sr) * num); + rfd = rset_open (rset, 0); + while (rset_read (rset, rfd, &key)) + { + if (key.sysno != psysno) + { + psysno = key.sysno; + position++; + if (position == positions[num_i]) + { + sr[num_i].sysno = psysno; + num_i++; + if (++num_i == num) + break; + } + } + } + rset_close (rset, rfd); + while (num_i < num) + { + sr[num_i].sysno = 0; + num_i++; + } + return sr; +} + +void resultSetRecordDel (ZServerInfo *zi, ZServerRecord *records, int num) +{ + int i; + + for (i = 0; i