X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzebraapi.c;h=07050708fba1e09d199f9468b628fb07da091688;hb=a5ea5985a282ff55b4f86b47045be40300a746a8;hp=dda541fecff86a358034c63228440113a5abc4ef;hpb=4097bac1dce126e79ce1550fad8b2034a311ff80;p=idzebra-moved-to-github.git diff --git a/index/zebraapi.c b/index/zebraapi.c index dda541f..0705070 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -1,8 +1,5 @@ -/* $Id: zebraapi.c,v 1.269 2007-12-20 11:15:42 adam Exp $ - Copyright (C) 1995-2007 - Index Data ApS - -This file is part of the Zebra server. +/* This file is part of the Zebra server. + Copyright (C) 1995-2008 Index Data Zebra is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -426,6 +423,10 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name, if (zebra_maps_read_file(reg->zebra_maps, index_fname) != ZEBRA_OK) ret = ZEBRA_FAIL; } + else + { + zebra_maps_define_default_sort(reg->zebra_maps); + } } if (!(reg->records = rec_open(reg->bfs, rw, record_compression))) @@ -448,6 +449,8 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name, sort_type = ZEBRA_SORT_TYPE_FLAT; else if (res_get_match(res, "sortindex", "i", "f")) sort_type = ZEBRA_SORT_TYPE_ISAMB; + else if (res_get_match(res, "sortindex", "m", "f")) + sort_type = ZEBRA_SORT_TYPE_MULTI; else { yaz_log(YLOG_WARN, "bad_value for 'sortindex'"); @@ -1124,11 +1127,18 @@ ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream, } else { - for (i = 0; i 0) { @@ -1162,7 +1176,6 @@ ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream, else recs[i].buf = buf; recs[i].score = poset[i].score; - recs[i].sysno = poset[i].sysno; zebra_snippets_destroy(hit_snippet); } else @@ -1176,14 +1189,10 @@ ZEBRA_RES zebra_records_retrieve(ZebraHandle zh, ODR stream, ret = ZEBRA_FAIL; break; } - recs[i].buf = 0; /* no record and no error issued */ - recs[i].len = 0; - recs[i].errCode = 0; - recs[i].format = 0; - recs[i].sysno = 0; } } zebra_meta_records_destroy(zh, poset, num_recs); + wrbuf_destroy(addinfo_w); } zebra_end_read(zh); xfree(pos_array); @@ -1418,7 +1427,6 @@ int delete_w_handle(const char *info, void *handle) { ZebraHandle zh = (ZebraHandle) handle; ISAM_P pos; - ASSERTZH; if (*info == sizeof(pos)) { @@ -1428,18 +1436,52 @@ int delete_w_handle(const char *info, void *handle) return 0; } -static int delete_SU_handle(void *handle, int ord) +int delete_w_all_handle(const char *info, void *handle) +{ + ZebraHandle zh = (ZebraHandle) handle; + ISAM_P pos; + + if (*info == sizeof(pos)) + { + ISAMB_PP pt; + memcpy(&pos, info+1, sizeof(pos)); + pt = isamb_pp_open(zh->reg->isamb, pos, 2); + if (pt) + { + struct it_key key; + key.mem[0] = 0; + while (isamb_pp_read(pt, &key)) + { + Record rec; + rec = rec_get(zh->reg->records, key.mem[0]); + rec_del(zh->reg->records, &rec); + } + isamb_pp_close(pt); + } + } + return delete_w_handle(info, handle); +} + +static int delete_SU_handle(void *handle, int ord, + const char *index_type, const char *string_index, + zinfo_index_category_t cat) { ZebraHandle zh = (ZebraHandle) handle; char ord_buf[20]; int ord_len; - +#if 0 + yaz_log(YLOG_LOG, "ord=%d index_type=%s index=%s cat=%d", ord, + index_type, string_index, (int) cat); +#endif ord_len = key_SU_encode(ord, ord_buf); ord_buf[ord_len] = '\0'; assert(zh->reg->isamb); + assert(zh->reg->records); dict_delete_subtree(zh->reg->dict, ord_buf, - zh, delete_w_handle); + zh, + !strcmp(string_index, "_ALLRECORDS") ? + delete_w_all_handle : delete_w_handle); return 0; }