Using zebra::index::field:s rather than zebra::sort::field for retrieval
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 19 Dec 2006 16:57:38 +0000 (16:57 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 19 Dec 2006 16:57:38 +0000 (16:57 +0000)
of sort keys.

NEWS
index/retrieve.c
index/sortidx.c
index/zebraapi.c

diff --git a/NEWS b/NEWS
index ffcb297..5f9face 100644 (file)
--- 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
 
 Added support for specification of approximative limits for whole query.
 This is specified as attribute type 12. Semantics is the same as
index 1afe24f..00e9e9f 100644 (file)
@@ -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
 
    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_;
     }
     
         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)
     {
     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,
 
     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)
                                        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];
     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 "\""
             *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);
 
                          sysno, elemsetname);
 
-            wrbuf_printf(wrbuf, "  <sort name=\"%s\"", 
+            wrbuf_printf(wrbuf, "  <index name=\"%s\"", 
                          string_index);
             wrbuf_printf(wrbuf, " type=\"%c\">", index_type);
             wrbuf_xmlputs(wrbuf, dst_buf);
                          string_index);
             wrbuf_printf(wrbuf, " type=\"%c\">", index_type);
             wrbuf_xmlputs(wrbuf, dst_buf);
-            wrbuf_printf(wrbuf, "</sort>\n");
+            wrbuf_printf(wrbuf, "</index>\n");
             wrbuf_printf(wrbuf, "</record>\n");
         }
         else if (input_format == VAL_SUTRS)
             wrbuf_printf(wrbuf, "</record>\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;
     }
 
         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 */
     }
 
 
     }
 
 
index ac08783..fb87df6 100644 (file)
@@ -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
 
    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)
             {
             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)
                 sf->isam_pp = isamb_pp_open(sf->u.isamb, sf->isam_p, 1);
             }
             if (!sf->isam_pp)
index 9905413..e13da6b 100644 (file)
@@ -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
 
    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
     {
         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;
     }
 
        ret = ZEBRA_FAIL;
     }