Calling rec_get/rec_del for each record to be deleted in database.
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 9 Dec 2008 15:20:14 +0000 (16:20 +0100)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 9 Dec 2008 15:20:14 +0000 (16:20 +0100)
index/invstat.c
index/zebraapi.c

index 514378d..192c588 100644 (file)
@@ -291,6 +291,7 @@ int zebra_register_statistics (ZebraHandle zh, int dumpdict)
     }
     fprintf (stdout, "%7d-        %7d\n",
              prev, stat_info.isam_occurrences[i]);
+    rec_prstat(zh->reg->records);
     xmalloc_trav("unfreed"); /*! while hunting memory leaks */    
     zebra_end_read (zh);
     return 0;
index adc9b6a..28886ff 100644 (file)
@@ -1427,7 +1427,6 @@ int delete_w_handle(const char *info, void *handle)
 {
     ZebraHandle zh = (ZebraHandle) handle;
     ISAM_P pos;
-    ASSERTZH;
 
     if (*info == sizeof(pos))
     {
@@ -1437,6 +1436,33 @@ int delete_w_handle(const char *info, void *handle)
     return 0;
 }
 
+int delete_w_all_handle(const char *info, void *handle)
+{
+    ZebraHandle zh = (ZebraHandle) handle;
+    ISAM_P pos;
+
+    if (*info == sizeof(pos))
+    {
+        ISAMB_PP pt;
+       memcpy(&pos, info+1, sizeof(pos));
+        pt = isamb_pp_open(zh->reg->isamb, pos, 2);
+        if (pt)
+        {
+            struct it_key key;
+            key.mem[0] = 0;
+            while (isamb_pp_read(pt, &key))
+            {
+                Record rec;
+                yaz_log(YLOG_LOG, "SYSNO=" ZINT_FORMAT, key.mem[0]);
+                rec = rec_get(zh->reg->records, key.mem[0]);
+                rec_del(zh->reg->records, &rec);
+            }
+            isamb_pp_close(pt);
+        }
+    }
+    return delete_w_handle(info, handle);
+}
+
 static int delete_SU_handle(void *handle, int ord,
                             const char *index_type, const char *string_index,
                             zinfo_index_category_t cat)
@@ -1445,23 +1471,18 @@ static int delete_SU_handle(void *handle, int ord,
     char ord_buf[20];
     int ord_len;
 #if 0
-    const char *index_type = 0;
-    const char *db = 0;
-    const char *string_index = 0;
-    zebraExplain_lookup_ord(zh->reg->zei, ord,
-                            &index_type, &db, &string_index);
-    yaz_log(YLOG_LOG, 
-            "delete_SU_handle:: ord=%d index_type=%s db=%s string_index=%s",
-            ord, index_type, db, string_index);
-#endif
     yaz_log(YLOG_LOG, "ord=%d index_type=%s index=%s cat=%d", ord,
             index_type, string_index, (int) cat);
+#endif
     ord_len = key_SU_encode(ord, ord_buf);
     ord_buf[ord_len] = '\0';
 
     assert(zh->reg->isamb);
+    assert(zh->reg->records);
     dict_delete_subtree(zh->reg->dict, ord_buf,
-                       zh, delete_w_handle);
+                       zh, 
+                        !strcmp(string_index, "_ALLRECORDS") ?
+                        delete_w_all_handle : delete_w_handle);
     return 0;
 }