Use attribute mappings.
[idzebra-moved-to-github.git] / index / zsets.c
index 636c5e4..bf8e139 100644 (file)
@@ -4,7 +4,18 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: zsets.c,v $
- * Revision 1.4  1995-09-07 13:58:36  adam
+ * Revision 1.7  1995-10-06 14:38:01  adam
+ * New result set method: r_score.
+ * Local no (sysno) and score is transferred to retrieveCtrl.
+ *
+ * Revision 1.6  1995/09/28  09:19:49  adam
+ * xfree/xmalloc used everywhere.
+ * Extract/retrieve method seems to work for text records.
+ *
+ * Revision 1.5  1995/09/27  16:17:32  adam
+ * More work on retrieve.
+ *
+ * Revision 1.4  1995/09/07  13:58:36  adam
  * New parameter: result-set file descriptor (RSFD) to support multiple
  * positions within the same result-set.
  * Boolean operators: and, or, not implemented.
@@ -59,11 +70,11 @@ ZServerSet *resultSetGet (ZServerInfo *zi, const char *name)
     return NULL;
 }
 
-ZServerRecord *resultSetRecordGet (ZServerInfo *zi, const char *name, 
-                                   int num, int *positions)
+ZServerSetSysno *resultSetSysnoGet  (ZServerInfo *zi, const char *name, 
+                                     int num, int *positions)
 {
     ZServerSet *sset;
-    ZServerRecord *sr;
+    ZServerSetSysno *sr;
     RSET rset;
     int num_i = 0;
     int position = 0;
@@ -86,44 +97,10 @@ ZServerRecord *resultSetRecordGet (ZServerInfo *zi, const char *name,
             position++;
             if (position == positions[num_i])
             {
-                FILE *inf;
-                char fname[SYS_IDX_ENTRY_LEN];
-
-                sr[num_i].buf = NULL;
-                if (lseek (zi->sys_idx_fd, psysno * SYS_IDX_ENTRY_LEN,
-                           SEEK_SET) == -1)
-                {
-                    logf (LOG_FATAL|LOG_ERRNO, "lseek of sys_idx");
-                    exit (1);
-                }
-                if (read (zi->sys_idx_fd, fname, SYS_IDX_ENTRY_LEN) == -1)
-                {
-                    logf (LOG_FATAL|LOG_ERRNO, "read of sys_idx");
-                    exit (1);
-                }
-                if (!(inf = fopen (fname, "r")))
-                    logf (LOG_WARN, "fopen: %s", fname);
-                else
-                {
-                    long size;
-
-                    fseek (inf, 0L, SEEK_END);
-                    size = ftell (inf);
-                    fseek (inf, 0L, SEEK_SET);
-                    logf (LOG_DEBUG, "get sysno=%d, fname=%s, size=%ld",
-                          psysno, fname, (long) size);
-                    sr[num_i].buf = xmalloc (size+1);
-                    sr[num_i].size = size;
-                    sr[num_i].buf[size] = '\0';
-                    if (fread (sr[num_i].buf, size, 1, inf) != 1)
-                    {
-                        logf (LOG_FATAL|LOG_ERRNO, "fread %s", fname);
-                        exit (1);
-                    }
-                    fclose (inf);
-                }
+                sr[num_i].sysno = psysno;
+                rset_score (rset, rfd, &sr[num_i].score);
                 num_i++;
-                if (num_i == num)
+                if (++num_i == num)
                     break;
             }
         }
@@ -131,8 +108,7 @@ ZServerRecord *resultSetRecordGet (ZServerInfo *zi, const char *name,
     rset_close (rset, rfd);
     while (num_i < num)
     {
-        sr[num_i].buf = NULL;
-        sr[num_i].size = 0;
+        sr[num_i].sysno = 0;
         num_i++;
     }
     return sr;
@@ -143,6 +119,6 @@ void resultSetRecordDel (ZServerInfo *zi, ZServerRecord *records, int num)
     int i;
 
     for (i = 0; i<num; i++)
-        free (records[i].buf);
-    free (records);
+        xfree (records[i].buf);
+    xfree (records);
 }