From 6c57b2c269b3b1d16ebf2ab52c3ad3547d5ecdbb Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 6 Mar 2003 11:58:08 +0000 Subject: [PATCH] Scan with limiting result set --- index/index.h | 6 +++--- index/zebraapi.c | 4 ++-- index/zrpn.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- index/zsets.c | 4 ++-- 4 files changed, 58 insertions(+), 9 deletions(-) diff --git a/index/index.h b/index/index.h index 8b21f91..502be5a 100644 --- a/index/index.h +++ b/index/index.h @@ -1,4 +1,4 @@ -/* $Id: index.h,v 1.94 2003-03-04 23:30:20 adam Exp $ +/* $Id: index.h,v 1.95 2003-03-06 11:58:08 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -350,7 +350,7 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, oid_value attributeset, int num_bases, char **basenames, int *position, int *num_entries, ZebraScanEntry **list, - int *is_partial); + int *is_partial, RSET limit_set, int return_zero); RSET rset_trunc (ZebraHandle zh, ISAMS_P *isam_p, int no, const char *term, int length_term, const char *flags, @@ -364,7 +364,7 @@ ZebraSet resultSetGet (ZebraHandle zh, const char *name); ZebraSet resultSetAddRPN (ZebraHandle zh, ODR stream, ODR decode, Z_RPNQuery *rpn, int num_bases, char **basenames, const char *setname); -RSET resultSetRef (ZebraHandle zh, Z_ResultSetId *resultSetId); +RSET resultSetRef (ZebraHandle zh, const char *resultSetId); void resultSetDestroy (ZebraHandle zh, int num_names, char **names, int *statuses); diff --git a/index/zebraapi.c b/index/zebraapi.c index 74fa36c..ab5cf26 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -1,4 +1,4 @@ -/* $Id: zebraapi.c,v 1.90 2003-03-05 00:08:04 adam Exp $ +/* $Id: zebraapi.c,v 1.91 2003-03-06 11:58:08 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 Index Data Aps @@ -846,7 +846,7 @@ void zebra_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, } rpn_scan (zh, stream, zapt, attributeset, zh->num_basenames, zh->basenames, position, - num_entries, entries, is_partial); + num_entries, entries, is_partial, 0, 0); zebra_end_read (zh); } diff --git a/index/zrpn.c b/index/zrpn.c index 3df18e1..b2dca94 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -1,4 +1,4 @@ -/* $Id: zrpn.c,v 1.130 2003-03-01 22:45:38 adam Exp $ +/* $Id: zrpn.c,v 1.131 2003-03-06 11:58:08 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 Index Data Aps @@ -2660,7 +2660,7 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, oid_value attributeset, int num_bases, char **basenames, int *position, int *num_entries, ZebraScanEntry **list, - int *is_partial) + int *is_partial, RSET limit_set, int return_zero) { int i; int pos = *position; @@ -2681,11 +2681,38 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, char rank_type[128]; int complete_flag; int sort_flag; + *list = 0; if (attributeset == VAL_NONE) attributeset = VAL_BIB1; + if (!limit_set) + { + AttrType termset; + int termset_value_numeric; + const char *termset_value_string; + attr_init (&termset, zapt, 8); + termset_value_numeric = + attr_find_ex (&termset, NULL, &termset_value_string); + if (termset_value_numeric != -1) + { + char resname[32]; + const char *termset_name = 0; + + if (termset_value_numeric != -2) + { + + sprintf (resname, "%d", termset_value_numeric); + termset_name = resname; + } + else + termset_name = termset_value_string; + + limit_set = resultSetRef (zh, termset_name); + } + } + yaz_log (LOG_DEBUG, "position = %d, num = %d set=%d", pos, num, attributeset); @@ -2842,6 +2869,17 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, 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.rset_l = rset; + bool_parms.rset_r = rset_dup(limit_set); + + rset = rset_create (rset_kind_and, &bool_parms); + } count_set (rset, &glist[i+before].occurrences); rset_delete (rset); } @@ -2910,6 +2948,17 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, 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.rset_l = rset; + bool_parms.rset_r = rset_dup(limit_set); + + rset = rset_create (rset_kind_and, &bool_parms); + } count_set (rset, &glist[before-1-i].occurrences); rset_delete (rset); } diff --git a/index/zsets.c b/index/zsets.c index ac28c8e..a794cfe 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,4 +1,4 @@ -/* $Id: zsets.c,v 1.42 2003-02-27 22:55:40 adam Exp $ +/* $Id: zsets.c,v 1.43 2003-03-06 11:58:08 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -691,7 +691,7 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, yaz_log (LOG_LOG, "resultSetSortSingle end"); } -RSET resultSetRef (ZebraHandle zh, Z_ResultSetId *resultSetId) +RSET resultSetRef (ZebraHandle zh, const char *resultSetId) { ZebraSet s; -- 1.7.10.4