Better diagnostics for extraction process.
[idzebra-moved-to-github.git] / index / extract.c
index d9c619b..da261e2 100644 (file)
@@ -4,7 +4,19 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: extract.c,v $
- * Revision 1.91  1999-02-12 13:29:22  adam
+ * Revision 1.95  1999-05-21 12:00:17  adam
+ * Better diagnostics for extraction process.
+ *
+ * Revision 1.94  1999/05/20 12:57:18  adam
+ * Implemented TCL filter. Updated recctrl system.
+ *
+ * Revision 1.93  1999/05/15 14:36:38  adam
+ * Updated dictionary. Implemented "compression" of dictionary.
+ *
+ * Revision 1.92  1999/03/09 16:27:49  adam
+ * More work on SDRKit integration.
+ *
+ * Revision 1.91  1999/02/12 13:29:22  adam
  * Implemented position-flag for registers.
  *
  * Revision 1.90  1999/02/02 14:50:52  adam
@@ -402,7 +414,7 @@ int key_open (struct recordGroup *rGroup, int mem)
     key_buf_used = 0;
     key_file_no = 0;
 
-    if (!(matchDict = dict_open (bfs, GMATCH_DICT, 50, rw)))
+    if (!(matchDict = dict_open (bfs, GMATCH_DICT, 50, rw, 0)))
     {
         logf (LOG_FATAL, "dict_open fail of %s", GMATCH_DICT);
        return -1;
@@ -1232,7 +1244,7 @@ void addSchema (struct recExtractCtrl *p, Odr_oid *oid)
 static int recordExtract (SYSNO *sysno, const char *fname,
                           struct recordGroup *rGroup, int deleteFlag,
                           struct file_read_info *fi,
-                         RecType recType, char *subType)
+                         RecType recType, char *subType, void *clientData)
 {
     RecordAttr *recordAttr;
     int r;
@@ -1284,18 +1296,20 @@ static int recordExtract (SYSNO *sysno, const char *fname,
         logInfo.rGroup = rGroup;
         log_event_start (recordLogPreamble, &logInfo);
 
-        r = (*recType->extract)(&extractCtrl);
+        r = (*recType->extract)(clientData, &extractCtrl);
 
         log_event_start (NULL, NULL);
 
-        if (r)      
-        {
+       if (r == RECCTRL_EXTRACT_EOF)
+           return 0;
+       else if (r == RECCTRL_EXTRACT_ERROR)
+       {
             /* error occured during extraction ... */
             if (rGroup->flagRw &&
                records_processed < rGroup->fileVerboseLimit)
             {
-                logf (LOG_WARN, "fail %s %s %ld code = %d", rGroup->recordType,
-                      fname, (long) recordOffset, r);
+                logf (LOG_WARN, "fail %s %s %ld", rGroup->recordType,
+                      fname, (long) recordOffset);
             }
             return 0;
         }
@@ -1523,6 +1537,7 @@ int fileExtract (SYSNO *sysno, const char *fname,
     struct recordGroup rGroupM;
     struct recordGroup *rGroup = &rGroupM;
     struct file_read_info *fi;
+    void *clientData;
 
     memcpy (rGroup, rGroupP, sizeof(*rGroupP));
    
@@ -1562,7 +1577,8 @@ int fileExtract (SYSNO *sysno, const char *fname,
     if (!*rGroup->recordType)
        return 0;
     if (!(recType =
-         recType_byName (rGroup->recTypes, rGroup->recordType, subType)))
+         recType_byName (rGroup->recTypes, rGroup->recordType, subType,
+                         &clientData)))
     {
         logf (LOG_WARN, "No such record type: %s", rGroup->recordType);
         return 0;
@@ -1634,14 +1650,17 @@ int fileExtract (SYSNO *sysno, const char *fname,
         rGroup->flagStoreKeys = 0;
 
 #if ZEBRASDR
-    if (1)
+    if (rGroup->useSDR)
     {
        ZebraSdrHandle h;
        char xname[128], *xp;
 
        strncpy (xname, fname, 127);
-       if ((xp = strchr (xname, '.')))
-           *xp = '\0';
+       if (!(xp = strchr (xname, '.')))
+           return 0;
+       *xp = '\0';
+       if (strcmp (xp+1, "sdr.bits"))
+           return 0;
 
         h = zebraSdr_open (xname);
        if (!h)
@@ -1657,9 +1676,8 @@ int fileExtract (SYSNO *sysno, const char *fname,
 
            segmentno = zebraSdr_segment (h, 0);
            sprintf (sdr_name, "%%%s.%d", xname, segmentno);
-           logf (LOG_LOG, "SDR: %s", sdr_name);
 
-#if 1
+#if 0
            if (segmentno > 20)
                break;
 #endif
@@ -1699,7 +1717,7 @@ int fileExtract (SYSNO *sysno, const char *fname,
     {
         file_begin (fi);
         r = recordExtract (sysno, fname, rGroup, deleteFlag, fi,
-                           recType, subType);
+                           recType, subType, clientData);
     } while (r && !sysno && fi->file_more);
     file_read_stop (fi);
     if (fd != -1)