X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fquerytowrbuf.c;h=80172ee3a1942689e49c2cfb089fede386708af7;hp=64b2ddc2def0c512431d658f9dc27d5d6ea94d29;hb=c21a01f2a1dfff7f62636b251d4d129a9f0fbeec;hpb=7a4064cd15f6c6b34c1180e1bc51f0d0e90da320 diff --git a/src/querytowrbuf.c b/src/querytowrbuf.c index 64b2ddc..80172ee 100644 --- a/src/querytowrbuf.c +++ b/src/querytowrbuf.c @@ -1,13 +1,13 @@ -/* - * Copyright (C) 1995-2007, Index Data ApS - * All rights reserved. - * - * $Id: querytowrbuf.c,v 1.9 2007-04-12 13:52:57 adam Exp $ +/* This file is part of the YAZ toolkit. + * Copyright (C) 1995-2010 Index Data + * See the file LICENSE for details. */ - /** \file querytowrbuf.c - \brief Query to WRBUF (to strings) + \brief Convert Z39.50 Z_Query to PQF (as WRBUF string) */ +#if HAVE_CONFIG_H +#include +#endif #include #include @@ -16,7 +16,7 @@ #include #include -static void yaz_term_to_wrbuf(WRBUF b, const char *term, int len) +void yaz_encode_pqf_term(WRBUF b, const char *term, int len) { int i; for (i = 0; i < len; i++) @@ -41,46 +41,44 @@ static void yaz_attribute_element_to_wrbuf(WRBUF b, const Z_AttributeElement *element) { int i; - char oid_name_str[OID_STR_MAX]; - const char *setname = 0; - char *sep = " "; /* optional space after attrset name */ + + wrbuf_puts(b, "@attr "); if (element->attributeSet) { - setname = yaz_oid_to_string_buf(element->attributeSet, - 0, oid_name_str); - } - if (!setname) - { - setname = ""; - sep = ""; + char oid_name_str[OID_STR_MAX]; + const char *setname = yaz_oid_to_string_buf(element->attributeSet, + 0, oid_name_str); + if (setname) + { + wrbuf_puts(b, setname); + wrbuf_puts(b, " "); + } } + wrbuf_printf(b, ODR_INT_PRINTF "=", *element->attributeType); switch (element->which) { case Z_AttributeValue_numeric: - wrbuf_printf(b,"@attr %s%s%d=%d ", setname, sep, - *element->attributeType, *element->value.numeric); + wrbuf_printf(b, ODR_INT_PRINTF, *element->value.numeric); break; case Z_AttributeValue_complex: - wrbuf_printf(b,"@attr %s%s\"%d=", setname, sep, - *element->attributeType); for (i = 0; ivalue.complex->num_list; i++) { if (i) - wrbuf_printf(b,","); + wrbuf_printf(b, ","); if (element->value.complex->list[i]->which == Z_StringOrNumeric_string) - wrbuf_printf (b, "%s", - element->value.complex->list[i]->u.string); + wrbuf_printf(b, "%s", + element->value.complex->list[i]->u.string); else if (element->value.complex->list[i]->which == Z_StringOrNumeric_numeric) - wrbuf_printf (b, "%d", - *element->value.complex->list[i]->u.numeric); + wrbuf_printf(b, ODR_INT_PRINTF, + *element->value.complex->list[i]->u.numeric); } - wrbuf_printf(b, "\" "); break; default: - wrbuf_printf (b, "@attr 1=unknown "); + wrbuf_printf (b, "@attr 1=unknown"); } + wrbuf_puts(b, " "); } static const char *complex_op_name(const Z_Operator *op) @@ -110,16 +108,17 @@ static void yaz_apt_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt) switch (zapt->term->which) { case Z_Term_general: - yaz_term_to_wrbuf(b, (const char *)zapt->term->u.general->buf, - zapt->term->u.general->len); + yaz_encode_pqf_term(b, (const char *)zapt->term->u.general->buf, + zapt->term->u.general->len); break; case Z_Term_characterString: wrbuf_printf(b, "@term string "); - yaz_term_to_wrbuf(b, zapt->term->u.characterString, - strlen(zapt->term->u.characterString)); + yaz_encode_pqf_term(b, zapt->term->u.characterString, + strlen(zapt->term->u.characterString)); break; case Z_Term_numeric: - wrbuf_printf(b, "@term numeric %d ", *zapt->term->u.numeric); + wrbuf_printf(b, "@term numeric " ODR_INT_PRINTF " ", + *zapt->term->u.numeric); break; case Z_Term_null: wrbuf_printf(b, "@term null x"); @@ -144,7 +143,8 @@ static void yaz_rpnstructure_to_wrbuf(WRBUF b, const Z_RPNStructure *zs) else wrbuf_putc(b, '0'); - wrbuf_printf(b, " %d %d %d ", *op->u.prox->distance, + wrbuf_printf(b, " " ODR_INT_PRINTF " %d " + ODR_INT_PRINTF " ", *op->u.prox->distance, *op->u.prox->ordered, *op->u.prox->relationType); @@ -160,7 +160,7 @@ static void yaz_rpnstructure_to_wrbuf(WRBUF b, const Z_RPNStructure *zs) wrbuf_printf(b, "%d", op->u.prox->which); } if (op->u.prox->u.known) - wrbuf_printf(b, " %d ", *op->u.prox->u.known); + wrbuf_printf(b, " " ODR_INT_PRINTF " ", *op->u.prox->u.known); else wrbuf_printf(b, " 0 "); } @@ -174,8 +174,8 @@ static void yaz_rpnstructure_to_wrbuf(WRBUF b, const Z_RPNStructure *zs) else if (zs->u.simple->which == Z_Operand_resultSetId) { wrbuf_printf(b, "@set "); - yaz_term_to_wrbuf(b, zs->u.simple->u.resultSetId, - strlen(zs->u.simple->u.resultSetId)); + yaz_encode_pqf_term(b, zs->u.simple->u.resultSetId, + strlen(zs->u.simple->u.resultSetId)); } else wrbuf_printf (b, "(unknown simple structure)"); @@ -225,16 +225,37 @@ void yaz_query_to_wrbuf(WRBUF b, const Z_Query *q) } void yaz_scan_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt, - const int *attrbute_set) + const Odr_oid *attrbute_set) { /* should print attr set here */ wrbuf_printf(b, "RPN "); yaz_apt_to_wrbuf(b, zapt); } +void wrbuf_diags(WRBUF b, int num_diagnostics, Z_DiagRec **diags) +{ + /* we only dump the first diag - that keeps the log cleaner. */ + wrbuf_printf(b," ERROR "); + if (diags[0]->which != Z_DiagRec_defaultFormat) + wrbuf_printf(b,"(diag not in default format?)"); + else + { + Z_DefaultDiagFormat *e=diags[0]->u.defaultFormat; + if (e->condition) + wrbuf_printf(b, ODR_INT_PRINTF " ",*e->condition); + else + wrbuf_printf(b, "?? "); + if ((e->which==Z_DefaultDiagFormat_v2Addinfo) && (e->u.v2Addinfo)) + wrbuf_printf(b,"%s ",e->u.v2Addinfo); + else if ((e->which==Z_DefaultDiagFormat_v3Addinfo) && (e->u.v3Addinfo)) + wrbuf_printf(b,"%s ",e->u.v3Addinfo); + } +} + /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab