X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=zutil%2Flogrpn.c;h=9d46fade26b432d8648f1de109011e05e119e35b;hp=0b1d5fadb411caeab3a6b400474ac42b45832257;hb=f512aa33473ae86f8e8efd8da749a82c398e87f0;hpb=b440dce0831a72bebe4f4821ab7771cc05e8facb diff --git a/zutil/logrpn.c b/zutil/logrpn.c index 0b1d5fa..9d46fad 100644 --- a/zutil/logrpn.c +++ b/zutil/logrpn.c @@ -1,61 +1,35 @@ /* - * Copyright (C) 1995-1999, Index Data + * Copyright (C) 1995-2001, Index Data * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss - * - * $Log: logrpn.c,v $ - * Revision 1.2 1999-08-27 09:40:33 adam - * Renamed logf function to yaz_log. Removed VC++ project files. - * - * Revision 1.1 1999/06/08 10:10:16 adam - * New sub directory zutil. Moved YAZ Compiler to be part of YAZ tree. - * - * Revision 1.1 1998/11/16 16:02:35 adam - * Added loggin utilies, log_rpn_query and log_scan_term. These used - * to be part of Zebra. - * - * - * - * Old logs from zlogs.c: - * - * Revision 1.9 1998/10/13 20:36:02 adam - * Changed "indent" format string in log messages. - * - * Revision 1.8 1998/04/02 14:35:29 adam - * First version of Zebra that works with compiled ASN.1. - * - * Revision 1.7 1998/01/29 13:40:11 adam - * Better logging for scan service. - * - * Revision 1.6 1997/09/29 09:06:41 adam - * Removed static var to make this module thread safe. - * - * Revision 1.5 1997/04/30 08:56:07 quinn - * null - * - * Revision 1.4 1996/10/08 09:41:25 quinn - * Fixed diagnostic. - * - * Revision 1.3 1996/03/20 09:36:40 adam - * Function dict_lookup_grep got extra parameter, init_pos, which marks - * from which position in pattern approximate pattern matching should occur. - * Approximate pattern matching is used in relevance=re-2. - * - * Revision 1.2 1996/01/03 16:22:11 quinn - * operator->roperator - * - * Revision 1.1 1995/11/16 17:00:55 adam - * Better logging of rpn query. * + * $Id: logrpn.c,v 1.10 2003-02-12 15:06:44 adam Exp $ */ #include -#include -#include -#include +#include +#include +static const char *relToStr(int v) +{ + const char *str = 0; + switch (v) + { + case 1: str = "Less than"; break; + case 2: str = "Less than or equal"; break; + case 3: str = "Equal"; break; + case 4: str = "Greater or equal"; break; + case 5: str = "Greater than"; break; + case 6: str = "Not equal"; break; + case 100: str = "Phonetic"; break; + case 101: str = "Stem"; break; + case 102: str = "Relevance"; break; + case 103: str = "AlwaysMatches"; break; + } + return str; +} static void attrStr (int type, int value, enum oid_value ast, char *str) { + const char *rstr; *str = '\0'; switch (ast) { @@ -68,41 +42,11 @@ static void attrStr (int type, int value, enum oid_value ast, char *str) sprintf (str, "use"); break; case 2: - switch (value) - { - case 1: - sprintf (str, "relation=Less than"); - break; - case 2: - sprintf (str, "relation=Less than or equal"); - break; - case 3: - sprintf (str, "relation=Equal"); - break; - case 4: - sprintf (str, "relation=Greater or equal"); - break; - case 5: - sprintf (str, "relation=Greater than"); - break; - case 6: - sprintf (str, "relation=Not equal"); - break; - case 100: - sprintf (str, "relation=Phonetic"); - break; - case 101: - sprintf (str, "relation=Stem"); - break; - case 102: - sprintf (str, "relation=Relevance"); - break; - case 103: - sprintf (str, "relation=AlwaysMatches"); - break; - default: - sprintf (str, "relation"); - } + rstr = relToStr(value); + if (rstr) + sprintf (str, "relation=%s", rstr); + else + sprintf (str, "relation=%d", value); break; case 3: switch (value) @@ -238,21 +182,13 @@ static void zlog_attributes (Z_AttributesPlusTerm *t, int level, { int of, i; char str[80]; -#ifdef ASN_COMPILED int num_attributes = t->attributes->num_attributes; -#else - int num_attributes = t->num_attributes; -#endif for (of = 0; of < num_attributes; of++) { const char *attset_name = ""; Z_AttributeElement *element; -#ifdef ASN_COMPILED element = t->attributes->attributes[of]; -#else - element = t->attributeList[of]; -#endif if (element->attributeSet) { oident *attrset; @@ -292,7 +228,10 @@ static void zlog_structure (Z_RPNStructure *zs, int level, enum oid_value ast) { if (zs->which == Z_RPNStructure_complex) { - switch (zs->u.complex->roperator->which) + Z_Operator *op = zs->u.complex->roperator; + const char *rstr = 0; + const char *unit = "private"; + switch (op->which) { case Z_Operator_and: yaz_log (LOG_LOG, "%*.0s and", level, ""); @@ -303,6 +242,35 @@ static void zlog_structure (Z_RPNStructure *zs, int level, enum oid_value ast) case Z_Operator_and_not: yaz_log (LOG_LOG, "%*.0s and-not", level, ""); break; + case Z_Operator_prox: + if (op->u.prox->which == Z_ProximityOperator_known) + { + switch(*op->u.prox->u.known) + { + case Z_ProxUnit_character: unit = "character"; break; + case Z_ProxUnit_word: unit = "word"; break; + case Z_ProxUnit_sentence: unit = "sentence"; break; + case Z_ProxUnit_paragraph: unit = "paragraph"; break; + case Z_ProxUnit_section: unit = "section"; break; + case Z_ProxUnit_chapter: unit = "chapter"; break; + case Z_ProxUnit_document: unit = "document"; break; + case Z_ProxUnit_element: unit = "element"; break; + case Z_ProxUnit_subelement: unit = "subelement"; break; + case Z_ProxUnit_elementType: unit = "elementType"; break; + case Z_ProxUnit_byte: unit = "byte"; break; + default: unit = "unknown"; break; + } + } + rstr = relToStr(*op->u.prox->relationType); + yaz_log (LOG_LOG, "%*.0s prox excl=%s dist=%d order=%s " + "rel=%s unit=%s", + level, "", op->u.prox->exclusion ? + (*op->u.prox->exclusion ? "T" : "F") : "N", + *op->u.prox->distance, + *op->u.prox->ordered ? "T" : "F", + rstr ? rstr : "unknown", + unit); + break; default: yaz_log (LOG_LOG, "%*.0s unknown complex", level, ""); return; @@ -316,14 +284,25 @@ static void zlog_structure (Z_RPNStructure *zs, int level, enum oid_value ast) { Z_AttributesPlusTerm *zapt = zs->u.simple->u.attributesPlusTerm; - if (zapt->term->which == Z_Term_general) + switch (zapt->term->which) { + case Z_Term_general: yaz_log (LOG_LOG, "%*.0s term '%.*s' (general)", level, "", zapt->term->u.general->len, zapt->term->u.general->buf); - } - else - { + break; + case Z_Term_characterString: + yaz_log (LOG_LOG, "%*.0s term '%s' (string)", level, "", + zapt->term->u.characterString); + break; + case Z_Term_numeric: + yaz_log (LOG_LOG, "%*.0s term '%d' (numeric)", level, "", + *zapt->term->u.numeric); + break; + case Z_Term_null: + yaz_log (LOG_LOG, "%*.0s term (null)", level, ""); + break; + default: yaz_log (LOG_LOG, "%*.0s term (not general)", level, ""); } zlog_attributes (zapt, level+2, ast); @@ -371,3 +350,16 @@ void log_scan_term (Z_AttributesPlusTerm *zapt, oid_value ast) yaz_log (LOG_LOG, "%*.0s term (not general)", level, ""); zlog_attributes (zapt, level+2, ast); } + +void yaz_log_zquery (Z_Query *q) +{ + switch (q->which) + { + case Z_Query_type_1: case Z_Query_type_101: + log_rpn_query (q->u.type_1); + break; + case Z_Query_type_104: + if (q->u.type_104->which == Z_External_CQL) + yaz_log (LOG_LOG, "CQL: %s", q->u.type_104->u.cql); + } +}