Added const qualifier for name parameter of key_SU_decode.
[idzebra-moved-to-github.git] / index / zebraapi.c
index a2c2d55..3cd3a10 100644 (file)
@@ -3,7 +3,17 @@
  * All rights reserved.
  *
  * $Log: zebraapi.c,v $
- * Revision 1.41  2000-12-01 17:59:08  adam
+ * Revision 1.44  2001-10-15 19:53:43  adam
+ * POSIX thread updates. First work on term sets.
+ *
+ * Revision 1.43  2000/12/05 12:22:53  adam
+ * Termlist source implemented (so that we can index values of XML/SGML
+ * attributes).
+ *
+ * Revision 1.42  2000/12/05 10:01:44  adam
+ * Fixed bug regarding user-defined attribute sets.
+ *
+ * Revision 1.41  2000/12/01 17:59:08  adam
  * Fixed bug regarding online updates on WIN32.
  * When zebra.cfg is not available the server will not abort.
  *
@@ -218,7 +228,7 @@ static int zebra_register_lock (ZebraHandle zh, int rw)
        logf (LOG_LOG, "Register in read/write mode");
     else if (zh->service->registerState == state)
     {
-        logf (LOG_LOG, "registerChange = %ld lastChange = %ld",
+        logf (LOG_DEBUG, "registerChange = %ld lastChange = %ld",
             (long) zh->service->registerChange, (long)lastChange);
        if (zh->service->registerChange >= lastChange)
         {
@@ -658,16 +668,15 @@ void zebra_records_retrieve (ZebraHandle zh, ODR stream,
     {
        for (i = 0; i<num_recs; i++)
        {
-           if (!poset[i].sysno)
+           if (poset[i].term)
            {
-               char num_str[20];
-
-               sprintf (num_str, "%d", pos_array[i]);  
-               zh->errCode = 13;
-                zh->errString = nmem_strdup (stream->mem, num_str);
-                break;
+               recs[i].errCode = 0;
+               recs[i].format = VAL_SUTRS;
+               recs[i].len = strlen(poset[i].term);
+               recs[i].buf = poset[i].term;
+               recs[i].base = poset[i].db;
            }
-           else
+           else if (poset[i].sysno)
            {
                recs[i].errCode =
                    zebra_record_fetch (zh, poset[i].sysno, poset[i].score,
@@ -677,6 +686,15 @@ void zebra_records_retrieve (ZebraHandle zh, ODR stream,
                                        &recs[i].base);
                recs[i].errString = NULL;
            }
+           else
+           {
+               char num_str[20];
+
+               sprintf (num_str, "%d", pos_array[i]);  
+               zh->errCode = 13;
+                zh->errString = nmem_strdup (stream->mem, num_str);
+                break;
+           }
        }
        zebraPosSetDestroy (zh, poset, num_recs);
     }
@@ -882,6 +900,7 @@ static void extract_add_index_string (RecWord *p, const char *string,
     int diff = 0;
     int *pseqno = &p->seqnos[p->reg_type];
     ZebraHandle zh = p->extractCtrl->handle;
+    ZebraExplainInfo zei = zh->service->zei;
     struct recKeys *keys = &zh->keys;
 
     if (keys->buf_used+1024 > keys->buf_max)
@@ -917,6 +936,21 @@ static void extract_add_index_string (RecWord *p, const char *string,
     
     *dst++ = lead;
 
+#if SU_SCHEME
+    if ((lead & 3) < 3)
+    {
+        int ch = zebraExplain_lookupSU (zei, attrSet, attrUse);
+        if (ch < 0)
+        {
+            ch = zebraExplain_addSU (zei, attrSet, attrUse);
+            yaz_log (LOG_LOG, "addSU set=%d use=%d SU=%d",
+                     attrSet, attrUse, ch);
+        }
+       assert (ch > 0);
+       memcpy (dst, &ch, sizeof(ch));
+       dst += sizeof(ch);
+    }
+#else
     if (!(lead & 1))
     {
         memcpy (dst, &attrSet, sizeof(attrSet));
@@ -927,6 +961,7 @@ static void extract_add_index_string (RecWord *p, const char *string,
         memcpy (dst, &attrUse, sizeof(attrUse));
         dst += sizeof(attrUse);
     }
+#endif
     *dst++ = p->reg_type;
     memcpy (dst, string, length);
     dst += length;
@@ -1262,10 +1297,14 @@ static void extract_flushWriteKeys (ZebraHandle zh)
 static void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno,
                                     int cmd, struct recKeys *reckeys)
 {
+#if SU_SCHEME
+#else
     unsigned char attrSet = (unsigned char) -1;
     unsigned short attrUse = (unsigned short) -1;
+#endif
     int seqno = 0;
     int off = 0;
+    int ch = 0;
     ZebraExplainInfo zei = zh->service->zei;
 
     if (!zh->key_buf)
@@ -1282,10 +1321,17 @@ static void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno,
     {
         const char *src = reckeys->buf + off;
         struct it_key key;
-        int lead, ch;
+        int lead;
     
         lead = *src++;
 
+#if SU_SCHEME
+       if ((lead & 3) < 3)
+       {
+           memcpy (&ch, src, sizeof(ch));
+           src += sizeof(ch);
+       }
+#else
         if (!(lead & 1))
         {
             memcpy (&attrSet, src, sizeof(attrSet));
@@ -1296,18 +1342,21 @@ static void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno,
             memcpy (&attrUse, src, sizeof(attrUse));
             src += sizeof(attrUse);
         }
+#endif
         if (zh->key_buf_used + 1024 > (zh->ptr_top-zh->ptr_i)*sizeof(char*))
             extract_flushWriteKeys (zh);
         ++(zh->ptr_i);
         (zh->key_buf)[zh->ptr_top - zh->ptr_i] =
            (char*)zh->key_buf + zh->key_buf_used;
-
+#if SU_SCHEME
+#else
         ch = zebraExplain_lookupSU (zei, attrSet, attrUse);
         if (ch < 0)
             ch = zebraExplain_addSU (zei, attrSet, attrUse);
+#endif
         assert (ch > 0);
        zh->key_buf_used +=
-           key_SU_code (ch,((char*)zh->key_buf) + zh->key_buf_used);
+           key_SU_encode (ch,((char*)zh->key_buf) + zh->key_buf_used);
 
         while (*src)
             ((char*)zh->key_buf) [(zh->key_buf_used)++] = *src++;