From: Heikki Levanto Date: Fri, 20 Aug 2004 14:44:45 +0000 (+0000) Subject: Removed the term count stuff from all rsets, and fixed what ever that broke. X-Git-Tag: snippet.version.1~404 X-Git-Url: http://sru.miketaylor.org.uk/?a=commitdiff_plain;h=863d336f803da454e03f39ee2225719fed05021e;p=idzebra-moved-to-github.git Removed the term count stuff from all rsets, and fixed what ever that broke. Ranking doesn't probably work at all after this! --- diff --git a/include/rset.h b/include/rset.h index e83870b..1d22494 100644 --- a/include/rset.h +++ b/include/rset.h @@ -1,4 +1,4 @@ -/* $Id: rset.h,v 1.28 2004-08-06 12:55:01 adam Exp $ +/* $Id: rset.h,v 1.29 2004-08-20 14:44:45 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -33,7 +33,6 @@ extern "C" { typedef void *RSFD; typedef struct rset *RSET; -typedef struct rset_term *RSET_TERM; struct rset_control { @@ -43,16 +42,16 @@ struct rset_control void (*f_close)(RSFD rfd); void (*f_delete)(RSET ct); void (*f_rewind)(RSFD rfd); - int (*f_forward)(RSET ct, RSFD rfd, void *buf, int *term_index, + int (*f_forward)(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf); void (*f_pos)(RSFD rfd, double *current, double *total); /* returns -1,-1 if pos function not implemented for this type */ - int (*f_read)(RSFD rfd, void *buf, int *term_index); + int (*f_read)(RSFD rfd, void *buf); int (*f_write)(RSFD rfd, const void *buf); }; -int rset_default_forward(RSET ct, RSFD rfd, void *buf, int *term_index, +int rset_default_forward(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf); void rset_default_pos(RSFD rfd, double *current, double *total); @@ -71,15 +70,8 @@ typedef struct rset int flags; int count; void *buf; - RSET_TERM *rset_terms; - int no_rset_terms; } rset; -RSET_TERM rset_term_create (const char *name, int length, const char *flags, - int type); -void rset_term_destroy (RSET_TERM t); -RSET_TERM rset_term_dup (RSET_TERM t); - #define RSETF_READ 0 #define RSETF_WRITE 1 @@ -99,16 +91,16 @@ RSET rset_dup (RSET rs); /* void rset_rewind(RSET rs); */ #define rset_rewind(rs, rfd) (*(rs)->control->f_rewind)((rfd)) -/* int rset_forward(RSET rs, void *buf, int *indx, void *untilbuf); */ -#define rset_forward(rs, fd, buf, indx, cmpfunc, untilbuf) \ - (*(rs)->control->f_forward)((rs), (fd), (buf), (indx), (cmpfunc), (untilbuf)) +/* int rset_forward(RSET rs, void *buf, void *untilbuf); */ +#define rset_forward(rs, fd, buf, cmpfunc, untilbuf) \ + (*(rs)->control->f_forward)((rs), (fd), (buf), (cmpfunc), (untilbuf)) /* int rset_pos(RSET rs, RSFD fd, double *current, double *total); */ #define rset_pos(rs,fd,cur,tot) \ (*(rs)->control->f_pos)( (fd),(cur),(tot)) -/* int rset_read(RSET rs, void *buf, int *indx); */ -#define rset_read(rs, fd, buf, indx) (*(rs)->control->f_read)((fd), (buf), indx) +/* int rset_read(RSET rs, void *buf); */ +#define rset_read(rs, fd, buf) (*(rs)->control->f_read)((fd), (buf)) /* int rset_write(RSET rs, const void *buf); */ #define rset_write(rs, fd, buf) (*(rs)->control->f_write)((fd), (buf)) diff --git a/include/rsisamb.h b/include/rsisamb.h index 043e430..94c4c8a 100644 --- a/include/rsisamb.h +++ b/include/rsisamb.h @@ -1,4 +1,4 @@ -/* $Id: rsisamb.h,v 1.2 2002-08-02 19:26:55 adam Exp $ +/* $Id: rsisamb.h,v 1.3 2004-08-20 14:44:45 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -40,7 +40,6 @@ typedef struct rset_isamb_parms int key_size; ISAMB is; ISAMB_P pos; - RSET_TERM rset_term; } rset_isamb_parms; #ifdef __cplusplus diff --git a/include/rsisamc.h b/include/rsisamc.h index 04a2621..027c533 100644 --- a/include/rsisamc.h +++ b/include/rsisamc.h @@ -1,4 +1,4 @@ -/* $Id: rsisamc.h,v 1.7 2002-08-02 19:26:55 adam Exp $ +/* $Id: rsisamc.h,v 1.8 2004-08-20 14:44:45 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -40,7 +40,6 @@ typedef struct rset_isamc_parms int key_size; ISAMC is; ISAMC_P pos; - RSET_TERM rset_term; } rset_isamc_parms; #ifdef __cplusplus diff --git a/include/rsisams.h b/include/rsisams.h index 6fa58c9..e0a51e6 100644 --- a/include/rsisams.h +++ b/include/rsisams.h @@ -1,4 +1,4 @@ -/* $Id: rsisams.h,v 1.2 2002-08-02 19:26:55 adam Exp $ +/* $Id: rsisams.h,v 1.3 2004-08-20 14:44:45 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -38,7 +38,6 @@ typedef struct rset_isams_parms { ISAMS is; ISAMS_P pos; - RSET_TERM rset_term; } rset_isams_parms; #ifdef __cplusplus diff --git a/include/rsm_or.h b/include/rsm_or.h index 7d96e85..08d0732 100644 --- a/include/rsm_or.h +++ b/include/rsm_or.h @@ -1,4 +1,4 @@ -/* $Id: rsm_or.h,v 1.7 2004-08-04 08:35:23 adam Exp $ +/* $Id: rsm_or.h,v 1.8 2004-08-20 14:44:45 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -38,7 +38,6 @@ typedef struct rset_m_or_parms ISAMC isc; ISAMC_P *isam_positions; - RSET_TERM rset_term; int no_isam_positions; int no_save_positions; diff --git a/include/rsmultior.h b/include/rsmultior.h index 03055d3..1f63e72 100644 --- a/include/rsmultior.h +++ b/include/rsmultior.h @@ -1,4 +1,4 @@ -/* $Id: rsmultior.h,v 1.2 2004-08-19 12:49:14 heikki Exp $ +/* $Id: rsmultior.h,v 1.3 2004-08-20 14:44:45 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -40,9 +40,6 @@ typedef struct rset_multior_parms RSET *rsets; /* array of rsets to multi-or */ /* allocated when creating parms, */ /* rset will free when deleted */ - - RSET_TERM rset_term; - int no_isam_positions; int no_save_positions; } rset_multior_parms; diff --git a/include/rsnull.h b/include/rsnull.h index 6970455..ae0e546 100644 --- a/include/rsnull.h +++ b/include/rsnull.h @@ -1,4 +1,4 @@ -/* $Id: rsnull.h,v 1.5 2002-08-02 19:26:55 adam Exp $ +/* $Id: rsnull.h,v 1.6 2004-08-20 14:44:45 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -35,7 +35,6 @@ typedef struct rset_null_parms { int key_size; char *temp_path; - RSET_TERM rset_term; } rset_null_parms; extern const struct rset_control *rset_kind_null; diff --git a/include/rstemp.h b/include/rstemp.h index edf1c4b..c12c8d0 100644 --- a/include/rstemp.h +++ b/include/rstemp.h @@ -1,4 +1,4 @@ -/* $Id: rstemp.h,v 1.9 2004-01-22 11:27:21 adam Exp $ +/* $Id: rstemp.h,v 1.10 2004-08-20 14:44:45 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -38,7 +38,6 @@ typedef struct rset_temp_parms int (*cmp)(const void *p1, const void *p2); int key_size; const char *temp_path; - RSET_TERM rset_term; } rset_temp_parms; #ifdef __cplusplus diff --git a/index/livcode.c b/index/livcode.c index 21b18d3..cd85e34 100644 --- a/index/livcode.c +++ b/index/livcode.c @@ -11,7 +11,7 @@ rights reserved. Licensed under the Academic Free License version 1.1. http://opensource.org/licenses/academic.php -$Id: livcode.c,v 1.2 2004-08-04 08:35:23 adam Exp $ +$Id: livcode.c,v 1.3 2004-08-20 14:44:46 heikki Exp $ */ @@ -590,14 +590,16 @@ static void *begin (struct zebra_register *reg, void *class_handle, RSET rset) int i; logf (LOG_DEBUG, "livrank begin"); - si->no_entries = rset->no_rset_terms; + /* FIXME - Now that we don't have term counts in rsets, what do we */ + /* do about this ??? */ + si->no_entries = 0; /* rset->no_rset_terms; */ /* FIXME ??? */ si->no_rank_entries = 0; si->entries = (struct rank_term_info *) xmalloc (sizeof(*si->entries)*si->no_entries); for (i = 0; i < si->no_entries; i++) { - const char *flags = rset->rset_terms[i]->flags; - int g = rset->rset_terms[i]->nn; + const char *flags = ""; /* rset->rset_terms[i]->flags; *//* FIXME ???*/ + int g = 0; /* rset->rset_terms[i]->nn; */ /* FIXME ??? */ const char *cp = strstr(flags, ",u="); si->entries[i].rank_flag = 1; diff --git a/index/rank1.c b/index/rank1.c index 2117704..05f0761 100644 --- a/index/rank1.c +++ b/index/rank1.c @@ -1,4 +1,4 @@ -/* $Id: rank1.c,v 1.16 2004-08-06 13:36:23 adam Exp $ +/* $Id: rank1.c,v 1.17 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 Index Data Aps @@ -101,19 +101,24 @@ static void *begin (struct zebra_register *reg, void *class_handle, RSET rset) #if DEBUG_RANK yaz_log (LOG_LOG, "rank-1 begin"); #endif - si->no_entries = rset->no_rset_terms; + si->no_entries = 0; /* rset->no_rset_terms; */ /* FIXME - what to do here*/ + /* Now that we don't count term occurrences, ranking will have to */ + /* different! */ si->no_rank_entries = 0; si->entries = (struct rank_term_info *) xmalloc (sizeof(*si->entries)*si->no_entries); for (i = 0; i < si->no_entries; i++) { - zint g = rset->rset_terms[i]->nn; + zint g = 0; /* rset->rset_terms[i]->nn; */ /* FIXME ??? */ #if DEBUG_RANK yaz_log(LOG_LOG, "i=%d flags=%s", i, rset->rset_terms[i]->flags); #endif - if (!strncmp (rset->rset_terms[i]->flags, "rank,", 5)) + if (0) /* (!strncmp (rset->rset_terms[i]->flags, "rank,", 5)) */ + /* FIXME */ /* ??? */ { - const char *cp = strstr(rset->rset_terms[i]->flags+4, ",w="); + const char *cp = "w"; + /*= strstr(rset->rset_terms[i]->flags+4, ",w=");*/ + /* FIXME ??? */ si->entries[i].rank_flag = 1; if (cp) si->entries[i].rank_weight = atoi (cp+3); diff --git a/index/trunc.c b/index/trunc.c index 19ba229..acd9e4a 100644 --- a/index/trunc.c +++ b/index/trunc.c @@ -1,4 +1,4 @@ -/* $Id: trunc.c,v 1.35 2004-08-19 12:49:14 heikki Exp $ +/* $Id: trunc.c,v 1.36 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -146,7 +146,6 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, parms.cmp = key_compare_it; parms.key_size = sizeof(struct it_key); parms.temp_path = res_get (zi->res, "setTmpDir"); - parms.rset_term = rset_term_create (term, length, flags, term_type); result = rset_create (rset_kind_temp, &parms); result_rsfd = rset_open (result, RSETF_WRITE); @@ -154,7 +153,6 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, { RSFD *rsfd; RSET *rset; - int term_index; int i, i_add = (to-from)/merge_chunk + 1; struct trunc_info *ti; int rscur = 0; @@ -181,7 +179,7 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, for (i = rscur; --i >= 0; ) { rsfd[i] = rset_open (rset[i], RSETF_READ); - if (rset_read (rset[i], rsfd[i], ti->tmpbuf, &term_index)) + if (rset_read (rset[i], rsfd[i], ti->tmpbuf)) heap_insert (ti, ti->tmpbuf, i); else { @@ -198,7 +196,7 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, while (1) { - if (!rset_read (rset[n], rsfd[n], ti->tmpbuf, &term_index)) + if (!rset_read (rset[n], rsfd[n], ti->tmpbuf)) { heap_delete (ti); rset_close (rset[n], rsfd[n]); @@ -375,7 +373,6 @@ static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length, else logf (LOG_WARN, "Unknown isam set in rset_trunc_r"); - parms.rset_term->nn = nn; rset_close (result, result_rsfd); return result; } @@ -416,7 +413,6 @@ RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no, if (no < 1) { rset_null_parms parms; - parms.rset_term = rset_term_create (term, length, flags, term_type); return rset_create (rset_kind_null, &parms); } if (zi->reg->isams) @@ -427,8 +423,6 @@ RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no, parms.pos = *isam_p; parms.is = zi->reg->isams; - parms.rset_term = rset_term_create (term, length, flags, - term_type); return rset_create (rset_kind_isams, &parms); } qsort (isam_p, no, sizeof(*isam_p), isams_trunc_cmp); @@ -443,11 +437,9 @@ RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no, parms.cmp = key_compare_it; parms.pos = *isam_p; parms.is = zi->reg->isamc; - parms.rset_term = rset_term_create (term, length, flags, - term_type); return rset_create (rset_kind_isamc, &parms); } -#if NEW_TRUNC +#if 0 /* NEW_TRUNC */ /* FIXME - Use the new multi_or instead !! */ else if (no < 10000) { rset_m_or_parms parms; @@ -458,8 +450,6 @@ RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no, parms.isam_positions = isam_p; parms.no_isam_positions = no; parms.no_save_positions = 100000; - parms.rset_term = rset_term_create (term, length, flags, - term_type); return rset_create (rset_kind_m_or, &parms); } #endif @@ -474,8 +464,6 @@ RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no, parms.cmp = key_compare_it; parms.pos = *isam_p; parms.is = zi->reg->isamb; - parms.rset_term = rset_term_create (term, length, flags, - term_type); return rset_create (rset_kind_isamb, &parms); } #if 1 @@ -488,8 +476,6 @@ RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no, m_parms.cmp = key_compare_it; m_parms.no_rsets=no; m_parms.rsets=xmalloc(sizeof(*m_parms.rsets)*no); - m_parms.rset_term = rset_term_create (term, length, flags, - term_type); b_parms.key_size = sizeof(struct it_key); b_parms.cmp = key_compare_it; b_parms.is = zi->reg->isamb; @@ -498,8 +484,6 @@ RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no, for (i=0;iterm->which); return rset_create (rset_kind_null, &parms); } else if (rset_no == 1) @@ -1455,9 +1452,6 @@ static RSET rpn_search_APT_or_list (ZebraHandle zh, if (rset_no == 0) { rset_null_parms parms; - - parms.rset_term = rset_term_create (termz, -1, rank_type, - zapt->term->which); return rset_create (rset_kind_null, &parms); } result = rset[0]; @@ -1513,9 +1507,6 @@ static RSET rpn_search_APT_and_list (ZebraHandle zh, if (rset_no == 0) { rset_null_parms parms; - - parms.rset_term = rset_term_create (termz, -1, rank_type, - zapt->term->which); return rset_create (rset_kind_null, &parms); } result = rset[0]; @@ -1758,9 +1749,6 @@ static RSET rpn_search_APT_numeric (ZebraHandle zh, if (rset_no == 0) { rset_null_parms parms; - - parms.rset_term = rset_term_create (term_dst, -1, rank_type, - zapt->term->which); return rset_create (rset_kind_null, &parms); } result = rset[0]; @@ -1790,8 +1778,6 @@ static RSET rpn_search_APT_local (ZebraHandle zh, Z_AttributesPlusTerm *zapt, int sys; rset_temp_parms parms; - parms.rset_term = rset_term_create (termz, -1, rank_type, - zapt->term->which); parms.cmp = key_compare_it; parms.key_size = sizeof (struct it_key); parms.temp_path = res_get (zh->res, "setTmpDir"); @@ -1907,9 +1893,6 @@ static RSET rpn_sort_spec (ZebraHandle zh, Z_AttributesPlusTerm *zapt, sks->which = Z_SortKeySpec_null; sks->u.null = odr_nullval (); sort_sequence->specs[i] = sks; - - parms.rset_term = rset_term_create (termz, -1, rank_type, - zapt->term->which); return rset_create (rset_kind_null, &parms); } @@ -1950,20 +1933,12 @@ static RSET xpath_trunc(ZebraHandle zh, NMEM stream, if (grep_info_prepare (zh, 0 /* zapt */, &grep_info, '0', stream)) { rset_null_parms parms; - - parms.rset_term = rset_term_create (term, strlen(term), - flags, term_type); - parms.rset_term->nn = 0; return rset_create (rset_kind_null, &parms); } if (ord < 0) { rset_null_parms parms; - - parms.rset_term = rset_term_create (term, strlen(term), - flags, term_type); - parms.rset_term->nn = 0; return rset_create (rset_kind_null, &parms); } if (prefix_len) @@ -2467,13 +2442,12 @@ static void count_set (RSET r, int *count) int kno = 0; struct it_key key; RSFD rfd; - int term_index; logf (LOG_DEBUG, "count_set"); *count = 0; rfd = rset_open (r, RSETF_READ); - while (rset_read (r, rfd, &key, &term_index)) + while (rset_read (r, rfd, &key)) { #if IT_KEY_NEW if (key.mem[0] != psysno) diff --git a/index/zserver.c b/index/zserver.c index 088cf50..7624e11 100644 --- a/index/zserver.c +++ b/index/zserver.c @@ -1,4 +1,4 @@ -/* $Id: zserver.c,v 1.119 2004-08-06 13:36:23 adam Exp $ +/* $Id: zserver.c,v 1.120 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -178,7 +178,8 @@ static void search_terms (ZebraHandle zh, bend_search_rr *r) Z_SearchInfoReport *sr; /* get no of terms for result set */ - no_terms = zebra_resultSetTerms (zh, r->setname, 0, 0, 0, 0, 0); + no_terms = 0; /* zebra_resultSetTerms (zh, r->setname, 0, 0, 0, 0, 0); */ + /* FIXME - Rsets don't know number of terms no more ??? */ if (!no_terms) return; @@ -208,9 +209,11 @@ static void search_terms (ZebraHandle zh, bend_search_rr *r) Z_Term *term; char outbuf[1024]; size_t len = sizeof(outbuf); + /* FIXME - Can we just skip this ??? */ + /* zebra_resultSetTerms (zh, r->setname, i, &count, &type, 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, diff --git a/index/zsets.c b/index/zsets.c index 929db7f..11ac101 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,4 +1,4 @@ -/* $Id: zsets.c,v 1.56 2004-08-19 14:47:06 heikki Exp $ +/* $Id: zsets.c,v 1.57 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -71,9 +71,9 @@ struct zset_sort_info { }; ZebraSet resultSetAddRPN (ZebraHandle zh, NMEM m, - Z_RPNQuery *rpn, int num_bases, + Z_RPNQuery *rpn, int num_bases, char **basenames, - const char *setname) + const char *setname) { ZebraSet zebraSet; int i; @@ -84,7 +84,7 @@ ZebraSet resultSetAddRPN (ZebraHandle zh, NMEM m, zebraSet = resultSetAdd (zh, setname, 1); if (!zebraSet) - return 0; + return 0; zebraSet->locked = 1; zebraSet->rpn = 0; zebraSet->nmem = m; @@ -98,8 +98,8 @@ ZebraSet resultSetAddRPN (ZebraHandle zh, NMEM m, zebraSet->rset = rpn_search (zh, zebraSet->nmem, rpn, zebraSet->num_bases, - zebraSet->basenames, zebraSet->name, - zebraSet); + zebraSet->basenames, zebraSet->name, + zebraSet); zh->hits = zebraSet->hits; if (zebraSet->rset) zebraSet->rpn = rpn; @@ -108,34 +108,34 @@ ZebraSet resultSetAddRPN (ZebraHandle zh, NMEM m, } void resultSetAddTerm (ZebraHandle zh, ZebraSet s, int reg_type, - const char *db, int set, - int use, const char *term) + const char *db, int set, + int use, const char *term) { assert(zh); /* compiler shut up */ if (!s->nmem) - s->nmem = nmem_create (); + s->nmem = nmem_create (); if (!s->term_entries) { - int i; - s->term_entries_max = 1000; - s->term_entries = - nmem_malloc (s->nmem, s->term_entries_max * - sizeof(*s->term_entries)); - for (i = 0; i < s->term_entries_max; i++) - s->term_entries[i].term = 0; + int i; + s->term_entries_max = 1000; + s->term_entries = + nmem_malloc (s->nmem, s->term_entries_max * + sizeof(*s->term_entries)); + for (i = 0; i < s->term_entries_max; i++) + s->term_entries[i].term = 0; } if (s->hits < s->term_entries_max) { - s->term_entries[s->hits].reg_type = reg_type; - s->term_entries[s->hits].db = nmem_strdup (s->nmem, db); - s->term_entries[s->hits].set = set; - s->term_entries[s->hits].use = use; - s->term_entries[s->hits].term = nmem_strdup (s->nmem, term); + s->term_entries[s->hits].reg_type = reg_type; + s->term_entries[s->hits].db = nmem_strdup (s->nmem, db); + s->term_entries[s->hits].set = set; + s->term_entries[s->hits].use = use; + s->term_entries[s->hits].term = nmem_strdup (s->nmem, term); } (s->hits)++; } - +#if 0 /* FIXME - Delete this, we don't count terms no more */ int zebra_resultSetTerms (ZebraHandle zh, const char *setname, int no, zint *count, int *type, char *out, size_t *len) @@ -160,7 +160,7 @@ int zebra_resultSetTerms (ZebraHandle zh, const char *setname, char *inbuf = s->rset->rset_terms[no]->name; size_t inleft = strlen(inbuf); size_t outleft = *len - 1; - int converted = 0; + int converted = 0; if (zh->iconv_from_utf8 != 0) { @@ -173,7 +173,7 @@ int zebra_resultSetTerms (ZebraHandle zh, const char *setname, *len = 0; else *len = outbuf - out; - converted = 1; + converted = 1; } if (!converted) { @@ -187,6 +187,7 @@ int zebra_resultSetTerms (ZebraHandle zh, const char *setname, return no_max; } +#endif ZebraSet resultSetAdd (ZebraHandle zh, const char *name, int ov) { @@ -195,42 +196,42 @@ ZebraSet resultSetAdd (ZebraHandle zh, const char *name, int ov) for (s = zh->sets; s; s = s->next) if (!strcmp (s->name, name)) - break; + break; if (s) { - yaz_log (LOG_DEBUG, "updating result set %s", name); - if (!ov || s->locked) - return NULL; - if (s->rset) - rset_delete (s->rset); - if (s->nmem) - nmem_destroy (s->nmem); + yaz_log (LOG_DEBUG, "updating result set %s", name); + if (!ov || s->locked) + return NULL; + if (s->rset) + rset_delete (s->rset); + if (s->nmem) + nmem_destroy (s->nmem); } else { - const char *sort_max_str = zebra_get_resource(zh, "sortmax", "1000"); - - yaz_log (LOG_DEBUG, "adding result set %s", name); - s = (ZebraSet) xmalloc (sizeof(*s)); - s->next = zh->sets; - zh->sets = s; - s->name = (char *) xmalloc (strlen(name)+1); - strcpy (s->name, name); - - s->sort_info = (struct zset_sort_info *) - xmalloc (sizeof(*s->sort_info)); - s->sort_info->max_entries = atoi(sort_max_str); - if (s->sort_info->max_entries < 2) - s->sort_info->max_entries = 2; - - s->sort_info->entries = (struct zset_sort_entry **) - xmalloc (sizeof(*s->sort_info->entries) * - s->sort_info->max_entries); - s->sort_info->all_entries = (struct zset_sort_entry *) - xmalloc (sizeof(*s->sort_info->all_entries) * - s->sort_info->max_entries); - for (i = 0; i < s->sort_info->max_entries; i++) - s->sort_info->entries[i] = s->sort_info->all_entries + i; + const char *sort_max_str = zebra_get_resource(zh, "sortmax", "1000"); + + yaz_log (LOG_DEBUG, "adding result set %s", name); + s = (ZebraSet) xmalloc (sizeof(*s)); + s->next = zh->sets; + zh->sets = s; + s->name = (char *) xmalloc (strlen(name)+1); + strcpy (s->name, name); + + s->sort_info = (struct zset_sort_info *) + xmalloc (sizeof(*s->sort_info)); + s->sort_info->max_entries = atoi(sort_max_str); + if (s->sort_info->max_entries < 2) + s->sort_info->max_entries = 2; + + s->sort_info->entries = (struct zset_sort_entry **) + xmalloc (sizeof(*s->sort_info->entries) * + s->sort_info->max_entries); + s->sort_info->all_entries = (struct zset_sort_entry *) + xmalloc (sizeof(*s->sort_info->all_entries) * + s->sort_info->max_entries); + for (i = 0; i < s->sort_info->max_entries; i++) + s->sort_info->entries[i] = s->sort_info->all_entries + i; } s->locked = 0; s->term_entries = 0; @@ -254,7 +255,7 @@ ZebraSet resultSetGet (ZebraHandle zh, const char *name) yaz_log (LOG_LOG, "research %s", name); s->rset = rpn_search (zh, nmem, s->rpn, s->num_bases, - s->basenames, s->name, s); + s->basenames, s->name, s); nmem_destroy (nmem); } return s; @@ -280,47 +281,47 @@ void resultSetDestroy (ZebraHandle zh, int num, char **names,int *statuses) int i; if (statuses) - for (i = 0; ierrCode = 0; zh->errString = NULL; while (*ss) { - int i = -1; - ZebraSet s = *ss; - if (num >= 0) - { - for (i = 0; iname, names[i])) - { - if (statuses) - statuses[i] = Z_DeleteStatus_success; - i = -1; - break; - } - } - if (i < 0) - { - *ss = s->next; - - xfree (s->sort_info->all_entries); - xfree (s->sort_info->entries); - xfree (s->sort_info); - - if (s->nmem) - nmem_destroy (s->nmem); - if (s->rset) - rset_delete (s->rset); - xfree (s->name); - xfree (s); - } - else - ss = &s->next; + int i = -1; + ZebraSet s = *ss; + if (num >= 0) + { + for (i = 0; iname, names[i])) + { + if (statuses) + statuses[i] = Z_DeleteStatus_success; + i = -1; + break; + } + } + if (i < 0) + { + *ss = s->next; + + xfree (s->sort_info->all_entries); + xfree (s->sort_info->entries); + xfree (s->sort_info); + + if (s->nmem) + nmem_destroy (s->nmem); + if (s->rset) + rset_delete (s->rset); + xfree (s->name); + xfree (s); + } + else + ss = &s->next; } } ZebraPosSet zebraPosSetCreate (ZebraHandle zh, const char *name, - int num, int *positions) + int num, int *positions) { ZebraSet sset; ZebraPosSet sr = 0; @@ -332,101 +333,100 @@ ZebraPosSet zebraPosSetCreate (ZebraHandle zh, const char *name, return NULL; if (!(rset = sset->rset)) { - if (!sset->term_entries) - return 0; - sr = (ZebraPosSet) xmalloc (sizeof(*sr) * num); - for (i = 0; iterm_entries_max) - { - sr[i].term = sset->term_entries[positions[i]-1].term; - sr[i].db = sset->term_entries[positions[i]-1].db; - } - } + if (!sset->term_entries) + return 0; + sr = (ZebraPosSet) xmalloc (sizeof(*sr) * num); + for (i = 0; iterm_entries_max) + { + sr[i].term = sset->term_entries[positions[i]-1].term; + sr[i].db = sset->term_entries[positions[i]-1].db; + } + } } else { - sr = (ZebraPosSet) xmalloc (sizeof(*sr) * num); - for (i = 0; isort_info; - if (sort_info) - { - int position; - - for (i = 0; i 0 && position <= sort_info->num_entries) - { - yaz_log (LOG_DEBUG, "got pos=%d (sorted)", position); - sr[i].sysno = sort_info->entries[position-1]->sysno; - sr[i].score = sort_info->entries[position-1]->score; - } - } - } - /* did we really get all entries using sort ? */ - for (i = 0; inum_entries; - while (num_i < num && positions[num_i] < position) - num_i++; - rfd = rset_open (rset, RSETF_READ); - while (num_i < num && rset_read (rset, rfd, &key, &term_index)) - { + sr = (ZebraPosSet) xmalloc (sizeof(*sr) * num); + for (i = 0; isort_info; + if (sort_info) + { + int position; + + for (i = 0; i 0 && position <= sort_info->num_entries) + { + yaz_log (LOG_DEBUG, "got pos=%d (sorted)", position); + sr[i].sysno = sort_info->entries[position-1]->sysno; + sr[i].score = sort_info->entries[position-1]->score; + } + } + } + /* did we really get all entries using sort ? */ + for (i = 0; inum_entries; + while (num_i < num && positions[num_i] < position) + num_i++; + rfd = rset_open (rset, RSETF_READ); + while (num_i < num && rset_read (rset, rfd, &key)) + { #if IT_KEY_NEW - zint this_sys = key.mem[0]; + zint this_sys = key.mem[0]; #else - zint this_sys = key.sysno; + zint this_sys = key.sysno; #endif - if (this_sys != psysno) - { - psysno = this_sys; - if (sort_info) - { - /* determine we alreay have this in our set */ - for (i = sort_info->num_entries; --i >= 0; ) - if (psysno == sort_info->entries[i]->sysno) - break; - if (i >= 0) - continue; - } - position++; - assert (num_i < num); - if (position == positions[num_i]) - { - sr[num_i].sysno = psysno; - yaz_log (LOG_DEBUG, "got pos=%d (unsorted)", position); - sr[num_i].score = -1; - num_i++; - } - } - } - rset_close (rset, rfd); - } + if (this_sys != psysno) + { + psysno = this_sys; + if (sort_info) + { + /* determine we alreay have this in our set */ + for (i = sort_info->num_entries; --i >= 0; ) + if (psysno == sort_info->entries[i]->sysno) + break; + if (i >= 0) + continue; + } + position++; + assert (num_i < num); + if (position == positions[num_i]) + { + sr[num_i].sysno = psysno; + yaz_log (LOG_DEBUG, "got pos=%d (unsorted)", position); + sr[num_i].score = -1; + num_i++; + } + } + } + rset_close (rset, rfd); + } } return sr; } @@ -444,8 +444,8 @@ struct sortKeyInfo { }; void resultSetInsertSort (ZebraHandle zh, ZebraSet sset, - struct sortKeyInfo *criteria, int num_criteria, - zint sysno) + struct sortKeyInfo *criteria, int num_criteria, + zint sysno) { struct zset_sort_entry this_entry; struct zset_sort_entry *new_entry = NULL; @@ -455,15 +455,15 @@ void resultSetInsertSort (ZebraHandle zh, ZebraSet sset, sortIdx_sysno (zh->reg->sortIdx, sysno); for (i = 0; ireg->sortIdx, criteria[i].attrUse); - sortIdx_read (zh->reg->sortIdx, this_entry.buf[i]); + sortIdx_type (zh->reg->sortIdx, criteria[i].attrUse); + sortIdx_read (zh->reg->sortIdx, this_entry.buf[i]); } i = sort_info->num_entries; while (--i >= 0) { - int rel = 0; - for (j = 0; jentries[i]->buf[j], - SORT_IDX_ENTRYSIZE); + rel = memcmp (this_entry.buf[j], sort_info->entries[i]->buf[j], + SORT_IDX_ENTRYSIZE); } - if (rel) - break; - } - if (!rel) - break; - if (criteria[j].relation == 'A') + if (rel) + break; + } + if (!rel) + break; + if (criteria[j].relation == 'A') { - if (rel > 0) - break; - } + if (rel > 0) + break; + } else if (criteria[j].relation == 'D') - { - if (rel < 0) - break; - } + { + if (rel < 0) + break; + } } ++i; j = sort_info->max_entries; if (i == j) - return; + return; if (sort_info->num_entries == j) - --j; + --j; else - j = (sort_info->num_entries)++; + j = (sort_info->num_entries)++; new_entry = sort_info->entries[j]; while (j != i) { - sort_info->entries[j] = sort_info->entries[j-1]; - --j; + sort_info->entries[j] = sort_info->entries[j-1]; + --j; } sort_info->entries[i] = new_entry; assert (new_entry); for (i = 0; ibuf[i], this_entry.buf[i], SORT_IDX_ENTRYSIZE); + memcpy (new_entry->buf[i], this_entry.buf[i], SORT_IDX_ENTRYSIZE); new_entry->sysno = sysno; new_entry->score = -1; } void resultSetInsertRank (ZebraHandle zh, struct zset_sort_info *sort_info, - zint sysno, int score, int relation) + zint sysno, int score, int relation) { struct zset_sort_entry *new_entry = NULL; int i, j; @@ -528,36 +528,36 @@ void resultSetInsertRank (ZebraHandle zh, struct zset_sort_info *sort_info, i = sort_info->num_entries; while (--i >= 0) { - int rel = 0; - - rel = score - sort_info->entries[i]->score; - - if (relation == 'D') - { - if (rel >= 0) - break; - } - else if (relation == 'A') - { - if (rel <= 0) - break; - } + int rel = 0; + + rel = score - sort_info->entries[i]->score; + + if (relation == 'D') + { + if (rel >= 0) + break; + } + else if (relation == 'A') + { + if (rel <= 0) + break; + } } ++i; j = sort_info->max_entries; if (i == j) - return; + return; if (sort_info->num_entries == j) - --j; + --j; else - j = (sort_info->num_entries)++; + j = (sort_info->num_entries)++; new_entry = sort_info->entries[j]; while (j != i) { - sort_info->entries[j] = sort_info->entries[j-1]; - --j; + sort_info->entries[j] = sort_info->entries[j-1]; + --j; } sort_info->entries[i] = new_entry; assert (new_entry); @@ -566,57 +566,56 @@ void resultSetInsertRank (ZebraHandle zh, struct zset_sort_info *sort_info, } void resultSetSort (ZebraHandle zh, NMEM nmem, - int num_input_setnames, const char **input_setnames, - const char *output_setname, - Z_SortKeySpecList *sort_sequence, int *sort_status) + int num_input_setnames, const char **input_setnames, + const char *output_setname, + Z_SortKeySpecList *sort_sequence, int *sort_status) { ZebraSet sset; RSET rset; if (num_input_setnames == 0) { - zh->errCode = 208; - return ; + zh->errCode = 208; + return ; } if (num_input_setnames > 1) { - zh->errCode = 230; - return; + zh->errCode = 230; + return; } yaz_log (LOG_DEBUG, "result set sort input=%s output=%s", - *input_setnames, output_setname); + *input_setnames, output_setname); sset = resultSetGet (zh, input_setnames[0]); if (!sset) { - zh->errCode = 30; - zh->errString = nmem_strdup (nmem, input_setnames[0]); - return; + zh->errCode = 30; + zh->errString = nmem_strdup (nmem, input_setnames[0]); + return; } if (!(rset = sset->rset)) { - zh->errCode = 30; - zh->errString = nmem_strdup (nmem, input_setnames[0]); + zh->errCode = 30; + zh->errString = nmem_strdup (nmem, input_setnames[0]); return; } if (strcmp (output_setname, input_setnames[0])) { - rset = rset_dup (rset); - sset = resultSetAdd (zh, output_setname, 1); + rset = rset_dup (rset); + sset = resultSetAdd (zh, output_setname, 1); sset->rset = rset; } resultSetSortSingle (zh, nmem, sset, rset, sort_sequence, sort_status); } void resultSetSortSingle (ZebraHandle zh, NMEM nmem, - ZebraSet sset, RSET rset, - Z_SortKeySpecList *sort_sequence, int *sort_status) + ZebraSet sset, RSET rset, + Z_SortKeySpecList *sort_sequence, int *sort_status) { int i; zint psysno = 0; struct it_key key; struct sortKeyInfo sort_criteria[3]; int num_criteria; - int term_index; RSFD rfd; yaz_log (LOG_LOG, "resultSetSortSingle start"); @@ -626,87 +625,89 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, sset->hits = 0; num_criteria = sort_sequence->num_specs; if (num_criteria > 3) - num_criteria = 3; + num_criteria = 3; for (i = 0; i < num_criteria; i++) { - Z_SortKeySpec *sks = sort_sequence->specs[i]; - Z_SortKey *sk; - - if (*sks->sortRelation == Z_SortKeySpec_ascending) - sort_criteria[i].relation = 'A'; - else if (*sks->sortRelation == Z_SortKeySpec_descending) - sort_criteria[i].relation = 'D'; - else - { - zh->errCode = 214; - return; - } - if (sks->sortElement->which == Z_SortElement_databaseSpecific) - { - zh->errCode = 210; - return; - } - else if (sks->sortElement->which != Z_SortElement_generic) - { - zh->errCode = 237; - return; - } - sk = sks->sortElement->u.generic; - switch (sk->which) - { - case Z_SortKey_sortField: - yaz_log (LOG_DEBUG, "Sort: key %d is of type sortField", i+1); - zh->errCode = 207; - return; - case Z_SortKey_elementSpec: - yaz_log (LOG_DEBUG, "Sort: key %d is of type elementSpec", i+1); - zh->errCode = 207; - return; - case Z_SortKey_sortAttributes: - yaz_log (LOG_DEBUG, "Sort: key %d is of type sortAttributes", i+1); - sort_criteria[i].attrUse = - zebra_maps_sort (zh->reg->zebra_maps, - sk->u.sortAttributes, + Z_SortKeySpec *sks = sort_sequence->specs[i]; + Z_SortKey *sk; + + if (*sks->sortRelation == Z_SortKeySpec_ascending) + sort_criteria[i].relation = 'A'; + else if (*sks->sortRelation == Z_SortKeySpec_descending) + sort_criteria[i].relation = 'D'; + else + { + zh->errCode = 214; + return; + } + if (sks->sortElement->which == Z_SortElement_databaseSpecific) + { + zh->errCode = 210; + return; + } + else if (sks->sortElement->which != Z_SortElement_generic) + { + zh->errCode = 237; + return; + } + sk = sks->sortElement->u.generic; + switch (sk->which) + { + case Z_SortKey_sortField: + yaz_log (LOG_DEBUG, "Sort: key %d is of type sortField", i+1); + zh->errCode = 207; + return; + case Z_SortKey_elementSpec: + yaz_log (LOG_DEBUG, "Sort: key %d is of type elementSpec", i+1); + zh->errCode = 207; + return; + case Z_SortKey_sortAttributes: + yaz_log (LOG_DEBUG, "Sort: key %d is of type sortAttributes", i+1); + sort_criteria[i].attrUse = + zebra_maps_sort (zh->reg->zebra_maps, + sk->u.sortAttributes, &sort_criteria[i].numerical); - yaz_log (LOG_DEBUG, "use value = %d", sort_criteria[i].attrUse); - if (sort_criteria[i].attrUse == -1) - { - zh->errCode = 116; - return; - } - if (sortIdx_type (zh->reg->sortIdx, sort_criteria[i].attrUse)) - { - zh->errCode = 207; - return; - } - break; - } + yaz_log (LOG_DEBUG, "use value = %d", sort_criteria[i].attrUse); + if (sort_criteria[i].attrUse == -1) + { + zh->errCode = 116; + return; + } + if (sortIdx_type (zh->reg->sortIdx, sort_criteria[i].attrUse)) + { + zh->errCode = 207; + return; + } + break; + } } rfd = rset_open (rset, RSETF_READ); - while (rset_read (rset, rfd, &key, &term_index)) + while (rset_read (rset, rfd, &key)) { #if IT_KEY_NEW - zint this_sys = key.mem[0]; + zint this_sys = key.mem[0]; #else - zint this_sys = key.sysno; + zint this_sys = key.sysno; #endif if (this_sys != psysno) { - (sset->hits)++; + (sset->hits)++; psysno = this_sys; - resultSetInsertSort (zh, sset, - sort_criteria, num_criteria, psysno); + resultSetInsertSort (zh, sset, + sort_criteria, num_criteria, psysno); } } rset_close (rset, rfd); - + +#if 0 for (i = 0; i < rset->no_rset_terms; i++) - yaz_log (LOG_LOG, "term=\"%s\" nn=" ZINT_FORMAT " type=%s count=" ZINT_FORMAT, + yaz_log (LOG_LOG, "term=\"%s\" nn=" ZINT_FORMAT + " type=%s count=" ZINT_FORMAT, rset->rset_terms[i]->name, rset->rset_terms[i]->nn, rset->rset_terms[i]->flags, rset->rset_terms[i]->count); - +#endif *sort_status = Z_SortResponse_success; yaz_log (LOG_LOG, "resultSetSortSingle end"); } @@ -716,7 +717,7 @@ RSET resultSetRef (ZebraHandle zh, const char *resultSetId) ZebraSet s; if ((s = resultSetGet (zh, resultSetId))) - return s->rset; + return s->rset; return NULL; } @@ -725,7 +726,8 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) zint kno = 0; struct it_key key; RSFD rfd; - int term_index, i; + /* int term_index; */ + int i; ZebraRankClass rank_class; struct rank_control *rc; struct zset_sort_info *sort_info; @@ -750,36 +752,40 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) } rc = rank_class->control; - if (rset_read (rset, rfd, &key, &term_index)) + if (rset_read (rset, rfd, &key)) { #if IT_KEY_NEW - zint psysno = key.mem[0]; + zint psysno = key.mem[0]; #else - zint psysno = key.sysno; + zint psysno = key.sysno; #endif - int score; - void *handle = - (*rc->begin) (zh->reg, rank_class->class_handle, rset); - (zebraSet->hits)++; - esthits=atoi(res_get_def(zh->res,"estimatehits","0")); - if (!esthits) est=-1; /* can not do */ - do - { + int score; + void *handle = + (*rc->begin) (zh->reg, rank_class->class_handle, rset); + (zebraSet->hits)++; + esthits=atoi(res_get_def(zh->res,"estimatehits","0")); + if (!esthits) + est=-1; /* can not do */ + do + { #if IT_KEY_NEW - zint this_sys = key.mem[0]; + zint this_sys = key.mem[0]; #else - zint this_sys = key.sysno; + zint this_sys = key.sysno; #endif - kno++; - if (this_sys != psysno) - { - score = (*rc->calc) (handle, psysno); - - resultSetInsertRank (zh, sort_info, psysno, score, 'A'); - (zebraSet->hits)++; - psysno = this_sys; - } - (*rc->add) (handle, this_sys, term_index); + kno++; + if (this_sys != psysno) + { + score = (*rc->calc) (handle, psysno); + + resultSetInsertRank (zh, sort_info, psysno, score, 'A'); + (zebraSet->hits)++; + psysno = this_sys; + } + /* FIXME - Ranking is broken, since rsets no longer have */ + /* term lists! */ + /* (*rc->add) (handle, this_sys, term_index); */ + if ( (est==-2) && (zebraSet->hits==esthits)) { /* time to estimate the hits */ rset_pos(rset,rfd,&cur,&tot); @@ -801,15 +807,15 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) zebraSet->hits=est; } } - } - while (rset_read (rset, rfd, &key, &term_index) && (est<0) ); + } + while (rset_read (rset, rfd, &key) && (est<0) ); - score = (*rc->calc) (handle, psysno); - resultSetInsertRank (zh, sort_info, psysno, score, 'A'); - (*rc->end) (zh->reg, handle); + score = (*rc->calc) (handle, psysno); + resultSetInsertRank (zh, sort_info, psysno, score, 'A'); + (*rc->end) (zh->reg, handle); } rset_close (rset, rfd); - +/* for (i = 0; i < rset->no_rset_terms; i++) { if (est>0) @@ -822,7 +828,7 @@ void resultSetRank (ZebraHandle zh, ZebraSet zebraSet, RSET rset) rset->rset_terms[i]->flags, rset->rset_terms[i]->count); } - +*/ yaz_log (LOG_LOG, ZINT_FORMAT " keys, "ZINT_FORMAT" distinct sysnos", kno, zebraSet->hits); } @@ -831,12 +837,12 @@ ZebraRankClass zebraRankLookup (ZebraHandle zh, const char *name) { ZebraRankClass p = zh->reg->rank_classes; while (p && strcmp (p->control->name, name)) - p = p->next; + p = p->next; if (p && !p->init_flag) { - if (p->control->create) - p->class_handle = (*p->control->create)(zh); - p->init_flag = 1; + if (p->control->create) + p->class_handle = (*p->control->create)(zh); + p->init_flag = 1; } return p; } @@ -857,13 +863,13 @@ void zebraRankDestroy (struct zebra_register *reg) ZebraRankClass p = reg->rank_classes; while (p) { - ZebraRankClass p_next = p->next; - if (p->init_flag && p->control->destroy) - (*p->control->destroy)(reg, p->class_handle); - xfree (p->control->name); - xfree (p->control); - xfree (p); - p = p_next; + ZebraRankClass p_next = p->next; + if (p->init_flag && p->control->destroy) + (*p->control->destroy)(reg, p->class_handle); + xfree (p->control->name); + xfree (p->control); + xfree (p); + p = p_next; } reg->rank_classes = NULL; } diff --git a/index/zvrank.c b/index/zvrank.c index 061f3ad..e2c19c0 100644 --- a/index/zvrank.c +++ b/index/zvrank.c @@ -1,4 +1,4 @@ -/* $Id: zvrank.c,v 1.9 2004-08-06 12:28:22 adam Exp $ +/* $Id: zvrank.c,v 1.10 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 Index Data Aps @@ -693,7 +693,9 @@ static void *zv_begin(struct zebra_register *reg, void *class_handle, RSET rset) zint gocc; /**/ yaz_log(LOG_DEBUG, "zv_begin"); - veclen=rset->no_rset_terms; /* smaller vector here */ + veclen= 0 ; /* rset->no_rset_terms;*/ /* smaller vector here */ + /* FIXME - Now that we don't have term lists in rsets, what do */ + /* we do here ??? */ zv_init(rs, ci->rscheme); rs->veclen=veclen; prn_rs(rs); @@ -712,7 +714,7 @@ static void *zv_begin(struct zebra_register *reg, void *class_handle, RSET rset) /* yaz_log(LOG_DEBUG, "zv_begin_init"); */ for (i = 0; i < rs->veclen; i++) { - gocc=rset->rset_terms[i]->nn; + gocc= 0; /* rset->rset_terms[i]->nn; */ /* FIXME ??? */ /* yaz_log(LOG_DEBUG, "zv_begin_init i=%d gocc=%d", i, gocc); */ rs->qdoc->terms[i].gocc=gocc; rs->qdoc->terms[i].locc=1; /* assume query has no duplicate terms */ diff --git a/rset/Makefile.am b/rset/Makefile.am index 2104556..01b1f9b 100644 --- a/rset/Makefile.am +++ b/rset/Makefile.am @@ -1,7 +1,9 @@ -## $Id: Makefile.am,v 1.9 2004-08-16 16:17:49 heikki Exp $ +## $Id: Makefile.am,v 1.10 2004-08-20 14:44:46 heikki Exp $ noinst_LIBRARIES = librset.a librset_a_SOURCES = rset.c rstemp.c rsnull.c rsbool.c rsbetween.c \ - rsisamc.c rsm_or.c rsmultior.c rsisams.c rsisamb.c rsprox.c + rsisamc.c rsmultior.c rsisams.c rsisamb.c rsprox.c + +#rsm_or.c removed AM_CPPFLAGS = -I$(srcdir)/../include $(YAZINC) diff --git a/rset/rsbetween.c b/rset/rsbetween.c index bf63992..4249c7e 100644 --- a/rset/rsbetween.c +++ b/rset/rsbetween.c @@ -1,4 +1,4 @@ -/* $Id: rsbetween.c,v 1.17 2004-08-06 14:09:02 heikki Exp $ +/* $Id: rsbetween.c,v 1.18 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -45,10 +45,10 @@ static RSFD r_open_between (RSET ct, int flag); static void r_close_between (RSFD rfd); static void r_delete_between (RSET ct); static void r_rewind_between (RSFD rfd); -static int r_forward_between(RSET ct, RSFD rfd, void *buf, int *term_index, +static int r_forward_between(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf); -static int r_read_between (RSFD rfd, void *buf, int *term_index); +static int r_read_between (RSFD rfd, void *buf); static int r_write_between (RSFD rfd, const void *buf); static void r_pos_between (RSFD rfd, double *current, double *total); @@ -75,7 +75,6 @@ struct rset_between_info { RSET rset_m; RSET rset_r; RSET rset_attr; - int term_index_s; int (*cmp)(const void *p1, const void *p2); char *(*printer)(const void *p1, char *buf); struct rset_between_rfd *rfd_list; @@ -90,9 +89,6 @@ struct rset_between_rfd { int more_m; int more_r; int more_attr; - int term_index_l; - int term_index_m; - int term_index_r; void *buf_l; void *buf_m; void *buf_r; @@ -137,40 +133,6 @@ static void *r_create_between (RSET ct, const struct rset_control *sel, info->cmp = between_parms->cmp; info->printer = between_parms->printer; info->rfd_list = NULL; - - info->term_index_s = info->rset_l->no_rset_terms; - if (info->rset_m) - { - ct->no_rset_terms = - info->rset_l->no_rset_terms + - info->rset_m->no_rset_terms + - info->rset_r->no_rset_terms; - ct->rset_terms = (RSET_TERM *) - xmalloc (sizeof (*ct->rset_terms) * ct->no_rset_terms); - memcpy (ct->rset_terms, info->rset_l->rset_terms, - info->rset_l->no_rset_terms * sizeof(*ct->rset_terms)); - memcpy (ct->rset_terms + info->rset_l->no_rset_terms, - info->rset_m->rset_terms, - info->rset_m->no_rset_terms * sizeof(*ct->rset_terms)); - memcpy (ct->rset_terms + info->rset_l->no_rset_terms + - info->rset_m->no_rset_terms, - info->rset_r->rset_terms, - info->rset_r->no_rset_terms * sizeof(*ct->rset_terms)); - } - else - { - ct->no_rset_terms = - info->rset_l->no_rset_terms + - info->rset_r->no_rset_terms; - ct->rset_terms = (RSET_TERM *) - xmalloc (sizeof (*ct->rset_terms) * ct->no_rset_terms); - memcpy (ct->rset_terms, info->rset_l->rset_terms, - info->rset_l->no_rset_terms * sizeof(*ct->rset_terms)); - memcpy (ct->rset_terms + info->rset_l->no_rset_terms, - info->rset_r->rset_terms, - info->rset_r->no_rset_terms * sizeof(*ct->rset_terms)); - } - return info; } @@ -198,18 +160,14 @@ static RSFD r_open_between (RSET ct, int flag) rfd->rfd_m = rset_open (info->rset_m, RSETF_READ); rfd->rfd_r = rset_open (info->rset_r, RSETF_READ); - rfd->more_l = rset_read (info->rset_l, rfd->rfd_l, rfd->buf_l, - &rfd->term_index_l); - rfd->more_m = rset_read (info->rset_m, rfd->rfd_m, rfd->buf_m, - &rfd->term_index_m); - rfd->more_r = rset_read (info->rset_r, rfd->rfd_r, rfd->buf_r, - &rfd->term_index_r); + rfd->more_l = rset_read (info->rset_l, rfd->rfd_l, rfd->buf_l); + rfd->more_m = rset_read (info->rset_m, rfd->rfd_m, rfd->buf_m); + rfd->more_r = rset_read (info->rset_r, rfd->rfd_r, rfd->buf_r); if (info->rset_attr) { - int dummy; rfd->rfd_attr = rset_open (info->rset_attr, RSETF_READ); rfd->more_attr = rset_read (info->rset_attr, rfd->rfd_attr, - rfd->buf_attr, &dummy); + rfd->buf_attr); } rfd->level=0; rfd->hits=0; @@ -247,7 +205,6 @@ static void r_delete_between (RSET ct) struct rset_between_info *info = (struct rset_between_info *) ct->buf; assert (info->rfd_list == NULL); - xfree (ct->rset_terms); rset_delete (info->rset_l); rset_delete (info->rset_m); rset_delete (info->rset_r); @@ -267,15 +224,13 @@ static void r_rewind_between (RSFD rfd) rset_rewind (info->rset_l, p->rfd_l); rset_rewind (info->rset_m, p->rfd_m); rset_rewind (info->rset_r, p->rfd_r); - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, &p->term_index_l); - p->more_m = rset_read (info->rset_m, p->rfd_m, p->buf_m, &p->term_index_m); - p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r, &p->term_index_r); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); + p->more_m = rset_read (info->rset_m, p->rfd_m, p->buf_m); + p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r); if (info->rset_attr) { - int dummy; rset_rewind (info->rset_attr, p->rfd_attr); - p->more_attr = rset_read (info->rset_attr, p->rfd_attr, p->buf_attr, - &dummy); + p->more_attr = rset_read (info->rset_attr, p->rfd_attr, p->buf_attr); } p->level=0; p->hits=0; @@ -283,7 +238,7 @@ static void r_rewind_between (RSFD rfd) -static int r_forward_between(RSET ct, RSFD rfd, void *buf, int *term_index, +static int r_forward_between(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf) { @@ -297,11 +252,11 @@ static int r_forward_between(RSET ct, RSFD rfd, void *buf, int *term_index, /* naturally forward the l, m, and attr pointers */ if (p->more_m) p->more_m=rset_forward(info->rset_m,p->rfd_m, p->buf_m, - &p->term_index_m, info->cmp,untilbuf); + info->cmp,untilbuf); #if RSBETWEEN_DEBUG log2( p, "fwd: after forward M", 0,0); #endif - rc = r_read_between(rfd, buf, term_index); + rc = r_read_between(rfd, buf); #if RSBETWEEN_DEBUG log2( p, "fwd: after forward", 0,0); #endif @@ -311,7 +266,7 @@ static int r_forward_between(RSET ct, RSFD rfd, void *buf, int *term_index, -static int r_read_between (RSFD rfd, void *buf, int *term_index) +static int r_read_between (RSFD rfd, void *buf) { struct rset_between_rfd *p = (struct rset_between_rfd *) rfd; struct rset_between_info *info = p->info; @@ -350,7 +305,6 @@ static int r_read_between (RSFD rfd, void *buf, int *term_index) else { int cmp_attr; - int dummy_term; attr_match = 0; while (p->more_attr) { @@ -363,8 +317,8 @@ static int r_read_between (RSFD rfd, void *buf, int *term_index) else if (cmp_attr > 0) break; else if (cmp_attr==-1) - p->more_attr = rset_read (info->rset_attr, p->rfd_attr, - p->buf_attr, &dummy_term); + p->more_attr = rset_read (info->rset_attr, + p->rfd_attr, p->buf_attr); /* if we had a forward that went all the way to * the seqno, we could use that. But fwd only goes * to the sysno */ @@ -372,8 +326,7 @@ static int r_read_between (RSFD rfd, void *buf, int *term_index) { p->more_attr = rset_forward( info->rset_attr, p->rfd_attr, - p->buf_attr, &dummy_term, - info->cmp, p->buf_l); + p->buf_attr, info->cmp, p->buf_l); #if RSBETWEEN_DEBUG logf(LOG_DEBUG, "btw: after frowarding attr m=%d",p->more_attr); #endif @@ -387,10 +340,8 @@ static int r_read_between (RSFD rfd, void *buf, int *term_index) { if (p->more_l) { - p->more_l=rset_forward( - info->rset_l, p->rfd_l, - p->buf_l, &p->term_index_l, - info->cmp, p->buf_m); + p->more_l=rset_forward( info->rset_l, p->rfd_l, + p->buf_l, info->cmp, p->buf_m); if (p->more_l) cmp_l= (*info->cmp)(p->buf_l, p->buf_m); else @@ -401,12 +352,10 @@ static int r_read_between (RSFD rfd, void *buf, int *term_index) } } else { - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); } #else - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); #endif if (p->more_l) { @@ -441,21 +390,17 @@ static int r_read_between (RSFD rfd, void *buf, int *term_index) #if NEWCODE if (cmp_r==-2) { - p->more_r=rset_forward( - info->rset_r, p->rfd_r, - p->buf_r, &p->term_index_r, - info->cmp, p->buf_m); + p->more_r=rset_forward( info->rset_r, p->rfd_r, + p->buf_r, info->cmp, p->buf_m); } else { - p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r, - &p->term_index_r); + p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r); } if (p->more_r) cmp_r= (*info->cmp)(p->buf_r, p->buf_m); #else - p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r, - &p->term_index_r); + p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r); cmp_r= (*info->cmp)(p->buf_r, p->buf_m); #endif } @@ -472,12 +417,10 @@ static int r_read_between (RSFD rfd, void *buf, int *term_index) if ( attr_match && p->level > 0) /* within a tag pair (or deeper) */ { memcpy (buf, p->buf_m, info->key_size); - *term_index = p->term_index_m; #if RSBETWEEN_DEBUG log2( p, "Returning a hit (and forwarding m)", cmp_l, cmp_r); #endif - p->more_m = rset_read (info->rset_m, p->rfd_m, p->buf_m, - &p->term_index_m); + p->more_m = rset_read (info->rset_m, p->rfd_m, p->buf_m); if (cmp_l == 2) p->level = 0; p->hits++; @@ -494,20 +437,16 @@ static int r_read_between (RSFD rfd, void *buf, int *term_index) if (cmp_l == 2) { p->level = 0; - p->more_m=rset_forward( - info->rset_m, p->rfd_m, - p->buf_m, &p->term_index_m, - info->cmp, p->buf_l); + p->more_m=rset_forward( info->rset_m, p->rfd_m, + p->buf_m, info->cmp, p->buf_l); } else { - p->more_m = rset_read (info->rset_m, p->rfd_m, p->buf_m, - &p->term_index_m); + p->more_m = rset_read (info->rset_m, p->rfd_m, p->buf_m); } #else if (cmp_l == 2) p->level = 0; - p->more_m = rset_read (info->rset_m, p->rfd_m, p->buf_m, - &p->term_index_m); + p->more_m = rset_read (info->rset_m, p->rfd_m, p->buf_m); #endif #if RSBETWEEN_DEBUG log2( p, "End of M loop", cmp_l, cmp_r); diff --git a/rset/rsbool.c b/rset/rsbool.c index 736bf18..750531a 100644 --- a/rset/rsbool.c +++ b/rset/rsbool.c @@ -1,4 +1,4 @@ -/* $Id: rsbool.c,v 1.37 2004-08-06 14:09:02 heikki Exp $ +/* $Id: rsbool.c,v 1.38 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -38,13 +38,13 @@ static RSFD r_open (RSET ct, int flag); static void r_close (RSFD rfd); static void r_delete (RSET ct); static void r_rewind (RSFD rfd); -static int r_forward(RSET ct, RSFD rfd, void *buf, int *term_index, +static int r_forward(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf); static void r_pos (RSFD rfd, double *current, double *total); -static int r_read_and (RSFD rfd, void *buf, int *term_index); -static int r_read_or (RSFD rfd, void *buf, int *term_index); -static int r_read_not (RSFD rfd, void *buf, int *term_index); +static int r_read_and (RSFD rfd, void *buf); +static int r_read_or (RSFD rfd, void *buf); +static int r_read_not (RSFD rfd, void *buf); static int r_write (RSFD rfd, const void *buf); static const struct rset_control control_and = @@ -98,7 +98,6 @@ struct rset_bool_info { int key_size; RSET rset_l; RSET rset_r; - int term_index_s; int (*cmp)(const void *p1, const void *p2); void (*log_item)(int logmask, const void *p, const char *txt); struct rset_bool_rfd *rfd_list; @@ -110,8 +109,6 @@ struct rset_bool_rfd { RSFD rfd_r; int more_l; int more_r; - int term_index_l; - int term_index_r; void *buf_l; void *buf_r; int tail; @@ -134,17 +131,6 @@ static void *r_create (RSET ct, const struct rset_control *sel, void *parms) info->log_item = bool_parms->log_item; info->rfd_list = NULL; - info->term_index_s = info->rset_l->no_rset_terms; - ct->no_rset_terms = - info->rset_l->no_rset_terms + info->rset_r->no_rset_terms; - ct->rset_terms = (RSET_TERM *) - xmalloc (sizeof (*ct->rset_terms) * ct->no_rset_terms); - - memcpy (ct->rset_terms, info->rset_l->rset_terms, - info->rset_l->no_rset_terms * sizeof(*ct->rset_terms)); - memcpy (ct->rset_terms + info->rset_l->no_rset_terms, - info->rset_r->rset_terms, - info->rset_r->no_rset_terms * sizeof(*ct->rset_terms)); return info; } @@ -155,8 +141,8 @@ static RSFD r_open (RSET ct, int flag) if (flag & RSETF_WRITE) { - logf (LOG_FATAL, "bool set type is read-only"); - return NULL; + logf (LOG_FATAL, "bool set type is read-only"); + return NULL; } rfd = (struct rset_bool_rfd *) xmalloc (sizeof(*rfd)); logf(LOG_DEBUG,"rsbool (%s) open [%p]", ct->control->desc, rfd); @@ -169,10 +155,8 @@ static RSFD r_open (RSET ct, int flag) rfd->buf_r = xmalloc (info->key_size); rfd->rfd_l = rset_open (info->rset_l, RSETF_READ); rfd->rfd_r = rset_open (info->rset_r, RSETF_READ); - rfd->more_l = rset_read (info->rset_l, rfd->rfd_l, rfd->buf_l, - &rfd->term_index_l); - rfd->more_r = rset_read (info->rset_r, rfd->rfd_r, rfd->buf_r, - &rfd->term_index_r); + rfd->more_l = rset_read (info->rset_l, rfd->rfd_l, rfd->buf_l); + rfd->more_r = rset_read (info->rset_r, rfd->rfd_r, rfd->buf_r); rfd->tail = 0; return rfd; } @@ -202,7 +186,6 @@ static void r_delete (RSET ct) struct rset_bool_info *info = (struct rset_bool_info *) ct->buf; assert (info->rfd_list == NULL); - xfree (ct->rset_terms); rset_delete (info->rset_l); rset_delete (info->rset_r); xfree (info); @@ -216,12 +199,12 @@ static void r_rewind (RSFD rfd) logf (LOG_DEBUG, "rsbool_rewind"); rset_rewind (info->rset_l, p->rfd_l); rset_rewind (info->rset_r, p->rfd_r); - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, &p->term_index_l); - p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r, &p->term_index_r); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); + p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r); p->hits=0; } -static int r_forward (RSET ct, RSFD rfd, void *buf, int *term_index, +static int r_forward (RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf) { @@ -235,21 +218,21 @@ static int r_forward (RSET ct, RSFD rfd, void *buf, int *term_index, #endif if ( p->more_l && ((cmpfunc)(untilbuf,p->buf_l)==2) ) p->more_l = rset_forward(info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l, info->cmp, untilbuf); + info->cmp, untilbuf); #if RSET_DEBUG logf (LOG_DEBUG, "rsbool_forward (R) [%p] '%s' (ct=%p rfd=%p m=%d,%d)", rfd, ct->control->desc, ct, rfd, p->more_l, p->more_r); #endif if ( p->more_r && ((cmpfunc)(untilbuf,p->buf_r)==2)) p->more_r = rset_forward(info->rset_r, p->rfd_r, p->buf_r, - &p->term_index_r, info->cmp, untilbuf); + info->cmp, untilbuf); #if RSET_DEBUG logf (LOG_DEBUG, "rsbool_forward [%p] calling read, m=%d,%d t=%d", rfd, p->more_l, p->more_r, p->tail); #endif p->tail=0; - rc = rset_read(ct,rfd,buf,term_index); + rc = rset_read(ct,rfd,buf); #if RSET_DEBUG logf (LOG_DEBUG, "rsbool_forward returning [%p] %d m=%d,%d", rfd, rc, p->more_l, p->more_r); @@ -273,7 +256,7 @@ static int r_forward (RSET ct, RSFD rfd, void *buf, int *term_index, 3,1 */ -static int r_read_and (RSFD rfd, void *buf, int *term_index) +static int r_read_and (RSFD rfd, void *buf) { struct rset_bool_rfd *p = (struct rset_bool_rfd *) rfd; struct rset_bool_info *info = p->info; @@ -297,23 +280,19 @@ static int r_read_and (RSFD rfd, void *buf, int *term_index) if (!cmp) { memcpy (buf, p->buf_l, info->key_size); - *term_index = p->term_index_l; - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); p->tail = 1; } else if (cmp == 1) { memcpy (buf, p->buf_r, info->key_size); - *term_index = p->term_index_r + info->term_index_s; - p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r, - &p->term_index_r); + p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r); p->tail = 1; #if RSET_DEBUG logf (LOG_DEBUG, "r_read_and [%p] returning R m=%d/%d c=%d", rfd, p->more_l, p->more_r, cmp); key_logdump(LOG_DEBUG,buf); - (*info->log_item)(LOG_DEBUG, buf, ""); + (*info->log_item)(LOG_DEBUG, buf, ""); #endif p->hits++; return 1; @@ -321,14 +300,12 @@ static int r_read_and (RSFD rfd, void *buf, int *term_index) else if (cmp == -1) { memcpy (buf, p->buf_l, info->key_size); - *term_index = p->term_index_l; - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); p->tail = 1; #if RSET_DEBUG logf (LOG_DEBUG, "r_read_and [%p] returning L m=%d/%d c=%d", rfd, p->more_l, p->more_r, cmp); - (*info->log_item)(LOG_DEBUG, buf, ""); + (*info->log_item)(LOG_DEBUG, buf, ""); #endif p->hits++; return 1; @@ -338,10 +315,8 @@ static int r_read_and (RSFD rfd, void *buf, int *term_index) #define OLDCODE 0 #if OLDCODE memcpy (buf, p->buf_r, info->key_size); - *term_index = p->term_index_r + info->term_index_s; - p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r, - &p->term_index_r); + p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r); if (p->tail) { if (!p->more_r || (*info->cmp)(p->buf_r, buf) > 1) @@ -349,7 +324,7 @@ static int r_read_and (RSFD rfd, void *buf, int *term_index) #if RSET_DEBUG logf (LOG_DEBUG, "r_read_and returning C m=%d/%d c=%d", p->more_l, p->more_r, cmp); - (*info->log_item)(LOG_DEBUG, buf, ""); + (*info->log_item)(LOG_DEBUG, buf, ""); #endif p->hits++; return 1; @@ -359,30 +334,26 @@ static int r_read_and (RSFD rfd, void *buf, int *term_index) if (p->tail) { memcpy (buf, p->buf_r, info->key_size); - *term_index = p->term_index_r + info->term_index_s; - p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r, - &p->term_index_r); + p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r); if (!p->more_r || (*info->cmp)(p->buf_r, buf) > 1) p->tail = 0; #if RSET_DEBUG logf (LOG_DEBUG, "r_read_and [%p] returning R tail m=%d/%d c=%d", rfd, p->more_l, p->more_r, cmp); - (*info->log_item)(LOG_DEBUG, buf, ""); + (*info->log_item)(LOG_DEBUG, buf, ""); #endif p->hits++; return 1; } - else + else { #if RSET_DEBUG logf (LOG_DEBUG, "r_read_and [%p] about to forward R m=%d/%d c=%d", rfd, p->more_l, p->more_r, cmp); #endif if (p->more_r && p->more_l) - p->more_r = rset_forward( - info->rset_r, p->rfd_r, - p->buf_r, &p->term_index_r, - (info->cmp), p->buf_l); + p->more_r = rset_forward( info->rset_r, p->rfd_r, + p->buf_r, (info->cmp), p->buf_l); else return 0; /* no point in reading further */ } @@ -392,9 +363,7 @@ static int r_read_and (RSFD rfd, void *buf, int *term_index) { #if OLDCODE memcpy (buf, p->buf_l, info->key_size); - *term_index = p->term_index_l; - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); if (p->tail) { if (!p->more_l || (*info->cmp)(p->buf_l, buf) > 1) @@ -402,7 +371,7 @@ static int r_read_and (RSFD rfd, void *buf, int *term_index) #if RSET_DEBUG logf (LOG_DEBUG, "r_read_and [%p] returning R tail m=%d/%d c=%d", rfd, p->more_l, p->more_r, cmp); - (*info->log_item)(LOG_DEBUG, buf, ""); + (*info->log_item)(LOG_DEBUG, buf, ""); #endif p->hits++; return 1; @@ -411,15 +380,13 @@ static int r_read_and (RSFD rfd, void *buf, int *term_index) if (p->tail) { memcpy (buf, p->buf_l, info->key_size); - *term_index = p->term_index_l; - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); if (!p->more_l || (*info->cmp)(p->buf_l, buf) > 1) p->tail = 0; #if RSET_DEBUG logf (LOG_DEBUG, "r_read_and [%p] returning L tail m=%d/%d c=%d", rfd, p->more_l, p->more_r, cmp); - (*info->log_item)(LOG_DEBUG, buf, ""); + (*info->log_item)(LOG_DEBUG, buf, ""); #endif p->hits++; return 1; @@ -432,10 +399,8 @@ static int r_read_and (RSFD rfd, void *buf, int *term_index) #endif if (p->more_r && p->more_l) p->more_l = rset_forward( - /* p->more_l = rset_default_forward( */ info->rset_l, p->rfd_l, - p->buf_l, &p->term_index_l, - (info->cmp), p->buf_r); + p->buf_l, (info->cmp), p->buf_r); else return 0; /* no point in reading further */ } @@ -448,7 +413,7 @@ static int r_read_and (RSFD rfd, void *buf, int *term_index) return 0; } -static int r_read_or (RSFD rfd, void *buf, int *term_index) +static int r_read_or (RSFD rfd, void *buf) { struct rset_bool_rfd *p = (struct rset_bool_rfd *) rfd; struct rset_bool_info *info = p->info; @@ -466,11 +431,8 @@ static int r_read_or (RSFD rfd, void *buf, int *term_index) if (!cmp) { memcpy (buf, p->buf_l, info->key_size); - *term_index = p->term_index_l; - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l); - p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r, - &p->term_index_r); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); + p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r); #if RSET_DEBUG logf (LOG_DEBUG, "r_read_or returning A m=%d/%d c=%d", p->more_l, p->more_r, cmp); @@ -482,9 +444,7 @@ static int r_read_or (RSFD rfd, void *buf, int *term_index) else if (cmp > 0) { memcpy (buf, p->buf_r, info->key_size); - *term_index = p->term_index_r + info->term_index_s; - p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r, - &p->term_index_r); + p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r); #if RSET_DEBUG logf (LOG_DEBUG, "r_read_or returning B m=%d/%d c=%d", p->more_l, p->more_r, cmp); @@ -496,9 +456,7 @@ static int r_read_or (RSFD rfd, void *buf, int *term_index) else { memcpy (buf, p->buf_l, info->key_size); - *term_index = p->term_index_l; - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); #if RSET_DEBUG logf (LOG_DEBUG, "r_read_or returning C m=%d/%d c=%d", p->more_l, p->more_r, cmp); @@ -511,7 +469,7 @@ static int r_read_or (RSFD rfd, void *buf, int *term_index) return 0; } -static int r_read_not (RSFD rfd, void *buf, int *term_index) +static int r_read_not (RSFD rfd, void *buf) { struct rset_bool_rfd *p = (struct rset_bool_rfd *) rfd; struct rset_bool_info *info = p->info; @@ -529,34 +487,29 @@ static int r_read_not (RSFD rfd, void *buf, int *term_index) if (cmp < -1) { memcpy (buf, p->buf_l, info->key_size); - *term_index = p->term_index_l; - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); p->hits++; return 1; } else if (cmp > 1) { - p->more_r = rset_forward( - info->rset_r, p->rfd_r, - p->buf_r, &p->term_index_r, - (info->cmp), p->buf_l); + p->more_r = rset_forward( + info->rset_r, p->rfd_r, + p->buf_r, (info->cmp), p->buf_l); } else { memcpy (buf, p->buf_l, info->key_size); do { - p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l, - &p->term_index_l); + p->more_l = rset_read (info->rset_l, p->rfd_l, p->buf_l); if (!p->more_l) break; cmp = (*info->cmp)(p->buf_l, buf); } while (cmp >= -1 && cmp <= 1); do { - p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r, - &p->term_index_r); + p->more_r = rset_read (info->rset_r, p->rfd_r, p->buf_r); if (!p->more_r) break; cmp = (*info->cmp)(p->buf_r, buf); diff --git a/rset/rset.c b/rset/rset.c index 254ee08..d37203f 100644 --- a/rset/rset.c +++ b/rset/rset.c @@ -1,4 +1,4 @@ -/* $Id: rset.c,v 1.24 2004-08-19 12:49:15 heikki Exp $ +/* $Id: rset.c,v 1.25 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -28,24 +28,18 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #include -#include <../index/index.h> /* for log_keydump. Debugging only */ +/* #include <../index/index.h> */ /* for log_keydump. Debugging only */ RSET rset_create(const struct rset_control *sel, void *parms) { RSET rnew; - int i; logf (LOG_DEBUG, "rs_create(%s)", sel->desc); rnew = (RSET) xmalloc(sizeof(*rnew)); rnew->control = sel; rnew->flags = 0; rnew->count = 1; - rnew->rset_terms = NULL; - rnew->no_rset_terms = 0; rnew->buf = (*sel->f_create)(rnew, sel, parms); - logf (LOG_DEBUG, "no_rset_terms: %d", rnew->no_rset_terms); - for (i = 0; ino_rset_terms; i++) - logf (LOG_DEBUG, " %s", rnew->rset_terms[i]->name); return rnew; } @@ -54,8 +48,8 @@ void rset_delete (RSET rs) (rs->count)--; if (!rs->count) { - (*rs->control->f_delete)(rs); - xfree(rs); + (*rs->control->f_delete)(rs); + xfree(rs); } } @@ -75,7 +69,7 @@ void rset_default_pos (RSFD rfd, double *current, double *total) *total=-1; } /* rset_default_pos */ -int rset_default_forward(RSET ct, RSFD rfd, void *buf, int *term_index, +int rset_default_forward(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf) { @@ -83,71 +77,18 @@ int rset_default_forward(RSET ct, RSFD rfd, void *buf, int *term_index, int cmp=2; logf (LOG_DEBUG, "rset_default_forward starting '%s' (ct=%p rfd=%p)", ct->control->desc, ct,rfd); - key_logdump(LOG_DEBUG, untilbuf); + /* key_logdump(LOG_DEBUG, untilbuf); */ while ( (cmp==2) && (more)) { logf (LOG_DEBUG, "rset_default_forward looping m=%d c=%d",more,cmp); - more=rset_read(ct, rfd, buf, term_index); + more=rset_read(ct, rfd, buf); if (more) cmp=(*cmpfunc)(untilbuf,buf); - if (more) - key_logdump(LOG_DEBUG,buf); +/* if (more) + key_logdump(LOG_DEBUG,buf); */ } logf (LOG_DEBUG, "rset_default_forward exiting m=%d c=%d",more,cmp); return more; } -RSET_TERM *rset_terms(RSET rs, int *no) -{ - *no = rs->no_rset_terms; - return rs->rset_terms; -} - -RSET_TERM rset_term_create (const char *name, int length, const char *flags, - int type) -{ - RSET_TERM t = (RSET_TERM) xmalloc (sizeof(*t)); - if (!name) - t->name = NULL; - else if (length == -1) - t->name = xstrdup (name); - else - { - t->name = (char*) xmalloc (length+1); - memcpy (t->name, name, length); - t->name[length] = '\0'; - } - if (!flags) - t->flags = NULL; - else - t->flags = xstrdup (flags); - t->nn = -1; - t->count = 0; - t->type = type; - return t; -} - -void rset_term_destroy (RSET_TERM t) -{ - if (t) { /* rsmultior uses things without terms at all ! */ - xfree (t->name); - xfree (t->flags); - xfree (t); - } -} - -RSET_TERM rset_term_dup (RSET_TERM t) -{ - RSET_TERM nt = (RSET_TERM) xmalloc (sizeof(*nt)); - if (t->name) - nt->name = xstrdup (t->name); - else - nt->name = NULL; - if (t->flags) - nt->flags = xstrdup (t->flags); - else - nt->flags = NULL; - nt->nn = t->nn; - return nt; -} diff --git a/rset/rsisamb.c b/rset/rsisamb.c index 7965ece..1c24650 100644 --- a/rset/rsisamb.c +++ b/rset/rsisamb.c @@ -1,4 +1,4 @@ -/* $Id: rsisamb.c,v 1.14 2004-08-06 12:55:03 adam Exp $ +/* $Id: rsisamb.c,v 1.15 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -36,11 +36,11 @@ static RSFD r_open (RSET ct, int flag); static void r_close (RSFD rfd); static void r_delete (RSET ct); static void r_rewind (RSFD rfd); -static int r_forward(RSET ct, RSFD rfd, void *buf, int *term_index, +static int r_forward(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf); static void r_pos (RSFD rfd, double *current, double *total); -static int r_read (RSFD rfd, void *buf, int *term_index); +static int r_read (RSFD rfd, void *buf); static int r_write (RSFD rfd, const void *buf); static const struct rset_control control = @@ -63,7 +63,6 @@ struct rset_pp_info { ISAMB_PP pt; struct rset_pp_info *next; struct rset_isamb_info *info; - zint *countp; void *buf; }; @@ -87,9 +86,6 @@ static void *r_create(RSET ct, const struct rset_control *sel, void *parms) info->key_size = pt->key_size; info->cmp = pt->cmp; info->ispt_list = NULL; - ct->no_rset_terms = 1; - ct->rset_terms = (RSET_TERM *) xmalloc (sizeof(*ct->rset_terms)); - ct->rset_terms[0] = pt->rset_term; return info; } @@ -109,10 +105,6 @@ RSFD r_open (RSET ct, int flag) info->ispt_list = ptinfo; ptinfo->pt = isamb_pp_open (info->is, info->pos); ptinfo->info = info; - if (ct->rset_terms[0]->nn < 0) - ct->rset_terms[0]->nn = isamb_pp_num (ptinfo->pt); - ct->rset_terms[0]->count = 0; - ptinfo->countp = &ct->rset_terms[0]->count; ptinfo->buf = xmalloc (info->key_size); return ptinfo; } @@ -141,8 +133,6 @@ static void r_delete (RSET ct) logf (LOG_DEBUG, "rsisamb_delete"); assert (info->ispt_list == NULL); - rset_term_destroy (ct->rset_terms[0]); - xfree (ct->rset_terms); xfree (info); } @@ -152,7 +142,7 @@ static void r_rewind (RSFD rfd) abort (); } -static int r_forward(RSET ct, RSFD rfd, void *buf, int *term_index, +static int r_forward(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf) { @@ -183,21 +173,12 @@ static void r_pos (RSFD rfd, double *current, double *total) #endif } -static int r_read (RSFD rfd, void *buf, int *term_index) +static int r_read (RSFD rfd, void *buf) { struct rset_pp_info *pinfo = (struct rset_pp_info *) rfd; int r; - *term_index = 0; r = isamb_pp_read(pinfo->pt, buf); - if (r > 0) - { - if (*pinfo->countp == 0 || (*pinfo->info->cmp)(buf, pinfo->buf) > 1) - { - memcpy (pinfo->buf, buf, pinfo->info->key_size); - (*pinfo->countp)++; - } - } return r; } diff --git a/rset/rsisamc.c b/rset/rsisamc.c index d005fb9..6c26e89 100644 --- a/rset/rsisamc.c +++ b/rset/rsisamc.c @@ -1,4 +1,4 @@ -/* $Id: rsisamc.c,v 1.17 2004-08-06 12:55:03 adam Exp $ +/* $Id: rsisamc.c,v 1.18 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -34,7 +34,7 @@ static RSFD r_open (RSET ct, int flag); static void r_close (RSFD rfd); static void r_delete (RSET ct); static void r_rewind (RSFD rfd); -static int r_read (RSFD rfd, void *buf, int *term_index); +static int r_read (RSFD rfd, void *buf); static int r_write (RSFD rfd, const void *buf); static const struct rset_control control = @@ -81,9 +81,6 @@ static void *r_create(RSET ct, const struct rset_control *sel, void *parms) info->key_size = pt->key_size; info->cmp = pt->cmp; info->ispt_list = NULL; - ct->no_rset_terms = 1; - ct->rset_terms = (RSET_TERM *) xmalloc (sizeof(*ct->rset_terms)); - ct->rset_terms[0] = pt->rset_term; return info; } @@ -103,10 +100,6 @@ RSFD r_open (RSET ct, int flag) info->ispt_list = ptinfo; ptinfo->pt = isc_pp_open (info->is, info->pos); ptinfo->info = info; - if (ct->rset_terms[0]->nn < 0) - ct->rset_terms[0]->nn = isc_pp_num (ptinfo->pt); - ct->rset_terms[0]->count = 0; - ptinfo->countp = &ct->rset_terms[0]->count; ptinfo->buf = xmalloc (info->key_size); return ptinfo; } @@ -135,8 +128,6 @@ static void r_delete (RSET ct) logf (LOG_DEBUG, "rsisamc_delete"); assert (info->ispt_list == NULL); - rset_term_destroy (ct->rset_terms[0]); - xfree (ct->rset_terms); xfree (info); } @@ -146,11 +137,10 @@ static void r_rewind (RSFD rfd) abort (); } -static int r_read (RSFD rfd, void *buf, int *term_index) +static int r_read (RSFD rfd, void *buf) { struct rset_pp_info *pinfo = (struct rset_pp_info *) rfd; int r; - *term_index = 0; r = isc_pp_read(pinfo->pt, buf); if (r > 0) { diff --git a/rset/rsisams.c b/rset/rsisams.c index 7ebdc4b..e93674d 100644 --- a/rset/rsisams.c +++ b/rset/rsisams.c @@ -1,4 +1,4 @@ -/* $Id: rsisams.c,v 1.7 2004-08-04 09:59:03 heikki Exp $ +/* $Id: rsisams.c,v 1.8 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -32,7 +32,7 @@ static RSFD r_open (RSET ct, int flag); static void r_close (RSFD rfd); static void r_delete (RSET ct); static void r_rewind (RSFD rfd); -static int r_read (RSFD rfd, void *buf, int *term_index); +static int r_read (RSFD rfd, void *buf); static int r_write (RSFD rfd, const void *buf); static const struct rset_control control = @@ -73,9 +73,6 @@ static void *r_create(RSET ct, const struct rset_control *sel, void *parms) info->is = pt->is; info->pos = pt->pos; info->ispt_list = NULL; - ct->no_rset_terms = 1; - ct->rset_terms = (RSET_TERM *) xmalloc (sizeof(*ct->rset_terms)); - ct->rset_terms[0] = pt->rset_term; return info; } @@ -87,16 +84,14 @@ RSFD r_open (RSET ct, int flag) logf (LOG_DEBUG, "risams_open"); if (flag & RSETF_WRITE) { - logf (LOG_FATAL, "ISAMS set type is read-only"); - return NULL; + logf (LOG_FATAL, "ISAMS set type is read-only"); + return NULL; } ptinfo = (struct rset_pp_info *) xmalloc (sizeof(*ptinfo)); ptinfo->next = info->ispt_list; info->ispt_list = ptinfo; ptinfo->pt = isams_pp_open (info->is, info->pos); ptinfo->info = info; - if (ct->rset_terms[0]->nn < 0) - ct->rset_terms[0]->nn = isams_pp_num (ptinfo->pt); return ptinfo; } @@ -123,8 +118,6 @@ static void r_delete (RSET ct) logf (LOG_DEBUG, "rsisams_delete"); assert (info->ispt_list == NULL); - rset_term_destroy (ct->rset_terms[0]); - xfree (ct->rset_terms); xfree (info); } @@ -135,9 +128,8 @@ static void r_rewind (RSFD rfd) } -static int r_read (RSFD rfd, void *buf, int *term_index) +static int r_read (RSFD rfd, void *buf) { - *term_index = 0; return isams_pp_read( ((struct rset_pp_info*) rfd)->pt, buf); } diff --git a/rset/rsm_or.c b/rset/rsm_or.c index 8f5ea33..dee7955 100644 --- a/rset/rsm_or.c +++ b/rset/rsm_or.c @@ -1,4 +1,4 @@ -/* $Id: rsm_or.c,v 1.19 2004-08-16 16:17:49 heikki Exp $ +/* $Id: rsm_or.c,v 1.20 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -37,7 +37,7 @@ static RSFD r_open (RSET ct, int flag); static void r_close (RSFD rfd); static void r_delete (RSET ct); static void r_rewind (RSFD rfd); -static int r_read (RSFD rfd, void *buf, int *term_index); +static int r_read (RSFD rfd, void *buf); static int r_write (RSFD rfd, const void *buf); static const struct rset_control control = @@ -88,7 +88,6 @@ struct rset_mor_rfd { struct rset_mor_rfd *next; struct rset_mor_info *info; struct trunc_info *ti; - zint *countp; char *pbuf; }; @@ -241,13 +240,7 @@ static RSFD r_open (RSET ct, int flag) } } rfd->position = info->no_save_positions; - - if (ct->no_rset_terms == 1) - rfd->countp = &ct->rset_terms[0]->count; - else - rfd->countp = 0; - rfd->pbuf = xmalloc (info->key_size); - + rfd->pbuf = 0; r_rewind (rfd); return rfd; } @@ -279,15 +272,8 @@ static void r_close (RSFD rfd) static void r_delete (RSET ct) { struct rset_mor_info *info = (struct rset_mor_info *) ct->buf; - int i; - assert (info->rfd_list == NULL); xfree (info->isam_positions); - - for (i = 0; ino_rset_terms; i++) - rset_term_destroy (ct->rset_terms[i]); - xfree (ct->rset_terms); - xfree (info); } @@ -296,7 +282,7 @@ static void r_rewind (RSFD rfd) } -static int r_read (RSFD rfd, void *buf, int *term_index) +static int r_read (RSFD rfd, void *buf) { struct rset_mor_rfd *mrfd = (struct rset_mor_rfd *) rfd; struct trunc_info *ti = mrfd->ti; @@ -304,7 +290,6 @@ static int r_read (RSFD rfd, void *buf, int *term_index) if (!ti->heapnum) return 0; - *term_index = 0; memcpy (buf, ti->heap[ti->ptr[1]], ti->keysize); if (((struct rset_mor_rfd *) rfd)->position) { @@ -317,6 +302,7 @@ static int r_read (RSFD rfd, void *buf, int *term_index) } else heap_delete (ti); + rfd->pbuf = xmalloc (info->key_size); if (mrfd->countp && ( *mrfd->countp == 0 || (*ti->cmp)(buf, mrfd->pbuf) > 1)) { diff --git a/rset/rsmultior.c b/rset/rsmultior.c index 9c5709c..38c0d94 100644 --- a/rset/rsmultior.c +++ b/rset/rsmultior.c @@ -1,4 +1,4 @@ -/* $Id: rsmultior.c,v 1.3 2004-08-19 14:11:54 heikki Exp $ +/* $Id: rsmultior.c,v 1.4 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -37,9 +37,9 @@ static RSFD r_open (RSET ct, int flag); static void r_close (RSFD rfd); static void r_delete (RSET ct); static void r_rewind (RSFD rfd); -static int r_read (RSFD rfd, void *buf, int *term_index); +static int r_read (RSFD rfd, void *buf); static int r_write (RSFD rfd, const void *buf); -static int r_forward(RSET ct, RSFD rfd, void *buf, int *term_index, +static int r_forward(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf); static void r_pos (RSFD rfd, double *current, double *total); @@ -90,7 +90,6 @@ struct rset_multior_info { int (*cmp)(const void *p1, const void *p2); int no_rsets; RSET *rsets; - int term_index; struct rset_multior_rfd *rfd_list; }; @@ -101,9 +100,9 @@ struct rset_multior_rfd { HEAP h; struct rset_multior_rfd *next; struct rset_multior_info *info; - zint *countp; /* inc at every new record we see */ zint hits; /* returned so far */ char *prevvalue; /* to see if we are in another record */ + /* FIXME - is this really needed? */ }; #if 0 @@ -234,10 +233,6 @@ static void *r_create (RSET ct, const struct rset_control *sel, void *parms) info->no_rsets= r_parms->no_rsets; info->rsets=r_parms->rsets; /* now we own it! */ info->rfd_list=0; - info->term_index=0 ; /* r_parms->rset_term; */ /*??*/ /*FIXME */ - ct->no_rset_terms = 1; - ct->rset_terms = (RSET_TERM *) xmalloc (sizeof(*ct->rset_terms)); - ct->rset_terms[0] = r_parms->rset_term; return info; } @@ -246,7 +241,6 @@ static RSFD r_open (RSET ct, int flag) struct rset_multior_rfd *rfd; struct rset_multior_info *info = (struct rset_multior_info *) ct->buf; int i; - int dummy_termindex; if (flag & RSETF_WRITE) { @@ -258,10 +252,6 @@ static RSFD r_open (RSET ct, int flag) rfd->next = info->rfd_list; rfd->info = info; info->rfd_list = rfd; - if (ct->no_rset_terms==1) - rfd->countp=&ct->rset_terms[0]->count; - else - rfd->countp=0; rfd->h = heap_create( info->no_rsets, info->key_size, info->cmp); rfd->prevvalue=0; rfd->hits=0; @@ -272,7 +262,7 @@ static RSFD r_open (RSET ct, int flag) rfd->items[i].fd=rset_open(info->rsets[i],RSETF_READ); /* if (item_readbuf(&(rfd->items[i]))) */ if ( rset_read(rfd->items[i].rset, rfd->items[i].fd, - rfd->items[i].buf, &dummy_termindex) ) + rfd->items[i].buf) ) heap_insert(rfd->h, &(rfd->items[i])); } return rfd; @@ -316,10 +306,6 @@ static void r_delete (RSET ct) rset_delete(info->rsets[i]); xfree(info->rsets); xfree(info); - - for (i = 0; ino_rset_terms; i++) /* usually only 1 */ - rset_term_destroy (ct->rset_terms[i]); - xfree (ct->rset_terms); } static void r_rewind (RSFD rfd) @@ -328,7 +314,7 @@ static void r_rewind (RSFD rfd) } -static int r_forward(RSET ct, RSFD rfd, void *buf, int *term_index, +static int r_forward(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf) { @@ -336,30 +322,17 @@ static int r_forward(RSET ct, RSFD rfd, void *buf, int *term_index, struct rset_multior_info *info = mrfd->info; struct heap_item it; int rdres; - int dummycount=0; if (heap_empty(mrfd->h)) return 0; if (cmpfunc) assert(cmpfunc==mrfd->info->cmp); - *term_index=0; it = *(mrfd->h->heap[1]); memcpy(buf,it.buf, info->key_size); (mrfd->hits)++; - if (mrfd->countp) { - if (mrfd->prevvalue) { /* in another record */ - if ( (*mrfd->info->cmp)(mrfd->prevvalue,it.buf) < -1) - (*mrfd->countp)++; - } else { - mrfd->prevvalue=xmalloc(info->key_size); - (*mrfd->countp)++; - } - memcpy(mrfd->prevvalue,it.buf, info->key_size); - } if (untilbuf) - rdres=rset_forward(it.rset, it.fd, it.buf, &dummycount, - cmpfunc,untilbuf); + rdres=rset_forward(it.rset, it.fd, it.buf, cmpfunc,untilbuf); else - rdres=rset_read(it.rset, it.fd, it.buf, &dummycount); + rdres=rset_read(it.rset, it.fd, it.buf); if ( rdres ) heap_balance(mrfd->h); else @@ -368,9 +341,9 @@ static int r_forward(RSET ct, RSFD rfd, void *buf, int *term_index, } -static int r_read (RSFD rfd, void *buf, int *term_index) +static int r_read (RSFD rfd, void *buf) { - return r_forward(0,rfd, buf, term_index,0,0); + return r_forward(0,rfd, buf,0,0); } static void r_pos (RSFD rfd, double *current, double *total) diff --git a/rset/rsnull.c b/rset/rsnull.c index aacf61a..a8c9825 100644 --- a/rset/rsnull.c +++ b/rset/rsnull.c @@ -1,4 +1,4 @@ -/* $Id: rsnull.c,v 1.20 2004-08-06 10:09:28 heikki Exp $ +/* $Id: rsnull.c,v 1.21 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -33,7 +33,7 @@ static void r_close (RSFD rfd); static void r_delete (RSET ct); static void r_rewind (RSFD rfd); static void r_pos (RSFD rfd, double *current, double *total); -static int r_read (RSFD rfd, void *buf, int *term_index); +static int r_read (RSFD rfd, void *buf); static int r_write (RSFD rfd, const void *buf); static const struct rset_control control = @@ -54,17 +54,6 @@ const struct rset_control *rset_kind_null = &control; static void *r_create(RSET ct, const struct rset_control *sel, void *parms) { - rset_null_parms *null_parms = (rset_null_parms *) parms; - - ct->no_rset_terms = 1; - ct->rset_terms = (RSET_TERM *) xmalloc (sizeof(*ct->rset_terms)); - if (parms && null_parms->rset_term) - ct->rset_terms[0] = null_parms->rset_term; - else - ct->rset_terms[0] = rset_term_create ("term", -1, "rank-0", - 0); - ct->rset_terms[0]->nn = 0; - return NULL; } @@ -84,8 +73,6 @@ static void r_close (RSFD rfd) static void r_delete (RSET ct) { - rset_term_destroy (ct->rset_terms[0]); - xfree (ct->rset_terms); } static void r_rewind (RSFD rfd) @@ -102,9 +89,8 @@ static void r_pos (RSFD rfd, double *current, double *total) *current=0; } -static int r_read (RSFD rfd, void *buf, int *term_index) +static int r_read (RSFD rfd, void *buf) { - *term_index = -1; return 0; } diff --git a/rset/rsprox.c b/rset/rsprox.c index 555e300..0932c9d 100644 --- a/rset/rsprox.c +++ b/rset/rsprox.c @@ -1,4 +1,4 @@ -/* $Id: rsprox.c,v 1.8 2004-08-06 14:09:02 heikki Exp $ +/* $Id: rsprox.c,v 1.9 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -37,10 +37,10 @@ static RSFD r_open (RSET ct, int flag); static void r_close (RSFD rfd); static void r_delete (RSET ct); static void r_rewind (RSFD rfd); -static int r_forward(RSET ct, RSFD rfd, void *buf, int *term_index, +static int r_forward(RSET ct, RSFD rfd, void *buf, int (*cmpfunc)(const void *p1, const void *p2), const void *untilbuf); -static int r_read (RSFD rfd, void *buf, int *term_index); +static int r_read (RSFD rfd, void *buf); static int r_write (RSFD rfd, const void *buf); static void r_pos (RSFD rfd, double *current, double *total); @@ -80,54 +80,50 @@ static void *r_create (RSET ct, const struct rset_control *sel, void *parms) rset_prox_parms *prox_parms = (rset_prox_parms *) parms; struct rset_prox_info *info; int i; + /* char prox_term[512]; int length_prox_term = 0; zint min_nn = 10000000; const char *flags = NULL; int term_type = 0; - +*/ info = (struct rset_prox_info *) xmalloc (sizeof(*info)); memcpy(&info->p, prox_parms, sizeof(struct rset_prox_parms)); assert(info->p.rset_no >= 2); info->p.rset = xmalloc(info->p.rset_no * sizeof(*info->p.rset)); memcpy(info->p.rset, prox_parms->rset, - info->p.rset_no * sizeof(*info->p.rset)); + info->p.rset_no * sizeof(*info->p.rset)); info->rfd_list = NULL; for (i = 0; ip.rset_no; i++) - if (rset_is_volatile(info->p.rset[i])) - ct->flags |= RSET_FLAG_VOLATILE; + if (rset_is_volatile(info->p.rset[i])) + ct->flags |= RSET_FLAG_VOLATILE; +#if 0 /* This should all be about terms! */ *prox_term = '\0'; for (i = 0; ip.rset_no; i++) { - int j; - for (j = 0; j < info->p.rset[i]->no_rset_terms; j++) - { - const char *nflags = info->p.rset[i]->rset_terms[j]->flags; - char *term = info->p.rset[i]->rset_terms[j]->name; - int lterm = strlen(term); - if (lterm + length_prox_term < sizeof(prox_term)-1) - { - if (length_prox_term) - prox_term[length_prox_term++] = ' '; - strcpy (prox_term + length_prox_term, term); - length_prox_term += lterm; - } - if (min_nn > info->p.rset[i]->rset_terms[j]->nn) - min_nn = info->p.rset[i]->rset_terms[j]->nn; - flags = nflags; + int j; + for (j = 0; j < info->p.rset[i]->no_rset_terms; j++) + { + const char *nflags = info->p.rset[i]->rset_terms[j]->flags; + char *term = info->p.rset[i]->rset_terms[j]->name; + int lterm = strlen(term); + if (lterm + length_prox_term < sizeof(prox_term)-1) + { + if (length_prox_term) + prox_term[length_prox_term++] = ' '; + strcpy (prox_term + length_prox_term, term); + length_prox_term += lterm; + } + if (min_nn > info->p.rset[i]->rset_terms[j]->nn) + min_nn = info->p.rset[i]->rset_terms[j]->nn; + flags = nflags; term_type = info->p.rset[i]->rset_terms[j]->type; - } + } } - - ct->no_rset_terms = 1; - ct->rset_terms = (RSET_TERM *) - xmalloc (sizeof (*ct->rset_terms) * ct->no_rset_terms); - - ct->rset_terms[0] = rset_term_create (prox_term, length_prox_term, - flags, term_type); +#endif return info; } @@ -135,12 +131,12 @@ static RSFD r_open (RSET ct, int flag) { struct rset_prox_info *info = (struct rset_prox_info *) ct->buf; struct rset_prox_rfd *rfd; - int i, dummy; + int i; if (flag & RSETF_WRITE) { - logf (LOG_FATAL, "prox set type is read-only"); - return NULL; + logf (LOG_FATAL, "prox set type is read-only"); + return NULL; } rfd = (struct rset_prox_rfd *) xmalloc (sizeof(*rfd)); logf(LOG_DEBUG,"rsprox (%s) open [%p]", ct->control->desc, rfd); @@ -152,15 +148,15 @@ static RSFD r_open (RSET ct, int flag) rfd->buf = xmalloc(sizeof(*rfd->buf) * info->p.rset_no); for (i = 0; i < info->p.rset_no; i++) - rfd->buf[i] = xmalloc (info->p.key_size); + rfd->buf[i] = xmalloc (info->p.key_size); rfd->rfd = xmalloc(sizeof(*rfd->rfd) * info->p.rset_no); for (i = 0; i < info->p.rset_no; i++) - rfd->rfd[i] = rset_open (info->p.rset[i], RSETF_READ); + rfd->rfd[i] = rset_open (info->p.rset[i], RSETF_READ); for (i = 0; i < info->p.rset_no; i++) - rfd->more[i] = rset_read (info->p.rset[i], rfd->rfd[i], - rfd->buf[i], &dummy); + rfd->more[i] = rset_read (info->p.rset[i], rfd->rfd[i], + rfd->buf[i]); rfd->hits=0; return rfd; } @@ -173,15 +169,15 @@ static void r_close (RSFD rfd) for (rfdp = &info->rfd_list; *rfdp; rfdp = &(*rfdp)->next) if (*rfdp == rfd) { - int i; - for (i = 0; ip.rset_no; i++) - xfree ((*rfdp)->buf[i]); - xfree ((*rfdp)->buf); + int i; + for (i = 0; ip.rset_no; i++) + xfree ((*rfdp)->buf[i]); + xfree ((*rfdp)->buf); xfree ((*rfdp)->more); - for (i = 0; ip.rset_no; i++) - rset_close (info->p.rset[i], (*rfdp)->rfd[i]); - xfree ((*rfdp)->rfd); + for (i = 0; ip.rset_no; i++) + rset_close (info->p.rset[i], (*rfdp)->rfd[i]); + xfree ((*rfdp)->rfd); *rfdp = (*rfdp)->next; xfree (rfd); @@ -197,10 +193,8 @@ static void r_delete (RSET ct) int i; assert (info->rfd_list == NULL); - rset_term_destroy(ct->rset_terms[0]); - xfree (ct->rset_terms); for (i = 0; ip.rset_no; i++) - rset_delete (info->p.rset[i]); + rset_delete (info->p.rset[i]); xfree (info->p.rset); xfree (info); } @@ -209,177 +203,165 @@ static void r_rewind (RSFD rfd) { struct rset_prox_info *info = ((struct rset_prox_rfd*)rfd)->info; struct rset_prox_rfd *p = (struct rset_prox_rfd *) rfd; - int dummy, i; + int i; logf (LOG_DEBUG, "rsprox_rewind"); for (i = 0; i < info->p.rset_no; i++) { - rset_rewind (info->p.rset[i], p->rfd[i]); - p->more[i] = rset_read (info->p.rset[i], p->rfd[i], p->buf[i], &dummy); + rset_rewind (info->p.rset[i], p->rfd[i]); + p->more[i] = rset_read (info->p.rset[i], p->rfd[i], p->buf[i]); } p->hits=0; } -static int r_forward (RSET ct, RSFD rfd, void *buf, int *term_index, - int (*cmpfunc)(const void *p1, const void *p2), - const void *untilbuf) +static int r_forward (RSET ct, RSFD rfd, void *buf, + int (*cmpfunc)(const void *p1, const void *p2), + const void *untilbuf) { /* Note: CT is not used. We _can_ pass NULL for it */ struct rset_prox_info *info = ((struct rset_prox_rfd*)rfd)->info; struct rset_prox_rfd *p = (struct rset_prox_rfd *) rfd; int cmp=0; int i; - int dummy; if (untilbuf) { - /* it's enough to forward first one. Other will follow - automatically */ - if ( p->more[0] && ((cmpfunc)(untilbuf, p->buf[0]) >= 2) ) - p->more[0] = rset_forward(info->p.rset[0], p->rfd[0], - p->buf[0], &dummy, info->p.cmp, - untilbuf); + /* it's enough to forward first one. Other will follow + automatically */ + if ( p->more[0] && ((cmpfunc)(untilbuf, p->buf[0]) >= 2) ) + p->more[0] = rset_forward(info->p.rset[0], p->rfd[0], + p->buf[0], info->p.cmp, + untilbuf); } if (info->p.ordered && info->p.relation == 3 && info->p.exclusion == 0 - && info->p.distance == 1) + && info->p.distance == 1) { - while (p->more[0]) - { - for (i = 1; i < info->p.rset_no; i++) - { - if (!p->more[i]) - { - p->more[0] = 0; /* saves us a goto out of while loop. */ - break; - } - cmp = (*info->p.cmp) (p->buf[i], p->buf[i-1]); - if (cmp > 1) - { - p->more[i-1] = rset_forward (info->p.rset[i-1], - p->rfd[i-1], - p->buf[i-1], &dummy, - info->p.cmp, - p->buf[i]); - break; - } - else if (cmp == 1) - { - if ((*info->p.getseq)(p->buf[i-1]) +1 != - (*info->p.getseq)(p->buf[i])) - { - p->more[i-1] = rset_read ( - info->p.rset[i-1], p->rfd[i-1], - p->buf[i-1], &dummy); - break; - } - } - else - { - p->more[i] = rset_forward (info->p.rset[i], p->rfd[i], - p->buf[i], &dummy, - info->p.cmp, - p->buf[i-1]); - break; - } - } - if (i == p->info->p.rset_no) - { - memcpy (buf, p->buf[0], info->p.key_size); - *term_index = 0; - - p->more[0] = rset_read (info->p.rset[0], p->rfd[0], - p->buf[0], &dummy); - p->hits++; - return 1; - } - } + while (p->more[0]) + { + for (i = 1; i < info->p.rset_no; i++) + { + if (!p->more[i]) + { + p->more[0] = 0; /* saves us a goto out of while loop. */ + break; + } + cmp = (*info->p.cmp) (p->buf[i], p->buf[i-1]); + if (cmp > 1) + { + p->more[i-1] = rset_forward (info->p.rset[i-1], + p->rfd[i-1], + p->buf[i-1], + info->p.cmp, + p->buf[i]); + break; + } + else if (cmp == 1) + { + if ((*info->p.getseq)(p->buf[i-1]) +1 != + (*info->p.getseq)(p->buf[i])) + { + p->more[i-1] = rset_read ( info->p.rset[i-1], + p->rfd[i-1], p->buf[i-1]); + break; + } + } + else + { + p->more[i] = rset_forward (info->p.rset[i], p->rfd[i], + p->buf[i], info->p.cmp, + p->buf[i-1]); + break; + } + } + if (i == p->info->p.rset_no) + { + memcpy (buf, p->buf[0], info->p.key_size); + p->more[0] = rset_read (info->p.rset[0], p->rfd[0], p->buf[0]); + p->hits++; + return 1; + } + } } else if (info->p.rset_no == 2) { - while (p->more[0] && p->more[1]) - { - int cmp = (*info->p.cmp)(p->buf[0], p->buf[1]); - if (cmp < -1) - p->more[0] = rset_forward (info->p.rset[0], p->rfd[0], - p->buf[0], - term_index, info->p.cmp, p->buf[0]); - else if (cmp > 1) - p->more[1] = rset_forward (info->p.rset[1], p->rfd[1], - p->buf[1], - term_index, info->p.cmp, p->buf[1]); - else - { - int seqno[500]; - int n = 0; - - seqno[n++] = (*info->p.getseq)(p->buf[0]); - while ((p->more[0] = rset_read (info->p.rset[0], p->rfd[0], - p->buf[0], - term_index)) >= -1 && - p->more[0] <= -1) - if (n < 500) - seqno[n++] = (*info->p.getseq)(p->buf[0]); - - for (i = 0; ip.getseq)(p->buf[1]) - seqno[i]; - int excl = info->p.exclusion; - if (!info->p.ordered && diff < 0) - diff = -diff; - switch (info->p.relation) - { - case 1: /* < */ - if (diff < info->p.distance && diff >= 0) - excl = !excl; - break; - case 2: /* <= */ - if (diff <= info->p.distance && diff >= 0) - excl = !excl; - break; - case 3: /* == */ - if (diff == info->p.distance && diff >= 0) - excl = !excl; - break; - case 4: /* >= */ - if (diff >= info->p.distance && diff >= 0) - excl = !excl; - break; - case 5: /* > */ - if (diff > info->p.distance && diff >= 0) - excl = !excl; - break; - case 6: /* != */ - if (diff != info->p.distance && diff >= 0) - excl = !excl; - break; - } - if (excl) - { - memcpy (buf, p->buf[1], info->p.key_size); - *term_index = 0; - - p->more[1] = rset_read (info->p.rset[1], - p->rfd[1], p->buf[1], - term_index); - p->hits++; - return 1; - } - } - p->more[1] = rset_read (info->p.rset[1], p->rfd[1], - p->buf[1], - term_index); - } - } + while (p->more[0] && p->more[1]) + { + int cmp = (*info->p.cmp)(p->buf[0], p->buf[1]); + if (cmp < -1) + p->more[0] = rset_forward (info->p.rset[0], p->rfd[0], + p->buf[0], info->p.cmp, p->buf[0]); + else if (cmp > 1) + p->more[1] = rset_forward (info->p.rset[1], p->rfd[1], + p->buf[1], info->p.cmp, p->buf[1]); + else + { + int seqno[500]; + int n = 0; + + seqno[n++] = (*info->p.getseq)(p->buf[0]); + while ((p->more[0] = rset_read (info->p.rset[0], p->rfd[0], + p->buf[0])) >= -1 && + p->more[0] <= -1) + if (n < 500) + seqno[n++] = (*info->p.getseq)(p->buf[0]); + + for (i = 0; ip.getseq)(p->buf[1]) - seqno[i]; + int excl = info->p.exclusion; + if (!info->p.ordered && diff < 0) + diff = -diff; + switch (info->p.relation) + { + case 1: /* < */ + if (diff < info->p.distance && diff >= 0) + excl = !excl; + break; + case 2: /* <= */ + if (diff <= info->p.distance && diff >= 0) + excl = !excl; + break; + case 3: /* == */ + if (diff == info->p.distance && diff >= 0) + excl = !excl; + break; + case 4: /* >= */ + if (diff >= info->p.distance && diff >= 0) + excl = !excl; + break; + case 5: /* > */ + if (diff > info->p.distance && diff >= 0) + excl = !excl; + break; + case 6: /* != */ + if (diff != info->p.distance && diff >= 0) + excl = !excl; + break; + } + if (excl) + { + memcpy (buf, p->buf[1], info->p.key_size); + + p->more[1] = rset_read (info->p.rset[1], + p->rfd[1], p->buf[1]); + p->hits++; + return 1; + } + } + p->more[1] = rset_read (info->p.rset[1], p->rfd[1], + p->buf[1]); + } + } } return 0; } -static int r_read (RSFD rfd, void *buf, int *term_index) +static int r_read (RSFD rfd, void *buf) { { double cur,tot; r_pos(rfd,&cur,&tot); } /*!*/ - return r_forward(0, rfd, buf, term_index, 0, 0); + return r_forward(0, rfd, buf, 0, 0); } static int r_write (RSFD rfd, const void *buf) diff --git a/rset/rstemp.c b/rset/rstemp.c index b06a1fa..0a3b582 100644 --- a/rset/rstemp.c +++ b/rset/rstemp.c @@ -1,4 +1,4 @@ -/* $Id: rstemp.c,v 1.42 2004-08-06 12:55:03 adam Exp $ +/* $Id: rstemp.c,v 1.43 2004-08-20 14:44:46 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 Index Data Aps @@ -40,7 +40,7 @@ static void r_close (RSFD rfd); static void r_delete (RSET ct); static void r_rewind (RSFD rfd); /* static int r_count (RSET ct);*/ -static int r_read (RSFD rfd, void *buf, int *term_index); +static int r_read (RSFD rfd, void *buf); static int r_write (RSFD rfd, const void *buf); static void r_pos (RSFD rfd, double *current, double *total); @@ -104,15 +104,12 @@ static void *r_create(RSET ct, const struct rset_control *sel, void *parms) info->rfd_list = NULL; if (!temp_parms->temp_path) - info->temp_path = NULL; + info->temp_path = NULL; else { - info->temp_path = (char *) xmalloc (strlen(temp_parms->temp_path)+1); - strcpy (info->temp_path, temp_parms->temp_path); + info->temp_path = (char *) xmalloc (strlen(temp_parms->temp_path)+1); + strcpy (info->temp_path, temp_parms->temp_path); } - ct->no_rset_terms = 1; - ct->rset_terms = (RSET_TERM *) xmalloc (sizeof(*ct->rset_terms)); - ct->rset_terms[0] = temp_parms->rset_term; return info; } @@ -140,7 +137,6 @@ static RSFD r_open (RSET ct, int flag) rfd->info = info; r_rewind (rfd); - rfd->countp = &ct->rset_terms[0]->count; *rfd->countp = 0; rfd->buf = xmalloc (info->key_size); @@ -190,7 +186,7 @@ static void r_flush (RSFD rfd, int mk) if (info->fname && info->fd != -1 && info->dirty) { size_t count; - int r; + int r; if (lseek (info->fd, info->pos_buf, SEEK_SET) == -1) { @@ -253,9 +249,7 @@ static void r_delete (RSET ct) xfree (info->fname); } if (info->temp_path) - xfree (info->temp_path); - rset_term_destroy (ct->rset_terms[0]); - xfree (ct->rset_terms); + xfree (info->temp_path); xfree (info); } @@ -270,7 +264,7 @@ static void r_reread (RSFD rfd) if (info->fname) { size_t count; - int r; + int r; info->pos_border = ((struct rset_temp_rfd *)rfd)->pos_cur + info->buf_size; @@ -318,7 +312,7 @@ static int r_count (RSET ct) return info->pos_end / info->key_size; } */ -static int r_read (RSFD rfd, void *buf, int *term_index) +static int r_read (RSFD rfd, void *buf) { struct rset_temp_rfd *mrfd = (struct rset_temp_rfd*) rfd; struct rset_temp_info *info = mrfd->info; @@ -336,7 +330,6 @@ static int r_read (RSFD rfd, void *buf, int *term_index) memcpy (buf, info->buf_mem + (mrfd->pos_cur - info->pos_buf), info->key_size); mrfd->pos_cur = nc; - *term_index = 0; if (*mrfd->countp == 0 || (*info->cmp)(buf, mrfd->buf) > 1) {