-/* $Id: index.h,v 1.207 2007-11-01 16:01:33 adam Exp $
+/* $Id: index.h,v 1.208 2007-11-05 11:20:39 adam Exp $
Copyright (C) 1995-2007
Index Data ApS
const Odr_oid *attributeset,
int num_bases, char **basenames,
int *position, int *num_entries, ZebraScanEntry **list,
- int *is_partial, RSET limit_set);
+ int *is_partial, const char *set_name);
RSET rset_trunc(ZebraHandle zh, ISAM_P *isam_p, int no,
const char *term, int length_term, const char *flags,
const Odr_oid *attributeset,
int *position, int *num_entries,
ZebraScanEntry **list,
- int *is_partial, RSET limit_set);
+ int *is_partial, const char *set_name);
YAZ_END_CDECL
#endif
-/* $Id: rpnfacet.c,v 1.2 2007-11-01 16:01:33 adam Exp $
+/* $Id: rpnfacet.c,v 1.3 2007-11-05 11:20:39 adam Exp $
Copyright (C) 1995-2007
Index Data ApS
ZEBRA_RES rpn_facet(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt,
const Odr_oid *attributeset,
int *position, int *num_entries,
- ZebraScanEntry **list, int *is_partial, RSET rset)
+ ZebraScanEntry **list, int *is_partial,
+ const char *set_name)
{
int ord;
+ int use_sort_idx = 1;
ZEBRA_RES res = zebra_attr_list_get_ord(zh,
zapt->attributes,
zinfo_index_category_sort,
attributeset, &ord);
if (res != ZEBRA_OK)
return res;
- else
+ else if (use_sort_idx)
{
const char *index_type = 0;
const char *db = 0;
char *this_entry_buf = xmalloc(SORT_IDX_ENTRYSIZE);
char *dst_buf = xmalloc(SORT_IDX_ENTRYSIZE);
size_t sysno_mem_index = 0;
-
+ RSET rset = resultSetRef(zh, set_name);
zint p_this_sys = 0;
RSFD rfd;
TERMID termid;
rset_close(rfd);
xfree(this_entry_buf);
xfree(dst_buf);
- zebra_setError(zh, YAZ_BIB1_TEMPORARY_SYSTEM_ERROR, "facet not done");
+ zebra_setError(zh, YAZ_BIB1_TEMPORARY_SYSTEM_ERROR, "facet not done1");
+ return ZEBRA_FAIL;
+ }
+ else
+ {
+ int num = 100; /* to be customizable */
+ int i;
+
+ ZebraMetaRecord *meta = zebra_meta_records_create_range(
+ zh, set_name, 0, num);
+
+ for (i = 0; i < num; i++)
+ {
+ zint sysno = meta[i].sysno;
+ Record rec = rec_get(zh->reg->records, sysno);
+ if (!rec)
+ {
+ yaz_log(YLOG_WARN, "rec_get fail on sysno=" ZINT_FORMAT,
+ sysno);
+ break;
+ }
+ else
+ {
+
+
+ rec_free(&rec);
+ }
+ }
+ zebra_meta_records_destroy(zh, meta, num);
+ zebra_setError(zh, YAZ_BIB1_TEMPORARY_SYSTEM_ERROR, "facet not done2");
return ZEBRA_FAIL;
}
}
-/* $Id: rpnscan.c,v 1.20 2007-11-01 16:01:33 adam Exp $
+/* $Id: rpnscan.c,v 1.21 2007-11-05 11:20:39 adam Exp $
Copyright (C) 1995-2007
Index Data ApS
const Odr_oid *attributeset,
int num_bases, char **basenames,
int *position, int *num_entries, ZebraScanEntry **list,
- int *is_partial, RSET limit_set)
+ int *is_partial, const char *set_name)
{
int base_no;
int ords[RPN_MAX_ORDS], ord_no = 0;
NMEM nmem;
ZEBRA_RES res;
struct rset_key_control *kc = 0;
+ RSET limit_set = 0;
*list = 0;
*is_partial = 0;
if (!attributeset)
attributeset = yaz_oid_attset_bib_1;
- if (!limit_set) /* no limit set given already */
+ if (!set_name)
{
/* see if there is a @attr 8=set */
AttrType termset;
int termset_value_numeric;
- const char *termset_value_string;
+ const char *termset_value_string = 0;
attr_init_APT(&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)
{
+ char resname[32];
sprintf(resname, "%d", termset_value_numeric);
- termset_name = resname;
+ set_name = odr_strdup(stream, resname);
}
else
- termset_name = termset_value_string;
-
- limit_set = resultSetRef(zh, termset_name);
+ set_name = odr_strdup(stream, termset_value_string);
+ }
+ }
- if (!limit_set)
- {
- zebra_setError(zh,
- YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST,
- termset_name);
- return ZEBRA_FAIL;
- }
+ if (set_name)
+ {
+ limit_set = resultSetRef(zh, set_name);
+
+ if (!limit_set)
+ {
+ zebra_setError(zh,
+ YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST,
+ set_name);
+ return ZEBRA_FAIL;
}
}
if (sort_flag)
{
return rpn_facet(zh, stream, zapt, attributeset, position, num_entries,
- list, is_partial, limit_set);
+ list, is_partial, set_name);
}
for (base_no = 0; base_no < num_bases; base_no++)
{
kc = zebra_key_control_create(zh);
res = rpn_scan_norm(zh, stream, nmem, kc, zapt, position, num_entries,
- list,
- is_partial, limit_set, index_type, ord_no, ords);
+ list, is_partial, limit_set,
+ index_type, ord_no, ords);
nmem_destroy(nmem);
(*kc->dec)(kc);
return res;
-/* $Id: zebraapi.c,v 1.262 2007-10-31 16:56:14 adam Exp $
+/* $Id: zebraapi.c,v 1.263 2007-11-05 11:20:39 adam Exp $
Copyright (C) 1995-2007
Index Data ApS
const char *setname)
{
ZEBRA_RES res;
- RSET limit_rset = 0;
ZEBRA_CHECK_HANDLE(zh);
*num_entries = 0;
return ZEBRA_FAIL;
}
- if (setname)
- {
- limit_rset = resultSetRef(zh, setname);
- if (!limit_rset)
- {
- zebra_setError(zh,
- YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST,
- setname);
- zebra_end_read (zh);
- return ZEBRA_FAIL;
- }
- }
+
res = rpn_scan(zh, stream, zapt, attributeset,
zh->num_basenames, zh->basenames, position,
- num_entries, entries, is_partial, limit_rset);
+ num_entries, entries, is_partial, setname);
zebra_end_read(zh);
return res;
}