X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fquerytowrbuf.c;h=d5073657f4c8f35d95871ab6fc13e96b0d6b310d;hp=64b2ddc2def0c512431d658f9dc27d5d6ea94d29;hb=7b4adcc54d64c9196a8c19a7f69c850774b8776b;hpb=7a4064cd15f6c6b34c1180e1bc51f0d0e90da320 diff --git a/src/querytowrbuf.c b/src/querytowrbuf.c index 64b2ddc..d507365 100644 --- a/src/querytowrbuf.c +++ b/src/querytowrbuf.c @@ -1,12 +1,10 @@ -/* - * 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) */ #include @@ -16,7 +14,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++) @@ -57,11 +55,12 @@ static void yaz_attribute_element_to_wrbuf(WRBUF b, switch (element->which) { case Z_AttributeValue_numeric: - wrbuf_printf(b,"@attr %s%s%d=%d ", setname, sep, + wrbuf_printf(b,"@attr %s%s" ODR_INT_PRINTF "=" ODR_INT_PRINTF " ", + setname, sep, *element->attributeType, *element->value.numeric); break; case Z_AttributeValue_complex: - wrbuf_printf(b,"@attr %s%s\"%d=", setname, sep, + wrbuf_printf(b,"@attr %s%s\""ODR_INT_PRINTF "=", setname, sep, *element->attributeType); for (i = 0; ivalue.complex->num_list; i++) { @@ -73,7 +72,7 @@ static void yaz_attribute_element_to_wrbuf(WRBUF b, element->value.complex->list[i]->u.string); else if (element->value.complex->list[i]->which == Z_StringOrNumeric_numeric) - wrbuf_printf (b, "%d", + wrbuf_printf (b, ODR_INT_PRINTF, *element->value.complex->list[i]->u.numeric); } wrbuf_printf(b, "\" "); @@ -110,16 +109,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 +144,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 +161,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 +175,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 +226,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