From 078a786204b5edef350982c385342f889d37e5ad Mon Sep 17 00:00:00 2001 From: Heikki Levanto Date: Fri, 1 Oct 2004 14:25:28 +0000 Subject: [PATCH] Using multiand/or instead of and/or in a few more places Added tests for numeric terms (and found bug #166) --- index/zrpn.c | 55 +++++++++++++++++--------------------------------- test/api/Makefile.am | 5 +++-- 2 files changed, 22 insertions(+), 38 deletions(-) diff --git a/index/zrpn.c b/index/zrpn.c index 9f9a0a8..32a5c87 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -1,4 +1,4 @@ -/* $Id: zrpn.c,v 1.154 2004-09-28 16:39:46 heikki Exp $ +/* $Id: zrpn.c,v 1.155 2004-10-01 14:25:28 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -1691,8 +1691,8 @@ static RSET rpn_search_APT_numeric (ZebraHandle zh, { char term_dst[IT_MAX_WORD+1]; const char *termp = termz; - RSET rset[60], result; - int i, r, rset_no = 0; + RSET rset[60]; /* FIXME - hard-coded magic number */ + int r, rset_no = 0; struct grep_info grep_info; if (grep_info_prepare (zh, zapt, &grep_info, reg_type, stream)) @@ -1721,14 +1721,10 @@ static RSET rpn_search_APT_numeric (ZebraHandle zh, grep_info_delete (&grep_info); if (rset_no == 0) return rsnull_create (rset_nmem,key_it_ctrl); - result = rset[0]; - for (i = 1; iscope, - result, rset[i] ); - } - return result; + if (rset_no == 1) + return rset[0]; + return rsmultiand_create(rset_nmem,key_it_ctrl,key_it_ctrl->scope, + rset_no, rset); } static RSET rpn_search_APT_local (ZebraHandle zh, Z_AttributesPlusTerm *zapt, @@ -1741,14 +1737,6 @@ static RSET rpn_search_APT_local (ZebraHandle zh, Z_AttributesPlusTerm *zapt, RSFD rsfd; struct it_key key; int sys; - /* - rset_temp_parms parms; - - parms.cmp = key_compare_it; - parms.key_size = sizeof (struct it_key); - parms.temp_path = res_get (zh->res, "setTmpDir"); - result = rset_create (rset_kind_temp, &parms); - */ result = rstemp_create( rset_nmem,key_it_ctrl,key_it_ctrl->scope, res_get (zh->res, "setTmpDir") ); rsfd = rset_open (result, RSETF_WRITE); @@ -2174,38 +2162,37 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs, if (zs->which == Z_RPNStructure_complex) { Z_Operator *zop = zs->u.complex->roperator; - RSET rset_l; - RSET rset_r; + RSET rsets[2]; /* l and r argument */ - rset_l = rpn_search_structure (zh, zs->u.complex->s1, + rsets[0]=rpn_search_structure (zh, zs->u.complex->s1, attributeSet, stream, rset_nmem, sort_sequence, num_bases, basenames); - if (rset_l == NULL) + if (rsets[0] == NULL) return NULL; - rset_r = rpn_search_structure (zh, zs->u.complex->s2, + rsets[1]=rpn_search_structure (zh, zs->u.complex->s2, attributeSet, stream, rset_nmem, sort_sequence, num_bases, basenames); - if (rset_r == NULL) + if (rsets[1] == NULL) { - rset_delete (rset_l); + rset_delete (rsets[0]); return NULL; } switch (zop->which) { case Z_Operator_and: - r = rsbool_create_and(rset_nmem,key_it_ctrl, key_it_ctrl->scope, - rset_l,rset_r ); + r=rsmultiand_create(rset_nmem, key_it_ctrl, key_it_ctrl->scope, + 2, rsets); break; case Z_Operator_or: - r = rsbool_create_or(rset_nmem,key_it_ctrl, key_it_ctrl->scope, - rset_l,rset_r ); + r=rsmultior_create(rset_nmem, key_it_ctrl, key_it_ctrl->scope, + 2, rsets); break; case Z_Operator_and_not: r = rsbool_create_not(rset_nmem,key_it_ctrl, key_it_ctrl->scope, - rset_l,rset_r ); + rsets[0],rsets[1]); break; case Z_Operator_prox: if (zop->u.prox->which != Z_ProximityOperator_known) @@ -2224,12 +2211,8 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs, else { /* new / old prox */ - RSET twosets[2]; - - twosets[0] = rset_l; - twosets[1] = rset_r; r=rsprox_create(rset_nmem,key_it_ctrl,key_it_ctrl->scope, - 2, twosets, + 2, rsets, *zop->u.prox->ordered, (!zop->u.prox->exclusion ? 0 : *zop->u.prox->exclusion), diff --git a/test/api/Makefile.am b/test/api/Makefile.am index ee2be0e..aba223f 100644 --- a/test/api/Makefile.am +++ b/test/api/Makefile.am @@ -1,9 +1,9 @@ -# $Id: Makefile.am,v 1.17 2004-09-30 08:16:49 adam Exp $ +# $Id: Makefile.am,v 1.18 2004-10-01 14:25:28 heikki Exp $ noinst_PROGRAMS = testclient testclient_SOURCES = testclient.c -check_PROGRAMS = t1 t2 t3 t4 t5 t6 t7 +check_PROGRAMS = t1 t2 t3 t4 t5 t6 t7 t8 TESTS = $(check_PROGRAMS) EXTRA_DIST=zebra.cfg zebra6.cfg @@ -15,6 +15,7 @@ t4_SOURCES = t4.c t5_SOURCES = t5.c t6_SOURCES = t6.c t7_SOURCES = t7.c +t8_SOURCES = t8.c AM_CPPFLAGS = -I$(top_srcdir)/include $(YAZINC) -- 1.7.10.4