Get rid of typedefs iSAMS_P, ISAMC_P, ISAMB_P and use ISAM_P instead.
[idzebra-moved-to-github.git] / index / zrpn.c
index dfb7ab9..caccbcd 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zrpn.c,v 1.171 2005-03-11 17:56:34 adam Exp $
+/* $Id: zrpn.c,v 1.173 2005-04-13 13:03:47 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -180,7 +180,7 @@ struct grep_info {
 #ifdef TERM_COUNT        
     int *term_no;        
 #endif        
-    ISAMC_P *isam_p_buf;
+    ISAM_P *isam_p_buf;
     int isam_p_size;        
     int isam_p_indx;
     ZebraHandle zh;
@@ -215,13 +215,13 @@ static void add_isam_p(const char *name, const char *info,
     }
     if (p->isam_p_indx == p->isam_p_size)
     {
-        ISAMC_P *new_isam_p_buf;
+        ISAM_P *new_isam_p_buf;
 #ifdef TERM_COUNT        
         int *new_term_no;        
 #endif
         p->isam_p_size = 2*p->isam_p_size + 100;
-        new_isam_p_buf = (ISAMC_P *) xmalloc(sizeof(*new_isam_p_buf) *
-                                             p->isam_p_size);
+        new_isam_p_buf = (ISAM_P *) xmalloc(sizeof(*new_isam_p_buf) *
+                                           p->isam_p_size);
         if (p->isam_p_buf)
         {
             memcpy(new_isam_p_buf, p->isam_p_buf,
@@ -2406,7 +2406,7 @@ RSET rpn_search(ZebraHandle zh, NMEM nmem, NMEM rset_nmem,
 
 struct scan_info_entry {
     char *term;
-    ISAMC_P isam_p;
+    ISAM_P isam_p;
 };
 
 struct scan_info {
@@ -2430,8 +2430,8 @@ static int scan_handle (char *name, const char *info, int pos, void *client)
     scan_info->list[idx].term = (char *)
         odr_malloc(scan_info->odr, strlen(name + len_prefix)+1);
     strcpy(scan_info->list[idx].term, name + len_prefix);
-    assert (*info == sizeof(ISAMC_P));
-    memcpy (&scan_info->list[idx].isam_p, info+1, sizeof(ISAMC_P));
+    assert (*info == sizeof(ISAM_P));
+    memcpy (&scan_info->list[idx].isam_p, info+1, sizeof(ISAM_P));
     return 0;
 }
 
@@ -2573,45 +2573,58 @@ void rpn_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt,
         use_value = 1016;
     for (base_no = 0; base_no < num_bases && ord_no < 32; base_no++)
     {
-        int r;
-        attent attp;
-        data1_local_attribute *local_attr;
+       data1_local_attribute *local_attr;
+       attent attp;
+       int ord;
 
-        if ((r = att_getentbyatt (zh, &attp, attributeset, use_value,
-                                use_string)))
-        {
-            yaz_log(YLOG_DEBUG, "att_getentbyatt fail. set=%d use=%d",
-                  attributeset, use_value);
-            if (r == -1)
-            {
-                char val_str[32];
-                sprintf (val_str, "%d", use_value);
-                errCode = 114;
-                errString = odr_strdup (stream, val_str);
-            }   
-            else
-                errCode = 121;
-            continue;
-        }
-        if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no]))
-        {
-            zh->errString = basenames[base_no];
-            zh->errCode = 109; /* Database unavailable */
-            *num_entries = 0;
-            return;
-        }
-        bases_ok++;
-        for (local_attr = attp.local_attributes; local_attr && ord_no < 32;
-             local_attr = local_attr->next)
-        {
-            int ord;
+       if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no]))
+       {
+           zh->errString = basenames[base_no];
+           zh->errCode = 109; /* Database unavailable */
+           *num_entries = 0;
+           return;
+       }
 
-            ord = zebraExplain_lookup_attr_su(zh->reg->zei,
+       if (use_string &&
+           (ord = zebraExplain_lookup_attr_str(zh->reg->zei,
+                                               use_string)) >= 0)
+       {
+           /* we have a match for a raw string attribute */
+           if (ord > 0)
+               ords[ord_no++] = ord;
+            attp.local_attributes = 0;  /* no more attributes */
+       }
+       else
+       {
+           int r;
+           
+           if ((r = att_getentbyatt (zh, &attp, attributeset, use_value,
+                                     use_string)))
+           {
+               yaz_log(YLOG_DEBUG, "att_getentbyatt fail. set=%d use=%d",
+                       attributeset, use_value);
+               if (r == -1)
+               {
+                   char val_str[32];
+                   sprintf (val_str, "%d", use_value);
+                   errCode = 114;
+                   errString = odr_strdup (stream, val_str);
+               }   
+               else
+                   errCode = 121;
+               continue;
+           }
+       }
+       bases_ok++;
+       for (local_attr = attp.local_attributes; local_attr && ord_no < 32;
+            local_attr = local_attr->next)
+       {
+           ord = zebraExplain_lookup_attr_su(zh->reg->zei,
                                              attp.attset_ordinal,
                                              local_attr->local);
-            if (ord > 0)
-                ords[ord_no++] = ord;
-        }
+           if (ord > 0)
+               ords[ord_no++] = ord;
+       }
     }
     if (!bases_ok && errCode)
     {