Update snippets handling for new store keys structure. Also omit
[idzebra-moved-to-github.git] / index / zebraapi.c
index 1fbb956..40aa1cc 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zebraapi.c,v 1.178 2005-06-14 20:28:54 adam Exp $
+/* $Id: zebraapi.c,v 1.184 2005-08-22 09:04:18 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -126,6 +126,7 @@ ZebraHandle zebra_open (ZebraService zs)
     zh->lock_shadow = 0;
 
     zh->shadow_enable = 1;
+    zh->m_staticrank = 0;
 
     default_encoding = res_get_def(zs->global_res, "encoding", "ISO-8859-1");
 
@@ -172,9 +173,9 @@ ZebraService zebra_start_res (const char *configName, Res def_res, Res over_res)
         log_level = yaz_log_module_level("zebraapi");
         log_level_initialized = 1;
     }
-
-    yaz_log(YLOG_LOG, "zebra_start %s %s",configName, ZEBRAVER);
-    assert(configName);
+    
+    yaz_log(YLOG_LOG, "zebra_start %s %s", ZEBRAVER,
+           configName ? configName : "");
 
     if ((res = res_open (configName, def_res, over_res)))
     {
@@ -182,10 +183,7 @@ ZebraService zebra_start_res (const char *configName, Res def_res, Res over_res)
        const char *passwd_encrypt = 0;
         ZebraService zh = xmalloc(sizeof(*zh));
 
-       yaz_log (YLOG_DEBUG, "Read resources `%s'", configName);
-        
         zh->global_res = res;
-        zh->configName = xstrdup(configName);
         zh->sessions = 0;
         
         zebra_chdir (zh);
@@ -316,6 +314,9 @@ struct zebra_register *zebra_register_open (ZebraService zs, const char *name,
 
     reg->sortKeys.buf = 0;
     reg->sortKeys.buf_max = 0;
+#if NATTR
+    reg->sortKeys.codec_handle = iscz1_start();
+#endif
 
     reg->records = 0;
     reg->dict = 0;
@@ -329,8 +330,9 @@ struct zebra_register *zebra_register_open (ZebraService zs, const char *name,
     reg->key_file_no = 0;
     reg->ptr_i = 0;
     
-    zebraRankInstall (reg, rank1_class);
-    zebraRankInstall (reg, rankzv_class);
+    zebraRankInstall (reg, rank_1_class);
+    zebraRankInstall (reg, rank_zv_class);
+    zebraRankInstall (reg, rank_static_class);
 
     recordCompression = res_get_def (res, "recordCompression", "none");
     if (!strcmp (recordCompression, "none"))
@@ -480,6 +482,10 @@ static void zebra_register_close (ZebraService zs, struct zebra_register *reg)
     xfree(reg->keys.buf);
     if (reg->keys.codec_handle)
        iscz1_stop(reg->keys.codec_handle);
+#if NATTR
+    if (reg->sortKeys.codec_handle)
+       iscz1_stop(reg->sortKeys.codec_handle);
+#endif
     xfree(reg->key_buf);
     xfree(reg->name);
     xfree(reg);
@@ -504,7 +510,6 @@ ZEBRA_RES zebra_stop(ZebraService zs)
     recTypeClass_destroy(zs->record_classes);
     nmem_destroy(zs->nmem);
     res_close (zs->global_res);
-    xfree(zs->configName);
     xfree(zs);
     return ZEBRA_OK;
 }
@@ -696,6 +701,13 @@ static void zebra_select_register (ZebraHandle zh, const char *new_reg)
        if (res_get_int(zh->res, "estimatehits", &approx) == ZEBRA_OK)
            zebra_set_approx_limit(zh, approx);
     }
+    if (zh->res)
+    {
+       if (res_get_int(zh->res, "staticrank", &zh->m_staticrank) == ZEBRA_OK)
+           yaz_log(YLOG_LOG, "static rank set and is %d", zh->m_staticrank);
+       else
+           yaz_log(YLOG_LOG, "static rank unset");
+    }
 }
 
 void map_basenames_func (void *vp, const char *name, const char *value)
@@ -1008,7 +1020,8 @@ ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream,
 ZEBRA_RES zebra_scan_PQF(ZebraHandle zh, ODR stream, const char *query,
                         int *position,
                         int *num_entries, ZebraScanEntry **entries,
-                        int *is_partial)
+                        int *is_partial,
+                        const char *setname)
 {
     YAZ_PQF_Parser pqf_parser = yaz_pqf_create ();
     Z_AttributesPlusTerm *zapt;
@@ -1022,7 +1035,8 @@ ZEBRA_RES zebra_scan_PQF(ZebraHandle zh, ODR stream, const char *query,
     }
     else
        res = zebra_scan(zh, stream, zapt, VAL_BIB1,
-                        position, num_entries, entries, is_partial);
+                        position, num_entries, entries, is_partial,
+                        setname);
     yaz_pqf_destroy (pqf_parser);
     return res;
 }
@@ -1031,9 +1045,11 @@ ZEBRA_RES zebra_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt,
                     oid_value attributeset,
                     int *position,
                     int *num_entries, ZebraScanEntry **entries,
-                    int *is_partial)
+                    int *is_partial,
+                    const char *setname)
 {
     ZEBRA_RES res;
+    RSET limit_rset = 0;
     ASSERTZH;
     assert(stream);
     assert(zapt);
@@ -1049,9 +1065,21 @@ ZEBRA_RES zebra_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt,
        *num_entries = 0;
        return ZEBRA_FAIL;
     }
+    if (setname)
+    {
+       limit_rset = resultSetRef(zh, setname);
+       if (!limit_rset)
+       {
+           zebra_setError(zh, 
+                          YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST,
+                          setname);
+           zebra_end_read (zh);
+           return ZEBRA_FAIL;
+       }
+    }
     res = rpn_scan (zh, stream, zapt, attributeset,
                    zh->num_basenames, zh->basenames, position,
-                   num_entries, entries, is_partial, 0, 0);
+                   num_entries, entries, is_partial, limit_rset, 0);
     zebra_end_read (zh);
     return res;
 }
@@ -1211,13 +1239,13 @@ ZEBRA_RES zebra_admin_import_segment (ZebraHandle zh, Z_Segment *segment)
                Odr_oct *oct = fragment->u.notExternallyTagged;
                sysno = 0;
                
-               if ( zebra_update_record(zh, 
-                                        0, /* record Type */
-                                        &sysno,
-                                        0, /* match */
-                                        0, /* fname */
-                                        oct->buf, oct->len,
-                                        0) == ZEBRA_FAIL)
+               if (zebra_update_record(zh, 
+                                       0, /* record Type */
+                                       &sysno,
+                                       0, /* match */
+                                       0, /* fname */
+                                       (const char *) oct->buf, oct->len,
+                                       0) == ZEBRA_FAIL)
                    res = ZEBRA_FAIL;
            }
        }
@@ -2013,7 +2041,6 @@ const char *zebra_get_resource(ZebraHandle zh,
     const char *v;
     ASSERTZH;
     assert(name);
-    assert(defaultvalue);
     v = res_get_def (zh->res, name, (char *)defaultvalue);
     zebra_clearError(zh);
     yaz_log(log_level, "zebra_get_resource %s:%s", name, v);