-/* $Id: rsbetween.c,v 1.15.2.3 2004-12-17 11:38:18 heikki Exp $
+/* $Id: rsbetween.c,v 1.15.2.4 2004-12-17 13:43:09 heikki Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
Index Data Aps
#include <rsbetween.h>
#include <zebrautl.h>
-#define RSBETWEEN_DEBUG 1
+#define RSBETWEEN_DEBUG 0
#if RSBETWEEN_DEBUG
#define log_level LOG_DEBUG
#endif
if (0==cmp) /* and the keys match */
{
p->attrdepth=p->depth;
+#if RSBETWEEN_DEBUG
yaz_log(log_level, "found attribute match at depth %d",p->attrdepth);
+#endif
}
}
}
int thisterm=0;
int which;
*term=0; /* just in case, should not be necessary */
+#if RSBETWEEN_DEBUG
yaz_log(log_level,"btw: == read: term=%p",term);
+#endif
while ( read_anded(p,buf,&thisterm,&which) )
{
+#if RSBETWEEN_DEBUG
yaz_log(log_level,"btw: read loop term=%p d=%d ad=%d",
term, p->depth, p->attrdepth);
+#endif
if (p->hits<0)
{/* first time? */
memcpy(p->recbuf,buf,info->key_size);
}
else {
cmp=(*info->cmp)(buf,p->recbuf);
+#if RSBETWEEN_DEBUG
yaz_log(log_level, "btw: cmp=%d",cmp);
+#endif
}
if (cmp>=2)
{
+#if RSBETWEEN_DEBUG
yaz_log(log_level,"btw: new record");
+#endif
p->depth=0;
p->attrdepth=0;
memcpy(p->recbuf,buf,info->key_size);
}
+#if RSBETWEEN_DEBUG
yaz_log(log_level,"btw: which: %d", which);
+#endif
if (which==WHICH_L)
{
p->depth++;
+#if RSBETWEEN_DEBUG
yaz_log(log_level,"btw: read start tag. d=%d",p->depth);
+#endif
memcpy(p->startbuf,buf,info->key_size);
p->startbufok=1;
checkattr(rfd); /* in case we already saw the attr here */
if (p->depth == p->attrdepth)
p->attrdepth=0; /* ending the tag with attr match */
p->depth--;
- yaz_log(log_level,"btw: read end tag. d=%d ad=%d",p->depth, p->attrdepth);
+#if RSBETWEEN_DEBUG
+ yaz_log(log_level,"btw: read end tag. d=%d ad=%d",
+ p->depth, p->attrdepth);
+#endif
}
else if (which==WHICH_A)
{
+#if RSBETWEEN_DEBUG
yaz_log(log_level,"btw: read attr");
+#endif
memcpy(p->attrbuf,buf,info->key_size);
p->attrbufok=1;
checkattr(rfd); /* in case the start tag came first */
if (p->depth && p->attrdepth)
{
p->hits++;
+#if RSBETWEEN_DEBUG
yaz_log(log_level,"btw: got a hit h=%d d=%d ad=%d t=%d+%d",
p->hits,p->depth,p->attrdepth,
info->rset_m->no_rset_terms,thisterm);
+#endif
*term= info->rset_m->no_rset_terms + thisterm;
return 1; /* everything else is in place already */
} else
+ {
+#if RSBETWEEN_DEBUG
yaz_log(log_level, "btw: Ignoring hit. h=%d d=%d ad=%d",
p->hits,p->depth,p->attrdepth);
+#endif
+ }
}
} /* while read */
-/* $Id: rsisamb.c,v 1.11 2004-08-04 09:59:03 heikki Exp $
+/* $Id: rsisamb.c,v 1.10.2.1 2004-12-17 13:43:10 heikki Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
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 void r_pos (RSFD rfd, zint *current, zint *total);
+static void r_pos (RSFD rfd, int *current, int *total);
static int r_read (RSFD rfd, void *buf, int *term_index);
static int r_write (RSFD rfd, const void *buf);
r_close,
r_delete,
r_rewind,
- r_forward, /* rset_default_forward, */
+ r_forward, /* rset_default_forward, */
r_pos,
r_read,
r_write,
};
+/* FIXME - using the default forward reads all items from the isam */
+/* and thus makes the term counts work OK. On the other hand, it */
+/* negates the speedup from forwarding */
+
const struct rset_control *rset_kind_isamb = &control;
struct rset_pp_info {
return i;
}
-static void r_pos (RSFD rfd, zint *current, zint *total)
+static void r_pos (RSFD rfd, int *current, int *total)
{
struct rset_pp_info *pinfo = (struct rset_pp_info *) rfd;
assert(rfd);