X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Fzebraapi.c;h=f3165d5717378b245c7eccd76f4bfdc6f5927a20;hp=72477ca213d91dc12222824e1cd0ec55428cce62;hb=ecf94fc25324414287d3bbfbeba4440e558edd17;hpb=ccabffc112ba33841d636522046c9ce4f02152c2 diff --git a/index/zebraapi.c b/index/zebraapi.c index 72477ca..f3165d5 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -1,4 +1,4 @@ -/* $Id: zebraapi.c,v 1.151 2005-01-22 12:20:34 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 (®->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); @@ -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,16 +1434,7 @@ static void read_res_for_transaction(ZebraHandle zh) int zebra_begin_trans (ZebraHandle zh, int rw) { ASSERTZH; - 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); - } + zebra_select_default_database(zh); if (!zh->res) { zh->errCode = 2; @@ -1680,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') @@ -1752,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; @@ -1825,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; @@ -1832,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) @@ -2083,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); @@ -2104,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; @@ -2151,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; +}