X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=zutil%2Flogrpn.c;h=6da0070b9c9fa119d1492d2bf52c419284c84e9f;hb=94c77ca831e55b3dee31184347f25dd0583085d2;hp=c30b80d978e460cb5bdebb35ae42567baec1632f;hpb=fd4adcc80d442f84c6a1894e890b1b6ccd02615e;p=yaz-moved-to-github.git diff --git a/zutil/logrpn.c b/zutil/logrpn.c index c30b80d..6da0070 100644 --- a/zutil/logrpn.c +++ b/zutil/logrpn.c @@ -1,16 +1,35 @@ /* - * Copyright (C) 1995-2001, Index Data + * Copyright (C) 1995-2003, Index Data * All rights reserved. * - * $Id: logrpn.c,v 1.5 2001-11-13 23:00:43 adam Exp $ + * $Id: logrpn.c,v 1.11 2003-02-27 19:56:00 adam Exp $ */ #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) { @@ -23,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) @@ -154,6 +143,9 @@ static void attrStr (int type, int value, enum oid_value ast, char *str) case 103: sprintf (str, "truncation=re-2"); break; + case 104: + sprintf (str, "truncation=CCL"); + break; default: sprintf (str, "truncation"); } @@ -239,7 +231,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, ""); @@ -250,6 +245,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; @@ -263,14 +287,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); @@ -318,3 +353,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); + } +}