X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Frpn2solr.c;h=1a392043c7c18926d042866babf19643bb03723b;hp=332ae88c9d09d7fbc4c6581c922d3538b7ad03bf;hb=8cb8947e3a7bff4dbf8f124871cb4905df1adce7;hpb=31b5ce78766f1731a376e2f5e11f530261434345 diff --git a/src/rpn2solr.c b/src/rpn2solr.c index 332ae88..1a39204 100644 --- a/src/rpn2solr.c +++ b/src/rpn2solr.c @@ -228,9 +228,14 @@ static int emit_term(solr_transform_t ct, WRBUF w, Z_Term *term, Odr_int trunc) size_t i; int must_quote = 0; - for (i = 0 ; i < lterm; i++) - if (sterm[i] == ' ') - must_quote = 1; + if (lterm == 0) + must_quote = 1; + else + { + for (i = 0 ; i < lterm; i++) + if (sterm[i] == ' ') + must_quote = 1; + } if (must_quote) wrbuf_puts(w, "\""); if (trunc == 2 || trunc == 3) @@ -393,21 +398,32 @@ static int rpn2solr_structure(solr_transform_t ct, } } +int solr_transform_rpn2solr_stream_r(solr_transform_t ct, + WRBUF addinfo, + void (*pr)(const char *buf, void *client_data), + void *client_data, + Z_RPNQuery *q) +{ + int r = rpn2solr_structure(ct, pr, client_data, q->RPNStructure, + /* nested*/ 0, addinfo); + if (!r) + wrbuf_rewind(addinfo); + return r; +} + int solr_transform_rpn2solr_stream(solr_transform_t ct, void (*pr)(const char *buf, void *client_data), void *client_data, Z_RPNQuery *q) { - int r; WRBUF w = wrbuf_alloc(); - r = rpn2solr_structure(ct, pr, client_data, q->RPNStructure, 0, w); + int r = solr_transform_rpn2solr_stream_r(ct, w, pr, client_data, q); if (r) - solr_transform_set_error(ct, r, 0); + solr_transform_set_error(ct, r, wrbuf_len(w) ? wrbuf_cstr(w) : 0); wrbuf_destroy(w); return r; } - int solr_transform_rpn2solr_wrbuf(solr_transform_t ct, WRBUF w, Z_RPNQuery *q)