X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fcqltransform.c;h=8253e5022ac8a4e86a9537ade71d1542f7b3e991;hp=90dcb37617c4cd334a3eb278d6c9a2c6be02d9a2;hb=9ddbdf848f115043940d3e2edc72d434ebd53a0d;hpb=9732f4e8ccecd91b43de8eea00b62830b65cc0c5 diff --git a/src/cqltransform.c b/src/cqltransform.c index 90dcb37..8253e50 100644 --- a/src/cqltransform.c +++ b/src/cqltransform.c @@ -762,10 +762,29 @@ static void emit_term(cql_transform_t ct, static void emit_terms(cql_transform_t ct, struct cql_node *cn, void (*pr)(const char *buf, void *client_data), - void *client_data) + void *client_data, + const char *op) { + struct cql_node *ne = cn->u.st.extra_terms; + if (ne) + { + (*pr)("@", client_data); + (*pr)(op, client_data); + (*pr)(" ", client_data); + } emit_term(ct, cn, cn->u.st.term, strlen(cn->u.st.term), pr, client_data); + for (; ne; ne = ne->u.st.extra_terms) + { + if (ne->u.st.extra_terms) + { + (*pr)("@", client_data); + (*pr)(op, client_data); + (*pr)(" ", client_data); + } + emit_term(ct, cn, ne->u.st.term, strlen(ne->u.st.term), + pr, client_data); + } } static void emit_wordlist(cql_transform_t ct, @@ -844,7 +863,7 @@ void cql_transform_r(cql_transform_t ct, else if (cn->u.st.relation && !cql_strcmp(cn->u.st.relation, "any")) emit_wordlist(ct, cn, pr, client_data, "or"); else - emit_terms(ct, cn, pr, client_data); + emit_terms(ct, cn, pr, client_data, "and"); break; case CQL_NODE_BOOL: (*pr)("@", client_data);