2 * Copyright (C) 1995-2001, Index Data
5 * $Id: logrpn.c,v 1.7 2002-07-25 12:48:54 adam Exp $
10 #include <yaz/logrpn.h>
12 static void attrStr (int type, int value, enum oid_value ast, char *str)
29 sprintf (str, "relation=Less than");
32 sprintf (str, "relation=Less than or equal");
35 sprintf (str, "relation=Equal");
38 sprintf (str, "relation=Greater or equal");
41 sprintf (str, "relation=Greater than");
44 sprintf (str, "relation=Not equal");
47 sprintf (str, "relation=Phonetic");
50 sprintf (str, "relation=Stem");
53 sprintf (str, "relation=Relevance");
56 sprintf (str, "relation=AlwaysMatches");
59 sprintf (str, "relation");
66 sprintf (str, "position=First in field");
69 sprintf (str, "position=First in any subfield");
72 sprintf (str, "position=Any position in field");
75 sprintf (str, "position");
82 sprintf (str, "structure=Phrase");
85 sprintf (str, "structure=Word");
88 sprintf (str, "structure=Key");
91 sprintf (str, "structure=Year");
94 sprintf (str, "structure=Date");
97 sprintf (str, "structure=Word list");
100 sprintf (str, "structure=Date (un)");
103 sprintf (str, "structure=Name (norm)");
106 sprintf (str, "structure=Name (un)");
109 sprintf (str, "structure=Structure");
112 sprintf (str, "structure=urx");
115 sprintf (str, "structure=free-form-text");
118 sprintf (str, "structure=document-text");
121 sprintf (str, "structure=local-number");
124 sprintf (str, "structure=string");
127 sprintf (str, "structure=numeric string");
130 sprintf (str, "structure");
137 sprintf (str, "truncation=Right");
140 sprintf (str, "truncation=Left");
143 sprintf (str, "truncation=Left&right");
146 sprintf (str, "truncation=Do not truncate");
149 sprintf (str, "truncation=Process #");
152 sprintf (str, "truncation=re-1");
155 sprintf (str, "truncation=re-2");
158 sprintf (str, "truncation");
165 sprintf (str, "completeness=Incomplete subfield");
168 sprintf (str, "completeness=Complete subfield");
171 sprintf (str, "completeness=Complete field");
174 sprintf (str, "completeness");
183 sprintf (str + strlen(str), " (%d=%d)", type, value);
185 sprintf (str, "%d=%d", type, value);
189 * zlog_attributes: print attributes of term
191 static void zlog_attributes (Z_AttributesPlusTerm *t, int level,
196 int num_attributes = t->attributes->num_attributes;
198 for (of = 0; of < num_attributes; of++)
200 const char *attset_name = "";
201 Z_AttributeElement *element;
202 element = t->attributes->attributes[of];
203 if (element->attributeSet)
206 attrset = oid_getentbyoid (element->attributeSet);
207 attset_name = attrset->desc;
209 switch (element->which)
211 case Z_AttributeValue_numeric:
212 attrStr (*element->attributeType,
213 *element->value.numeric, ast, str);
214 yaz_log (LOG_LOG, "%*.0s%s %s", level, "", attset_name, str);
216 case Z_AttributeValue_complex:
217 yaz_log (LOG_LOG, "%*.0s%s attributeType=%d complex",
218 level, "", attset_name, *element->attributeType);
219 for (i = 0; i<element->value.complex->num_list; i++)
221 if (element->value.complex->list[i]->which ==
222 Z_StringOrNumeric_string)
223 yaz_log (LOG_LOG, "%*.0s string: '%s'", level, "",
224 element->value.complex->list[i]->u.string);
225 else if (element->value.complex->list[i]->which ==
226 Z_StringOrNumeric_numeric)
227 yaz_log (LOG_LOG, "%*.0s numeric: '%d'", level, "",
228 *element->value.complex->list[i]->u.numeric);
232 yaz_log (LOG_LOG, "%.*s%s attribute unknown",
233 level, "", attset_name);
238 static void zlog_structure (Z_RPNStructure *zs, int level, enum oid_value ast)
240 if (zs->which == Z_RPNStructure_complex)
242 switch (zs->u.complex->roperator->which)
245 yaz_log (LOG_LOG, "%*.0s and", level, "");
248 yaz_log (LOG_LOG, "%*.0s or", level, "");
250 case Z_Operator_and_not:
251 yaz_log (LOG_LOG, "%*.0s and-not", level, "");
253 case Z_Operator_prox:
254 yaz_log (LOG_LOG, "%*.0s proximity", level, "");
257 yaz_log (LOG_LOG, "%*.0s unknown complex", level, "");
260 zlog_structure (zs->u.complex->s1, level+2, ast);
261 zlog_structure (zs->u.complex->s2, level+2, ast);
263 else if (zs->which == Z_RPNStructure_simple)
265 if (zs->u.simple->which == Z_Operand_APT)
267 Z_AttributesPlusTerm *zapt = zs->u.simple->u.attributesPlusTerm;
269 switch (zapt->term->which)
272 yaz_log (LOG_LOG, "%*.0s term '%.*s' (general)", level, "",
273 zapt->term->u.general->len,
274 zapt->term->u.general->buf);
276 case Z_Term_characterString:
277 yaz_log (LOG_LOG, "%*.0s term '%s' (string)", level, "",
278 zapt->term->u.characterString);
281 yaz_log (LOG_LOG, "%*.0s term '%d' (numeric)", level, "",
282 *zapt->term->u.numeric);
285 yaz_log (LOG_LOG, "%*.0s term (null)", level, "");
288 yaz_log (LOG_LOG, "%*.0s term (not general)", level, "");
290 zlog_attributes (zapt, level+2, ast);
292 else if (zs->u.simple->which == Z_Operand_resultSetId)
294 yaz_log (LOG_LOG, "%*.0s set '%s'", level, "",
295 zs->u.simple->u.resultSetId);
298 yaz_log (LOG_LOG, "%*.0s unknown simple structure", level, "");
301 yaz_log (LOG_LOG, "%*.0s unknown structure", level, "");
304 void log_rpn_query (Z_RPNQuery *rpn)
309 attrset = oid_getentbyoid (rpn->attributeSetId);
312 ast = attrset->value;
313 yaz_log (LOG_LOG, "RPN query. Type: %s", attrset->desc);
318 yaz_log (LOG_LOG, "RPN query. Unknown type");
320 zlog_structure (rpn->RPNStructure, 0, ast);
323 void log_scan_term (Z_AttributesPlusTerm *zapt, oid_value ast)
326 if (zapt->term->which == Z_Term_general)
328 yaz_log (LOG_LOG, "%*.0s term '%.*s' (general)", level, "",
329 zapt->term->u.general->len, zapt->term->u.general->buf);
332 yaz_log (LOG_LOG, "%*.0s term (not general)", level, "");
333 zlog_attributes (zapt, level+2, ast);