From e35491873c74b8dbba42ad427b12ef872d1e11a6 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 5 Sep 2003 10:51:17 +0000 Subject: [PATCH] Only issue error 114 if all databases fail --- CHANGELOG | 6 ++++ index/zebraapi.c | 13 +++++---- index/zrpn.c | 81 +++++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 73 insertions(+), 27 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 76b15c7..5f6ba5c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,12 @@ +Zebra ignores "unsupported use attribute" for individual databases +when search multiple databases (unless all databases fail). + New filter grs.marcxml which works like grs.marc but produces MARCXML. +Added support for database deletion. It is possible to create/drop +a database from zebraidx utility. + Write zebrasrv.pid to lockdir. Bug fix: result sets were not recovered correctly. Had to diff --git a/index/zebraapi.c b/index/zebraapi.c index c3cf7f5..5fc521c 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -1,4 +1,4 @@ -/* $Id: zebraapi.c,v 1.113 2003-08-21 10:30:04 adam Exp $ +/* $Id: zebraapi.c,v 1.114 2003-09-05 10:51:17 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 Index Data Aps @@ -20,8 +20,6 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - - #include #include #ifdef WIN32 @@ -1137,6 +1135,7 @@ static int delete_SU_handle(void *handle, int ord) int zebra_drop_database (ZebraHandle zh, const char *database) { + int ret = 0; ASSERTZH; yaz_log(LOG_API,"zebra_drop_database"); zh->errCode = 0; @@ -1152,8 +1151,13 @@ int zebra_drop_database (ZebraHandle zh, const char *database) zebraExplain_trav_ord(zh->reg->zei, zh, delete_SU_handle); zebraExplain_removeDatabase(zh->reg->zei, zh); } + else + { + yaz_log(LOG_WARN, "drop database only supported for isam:b"); + ret = -1; + } zebra_end_trans (zh); - return 0; + return ret; } int zebra_create_database (ZebraHandle zh, const char *database) @@ -1260,7 +1264,6 @@ int zebra_end_read (ZebraHandle zh) int zebra_begin_trans (ZebraHandle zh, int rw) { - yaz_log(LOG_LOG, "zebra_begin_trans rw=%d trans=%d", rw, zh->trans_no); if (!zh->res) { zh->errCode = 2; diff --git a/index/zrpn.c b/index/zrpn.c index d238961..6e11e9b 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -1,4 +1,4 @@ -/* $Id: zrpn.c,v 1.133 2003-04-15 20:48:04 adam Exp $ +/* $Id: zrpn.c,v 1.134 2003-09-05 10:51:17 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 Index Data Aps @@ -912,6 +912,10 @@ static int string_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, struct rpn_char_map_info rcmi; int space_split = complete_flag ? 0 : 1; + int bases_ok = 0; /* no of databases with OK attribute */ + int errCode = 0; /* err code (if any is not OK) */ + char *errString = 0; /* addinfo */ + rpn_char_map_prepare (zh->reg, reg_type, &rcmi); attr_init (&use, zapt, 1); use_value = attr_find_ex (&use, &curAttributeSet, &use_string); @@ -963,8 +967,8 @@ static int string_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, /* set was found, but value wasn't defined */ char val_str[32]; sprintf (val_str, "%d", use_value); - zh->errCode = 114; - zh->errString = nmem_strdup (stream, val_str); + errCode = 114; + errString = nmem_strdup (stream, val_str); } else { @@ -976,10 +980,10 @@ static int string_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, oident.value = curAttributeSet; oid_ent_to_oid (&oident, oid); - zh->errCode = 121; - zh->errString = nmem_strdup (stream, oident.desc); + errCode = 121; + errString = nmem_strdup (stream, oident.desc); } - return -1; + continue; } } for (local_attr = attp.local_attributes; local_attr; @@ -1009,10 +1013,12 @@ static int string_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, { char val_str[32]; sprintf (val_str, "%d", use_value); - zh->errCode = 114; - zh->errString = nmem_strdup (stream, val_str); - return -1; + errCode = 114; + errString = nmem_strdup (stream, val_str); + continue; } + bases_ok++; /* this has OK attributes */ + term_dict[prefix_len++] = ')'; term_dict[prefix_len++] = 1; term_dict[prefix_len++] = reg_type; @@ -1135,6 +1141,12 @@ static int string_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, break; } } + if (!bases_ok) + { + zh->errCode = errCode; + zh->errString = errString; + return -1; + } *term_sub = termp; logf (LOG_DEBUG, "%d positions", grep_info->isam_p_indx); return 1; @@ -1798,6 +1810,10 @@ static int numeric_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, const char *termp; struct rpn_char_map_info rcmi; + int bases_ok = 0; /* no of databases with OK attribute */ + int errCode = 0; /* err code (if any is not OK) */ + char *errString = 0; /* addinfo */ + rpn_char_map_prepare (zh->reg, reg_type, &rcmi); attr_init (&use, zapt, 1); use_value = attr_find_ex (&use, &curAttributeSet, &use_string); @@ -1838,12 +1854,12 @@ static int numeric_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, { char val_str[32]; sprintf (val_str, "%d", use_value); - zh->errString = nmem_strdup (stream, val_str); - zh->errCode = 114; + errString = nmem_strdup (stream, val_str); + errCode = 114; } else - zh->errCode = 121; - return -1; + errCode = 121; + continue; } } if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no])) @@ -1879,10 +1895,11 @@ static int numeric_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, { char val_str[32]; sprintf (val_str, "%d", use_value); - zh->errCode = 114; - zh->errString = nmem_strdup (stream, val_str); - return -1; + errCode = 114; + errString = nmem_strdup (stream, val_str); + continue; } + bases_ok++; term_dict[prefix_len++] = ')'; term_dict[prefix_len++] = 1; term_dict[prefix_len++] = reg_type; @@ -1893,6 +1910,12 @@ static int numeric_term (ZebraHandle zh, Z_AttributesPlusTerm *zapt, term_dst)) return 0; } + if (!bases_ok) + { + zh->errCode = errCode; + zh->errString = errString; + return -1; + } *term_sub = termp; logf (LOG_DEBUG, "%d positions", grep_info->isam_p_indx); return 1; @@ -2690,6 +2713,10 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, int ords[32], ord_no = 0; int ptr[32]; + int bases_ok = 0; /* no of databases with OK attribute */ + int errCode = 0; /* err code (if any is not OK) */ + char *errString = 0; /* addinfo */ + unsigned reg_id; char *search_type = NULL; char rank_type[128]; @@ -2758,13 +2785,12 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, { char val_str[32]; sprintf (val_str, "%d", use_value); - zh->errCode = 114; - zh->errString = odr_strdup (stream, val_str); + errCode = 114; + errString = odr_strdup (stream, val_str); } else - zh->errCode = 121; - *num_entries = 0; - return; + errCode = 121; + continue; } if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no])) { @@ -2773,6 +2799,7 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, *num_entries = 0; return; } + bases_ok++; for (local_attr = attp.local_attributes; local_attr && ord_no < 32; local_attr = local_attr->next) { @@ -2784,10 +2811,20 @@ void rpn_scan (ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt, ords[ord_no++] = ord; } } + if (!bases_ok && errCode) + { + zh->errCode = errCode; + zh->errString = errString; + *num_entries = 0; + } if (ord_no == 0) { + char val_str[32]; + sprintf (val_str, "%d", use_value); + zh->errCode = 114; + zh->errString = odr_strdup (stream, val_str); + *num_entries = 0; - zh->errCode = 113; return; } /* prepare dictionary scanning */ -- 1.7.10.4