Towards 2.0.12
[idzebra-moved-to-github.git] / index / zebraapi.c
index a8e8039..e2cf847 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zebraapi.c,v 1.243 2007-01-16 15:01:15 adam Exp $
+/* $Id: zebraapi.c,v 1.249 2007-02-24 17:05:40 adam Exp $
    Copyright (C) 1995-2007
    Index Data ApS
 
@@ -143,6 +143,9 @@ ZebraHandle zebra_open(ZebraService zs, Res res)
     zh->m_staticrank = 0;
     zh->m_segment_indexing = 0;
 
+    zh->break_handler_func = 0;
+    zh->break_handler_data = 0;
+
     default_encoding = res_get_def(zh->session_res, "encoding", "ISO-8859-1");
 
     zh->iconv_to_utf8 =
@@ -1015,6 +1018,21 @@ ZEBRA_RES zebra_set_approx_limit(ZebraHandle zh, zint approx_limit)
     return ZEBRA_OK;
 }
 
+void zebra_set_partial_result(ZebraHandle zh)
+{
+    zh->partial_result = 1;
+}
+
+
+ZEBRA_RES zebra_set_break_handler(ZebraHandle zh,
+                                  int (*f)(void *client_data),
+                                  void *client_data)
+{
+    zh->break_handler_func = f;
+    zh->break_handler_data = client_data;
+    return ZEBRA_OK;
+}
+
 ZEBRA_RES zebra_search_RPN_x(ZebraHandle zh, ODR o, Z_RPNQuery *query,
                              const char *setname, zint *hits,
                              int *estimated_hit_count,
@@ -1030,12 +1048,16 @@ ZEBRA_RES zebra_search_RPN_x(ZebraHandle zh, ODR o, Z_RPNQuery *query,
     assert(setname);
     yaz_log(log_level, "zebra_search_rpn");
 
+    zh->partial_result = 0;
+
     if (zebra_begin_read(zh) == ZEBRA_FAIL)
        return ZEBRA_FAIL;
 
     r = resultSetAddRPN(zh, odr_extract_mem(o), query, 
                        zh->num_basenames, zh->basenames, setname,
-                        hits, estimated_hit_count, partial_resultset);
+                        hits, estimated_hit_count);
+
+    *partial_resultset = zh->partial_result;
     zebra_end_read(zh);
     return r;
 }
@@ -1613,9 +1635,9 @@ int zebra_string_norm (ZebraHandle zh, unsigned reg_id,
     \param seqno sequence number
     
     val is one of:
-    d=writing to shadow(dirty)
-    o=no writing, 
-    c=commit
+    d=writing to shadow(shadow enabled); writing to register (shadow disabled)
+    o=reading only
+    c=commit (writing to register, reading from shadow, shadow mode only)
 */
 static void zebra_set_state (ZebraHandle zh, int val, int seqno)
 {
@@ -1694,7 +1716,7 @@ static void read_res_for_transaction(ZebraHandle zh)
     v = res_get_prefix(zh->res, "openRW", group, "1");
     zh->m_flag_rw = atoi(v);
 
-    v = res_get_prefix(zh->res, "fileVerboseLimit", group, "100000");
+    v = res_get_prefix(zh->res, "fileVerboseLimit", group, "1000");
     zh->m_file_verbose_limit = atoi(v);
 }
 
@@ -1753,6 +1775,7 @@ ZEBRA_RES zebra_begin_trans(ZebraHandle zh, int rw)
         zh->records_updated = 0;
         zh->records_deleted = 0;
         zh->records_processed = 0;
+        zh->records_skipped = 0;
         
 #if HAVE_SYS_TIMES_H
         times (&zh->tms1);
@@ -1775,6 +1798,11 @@ ZEBRA_RES zebra_begin_trans(ZebraHandle zh, int rw)
         if (val != 'o')
         {
             /* either we didn't finish commit or shadow is dirty */
+            if (!rval)
+            {
+                yaz_log(YLOG_WARN, "previous transaction did not finish "
+                        "(shadow disabled)");
+            }
             zebra_unlock (zh->lock_shadow);
             zebra_unlock (zh->lock_normal);
             if (zebra_commit (zh))
@@ -2060,6 +2088,7 @@ static ZEBRA_RES zebra_commit_ex(ZebraHandle zh, int clean_only)
 
     if (val == 'd')
     {
+        /* shadow area is dirty and so we must throw it away */
         yaz_log(YLOG_WARN, "previous transaction didn't reach commit");
         clean_only = 1;
     }