From 153745fb3ac60cf1e66e51ad9fb24bc014b62679 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Tue, 19 Dec 2006 16:57:38 +0000 Subject: [PATCH] Using zebra::index::field:s rather than zebra::sort::field for retrieval of sort keys. --- NEWS | 7 +++++-- index/retrieve.c | 34 +++++++++++++++++----------------- index/sortidx.c | 3 +-- index/zebraapi.c | 4 ++-- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/NEWS b/NEWS index ffcb297..5f9face 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,8 @@ -Implemented sorting via the ISAMB system. To enable, use sortindex:b -in zebra.cfg. The sort keys can also be fetched using zebra::sort:field . +Implemented sorting via the ISAMB system. To enable, use sortindex:i in +zebra.cfg. + +Added special retrieval support for sort keys. These keys can also be +fetched using zebra::index:field:s Added support for specification of approximative limits for whole query. This is specified as attribute type 12. Semantics is the same as diff --git a/index/retrieve.c b/index/retrieve.c index 1afe24f..00e9e9f 100644 --- a/index/retrieve.c +++ b/index/retrieve.c @@ -1,4 +1,4 @@ -/* $Id: retrieve.c,v 1.61 2006-12-18 23:40:07 adam Exp $ +/* $Id: retrieve.c,v 1.62 2006-12-19 16:57:38 adam Exp $ Copyright (C) 1995-2006 Index Data ApS @@ -148,10 +148,8 @@ int zebra_special_sort_fetch(ZebraHandle zh, zint sysno, ODR odr, return YAZ_BIB1_SPECIFIED_ELEMENT_SET_NAME_NOT_VALID_FOR_SPECIFIED_; } - if (retrieval_type_len != 0 && retrieval_type_len != 1) - { - return YAZ_BIB1_SPECIFIED_ELEMENT_SET_NAME_NOT_VALID_FOR_SPECIFIED_; - } + if (retrieval_type_len == 0) + return -1; /* must have a register type specified */ if (!retrieval_index_len || retrieval_index_len >= sizeof(retrieval_index_cstr)-1) { @@ -163,11 +161,10 @@ int zebra_special_sort_fetch(ZebraHandle zh, zint sysno, ODR odr, ord = zebraExplain_lookup_attr_str(zh->reg->zei, zinfo_index_category_sort, - (retrieval_type_len == 0 ? -1 : - retrieval_type[0]), + retrieval_type[0], retrieval_index_cstr); if (ord == -1) - return YAZ_BIB1_SPECIFIED_ELEMENT_SET_NAME_NOT_VALID_FOR_SPECIFIED_; + return -1; /* is not a sort index */ else { char dst_buf[IT_MAX_WORD]; @@ -191,14 +188,14 @@ int zebra_special_sort_fetch(ZebraHandle zh, zint sysno, ODR odr, *output_format = VAL_TEXT_XML; wrbuf_printf(wrbuf, ZEBRA_XML_HEADER_STR " sysno=\"" ZINT_FORMAT "\"" - " set=\"zebra::sort%s/\">\n", + " set=\"zebra::index%s/\">\n", sysno, elemsetname); - wrbuf_printf(wrbuf, " ", index_type); wrbuf_xmlputs(wrbuf, dst_buf); - wrbuf_printf(wrbuf, "\n"); + wrbuf_printf(wrbuf, "\n"); wrbuf_printf(wrbuf, "\n"); } else if (input_format == VAL_SUTRS) @@ -432,13 +429,16 @@ int zebra_special_fetch(ZebraHandle zh, zint sysno, int score, ODR odr, return ret; } - /* processing special elementsetnames zebra::sort:: */ - if (elemsetname && 0 == strncmp(elemsetname, "sort", 4)) + /* processing special elementsetname zebra::index:: for sort elements */ + if (elemsetname && 0 == strncmp(elemsetname, "index", 5)) { - return zebra_special_sort_fetch(zh, sysno, odr, - elemsetname + 4, - input_format, output_format, - rec_bufp, rec_lenp); + int ret = zebra_special_sort_fetch(zh, sysno, odr, + elemsetname + 5, + input_format, output_format, + rec_bufp, rec_lenp); + if (ret != -1) + return ret; + /* not a sort index so we continue to get the full record */ } diff --git a/index/sortidx.c b/index/sortidx.c index ac08783..fb87df6 100644 --- a/index/sortidx.c +++ b/index/sortidx.c @@ -1,4 +1,4 @@ -/* $Id: sortidx.c,v 1.21 2006-12-19 00:25:41 adam Exp $ +/* $Id: sortidx.c,v 1.22 2006-12-19 16:57:38 adam Exp $ Copyright (C) 1995-2006 Index Data ApS @@ -385,7 +385,6 @@ void zebra_sort_read(zebra_sort_index_t si, char *buf) st.sysno = 99999; if (!sf->isam_pp) { - yaz_log(YLOG_LOG, "isamb_pp_open " ZINT_FORMAT, sf->isam_p); sf->isam_pp = isamb_pp_open(sf->u.isamb, sf->isam_p, 1); } if (!sf->isam_pp) diff --git a/index/zebraapi.c b/index/zebraapi.c index 9905413..e13da6b 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -1,4 +1,4 @@ -/* $Id: zebraapi.c,v 1.238 2006-12-18 23:40:07 adam Exp $ +/* $Id: zebraapi.c,v 1.239 2006-12-19 16:57:38 adam Exp $ Copyright (C) 1995-2006 Index Data ApS @@ -436,7 +436,7 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name, sort_type = ZEBRA_SORT_TYPE_ISAMB; else { - yaz_log (YLOG_WARN, "bad_value for 'sort:'"); + yaz_log (YLOG_WARN, "bad_value for 'sortindex'"); ret = ZEBRA_FAIL; } -- 1.7.10.4