-/* $Id: trunc.c,v 1.40 2004-08-31 10:43:35 heikki Exp $
+/* $Id: trunc.c,v 1.41 2004-08-31 14:43:41 heikki Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
static RSET rset_trunc_r (ZebraHandle zi, const char *term, int length,
const char *flags, ISAMS_P *isam_p, int from, int to,
int merge_chunk, int preserve_position,
- int term_type)
+ int term_type, NMEM rset_nmem)
{
RSET result;
RSFD result_rsfd;
parms.temp_path = res_get (zi->res, "setTmpDir");
result = rset_create (rset_kind_temp, &parms);
*/
- result=rstemp_create(NULL, /* FIXME - use a proper nmem */
+ result=rstemp_create( rset_nmem, /* NULL, FIXME - use a proper nmem */
sizeof(struct it_key), key_compare_it,
res_get (zi->res, "setTmpDir"));
result_rsfd = rset_open (result, RSETF_WRITE);
rset[rscur] = rset_trunc_r (zi, term, length, flags,
isam_p, i, i+i_add,
merge_chunk, preserve_position,
- term_type);
+ term_type, rset_nmem);
else
rset[rscur] = rset_trunc_r (zi, term, length, flags,
isam_p, i, to,
merge_chunk, preserve_position,
- term_type);
+ term_type, rset_nmem);
rscur++;
}
ti = heap_init (rscur, sizeof(struct it_key), key_compare_it);
RSET rset_trunc (ZebraHandle zi, ISAMS_P *isam_p, int no,
const char *term, int length, const char *flags,
- int preserve_position, int term_type)
+ int preserve_position, int term_type, NMEM rset_nmem)
{
logf (LOG_DEBUG, "rset_trunc no=%d", no);
if (no < 1)
- return rsnull_create (NULL); /* FIXME - use a proper nmem */
+ return rsnull_create (rset_nmem); /* FIXME - use a proper nmem */
if (zi->reg->isams)
{
if (no == 1)
- return rsisams_create(NULL, /* FIXME - use some nmem */
+ return rsisams_create(rset_nmem, /* FIXME - use some nmem */
sizeof(struct it_key), key_compare_it,
zi->reg->isams, *isam_p);
/*
else if (zi->reg->isamc)
{
if (no == 1)
- return rsisamc_create(NULL, /* FIXME - use some nmem */
+ return rsisamc_create(rset_nmem, /* FIXME - use some nmem */
sizeof(struct it_key), key_compare_it,
zi->reg->isamc, *isam_p);
/*
else if (zi->reg->isamb)
{
if (no == 1)
- return rsisamb_create(NULL, /* FIXME - use some nmem */
+ return rsisamb_create(rset_nmem, /* FIXME - use some nmem */
sizeof(struct it_key), key_compare_it,
zi->reg->isamb, *isam_p);
/*
rsets[i]=rsisamb_create(NULL, /* */
sizeof(struct it_key), key_compare_it,
zi->reg->isamb, isam_p[i] );
- r=rsmultior_create( NULL, /* FIXME - use some nmem */
+ r=rsmultior_create( rset_nmem, /* FIXME - use some nmem */
sizeof(struct it_key), key_compare_it,
no, rsets);
xfree(rsets);
return rsnull_create (NULL); /* FIXME - nmem */
}
return rset_trunc_r (zi, term, length, flags, isam_p, 0, no, 100,
- preserve_position, term_type);
+ preserve_position, term_type, rset_nmem);
}
-/* $Id: zrpn.c,v 1.147 2004-08-31 10:43:35 heikki Exp $
+/* $Id: zrpn.c,v 1.148 2004-08-31 14:43:41 heikki Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
int reg_type, int complete_flag,
int num_bases, char **basenames,
char *term_dst,
- const char *rank_type, int xpath_use)
+ const char *rank_type, int xpath_use,
+ NMEM rset_nmem)
{
int r;
grep_info->isam_p_indx = 0;
return rset_trunc (zh, grep_info->isam_p_buf,
grep_info->isam_p_indx, term_dst,
strlen(term_dst), rank_type, 1 /* preserve pos */,
- zapt->term->which);
+ zapt->term->which, rset_nmem);
}
NMEM stream,
int reg_type, int complete_flag,
const char *rank_type, int xpath_use,
- int num_bases, char **basenames)
+ int num_bases, char **basenames,
+ NMEM rset_nmem)
{
char term_dst[IT_MAX_WORD+1];
RSET rset[60], result;
reg_type, complete_flag,
num_bases, basenames,
term_dst, rank_type,
- xpath_use);
+ xpath_use,rset_nmem);
if (!rset[rset_no])
break;
if (++rset_no >= (int) (sizeof(rset)/sizeof(*rset)))
int reg_type, int complete_flag,
const char *rank_type,
int xpath_use,
- int num_bases, char **basenames)
+ int num_bases, char **basenames,
+ NMEM rset_nmem)
{
char term_dst[IT_MAX_WORD+1];
RSET rset[60];
reg_type, complete_flag,
num_bases, basenames,
term_dst, rank_type,
- xpath_use);
+ xpath_use,rset_nmem);
if (!rset[rset_no])
break;
if (++rset_no >= (int) (sizeof(rset)/sizeof(*rset)))
}
grep_info_delete (&grep_info);
if (rset_no == 0)
- return rsnull_create (NULL); /* FIXME - Use a proper nmem */
- return rsmultior_create(NULL, /* FIXME */
+ return rsnull_create (rset_nmem);
+ return rsmultior_create(rset_nmem,
sizeof(struct it_key),
key_compare_it,
rset_no, rset);
int reg_type, int complete_flag,
const char *rank_type,
int xpath_use,
- int num_bases, char **basenames)
+ int num_bases, char **basenames,
+ NMEM rset_nmem)
{
char term_dst[IT_MAX_WORD+1];
RSET rset[60], result;
reg_type, complete_flag,
num_bases, basenames,
term_dst, rank_type,
- xpath_use);
+ xpath_use, rset_nmem);
if (!rset[rset_no])
break;
assert (rset[rset_no]);
}
grep_info_delete (&grep_info);
if (rset_no == 0)
- return rsnull_create (NULL); /* FIXME - Use a proper nmem */
+ return rsnull_create (rset_nmem);
result = rset[0];
/* FIXME - Use a proper rsmultiand */
for (i = 1; i<rset_no; i++)
NMEM stream,
int reg_type, int complete_flag,
const char *rank_type, int xpath_use,
- int num_bases, char **basenames)
+ int num_bases, char **basenames,
+ NMEM rset_nmem)
{
char term_dst[IT_MAX_WORD+1];
const char *termp = termz;
grep_info.isam_p_indx, term_dst,
strlen(term_dst), rank_type,
0 /* preserve position */,
- zapt->term->which);
+ zapt->term->which, rset_nmem);
assert (rset[rset_no]);
if (++rset_no >= (int) (sizeof(rset)/sizeof(*rset)))
break;
}
grep_info_delete (&grep_info);
if (rset_no == 0)
- return rsnull_create (NULL); /* FIXME - Use a proper nmem */
+ return rsnull_create (rset_nmem);
result = rset[0];
for (i = 1; i<rset_no; i++)
{
const char *termz,
oid_value attributeSet,
NMEM stream,
- const char *rank_type)
+ const char *rank_type, NMEM rset_nmem)
{
RSET result;
RSFD rsfd;
parms.temp_path = res_get (zh->res, "setTmpDir");
result = rset_create (rset_kind_temp, &parms);
*/
- result = rstemp_create( NULL, /* FIXME - use a proper nmem */
+ result = rstemp_create( rset_nmem,
sizeof (struct it_key), key_compare_it,
res_get (zh->res, "setTmpDir") );
rsfd = rset_open (result, RSETF_WRITE);
static RSET xpath_trunc(ZebraHandle zh, NMEM stream,
int reg_type, const char *term, int use,
- oid_value curAttributeSet)
+ oid_value curAttributeSet, NMEM rset_nmem)
{
RSET rset;
struct grep_info grep_info;
const char *flags = "void";
if (grep_info_prepare (zh, 0 /* zapt */, &grep_info, '0', stream))
- return rsnull_create (NULL); /* FIXME - Use a proper nmem */
+ return rsnull_create (rset_nmem);
if (ord < 0)
- return rsnull_create (NULL); /* FIXME - Use a proper nmem */
+ return rsnull_create (rset_nmem);
if (prefix_len)
term_dict[prefix_len++] = '|';
else
grep_info.isam_p_indx);
rset = rset_trunc (zh, grep_info.isam_p_buf,
grep_info.isam_p_indx, term, strlen(term),
- flags, 1, term_type);
+ flags, 1, term_type,rset_nmem);
grep_info_delete (&grep_info);
return rset;
}
oid_value attributeSet,
int num_bases, char **basenames,
NMEM stream, const char *rank_type, RSET rset,
- int xpath_len, struct xpath_location_step *xpath)
+ int xpath_len, struct xpath_location_step *xpath,
+ NMEM rset_nmem)
{
oid_value curAttributeSet = attributeSet;
int base_no;
}
wrbuf_puts(wbuf, "");
rset_attr = xpath_trunc (
- zh, stream, '0', wrbuf_buf(wbuf), 3, curAttributeSet);
+ zh, stream, '0', wrbuf_buf(wbuf), 3,
+ curAttributeSet,rset_nmem);
wrbuf_free(wbuf, 1);
}
else
yaz_log (LOG_LOG, "xpath_rev (%d) = %s", level, xpath_rev);
if (strlen(xpath_rev))
{
- rset_start_tag = xpath_trunc(zh, stream,
- '0', xpath_rev, 1, curAttributeSet);
+ rset_start_tag = xpath_trunc(zh, stream, '0',
+ xpath_rev, 1, curAttributeSet, rset_nmem);
- rset_end_tag = xpath_trunc(zh, stream,
- '0', xpath_rev, 2, curAttributeSet);
+ rset_end_tag = xpath_trunc(zh, stream, '0',
+ xpath_rev, 2, curAttributeSet, rset_nmem);
/*
parms.key_size = sizeof(struct it_key);
parms.printer = key_print_it;
rset = rset_create (rset_kind_between, &parms);
*/
- rset=rsbetween_create( NULL, /* FIXME */
+ rset=rsbetween_create( rset_nmem,
sizeof(struct it_key), key_compare_it,
rset_start_tag, rset, rset_end_tag, rset_attr,
key_print_it );
static RSET rpn_search_APT (ZebraHandle zh, Z_AttributesPlusTerm *zapt,
oid_value attributeSet, NMEM stream,
Z_SortKeySpecList *sort_sequence,
- int num_bases, char **basenames)
+ int num_bases, char **basenames,
+ NMEM rset_nmem)
{
unsigned reg_id;
char *search_type = NULL;
rset = rpn_search_APT_phrase (zh, zapt, termz, attributeSet, stream,
reg_id, complete_flag, rank_type,
xpath_use,
- num_bases, basenames);
+ num_bases, basenames, rset_nmem);
}
else if (!strcmp (search_type, "and-list"))
{
rset = rpn_search_APT_and_list (zh, zapt, termz, attributeSet, stream,
reg_id, complete_flag, rank_type,
xpath_use,
- num_bases, basenames);
+ num_bases, basenames, rset_nmem);
}
else if (!strcmp (search_type, "or-list"))
{
rset = rpn_search_APT_or_list (zh, zapt, termz, attributeSet, stream,
reg_id, complete_flag, rank_type,
xpath_use,
- num_bases, basenames);
+ num_bases, basenames, rset_nmem);
}
else if (!strcmp (search_type, "local"))
{
rset = rpn_search_APT_local (zh, zapt, termz, attributeSet, stream,
- rank_type);
+ rank_type, rset_nmem);
}
else if (!strcmp (search_type, "numeric"))
{
rset = rpn_search_APT_numeric (zh, zapt, termz, attributeSet, stream,
reg_id, complete_flag, rank_type,
xpath_use,
- num_bases, basenames);
+ num_bases, basenames, rset_nmem);
}
else if (!strcmp (search_type, "always"))
{
else
zh->errCode = 118;
return rpn_search_xpath (zh, attributeSet, num_bases, basenames,
- stream, rank_type, rset, xpath_len, xpath);
+ stream, rank_type, rset,
+ xpath_len, xpath, rset_nmem);
}
static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs,
logf (LOG_DEBUG, "rpn_search_APT");
r = rpn_search_APT (zh, zs->u.simple->u.attributesPlusTerm,
attributeSet, stream, sort_sequence,
- num_bases, basenames);
+ num_bases, basenames,rset_nmem);
}
else if (zs->u.simple->which == Z_Operand_resultSetId)
{
char rank_type[128];
int complete_flag;
int sort_flag;
+ NMEM rset_nmem=NULL;
*list = 0;
glist = (ZebraScanEntry *)
odr_malloc (stream, (before+after)*sizeof(*glist));
+ rset_nmem=nmem_create();
+
/* consider terms after main term */
for (i = 0; i < ord_no; i++)
ptr[i] = before;
&glist[i+before].term, mterm);
rset = rset_trunc (zh, &scan_info_array[j0].list[ptr[j0]].isam_p, 1,
glist[i+before].term, strlen(glist[i+before].term),
- NULL, 0, zapt->term->which);
+ NULL, 0, zapt->term->which, rset_nmem);
ptr[j0]++;
for (j = j0+1; j<ord_no; j++)
rset_trunc (zh, &scan_info_array[j].list[ptr[j]].isam_p, 1,
glist[i+before].term,
strlen(glist[i+before].term), NULL, 0,
- zapt->term->which);
-/*
- bool_parms.key_size = sizeof(struct it_key);
- bool_parms.cmp = key_compare_it;
- bool_parms.log_item = key_logdump_txt;
- bool_parms.rset_l = rset;
- bool_parms.rset_r = rset2;
- rset = rset_create (rset_kind_or, &bool_parms);
-*/
- rset = rsbool_create_or(NULL, /* FIXME -use a proper nmem */
+ zapt->term->which,rset_nmem);
+ rset = rsbool_create_or(rset_nmem,
sizeof(struct it_key), key_compare_it,
rset, rset2, key_logdump_txt);
}
}
if (limit_set)
- {
- /*
- rset_bool_parms bool_parms;
- bool_parms.key_size = sizeof(struct it_key);
- bool_parms.cmp = key_compare_it;
- bool_parms.log_item = key_logdump_txt;
- bool_parms.rset_l = rset;
- bool_parms.rset_r = rset_dup(limit_set);
- rset = rset_create (rset_kind_and, &bool_parms);
- */
- rset = rsbool_create_and(NULL, /* FIXME -use a proper nmem */
+ rset = rsbool_create_and(rset_nmem,
sizeof(struct it_key), key_compare_it,
rset, rset_dup(limit_set),
key_logdump_txt);
- }
count_set (rset, &glist[i+before].occurrences);
rset_delete (rset);
}
rset = rset_trunc
(zh, &scan_info_array[j0].list[before-1-ptr[j0]].isam_p, 1,
glist[before-1-i].term, strlen(glist[before-1-i].term),
- NULL, 0, zapt->term->which);
+ NULL, 0, zapt->term->which,rset_nmem);
ptr[j0]++;
&scan_info_array[j].list[before-1-ptr[j]].isam_p, 1,
glist[before-1-i].term,
strlen(glist[before-1-i].term), NULL, 0,
- zapt->term->which);
-/*
- bool_parms.key_size = sizeof(struct it_key);
- bool_parms.cmp = key_compare_it;
- bool_parms.log_item = key_logdump_txt;
- bool_parms.rset_l = rset;
- bool_parms.rset_r = rset2;
- rset = rset_create (rset_kind_or, &bool_parms);
-*/
- rset = rsbool_create_and(NULL, /* FIXME -use a proper nmem */
+ zapt->term->which, rset_nmem);
+ rset = rsbool_create_and(rset_nmem,
sizeof(struct it_key), key_compare_it,
rset, rset2,
key_logdump_txt);
}
}
if (limit_set)
- {
- /*
- rset_bool_parms bool_parms;
-
- bool_parms.key_size = sizeof(struct it_key);
- bool_parms.cmp = key_compare_it;
- bool_parms.log_item = key_logdump_txt;
- bool_parms.rset_l = rset;
- bool_parms.rset_r = rset_dup(limit_set);
-
- rset = rset_create (rset_kind_and, &bool_parms);
- */
- rset = rsbool_create_and(NULL, /* FIXME -use a proper nmem */
+ rset = rsbool_create_and(rset_nmem,
sizeof(struct it_key), key_compare_it,
rset, rset_dup(limit_set),
key_logdump_txt);
- }
count_set (rset, &glist[before-1-i].occurrences);
rset_delete (rset);
}
*position -= i;
*num_entries -= i;
}
+
+ nmem_destroy(rset_nmem);
*list = glist + i; /* list is set to first 'real' entry */
logf (LOG_DEBUG, "position = %d, num_entries = %d",