Get rid of typedefs iSAMS_P, ISAMC_P, ISAMB_P and use ISAM_P instead.
[idzebra-moved-to-github.git] / index / zebraapi.c
index 0ca84e6..f3165d5 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zebraapi.c,v 1.147 2005-01-15 19:56:54 adam Exp $
+/* $Id: zebraapi.c,v 1.158 2005-04-13 13:03:47 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -345,10 +345,10 @@ struct zebra_register *zebra_register_open (ZebraService zs, const char *name,
     if (res_get_match (res, "isam", "c", ISAM_DEFAULT))
     {
        struct ISAMC_M_s isamc_m;
-       if (!(reg->isamc = isc_open (reg->bfs, FNAME_ISAMC,
+       if (!(reg->isamc = isamc_open (reg->bfs, FNAME_ISAMC,
                                    rw, key_isamc_m(res, &isamc_m))))
        {
-           yaz_log (YLOG_WARN, "isc_open failed");
+           yaz_log (YLOG_WARN, "isamc_open failed");
            return 0;
        }
     }
@@ -439,7 +439,7 @@ static void zebra_register_close (ZebraService zs, struct zebra_register *reg)
        if (reg->isams)
            isams_close (reg->isams);
         if (reg->isamc)
-            isc_close (reg->isamc);
+            isamc_close (reg->isamc);
         if (reg->isamb)
             isamb_close (reg->isamb);
         rec_close (&reg->records);
@@ -681,6 +681,21 @@ void map_basenames_func (void *vp, const char *name, const char *value)
        }
 }
 
+int zebra_select_default_database(ZebraHandle zh)
+{
+    if (!zh->res)
+    {
+       /* no database has been selected - so we select based on
+          resource setting (including group)
+       */
+       const char *group = res_get(zh->service->global_res, "group");
+       const char *v = res_get_prefix(zh->service->global_res,
+                                      "database", group, "Default");
+       zebra_select_database(zh, v);
+    }
+    return 0;
+}
+
 void map_basenames (ZebraHandle zh, ODR stream,
                    int *num_bases, char ***basenames)
 {
@@ -694,6 +709,7 @@ void map_basenames (ZebraHandle zh, ODR stream,
     zh->errCode = 0;
 
     info.zh = zh;
+
     info.num_bases = *num_bases;
     info.basenames = *basenames;
     info.new_num_max = 128;
@@ -807,7 +823,7 @@ int zebra_select_databases (ZebraHandle zh, int num_bases,
 }
 
 int zebra_search_RPN (ZebraHandle zh, ODR o,
-                      Z_RPNQuery *query, const char *setname, int *hits)
+                      Z_RPNQuery *query, const char *setname, zint *hits)
 {
     const char *max;
     zint maxhits;
@@ -936,10 +952,28 @@ int zebra_records_retrieve (ZebraHandle zh, ODR stream,
     return ret;
 }
 
+int zebra_scan_PQF(ZebraHandle zh, ODR stream, const char *query,
+                  int *position, int *num_entries, ZebraScanEntry **entries,
+                  int *is_partial)
+{
+    YAZ_PQF_Parser pqf_parser = yaz_pqf_create ();
+    Z_AttributesPlusTerm *zapt;
+    int *attributeSet;
+    
+    if (!(zapt = yaz_pqf_scan(pqf_parser, stream, &attributeSet, query)))
+    {
+       yaz_pqf_destroy (pqf_parser);
+       return -1;
+    }
+    yaz_pqf_destroy (pqf_parser);
+    return zebra_scan(zh, stream, zapt, VAL_BIB1,
+                     position, num_entries, entries, is_partial);
+}
+
 int zebra_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt,
-                oid_value attributeset,
-                int *position, int *num_entries, ZebraScanEntry **entries,
-                int *is_partial)
+               oid_value attributeset,
+               int *position, int *num_entries, ZebraScanEntry **entries,
+               int *is_partial)
 {
     ASSERTZH;
     assert(stream);
@@ -984,22 +1018,22 @@ int zebra_sort (ZebraHandle zh, ODR stream,
     return 0;
 }
 
-int zebra_deleleResultSet(ZebraHandle zh, int function,
+int zebra_deleteResultSet(ZebraHandle zh, int function,
                          int num_setnames, char **setnames,
                          int *statuses)
 {
     int i, status;
     ASSERTZH;
-    assert(num_setnames>0);
-    assert(setnames);
     assert(statuses);
-    yaz_log(log_level, "zebra_deleleResultSet n=%d",num_setnames);
+    yaz_log(log_level, "zebra_deleteResultSet n=%d",num_setnames);
     zh->errCode = 0;
     if (zebra_begin_read(zh))
        return Z_DeleteStatus_systemProblemAtTarget;
     switch (function)
     {
     case Z_DeleteResultSetRequest_list:
+       assert(num_setnames>0);
+       assert(setnames);
        resultSetDestroy (zh, num_setnames, setnames, statuses);
        break;
     case Z_DeleteResultSetRequest_all:
@@ -1209,7 +1243,7 @@ int zebra_admin_exchange_record (ZebraHandle zh,
 int delete_w_handle(const char *info, void *handle)
 {
     ZebraHandle zh = (ZebraHandle) handle;
-    ISAMC_P pos;
+    ISAM_P pos;
     ASSERTZH;
 
     if (*info == sizeof(pos))
@@ -1400,6 +1434,7 @@ static void read_res_for_transaction(ZebraHandle zh)
 int zebra_begin_trans (ZebraHandle zh, int rw)
 {
     ASSERTZH;
+    zebra_select_default_database(zh);
     if (!zh->res)
     {
         zh->errCode = 2;
@@ -1670,10 +1705,10 @@ int zebra_end_transaction (ZebraHandle zh, ZebraTransactionStatus *status)
                  zh->records_processed, zh->records_inserted,
                  zh->records_updated, zh->records_deleted);
         
-        status->processed = zh->records_processed;
-        status->inserted = zh->records_inserted;
-        status->updated = zh->records_updated;
-        status->deleted = zh->records_deleted;
+        status->processed = (int) zh->records_processed;
+        status->inserted = (int) zh->records_inserted;
+        status->updated = (int) zh->records_updated;
+        status->deleted = (int) zh->records_deleted;
         
         zebra_get_state (zh, &val, &seqno);
         if (val != 'd')
@@ -1742,6 +1777,7 @@ static int zebra_commit_ex (ZebraHandle zh, int clean_only)
     ASSERTZH;
     zh->errCode = 0;
 
+    zebra_select_default_database(zh);
     if (!zh->res)
     {
         zh->errCode = 109;
@@ -1815,6 +1851,7 @@ int zebra_init (ZebraHandle zh)
     yaz_log(log_level, "zebra_init");
     zh->errCode = 0;
 
+    zebra_select_default_database(zh);
     if (!zh->res)
     {
         zh->errCode = 109;
@@ -1822,8 +1859,7 @@ int zebra_init (ZebraHandle zh)
     }
     rval = res_get (zh->res, "shadow");
 
-    bfs = bfs_create (res_get (zh->service->global_res, "register"),
-                      zh->path_reg);
+    bfs = bfs_create (res_get (zh->res, "register"), zh->path_reg);
     if (!bfs)
        return -1;
     if (rval && *rval)
@@ -2073,9 +2109,9 @@ int zebra_delete_record (ZebraHandle zh,
 */
 
 int zebra_search_PQF (ZebraHandle zh, const char *pqf_query,
-                     const char *setname, int *numhits)
+                     const char *setname, zint *numhits)
 {
-    int hits = 0;
+    zint hits = 0;
     int res = -1;
     Z_RPNQuery *query;
     ODR odr = odr_createmem(ODR_ENCODE);
@@ -2094,7 +2130,7 @@ int zebra_search_PQF (ZebraHandle zh, const char *pqf_query,
     
     odr_destroy(odr);
 
-    yaz_log(log_level, "Hits: %d",hits);
+    yaz_log(log_level, "Hits: " ZINT_FORMAT, hits);
 
     if (numhits)
        *numhits = hits;
@@ -2141,3 +2177,9 @@ int zebra_sort_by_specstr (ZebraHandle zh, ODR stream,
     return sort_status;
 }
 
+struct BFiles_struct *zebra_get_bfs(ZebraHandle zh)
+{
+    if (zh && zh->reg)
+       return zh->reg->bfs;
+    return 0;
+}