X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzebraapi.c;h=7e7bb799529513f6daec1eedecd38a38b5f1a44d;hb=06085703f3b5bcadfaf65bb499924a1662f9289e;hp=e13da6bb7c8e67ef126e2a369a0fdf827bf17060;hpb=153745fb3ac60cf1e66e51ad9fb24bc014b62679;p=idzebra-moved-to-github.git diff --git a/index/zebraapi.c b/index/zebraapi.c index e13da6b..7e7bb79 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -1,5 +1,5 @@ -/* $Id: zebraapi.c,v 1.239 2006-12-19 16:57:38 adam Exp $ - Copyright (C) 1995-2006 +/* $Id: zebraapi.c,v 1.248 2007-02-06 09:34:56 adam Exp $ + Copyright (C) 1995-2007 Index Data ApS This file is part of the Zebra server. @@ -143,6 +143,9 @@ ZebraHandle zebra_open(ZebraService zs, Res res) zh->m_staticrank = 0; zh->m_segment_indexing = 0; + zh->break_handler_func = 0; + zh->break_handler_data = 0; + default_encoding = res_get_def(zh->session_res, "encoding", "ISO-8859-1"); zh->iconv_to_utf8 = @@ -258,6 +261,7 @@ ZebraService zebra_start_res(const char *configName, Res def_res, Res over_res) } } + zh->timing = yaz_timing_create(); zh->path_root = res_get (zh->global_res, "root"); zh->nmem = nmem_create(); zh->record_classes = recTypeClass_create (zh->global_res, zh->nmem); @@ -581,8 +585,6 @@ ZEBRA_RES zebra_stop(ZebraService zs) { if (!zs) return ZEBRA_OK; - yaz_log (log_level, "zebra_stop"); - while (zs->sessions) { zebra_close (zs->sessions); @@ -596,6 +598,15 @@ ZEBRA_RES zebra_stop(ZebraService zs) recTypeClass_destroy(zs->record_classes); nmem_destroy(zs->nmem); res_close (zs->global_res); + + yaz_timing_stop(zs->timing); + yaz_log (YLOG_LOG, "zebra_stop: %4.2f %4.2f %4.2f", + yaz_timing_get_real(zs->timing), + yaz_timing_get_user(zs->timing), + yaz_timing_get_sys(zs->timing)); + + + yaz_timing_destroy(&zs->timing); xfree(zs); return ZEBRA_OK; } @@ -1007,8 +1018,25 @@ ZEBRA_RES zebra_set_approx_limit(ZebraHandle zh, zint approx_limit) return ZEBRA_OK; } -ZEBRA_RES zebra_search_RPN(ZebraHandle zh, ODR o, Z_RPNQuery *query, - const char *setname, zint *hits) +void zebra_set_partial_result(ZebraHandle zh) +{ + zh->partial_result = 1; +} + + +ZEBRA_RES zebra_set_break_handler(ZebraHandle zh, + int (*f)(void *client_data), + void *client_data) +{ + zh->break_handler_func = f; + zh->break_handler_data = client_data; + return ZEBRA_OK; +} + +ZEBRA_RES zebra_search_RPN_x(ZebraHandle zh, ODR o, Z_RPNQuery *query, + const char *setname, zint *hits, + int *estimated_hit_count, + int *partial_resultset) { ZEBRA_RES r; @@ -1019,19 +1047,31 @@ ZEBRA_RES zebra_search_RPN(ZebraHandle zh, ODR o, Z_RPNQuery *query, assert(hits); assert(setname); yaz_log(log_level, "zebra_search_rpn"); - zh->hits = 0; - *hits = 0; + + zh->partial_result = 0; if (zebra_begin_read(zh) == ZEBRA_FAIL) return ZEBRA_FAIL; r = resultSetAddRPN(zh, odr_extract_mem(o), query, - zh->num_basenames, zh->basenames, setname); + zh->num_basenames, zh->basenames, setname, + hits, estimated_hit_count); + + *partial_resultset = zh->partial_result; zebra_end_read(zh); - *hits = zh->hits; return r; } +ZEBRA_RES zebra_search_RPN(ZebraHandle zh, ODR o, Z_RPNQuery *query, + const char *setname, zint *hits) +{ + int estimated_hit_count; + int partial_resultset; + return zebra_search_RPN_x(zh, o, query, setname, hits, + &estimated_hit_count, + &partial_resultset); +} + ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream, const char *setname, Z_RecordComposition *comp, @@ -1676,7 +1716,7 @@ static void read_res_for_transaction(ZebraHandle zh) v = res_get_prefix(zh->res, "openRW", group, "1"); zh->m_flag_rw = atoi(v); - v = res_get_prefix(zh->res, "fileVerboseLimit", group, "100000"); + v = res_get_prefix(zh->res, "fileVerboseLimit", group, "1000"); zh->m_file_verbose_limit = atoi(v); } @@ -1735,6 +1775,7 @@ ZEBRA_RES zebra_begin_trans(ZebraHandle zh, int rw) zh->records_updated = 0; zh->records_deleted = 0; zh->records_processed = 0; + zh->records_skipped = 0; #if HAVE_SYS_TIMES_H times (&zh->tms1); @@ -2379,6 +2420,7 @@ ZEBRA_RES zebra_search_PQF(ZebraHandle zh, const char *pqf_query, Z_RPNQuery *query; ODR odr; + ZEBRA_CHECK_HANDLE(zh); odr = odr_createmem(ODR_ENCODE);