X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fquerytowrbuf.c;h=21f8e979ac7b89d9be113d2dc91deda35b49899b;hb=5bc2ee09e4dff0f872ce738a5327bced915e3474;hp=d52e37fde8717f974cc93ffcf29c2dbfcd7caccd;hpb=cee361c60ab22518b0864d46d2c7b2b472ad797d;p=yaz-moved-to-github.git diff --git a/src/querytowrbuf.c b/src/querytowrbuf.c index d52e37f..21f8e97 100644 --- a/src/querytowrbuf.c +++ b/src/querytowrbuf.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2011 Index Data + * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** \file querytowrbuf.c @@ -22,14 +22,23 @@ void yaz_encode_pqf_term(WRBUF b, const char *term, int len) for (i = 0; i < len; i++) if (strchr(" \"{", term[i])) break; - if (i == len && i) - wrbuf_write(b, term, len); + if (len > 0 && i == len) + { + if (term[0] == '@') + wrbuf_putc(b, '\\'); + for (i = 0; i < len; i++) + { + if (term[i] == '\\') + wrbuf_putc(b, '\\'); + wrbuf_putc(b, term[i]); + } + } else { wrbuf_putc(b, '"'); - for (i = 0; iattributeSet) { char oid_name_str[OID_STR_MAX]; - const char *setname = yaz_oid_to_string_buf(element->attributeSet, + const char *setname = yaz_oid_to_string_buf(element->attributeSet, 0, oid_name_str); if (setname) { @@ -56,13 +65,13 @@ static void yaz_attribute_element_to_wrbuf(WRBUF b, } } wrbuf_printf(b, ODR_INT_PRINTF "=", *element->attributeType); - switch (element->which) + switch (element->which) { case Z_AttributeValue_numeric: wrbuf_printf(b, ODR_INT_PRINTF, *element->value.numeric); break; case Z_AttributeValue_complex: - for (i = 0; ivalue.complex->num_list; i++) + for (i = 0; i < element->value.complex->num_list; i++) { if (i) wrbuf_puts(b, ","); @@ -71,7 +80,7 @@ static void yaz_attribute_element_to_wrbuf(WRBUF b, wrbuf_puts(b, element->value.complex->list[i]->u.string); else if (element->value.complex->list[i]->which == Z_StringOrNumeric_numeric) - wrbuf_printf(b, ODR_INT_PRINTF, + wrbuf_printf(b, ODR_INT_PRINTF, *element->value.complex->list[i]->u.numeric); } break; @@ -102,9 +111,9 @@ static void yaz_apt_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt) { int num_attributes = zapt->attributes->num_attributes; int i; - for (i = 0; iattributes->attributes[i]); - + switch (zapt->term->which) { case Z_Term_general: @@ -143,7 +152,7 @@ static void yaz_rpnstructure_to_wrbuf(WRBUF b, const Z_RPNStructure *zs) else wrbuf_putc(b, '0'); - wrbuf_printf(b, " " ODR_INT_PRINTF " %d " + wrbuf_printf(b, " " ODR_INT_PRINTF " %d " ODR_INT_PRINTF " ", *op->u.prox->distance, *op->u.prox->ordered, *op->u.prox->relationType); @@ -193,7 +202,7 @@ void yaz_rpnquery_to_wrbuf(WRBUF b, const Z_RPNQuery *rpn) 0, oid_name_str); if (oid_name) wrbuf_printf(b, "@attrset %s ", oid_name); - } + } yaz_rpnstructure_to_wrbuf(b, rpn->RPNStructure); wrbuf_chop_right(b); } @@ -204,7 +213,7 @@ void yaz_query_to_wrbuf(WRBUF b, const Z_Query *q) assert(b); switch (q->which) { - case Z_Query_type_1: + case Z_Query_type_1: case Z_Query_type_101: wrbuf_puts(b,"RPN "); yaz_rpnquery_to_wrbuf(b, q->u.type_1); @@ -244,7 +253,7 @@ void wrbuf_diags(WRBUF b, int num_diagnostics, Z_DiagRec **diags) wrbuf_puts(b,"(diag not in default format?)"); else { - Z_DefaultDiagFormat *e=diags[0]->u.defaultFormat; + Z_DefaultDiagFormat *e = diags[0]->u.defaultFormat; if (e->condition) wrbuf_printf(b, ODR_INT_PRINTF " ",*e->condition); else