Fixed bug #736: Updates gets slower. The problem was that duplicate
[idzebra-moved-to-github.git] / index / zinfo.c
index 9d5bb3d..8971d89 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zinfo.c,v 1.71 2006-11-14 08:12:08 adam Exp $
+/* $Id: zinfo.c,v 1.74 2006-11-27 10:09:48 adam Exp $
    Copyright (C) 1995-2006
    Index Data ApS
 
@@ -53,7 +53,7 @@ struct zebSUInfoB {
 typedef struct zebAccessObjectB *zebAccessObject;
 struct zebAccessObjectB {
     void *handle;
-    SYSNO sysno;
+    zint sysno;
     Odr_oid *oid;
     zebAccessObject next;
 };
@@ -66,7 +66,7 @@ struct zebAccessInfoB {
 
 typedef struct {
     struct zebSUInfoB *SUInfo;
-    SYSNO sysno;
+    zint sysno;
     int dirty;
     int readFlag;
     data1_node *data1_tree;
@@ -79,7 +79,7 @@ struct zebDatabaseInfoB {
     data1_node *data1_database;
     zint recordCount;    /* records in db */
     zint recordBytes;    /* size of records */
-    SYSNO sysno;         /* sysno of database info */
+    zint sysno;          /* sysno of database info */
     int readFlag;        /* 1: read is needed when referenced; 0 if not */
     int dirty;           /* 1: database is dirty: write is needed */
     struct zebDatabaseInfoB *next;
@@ -94,7 +94,7 @@ struct zebraExplainAttset {
 
 struct zebraCategoryListInfo {
     int dirty;
-    SYSNO sysno;
+    zint sysno;
     data1_node *data1_categoryList;
 };
 
@@ -143,7 +143,7 @@ static void zebraExplain_writeCategoryList(ZebraExplainInfo zei,
                                            int key_flush);
 
 
-static Record createRecord(Records records, SYSNO *sysno)
+static Record createRecord(Records records, zint *sysno)
 {
     Record rec;
     if (*sysno)
@@ -963,6 +963,8 @@ int zebraExplain_newDatabase (ZebraExplainInfo zei, const char *database,
 
     zebraExplain_initCommonInfo (zei, node_adinfo);
 
+    data1_mk_tag_data_text(zei->dh, node_adinfo, "name", database, zei->nmem);
+
     return 0;
 }
 
@@ -976,7 +978,7 @@ static void zebraExplain_writeCategoryList (ZebraExplainInfo zei,
     int i;
     Record drec;
     data1_node *node_ci, *node_categoryList;
-    SYSNO sysno = 0;
+    zint sysno = 0;
     static char *category[] = {
        "CategoryList",
        "TargetInfo",
@@ -1048,6 +1050,7 @@ static void zebraExplain_writeAttributeDetails (ZebraExplainInfo zei,
     zad->dirty = 0;
 #if ZINFO_DEBUG
     yaz_log(YLOG_LOG, "zebraExplain_writeAttributeDetails");    
+    data1_pr_tree(zei->dh, zad->data1_tree, stderr);
 #endif
 
     drec = createRecord (zei->records, &zad->sysno);
@@ -1059,9 +1062,6 @@ static void zebraExplain_writeAttributeDetails (ZebraExplainInfo zei,
                                   "/attributeDetails");
     zebraExplain_updateCommonInfo (zei, node_adinfo);
 
-    data1_mk_tag_data_text (zei->dh, node_adinfo, "name",
-                           databaseName, zei->nmem);
-
     /* extract *searchable* keys from it. We do this here, because
        record count, etc. is affected */
     if (key_flush)
@@ -1611,6 +1611,8 @@ RecordAttr *rec_init_attr (ZebraExplainInfo zei, Record rec)
     if (rec->info[recInfo_attr])
        return (RecordAttr *) rec->info[recInfo_attr];
     recordAttr = (RecordAttr *) xmalloc (sizeof(*recordAttr));
+
+    memset(recordAttr, '\0', sizeof(*recordAttr));
     rec->info[recInfo_attr] = (char *) recordAttr;
     rec->size[recInfo_attr] = sizeof(*recordAttr);