Fix warning and code WRT uninit var (sort)
[idzebra-moved-to-github.git] / index / zsets.c
index 2828a40..4a8c74c 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the Zebra server.
-   Copyright (C) 1994-2009 Index Data
+   Copyright (C) 1994-2011 Index Data
 
 Zebra is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
@@ -113,6 +113,7 @@ static ZEBRA_RES resultSetSearch(ZebraHandle zh, NMEM nmem, NMEM rset_nmem,
     rpn_get_top_approx_limit(zh, rpn->RPNStructure, &sset->approx_limit);
 
     res = rpn_search_top(zh, rpn->RPNStructure, rpn->attributeSetId,
+                         sset->approx_limit,
                         nmem, rset_nmem,
                         sort_sequence,
                         sset->num_bases, sset->basenames,
@@ -125,7 +126,8 @@ static ZEBRA_RES resultSetSearch(ZebraHandle zh, NMEM nmem, NMEM rset_nmem,
     for (i = 0; sort_sequence->specs[i]; i++)
         ;
     sort_sequence->num_specs = i;
-    rset->hits_limit = sset->approx_limit;
+    rset_set_hits_limit(rset, sset->approx_limit);
+
     if (!i)
     {
         res = resultSetRank(zh, sset, rset, rset_nmem);
@@ -903,7 +905,6 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem,
     {
         Z_SortKeySpec *sks = sort_sequence->specs[i];
         Z_SortKey *sk;
-        ZEBRA_RES res;
         
         sort_criteria[i].ord = (int *)
             nmem_malloc(nmem, sizeof(int)*numbases);
@@ -975,13 +976,12 @@ ZEBRA_RES resultSetSortSingle(ZebraHandle zh, NMEM nmem,
             for (ib = 0; ib < numbases; ib++)
             {
                 zebraExplain_curDatabase(zh->reg->zei, zh->basenames[ib]);
-                res = zebra_sort_get_ord(zh, sk->u.sortAttributes,
-                                         &sort_criteria[i].ord[ib],
-                                         &sort_criteria[i].numerical[ib]);
+                if (zebra_sort_get_ord(zh, sk->u.sortAttributes,
+                                       &sort_criteria[i].ord[ib],
+                                       &sort_criteria[i].numerical[ib]) != 
+                    ZEBRA_OK && sks->which != Z_SortKeySpec_null)
+                    return ZEBRA_FAIL;
             }
-            
-            if (sks->which != Z_SortKeySpec_null && res != ZEBRA_OK)
-                return ZEBRA_FAIL;
             break;
         }
         /* right now we look up the index type based on the first database
@@ -1144,6 +1144,11 @@ ZEBRA_RES resultSetRank(ZebraHandle zh, ZebraSet zebraSet,
                 }
                if (rfd->counted_items > rset->hits_limit)
                     stop_flag = 1;
+                if (stop_flag)
+                {
+                    zebraSet->estimated_hit_count = 1;
+                    break;
+                }
                if (psysno)
                {   /* only if we did have a previous record */
                    score = (*rc->calc)(handle, psysno, pstaticrank,
@@ -1152,12 +1157,6 @@ ZEBRA_RES resultSetRank(ZebraHandle zh, ZebraSet zebraSet,
                    resultSetInsertRank(zh, sort_info, psysno, score, 'A');
                    count++;
                }
-                if (stop_flag)
-                {
-                    zebraSet->estimated_hit_count = 1;
-                    rset_set_hits_limit(rset, 0);
-                    break;
-                }
                psysno = this_sys;
                if (zh->m_staticrank)
                    pstaticrank = key.mem[0];
@@ -1523,6 +1522,7 @@ void zebra_count_set(ZebraHandle zh, RSET rset, zint *count,
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab