X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Fzrpn.c;h=dea6c98860d8f81192c4711512c5f43e24e07144;hp=f65475de1525e64fd33aed5e506f44746670309f;hb=7c3a0352f0492609a3b6b26b63a72b0b2d207aab;hpb=927733195c5646988dcc65365bb45b978b02a15a diff --git a/index/zrpn.c b/index/zrpn.c index f65475d..dea6c98 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -1,4 +1,4 @@ -/* $Id: zrpn.c,v 1.145 2004-08-24 14:25:16 heikki Exp $ +/* $Id: zrpn.c,v 1.152 2004-09-14 14:38:07 quinn Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -34,12 +34,19 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #include -#include -#include -#include -#include -#include -#include +#include + + +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; struct rpn_char_map_info { ZebraMaps zm; @@ -57,7 +64,7 @@ typedef struct { 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) { @@ -254,7 +261,7 @@ static int grep_handle (char *name, const char *info, void *p) } 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; @@ -267,7 +274,7 @@ static int term_pre (ZebraMaps zebra_maps, int reg_type, const char **src, 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; @@ -291,13 +298,13 @@ static int term_100 (ZebraMaps zebra_maps, int reg_type, 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) @@ -349,7 +356,7 @@ static int term_101 (ZebraMaps zebra_maps, int reg_type, 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) @@ -363,7 +370,7 @@ static int term_101 (ZebraMaps zebra_maps, int reg_type, 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) @@ -391,7 +398,7 @@ static int term_103 (ZebraMaps zebra_maps, int reg_type, const char **src, 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] && @@ -412,7 +419,7 @@ static int term_103 (ZebraMaps zebra_maps, int reg_type, const char **src, 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) @@ -449,7 +456,7 @@ static int term_104 (ZebraMaps zebra_maps, int reg_type, 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) @@ -492,7 +499,7 @@ static int term_104 (ZebraMaps zebra_maps, int reg_type, } { 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) @@ -520,7 +527,7 @@ static int term_105 (ZebraMaps zebra_maps, int reg_type, 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) @@ -538,7 +545,7 @@ static int term_105 (ZebraMaps zebra_maps, int reg_type, } { 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) @@ -877,7 +884,8 @@ static RSET term_trunc (ZebraHandle zh, Z_AttributesPlusTerm *zapt, 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; @@ -890,7 +898,8 @@ static RSET term_trunc (ZebraHandle zh, Z_AttributesPlusTerm *zapt, 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, + key_it_ctrl,key_it_ctrl->scope); } @@ -1045,7 +1054,7 @@ static int string_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, 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) @@ -1236,7 +1245,7 @@ static int trans_scan_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, 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 @@ -1362,7 +1371,8 @@ static RSET rpn_search_APT_phrase (ZebraHandle zh, 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; @@ -1382,7 +1392,7 @@ static RSET rpn_search_APT_phrase (ZebraHandle zh, 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))) @@ -1390,12 +1400,11 @@ static RSET rpn_search_APT_phrase (ZebraHandle zh, } grep_info_delete (&grep_info); if (rset_no == 0) - return rsnull_create (NULL); /* FIXME - Use a proper nmem */ + return rsnull_create (rset_nmem,key_it_ctrl); else if (rset_no == 1) return (rset[0]); else - result = rsprox_create( NULL, /* FIXME - use a proper nmem */ - sizeof(struct it_key), key_compare_it, key_get_seq, + result = rsprox_create( rset_nmem, key_it_ctrl, key_it_ctrl->scope, rset_no, rset, 1 /* ordered */, 0 /* exclusion */, 3 /* relation */, 1 /* distance */); @@ -1410,7 +1419,8 @@ static RSET rpn_search_APT_or_list (ZebraHandle zh, 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]; @@ -1429,7 +1439,7 @@ static RSET rpn_search_APT_or_list (ZebraHandle zh, 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))) @@ -1437,27 +1447,9 @@ static RSET rpn_search_APT_or_list (ZebraHandle zh, } grep_info_delete (&grep_info); if (rset_no == 0) - return rsnull_create (NULL); /* FIXME - Use a proper nmem */ - return rsmultior_create(NULL, /* FIXME */ - sizeof(struct it_key), - key_compare_it, + return rsnull_create (rset_nmem,key_it_ctrl); + return rsmultior_create(rset_nmem, key_it_ctrl,key_it_ctrl->scope, rset_no, rset); - -#if 0 - /* The old code, kept for reference. May be deleted soon */ - result = rset[0]; - for (i = 1; iscope, + result, rset[i] ); return result; } @@ -1708,7 +1689,8 @@ static RSET rpn_search_APT_numeric (ZebraHandle zh, 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; @@ -1733,30 +1715,21 @@ static RSET rpn_search_APT_numeric (ZebraHandle zh, grep_info.isam_p_indx, term_dst, strlen(term_dst), rank_type, 0 /* preserve position */, - zapt->term->which); + 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; } grep_info_delete (&grep_info); if (rset_no == 0) - return rsnull_create (NULL); /* FIXME - Use a proper nmem */ + return rsnull_create (rset_nmem,key_it_ctrl); result = rset[0]; for (i = 1; iscope, + result, rset[i] ); } return result; } @@ -1765,7 +1738,7 @@ static RSET rpn_search_APT_local (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char *termz, oid_value attributeSet, NMEM stream, - const char *rank_type) + const char *rank_type, NMEM rset_nmem) { RSET result; RSFD rsfd; @@ -1779,8 +1752,7 @@ static RSET rpn_search_APT_local (ZebraHandle zh, Z_AttributesPlusTerm *zapt, parms.temp_path = res_get (zh->res, "setTmpDir"); result = rset_create (rset_kind_temp, &parms); */ - result = rstemp_create( NULL, /* FIXME - use a proper nmem */ - sizeof (struct it_key), key_compare_it, + result = rstemp_create( rset_nmem,key_it_ctrl,key_it_ctrl->scope, res_get (zh->res, "setTmpDir") ); rsfd = rset_open (result, RSETF_WRITE); @@ -1797,8 +1769,8 @@ static RSET rpn_search_APT_local (ZebraHandle zh, Z_AttributesPlusTerm *zapt, if (key.sysno <= 0) key.sysno = 1; #endif - rset_write (result, rsfd, &key); - rset_close (result, rsfd); + rset_write (rsfd, &key); + rset_close (rsfd); return result; } @@ -1892,7 +1864,8 @@ 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; - return rsnull_create (NULL); /* FIXME - Use a proper nmem */ + return rsnull_create (NULL,key_it_ctrl); + /* FIXME - nmem?? */ } @@ -1917,7 +1890,7 @@ static int parse_xpath(ZebraHandle zh, Z_AttributesPlusTerm *zapt, 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; @@ -1930,10 +1903,10 @@ static RSET xpath_trunc(ZebraHandle zh, NMEM stream, 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,key_it_ctrl); if (ord < 0) - return rsnull_create (NULL); /* FIXME - Use a proper nmem */ + return rsnull_create (rset_nmem,key_it_ctrl); if (prefix_len) term_dict[prefix_len++] = '|'; else @@ -1958,7 +1931,8 @@ static RSET xpath_trunc(ZebraHandle zh, NMEM stream, 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, + key_it_ctrl, key_it_ctrl->scope); grep_info_delete (&grep_info); return rset; } @@ -1967,7 +1941,8 @@ static RSET rpn_search_xpath (ZebraHandle zh, 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; @@ -2076,7 +2051,8 @@ static RSET rpn_search_xpath (ZebraHandle zh, } 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 @@ -2087,11 +2063,11 @@ static RSET rpn_search_xpath (ZebraHandle zh, 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); @@ -2103,10 +2079,8 @@ static RSET rpn_search_xpath (ZebraHandle zh, parms.printer = key_print_it; rset = rset_create (rset_kind_between, &parms); */ - rset=rsbetween_create( NULL, /* FIXME */ - sizeof(struct it_key), key_compare_it, - rset_start_tag, rset, rset_end_tag, rset_attr, - key_print_it ); + rset=rsbetween_create( rset_nmem,key_it_ctrl,key_it_ctrl->scope, + rset_start_tag, rset, rset_end_tag, rset_attr); } first_path = 0; } @@ -2120,7 +2094,8 @@ static RSET rpn_search_xpath (ZebraHandle zh, 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; @@ -2160,33 +2135,33 @@ static RSET rpn_search_APT (ZebraHandle zh, Z_AttributesPlusTerm *zapt, 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")) { @@ -2195,11 +2170,13 @@ static RSET rpn_search_APT (ZebraHandle zh, Z_AttributesPlusTerm *zapt, 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, - oid_value attributeSet, NMEM stream, + oid_value attributeSet, + NMEM stream, NMEM rset_nmem, Z_SortKeySpecList *sort_sequence, int num_bases, char **basenames) { @@ -2211,13 +2188,13 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs, 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) @@ -2229,19 +2206,16 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs, switch (zop->which) { case Z_Operator_and: - r = rsbool_create_and( NULL, /* FIXME - use a proper nmem */ - sizeof(struct it_key), key_compare_it, - rset_l, rset_r, key_logdump_txt ); + 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( NULL, /* FIXME - use a proper nmem */ - sizeof(struct it_key), key_compare_it, - rset_l, rset_r, key_logdump_txt ); + 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( NULL, /* FIXME - use a proper nmem */ - sizeof(struct it_key), key_compare_it, - rset_l, rset_r, key_logdump_txt ); + 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) @@ -2264,29 +2238,13 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs, twosets[0] = rset_l; twosets[1] = rset_r; - r=rsprox_create(NULL, /* FIXME - use a proper nmem */ - sizeof(struct it_key), key_compare_it, - key_get_seq, + r=rsprox_create(rset_nmem,key_it_ctrl,key_it_ctrl->scope, 2, twosets, *zop->u.prox->ordered, (!zop->u.prox->exclusion ? 0 : *zop->u.prox->exclusion), *zop->u.prox->relationType, *zop->u.prox->distance ); - /* - parms.rset = twosets; - parms.rset_no = 2; - parms.ordered = *zop->u.prox->ordered; - parms.exclusion = (!zop->u.prox->exclusion ? 0 : - *zop->u.prox->exclusion); - parms.relation = *zop->u.prox->relationType; - parms.distance = *zop->u.prox->distance; - parms.key_size = sizeof(struct it_key); - parms.cmp = key_compare_it; - parms.getseq = key_get_seq; - parms.log_item = key_logdump_txt; - r = rset_create(rset_kind_prox, &parms); - */ } break; default: @@ -2301,7 +2259,7 @@ 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) { @@ -2309,7 +2267,7 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs, r = resultSetRef (zh, zs->u.simple->u.resultSetId); if (!r) { - r = rsnull_create (NULL); /* FIXME - Use a proper nmem */ + r = rsnull_create (rset_nmem,key_it_ctrl); zh->errCode = 30; zh->errString = nmem_strdup (stream, zs->u.simple->u.resultSetId); @@ -2333,7 +2291,7 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs, } -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) @@ -2360,7 +2318,8 @@ RSET rpn_search (ZebraHandle zh, NMEM nmem, 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; @@ -2459,7 +2418,7 @@ static void count_set (RSET r, int *count) *count = 0; rfd = rset_open (r, RSETF_READ); - while (rset_read (r, rfd, &key)) + while (rset_read (rfd, &key)) { #if IT_KEY_NEW if (key.mem[0] != psysno) @@ -2476,7 +2435,7 @@ static void count_set (RSET r, int *count) #endif kno++; } - rset_close (r, rfd); + rset_close (rfd); logf (LOG_DEBUG, "%d keys, %d records", kno, *count); } @@ -2510,6 +2469,7 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, char rank_type[128]; int complete_flag; int sort_flag; + NMEM rset_nmem=NULL; *list = 0; @@ -2653,6 +2613,8 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, 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; @@ -2681,8 +2643,8 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, &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, + key_it_ctrl,key_it_ctrl->scope); ptr[j0]++; for (j = j0+1; jterm->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 */ - sizeof(struct it_key), key_compare_it, - rset, rset2, key_logdump_txt); + zapt->term->which,rset_nmem, + key_it_ctrl, key_it_ctrl->scope); + rset = rsbool_create_or(rset_nmem,key_it_ctrl, + key_it_ctrl->scope, rset, rset2); + /* FIXME - Use a proper multi-or */ ptr[j]++; } } 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 */ - sizeof(struct it_key), key_compare_it, - rset, rset_dup(limit_set), - key_logdump_txt); - } + 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); } @@ -2767,7 +2709,8 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, 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, + key_it_ctrl,key_it_ctrl->scope); ptr[j0]++; @@ -2783,40 +2726,17 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, &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 */ - sizeof(struct it_key), key_compare_it, - rset, rset2, - key_logdump_txt); + zapt->term->which, rset_nmem, + key_it_ctrl, key_it_ctrl->scope); + rset = rsbool_create_and(rset_nmem,key_it_ctrl, + key_it_ctrl->scope, rset, rset2); + /* FIXME - multi-and ?? */ ptr[j]++; } } 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 */ - sizeof(struct it_key), key_compare_it, - rset, rset_dup(limit_set), - key_logdump_txt); - } + 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); } @@ -2827,6 +2747,8 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, *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",