-/* $Id: zrpn.c,v 1.149 2004-09-01 15:01:32 heikki Exp $
+/* $Id: zrpn.c,v 1.154 2004-09-28 16:39:46 heikki Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
Index Data Aps
#include <rset.h>
-static const struct key_control it_ctrl={
+static const struct key_control it_ctrl = {
sizeof(struct it_key),
+ 2, /* we have sysnos and seqnos in this key, nothing more */
key_compare_it,
key_logdump_txt, /* FIXME - clean up these functions */
key_get_seq,
};
-const struct key_control *key_it_ctrl=&it_ctrl;
+
+const struct key_control *key_it_ctrl = &it_ctrl;
struct rpn_char_map_info {
ZebraMaps zm;
static const char **rpn_char_map_handler (void *vp, const char **from, int len)
{
struct rpn_char_map_info *p = (struct rpn_char_map_info *) vp;
- const char **out = zebra_maps_input (p->zm, p->reg_type, from, len);
+ const char **out = zebra_maps_input (p->zm, p->reg_type, from, len, 0);
#if 0
if (out && *out)
{
}
static int term_pre (ZebraMaps zebra_maps, int reg_type, const char **src,
- const char *ct1, const char *ct2)
+ const char *ct1, const char *ct2, int first)
{
const char *s1, *s0 = *src;
const char **map;
if (ct2 && strchr (ct2, *s0))
break;
s1 = s0;
- map = zebra_maps_input (zebra_maps, reg_type, &s1, strlen(s1));
+ map = zebra_maps_input (zebra_maps, reg_type, &s1, strlen(s1), first);
if (**map != *CHR_SPACE)
break;
s0 = s1;
const char *space_start = 0;
const char *space_end = 0;
- if (!term_pre (zebra_maps, reg_type, src, NULL, NULL))
+ if (!term_pre (zebra_maps, reg_type, src, NULL, NULL, !space_split))
return 0;
s0 = *src;
while (*s0)
{
s1 = s0;
- map = zebra_maps_input (zebra_maps, reg_type, &s0, strlen(s0));
+ map = zebra_maps_input (zebra_maps, reg_type, &s0, strlen(s0), 0);
if (space_split)
{
if (**map == *CHR_SPACE)
int i = 0;
int j = 0;
- if (!term_pre (zebra_maps, reg_type, src, "#", "#"))
+ if (!term_pre (zebra_maps, reg_type, src, "#", "#", !space_split))
return 0;
s0 = *src;
while (*s0)
else
{
s1 = s0;
- map = zebra_maps_input (zebra_maps, reg_type, &s0, strlen(s0));
+ map = zebra_maps_input (zebra_maps, reg_type, &s0, strlen(s0), 0);
if (space_split && **map == *CHR_SPACE)
break;
while (s1 < s0)
const char *s0, *s1;
const char **map;
- if (!term_pre (zebra_maps, reg_type, src, "^\\()[].*+?|", "("))
+ if (!term_pre (zebra_maps, reg_type, src, "^\\()[].*+?|", "(", !space_split))
return 0;
s0 = *src;
if (errors && *s0 == '+' && s0[1] && s0[2] == '+' && s0[3] &&
else
{
s1 = s0;
- map = zebra_maps_input (zebra_maps, reg_type, &s0, strlen(s0));
+ map = zebra_maps_input (zebra_maps, reg_type, &s0, strlen(s0), 0);
if (**map == *CHR_SPACE)
break;
while (s1 < s0)
int i = 0;
int j = 0;
- if (!term_pre (zebra_maps, reg_type, src, "?*#", "?*#"))
+ if (!term_pre (zebra_maps, reg_type, src, "?*#", "?*#", !space_split))
return 0;
s0 = *src;
while (*s0)
}
{
s1 = s0;
- map = zebra_maps_input (zebra_maps, reg_type, &s0, strlen(s0));
+ map = zebra_maps_input (zebra_maps, reg_type, &s0, strlen(s0), 0);
if (space_split && **map == *CHR_SPACE)
break;
while (s1 < s0)
int i = 0;
int j = 0;
- if (!term_pre (zebra_maps, reg_type, src, "*!", "*!"))
+ if (!term_pre (zebra_maps, reg_type, src, "*!", "*!", !space_split))
return 0;
s0 = *src;
while (*s0)
}
{
s1 = s0;
- map = zebra_maps_input (zebra_maps, reg_type, &s0, strlen(s0));
+ map = zebra_maps_input (zebra_maps, reg_type, &s0, strlen(s0), 0);
if (space_split && **map == *CHR_SPACE)
break;
while (s1 < s0)
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, rset_nmem,key_it_ctrl);
+ zapt->term->which, rset_nmem,
+ key_it_ctrl,key_it_ctrl->scope);
}
attributeSet,
reg_type, space_split, term_dst))
return 0;
- logf (LOG_LOG, "dict_lookup_grep: %s", term_dict+prefix_len);
+ logf (LOG_DEBUG, "dict_lookup_grep: %s", term_dict+prefix_len);
r = dict_lookup_grep (zh->reg->dict, term_dict, 0,
grep_info, &max_pos, 0, grep_handle);
if (r)
while ((len = (cp_end - cp)) > 0)
{
- map = zebra_maps_input (zh->reg->zebra_maps, reg_type, &cp, len);
+ map = zebra_maps_input (zh->reg->zebra_maps, reg_type, &cp, len, 0);
if (**map == *CHR_SPACE)
space_map = *map;
else
else if (rset_no == 1)
return (rset[0]);
else
- result = rsprox_create( rset_nmem, key_it_ctrl,
+ result = rsprox_create( rset_nmem, key_it_ctrl, key_it_ctrl->scope,
rset_no, rset,
1 /* ordered */, 0 /* exclusion */,
3 /* relation */, 1 /* distance */);
grep_info_delete (&grep_info);
if (rset_no == 0)
return rsnull_create (rset_nmem,key_it_ctrl);
- return rsmultior_create(rset_nmem, key_it_ctrl,
+ return rsmultior_create(rset_nmem, key_it_ctrl,key_it_ctrl->scope,
rset_no, rset);
}
NMEM rset_nmem)
{
char term_dst[IT_MAX_WORD+1];
- RSET rset[60], result;
- int i, rset_no = 0;
+ RSET rset[60]; /* FIXME - bug 160 - should be dynamic somehow */
+ int rset_no = 0;
struct grep_info grep_info;
char *termz = normalize_term(zh, zapt, termz_org, stream, reg_type);
const char *termp = termz;
grep_info_delete (&grep_info);
if (rset_no == 0)
return rsnull_create (rset_nmem,key_it_ctrl);
- result = rset[0];
- /* FIXME - Use a proper rsmultiand */
- for (i = 1; i<rset_no; i++)
- result= rsbool_create_and(rset_nmem,key_it_ctrl,
- result, rset[i] );
- return result;
+
+ return rsmultiand_create( rset_nmem, key_it_ctrl, key_it_ctrl->scope,
+ rset_no, rset);
}
static int numeric_relation (ZebraHandle zh, Z_AttributesPlusTerm *zapt,
grep_info.isam_p_indx, term_dst,
strlen(term_dst), rank_type,
0 /* preserve position */,
- zapt->term->which, rset_nmem, key_it_ctrl);
+ zapt->term->which, rset_nmem,
+ key_it_ctrl,key_it_ctrl->scope);
assert (rset[rset_no]);
if (++rset_no >= (int) (sizeof(rset)/sizeof(*rset)))
break;
for (i = 1; i<rset_no; i++)
{
/* FIXME - Use a proper multi-and */
- result= rsbool_create_and(rset_nmem,key_it_ctrl,
+ result= rsbool_create_and(rset_nmem,key_it_ctrl,key_it_ctrl->scope,
result, rset[i] );
}
return result;
parms.temp_path = res_get (zh->res, "setTmpDir");
result = rset_create (rset_kind_temp, &parms);
*/
- result = rstemp_create( rset_nmem,key_it_ctrl,
+ result = rstemp_create( rset_nmem,key_it_ctrl,key_it_ctrl->scope,
res_get (zh->res, "setTmpDir") );
rsfd = rset_open (result, RSETF_WRITE);
sys = atoi(termz);
if (sys <= 0)
sys = 1;
-#if IT_KEY_NEW
key.mem[0] = sys;
key.mem[1] = 1;
key.len = 2;
-#else
- key.sysno = sys;
- key.seqno = 1;
- if (key.sysno <= 0)
- key.sysno = 1;
-#endif
rset_write (rsfd, &key);
rset_close (rsfd);
return result;
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,rset_nmem,key_it_ctrl);
+ flags, 1, term_type,rset_nmem,
+ key_it_ctrl, key_it_ctrl->scope);
grep_info_delete (&grep_info);
return rset;
}
parms.printer = key_print_it;
rset = rset_create (rset_kind_between, &parms);
*/
- rset=rsbetween_create( rset_nmem,key_it_ctrl,
+ rset=rsbetween_create( rset_nmem,key_it_ctrl,key_it_ctrl->scope,
rset_start_tag, rset, rset_end_tag, rset_attr);
}
first_path = 0;
switch (zop->which)
{
case Z_Operator_and:
- r = rsbool_create_and(rset_nmem,key_it_ctrl, rset_l,rset_r );
+ r = rsbool_create_and(rset_nmem,key_it_ctrl, key_it_ctrl->scope,
+ rset_l,rset_r );
break;
case Z_Operator_or:
- r = rsbool_create_or(rset_nmem,key_it_ctrl, rset_l,rset_r );
+ r = rsbool_create_or(rset_nmem,key_it_ctrl, key_it_ctrl->scope,
+ rset_l,rset_r );
break;
case Z_Operator_and_not:
- r = rsbool_create_not(rset_nmem,key_it_ctrl, rset_l,rset_r );
+ r = rsbool_create_not(rset_nmem,key_it_ctrl, key_it_ctrl->scope,
+ rset_l,rset_r );
break;
case Z_Operator_prox:
if (zop->u.prox->which != Z_ProximityOperator_known)
twosets[0] = rset_l;
twosets[1] = rset_r;
- r=rsprox_create(rset_nmem,key_it_ctrl,
+ r=rsprox_create(rset_nmem,key_it_ctrl,key_it_ctrl->scope,
2, twosets,
*zop->u.prox->ordered,
(!zop->u.prox->exclusion ?
rfd = rset_open (r, RSETF_READ);
while (rset_read (rfd, &key))
{
-#if IT_KEY_NEW
if (key.mem[0] != psysno)
{
psysno = key.mem[0];
(*count)++;
}
-#else
- if (key.sysno != psysno)
- {
- psysno = key.sysno;
- (*count)++;
- }
-#endif
kno++;
}
rset_close (rfd);
&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, rset_nmem, key_it_ctrl);
-
+ NULL, 0, zapt->term->which, rset_nmem,
+ key_it_ctrl,key_it_ctrl->scope);
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,rset_nmem,key_it_ctrl);
+ zapt->term->which,rset_nmem,
+ key_it_ctrl, key_it_ctrl->scope);
rset = rsbool_create_or(rset_nmem,key_it_ctrl,
- rset, rset2);
+ key_it_ctrl->scope, rset, rset2);
/* FIXME - Use a proper multi-or */
ptr[j]++;
}
}
if (limit_set)
- rset = rsbool_create_and(rset_nmem,key_it_ctrl,
+ rset = rsbool_create_and(rset_nmem,key_it_ctrl,key_it_ctrl->scope,
rset, rset_dup(limit_set));
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,rset_nmem,key_it_ctrl);
+ NULL, 0, zapt->term->which,rset_nmem,
+ key_it_ctrl,key_it_ctrl->scope);
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, rset_nmem,key_it_ctrl);
+ zapt->term->which, rset_nmem,
+ key_it_ctrl, key_it_ctrl->scope);
rset = rsbool_create_and(rset_nmem,key_it_ctrl,
- rset, rset2);
+ key_it_ctrl->scope, rset, rset2);
/* FIXME - multi-and ?? */
ptr[j]++;
}
}
if (limit_set)
- rset = rsbool_create_and(rset_nmem,key_it_ctrl,
+ rset = rsbool_create_and(rset_nmem,key_it_ctrl,key_it_ctrl->scope,
rset, rset_dup(limit_set));
count_set (rset, &glist[before-1-i].occurrences);
rset_delete (rset);