Added a few comments - no code changed.
[idzebra-moved-to-github.git] / index / zinfo.c
index b30a570..d443863 100644 (file)
@@ -1,10 +1,25 @@
 /*
- * Copyright (C) 1994-1996, Index Data I/S 
+ * Copyright (C) 1994-1997, Index Data I/S 
  * All rights reserved.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: zinfo.c,v $
- * Revision 1.2  1996-05-14 06:16:41  adam
+ * Revision 1.6  1998-02-17 10:29:27  adam
+ * Moved towards 'automatic' EXPLAIN database.
+ *
+ * Revision 1.5  1997/10/27 14:33:05  adam
+ * Moved towards generic character mapping depending on "structure"
+ * field in abstract syntax file. Fixed a few memory leaks. Fixed
+ * bug with negative integers when doing searches with relational
+ * operators.
+ *
+ * Revision 1.4  1997/09/25 14:57:08  adam
+ * Added string.h.
+ *
+ * Revision 1.3  1996/05/22 08:21:59  adam
+ * Added public ZebDatabaseInfo structure.
+ *
+ * Revision 1.2  1996/05/14 06:16:41  adam
  * Compact use/set bytes used in search service.
  *
  * Revision 1.1  1996/05/13 14:23:07  adam
@@ -14,6 +29,7 @@
 
 #include <stdlib.h>
 #include <assert.h>
+#include <string.h>
 
 #include "zinfo.h"
 
@@ -28,26 +44,27 @@ struct zebSUInfoB {
     struct zebSUInfoB *next;
 };
 
-struct zebDatabaseInfo {
+struct zebDatabaseInfoB {
     struct zebSUInfoB *SUInfo;
     char *databaseName;
     int sysno;
     int readFlag;
     int dirty;
-    struct zebDatabaseInfo *next;
+    struct zebDatabaseInfo info;
+    struct zebDatabaseInfoB *next;
 };
 
 struct zebTargetInfo {
     int  dictNum;
     int  dirty;
     Records records;
-    struct zebDatabaseInfo *databaseInfo;
-    struct zebDatabaseInfo *curDatabaseInfo;
+    struct zebDatabaseInfoB *databaseInfo;
+    struct zebDatabaseInfoB *curDatabaseInfo;
 };
 
 void zebTargetInfo_close (ZebTargetInfo *zti, int writeFlag)
 {
-    struct zebDatabaseInfo *zdi, *zdi1;
+    struct zebDatabaseInfoB *zdi, *zdi1;
     
     if (writeFlag)
     {
@@ -69,11 +86,21 @@ void zebTargetInfo_close (ZebTargetInfo *zti, int writeFlag)
                 else
                 {
                     drec = rec_new (zti->records);
+                   
+                   drec->info[recInfo_fileType] =
+                       rec_strdup ("grs.explain.databaseInfo",
+                                   &drec->size[recInfo_fileType]);
+
+                   drec->info[recInfo_databaseName] =
+                       rec_strdup ("IR-Explain-1",
+                                   &drec->size[recInfo_databaseName]); 
                     zdi->sysno = drec->sysno;
                 }
                 assert (drec);
                 for (zsui = zdi->SUInfo; zsui; zsui=zsui->next)
                     no++;
+               memcpy (q, &zdi->info, sizeof(zdi->info));
+                q += sizeof(zdi->info);
                 memcpy (q, &no, sizeof(no));
                 q += sizeof(no);
                 for (zsui = zdi->SUInfo; zsui; zsui=zsui->next)
@@ -81,10 +108,10 @@ void zebTargetInfo_close (ZebTargetInfo *zti, int writeFlag)
                     memcpy (q, &zsui->info, sizeof(zsui->info));
                     q += sizeof(zsui->info);
                 }
-                xfree (drec->info[0]);
-                drec->size[0] = q-q0;
-                drec->info[0] = xmalloc (drec->size[0]);
-                memcpy (drec->info[0], q0, drec->size[0]);
+                xfree (drec->info[recInfo_storeData]);
+                drec->size[recInfo_storeData] = q-q0;
+                drec->info[recInfo_storeData] = xmalloc (drec->size[recInfo_storeData]);
+                memcpy (drec->info[recInfo_storeData], q0, drec->size[recInfo_storeData]);
                 rec_put (zti->records, &drec);
             }
             strcpy (p, zdi->databaseName);
@@ -98,10 +125,10 @@ void zebTargetInfo_close (ZebTargetInfo *zti, int writeFlag)
             Record grec = rec_get (zti->records, 1);
 
             assert (grec);
-            xfree (grec->info[0]);
-            grec->size[0] = p-p0;
-            grec->info[0] = xmalloc (grec->size[0]);
-            memcpy (grec->info[0], p0, grec->size[0]);
+            xfree (grec->info[recInfo_storeData]);
+            grec->size[recInfo_storeData] = p-p0;
+            grec->info[recInfo_storeData] = xmalloc (grec->size[recInfo_storeData]);
+            memcpy (grec->info[recInfo_storeData], p0, grec->size[recInfo_storeData]);
             rec_put (zti->records, &grec);
         }
     }
@@ -123,9 +150,9 @@ void zebTargetInfo_close (ZebTargetInfo *zti, int writeFlag)
 
 ZebTargetInfo *zebTargetInfo_open (Records records, int writeFlag)
 {
-    Record rec;
+    Record trec;
     ZebTargetInfo *zti;
-    struct zebDatabaseInfo **zdi;
+    struct zebDatabaseInfoB **zdi;
 
     zti = xmalloc (sizeof(*zti));
     zti->dirty = 0;
@@ -134,12 +161,12 @@ ZebTargetInfo *zebTargetInfo_open (Records records, int writeFlag)
 
     zdi = &zti->databaseInfo;
     
-    rec = rec_get (records, 1);
-    if (rec)
+    trec = rec_get (records, 1);
+    if (trec)
     {
         const char *p;
 
-        p = rec->info[0];
+        p = trec->info[recInfo_storeData];
 
         memcpy (&zti->dictNum, p, sizeof(zti->dictNum));
         p += sizeof(zti->dictNum);
@@ -155,28 +182,36 @@ ZebTargetInfo *zebTargetInfo_open (Records records, int writeFlag)
             (*zdi)->dirty = 0;
             zdi = &(*zdi)->next;
         }
-        assert (p - rec->info[0] == rec->size[0]-1);
+        assert (p - trec->info[recInfo_storeData] == trec->size[recInfo_storeData]-1);
     }
     else
     {
         zti->dictNum = 1;
         if (writeFlag)
         {
-            rec = rec_new (records);
-            rec->info[0] = xmalloc (1+sizeof(zti->dictNum));
-            memcpy (rec->info[0], &zti->dictNum, sizeof(zti->dictNum));
-            rec->info[0][sizeof(zti->dictNum)] = '\0';
-            rec->size[0] = sizeof(zti->dictNum)+1;
-            rec_put (records, &rec);
+            trec = rec_new (records);
+
+           trec->info[recInfo_fileType] =
+               rec_strdup ("grs.explain.targetInfo",
+                           &trec->size[recInfo_fileType]); 
+           trec->info[recInfo_databaseName] =
+               rec_strdup ("IR-Explain-1",
+                           &trec->size[recInfo_databaseName]); 
+           trec->info[recInfo_databaseName] = xstrdup ("IR-Explain-1");
+            trec->info[recInfo_storeData] = xmalloc (1+sizeof(zti->dictNum));
+            memcpy (trec->info[recInfo_storeData], &zti->dictNum, sizeof(zti->dictNum));
+            trec->info[recInfo_storeData][sizeof(zti->dictNum)] = '\0';
+            trec->size[recInfo_storeData] = sizeof(zti->dictNum)+1;
+            rec_put (records, &trec);
         }
     }
     *zdi = NULL;
-    rec_rm (&rec);
+    rec_rm (&trec);
     return zti;
 }
 
 static void zebTargetInfo_readDatabase (ZebTargetInfo *zti,
-                                        struct zebDatabaseInfo *zdi)
+                                        struct zebDatabaseInfoB *zdi)
 {
     const char *p;
     struct zebSUInfoB **zsuip = &zdi->SUInfo;
@@ -185,7 +220,9 @@ static void zebTargetInfo_readDatabase (ZebTargetInfo *zti,
 
     rec = rec_get (zti->records, zdi->sysno);
     assert (rec);
-    p = rec->info[0];
+    p = rec->info[recInfo_storeData];
+    memcpy (&zdi->info, p, sizeof(zdi->info));
+    p += sizeof(zdi->info);
     memcpy (&no, p, sizeof(no));
     p += sizeof(no);
     for (i = 0; i<no; i++)
@@ -202,7 +239,7 @@ static void zebTargetInfo_readDatabase (ZebTargetInfo *zti,
 
 int zebTargetInfo_curDatabase (ZebTargetInfo *zti, const char *database)
 {
-    struct zebDatabaseInfo *zdi;
+    struct zebDatabaseInfoB *zdi;
     
     assert (zti);
     if (zti->curDatabaseInfo &&
@@ -223,7 +260,7 @@ int zebTargetInfo_curDatabase (ZebTargetInfo *zti, const char *database)
 
 int zebTargetInfo_newDatabase (ZebTargetInfo *zti, const char *database)
 {
-    struct zebDatabaseInfo *zdi;
+    struct zebDatabaseInfoB *zdi;
 
     assert (zti);
     for (zdi = zti->databaseInfo; zdi; zdi=zdi->next)
@@ -275,3 +312,19 @@ int zebTargetInfo_addSU (ZebTargetInfo *zti, int set, int use)
     zsui->info.ordinal = (zti->dictNum)++;
     return zsui->info.ordinal;
 }
+
+ZebDatabaseInfo *zebTargetInfo_getDB (ZebTargetInfo *zti)
+{
+    assert (zti->curDatabaseInfo);
+
+    return &zti->curDatabaseInfo->info;
+}
+
+void zebTargetInfo_setDB (ZebTargetInfo *zti, ZebDatabaseInfo *zdi)
+{
+    assert (zti->curDatabaseInfo);
+
+    zti->curDatabaseInfo->dirty = 1;
+    memcpy (&zti->curDatabaseInfo->info, zdi, sizeof(*zdi));
+}
+