X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzrpn.c;h=9d14757373bc996daa8e3f25d0656e97da325c43;hb=1cc0116831e49bf70538639a8fc9b08b9524c683;hp=b4b747254ee96019c1e81c71f6d572c68e3a9640;hpb=230fdc17aa503a23c842cd587f241cfe2fce1c0d;p=idzebra-moved-to-github.git diff --git a/index/zrpn.c b/index/zrpn.c index b4b7472..9d14757 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -1,4 +1,4 @@ -/* $Id: zrpn.c,v 1.148 2004-08-31 14:43:41 heikki Exp $ +/* $Id: zrpn.c,v 1.150 2004-09-09 10:08:05 heikki 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; @@ -891,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, rset_nmem); + zapt->term->which, rset_nmem, + key_it_ctrl,key_it_ctrl->scope); } @@ -1392,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 */); @@ -1440,27 +1447,9 @@ static RSET rpn_search_APT_or_list (ZebraHandle zh, } grep_info_delete (&grep_info); if (rset_no == 0) - return rsnull_create (rset_nmem); - return rsmultior_create(rset_nmem, - 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; } @@ -1738,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, rset_nmem); + 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 (rset_nmem); + return rsnull_create (rset_nmem,key_it_ctrl); result = rset[0]; for (i = 1; iscope, + result, rset[i] ); } return result; } @@ -1784,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( rset_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); @@ -1897,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?? */ } @@ -1935,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 (rset_nmem); + return rsnull_create (rset_nmem,key_it_ctrl); if (ord < 0) - return rsnull_create (rset_nmem); + return rsnull_create (rset_nmem,key_it_ctrl); if (prefix_len) term_dict[prefix_len++] = '|'; else @@ -1963,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,rset_nmem); + flags, 1, term_type,rset_nmem, + key_it_ctrl, key_it_ctrl->scope); grep_info_delete (&grep_info); return rset; } @@ -2110,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( rset_nmem, - 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; } @@ -2239,19 +2206,16 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs, switch (zop->which) { case Z_Operator_and: - r = rsbool_create_and( rset_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( rset_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( rset_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) @@ -2274,29 +2238,13 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs, twosets[0] = rset_l; twosets[1] = rset_r; - r=rsprox_create(rset_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: @@ -2319,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 (rset_nmem); + r = rsnull_create (rset_nmem,key_it_ctrl); zh->errCode = 30; zh->errString = nmem_strdup (stream, zs->u.simple->u.resultSetId); @@ -2695,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, rset_nmem); - + NULL, 0, zapt->term->which, rset_nmem, + key_it_ctrl,key_it_ctrl->scope); ptr[j0]++; for (j = j0+1; jterm->which,rset_nmem); - rset = rsbool_create_or(rset_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 = rsbool_create_and(rset_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); } @@ -2762,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,rset_nmem); + NULL, 0, zapt->term->which,rset_nmem, + key_it_ctrl,key_it_ctrl->scope); ptr[j0]++; @@ -2778,19 +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, rset_nmem); - rset = rsbool_create_and(rset_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 = rsbool_create_and(rset_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); }