X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fquerytowrbuf.c;h=80172ee3a1942689e49c2cfb089fede386708af7;hp=56aa42b7a93dbf9a7a0edf662d649dd62491cb9a;hb=c21a01f2a1dfff7f62636b251d4d129a9f0fbeec;hpb=fe507b6b15788a3a8e58063d9dae52532a5229a5 diff --git a/src/querytowrbuf.c b/src/querytowrbuf.c index 56aa42b..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.10 2007-05-06 20:12:20 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,14 +225,14 @@ 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) +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 "); @@ -242,7 +242,7 @@ void wrbuf_diags(WRBUF b, int num_diagnostics,Z_DiagRec **diags) { Z_DefaultDiagFormat *e=diags[0]->u.defaultFormat; if (e->condition) - wrbuf_printf(b, "%d ",*e->condition); + wrbuf_printf(b, ODR_INT_PRINTF " ",*e->condition); else wrbuf_printf(b, "?? "); if ((e->which==Z_DefaultDiagFormat_v2Addinfo) && (e->u.v2Addinfo)) @@ -255,6 +255,7 @@ void wrbuf_diags(WRBUF b, int num_diagnostics,Z_DiagRec **diags) /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab