-/* $Id: index.h,v 1.114 2004-08-25 09:23:36 adam Exp $
+/* $Id: index.h,v 1.115 2004-08-30 12:32:24 heikki Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
struct term_set_entry *last;
};
-RSET rpn_search (ZebraHandle zh, NMEM mem,
+RSET rpn_search (ZebraHandle zh, NMEM mem, NMEM rset_nmem,
Z_RPNQuery *rpn, int num_bases, char **basenames,
const char *setname, ZebraSet sset);
-/* $Id: zrpn.c,v 1.145 2004-08-24 14:25:16 heikki Exp $
+/* $Id: zrpn.c,v 1.146 2004-08-30 12:32:24 heikki Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
}
static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs,
- oid_value attributeSet, NMEM stream,
+ oid_value attributeSet,
+ NMEM stream, NMEM rset_nmem,
Z_SortKeySpecList *sort_sequence,
int num_bases, char **basenames)
{
RSET rset_r;
rset_l = rpn_search_structure (zh, zs->u.complex->s1,
- attributeSet, stream,
+ attributeSet, stream, rset_nmem,
sort_sequence,
num_bases, basenames);
if (rset_l == NULL)
return NULL;
rset_r = rpn_search_structure (zh, zs->u.complex->s2,
- attributeSet, stream,
+ attributeSet, stream, rset_nmem,
sort_sequence,
num_bases, basenames);
if (rset_r == NULL)
switch (zop->which)
{
case Z_Operator_and:
- r = rsbool_create_and( NULL, /* FIXME - use a proper nmem */
+ r = rsbool_create_and( rset_nmem,
sizeof(struct it_key), key_compare_it,
rset_l, rset_r, key_logdump_txt );
break;
case Z_Operator_or:
- r = rsbool_create_or( NULL, /* FIXME - use a proper nmem */
+ r = rsbool_create_or( rset_nmem,
sizeof(struct it_key), key_compare_it,
rset_l, rset_r, key_logdump_txt );
break;
case Z_Operator_and_not:
- r = rsbool_create_not( NULL, /* FIXME - use a proper nmem */
+ r = rsbool_create_not( rset_nmem,
sizeof(struct it_key), key_compare_it,
rset_l, rset_r, key_logdump_txt );
break;
twosets[0] = rset_l;
twosets[1] = rset_r;
- r=rsprox_create(NULL, /* FIXME - use a proper nmem */
+ r=rsprox_create(rset_nmem,
sizeof(struct it_key), key_compare_it,
key_get_seq,
2, twosets,
r = resultSetRef (zh, zs->u.simple->u.resultSetId);
if (!r)
{
- r = rsnull_create (NULL); /* FIXME - Use a proper nmem */
+ r = rsnull_create (rset_nmem);
zh->errCode = 30;
zh->errString =
nmem_strdup (stream, zs->u.simple->u.resultSetId);
}
-RSET rpn_search (ZebraHandle zh, NMEM nmem,
+RSET rpn_search (ZebraHandle zh, NMEM nmem, NMEM rset_nmem,
Z_RPNQuery *rpn, int num_bases, char **basenames,
const char *setname,
ZebraSet sset)
attrset = oid_getentbyoid (rpn->attributeSetId);
attributeSet = attrset->value;
rset = rpn_search_structure (zh, rpn->RPNStructure, attributeSet,
- nmem, sort_sequence, num_bases, basenames);
+ nmem, rset_nmem,
+ sort_sequence, num_bases, basenames);
if (!rset)
return 0;
-/* $Id: zsets.c,v 1.57 2004-08-20 14:44:46 heikki Exp $
+/* $Id: zsets.c,v 1.58 2004-08-30 12:32:24 heikki Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
char *name;
RSET rset;
NMEM nmem;
+ NMEM rset_nmem; /* for creating the rsets in */
zint hits;
int num_bases;
char **basenames;
zebraSet->locked = 1;
zebraSet->rpn = 0;
zebraSet->nmem = m;
+ zebraSet->rset_nmem=nmem_create(); /* FIXME - where to free this ?? */
zebraSet->num_bases = num_bases;
zebraSet->basenames =
zebraSet->basenames[i] = nmem_strdup (zebraSet->nmem, basenames[i]);
- zebraSet->rset = rpn_search (zh, zebraSet->nmem, rpn,
- zebraSet->num_bases,
+ zebraSet->rset = rpn_search (zh, zebraSet->nmem, zebraSet->rset_nmem,
+ rpn, zebraSet->num_bases,
zebraSet->basenames, zebraSet->name,
zebraSet);
zh->hits = zebraSet->hits;
s->term_entries = 0;
s->hits = 0;
s->rset = 0;
+ s->rset_nmem=0;
s->nmem = 0;
s->rpn = 0;
return s;
NMEM nmem = nmem_create ();
yaz_log (LOG_LOG, "research %s", name);
s->rset =
- rpn_search (zh, nmem, s->rpn, s->num_bases,
+ rpn_search (zh, nmem, s->rset_nmem, s->rpn, s->num_bases,
s->basenames, s->name, s);
nmem_destroy (nmem);
}
if (s->rset)
rset_delete (s->rset);
s->rset = 0;
+ if (s->rset_nmem)
+ nmem_destroy(s->rset_nmem);
+ s->rset_nmem=0;
}
}
nmem_destroy (s->nmem);
if (s->rset)
rset_delete (s->rset);
+ if (s->rset_nmem)
+ nmem_destroy(s->rset_nmem);
xfree (s->name);
xfree (s);
}