X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fcqltransform.c;h=2f2f35319f38edc9f94cf6d7afe3ee091c13a5b0;hp=5cb26cb178d42388ba535e6e71dd7f422987d31f;hb=74805d78e64e94e3b5e876c1fd2c34c294f43e28;hpb=900aea38294d60d4cbf1153f480b27155d292c7a diff --git a/src/cqltransform.c b/src/cqltransform.c index 5cb26cb..2f2f353 100644 --- a/src/cqltransform.c +++ b/src/cqltransform.c @@ -1,4 +1,4 @@ -/* $Id: cqltransform.c,v 1.27 2007-02-07 13:36:58 adam Exp $ +/* $Id: cqltransform.c,v 1.28 2007-03-29 11:14:11 mike Exp $ Copyright (C) 1995-2007, Index Data ApS Index Data Aps @@ -353,6 +353,18 @@ static const char *wcchar(const char *term, int length) } +/* ### checks for CQL relation-name rather than Type-1 attribute */ +static int has_modifier(struct cql_node *cn, const char *name) { + struct cql_node *mod; + for (mod = cn->u.st.modifiers; mod != 0; mod = mod->u.st.modifiers) { + if (!strcmp(mod->u.st.index, name)) + return 1; + } + + return 0; +} + + void emit_term(cql_transform_t ct, struct cql_node *cn, const char *term, int length, @@ -361,10 +373,11 @@ void emit_term(cql_transform_t ct, { int i; const char *ns = cn->u.st.index_uri; + int process_term = !has_modifier(cn, "regexp"); assert(cn->which == CQL_NODE_ST); - if (length > 0) + if (process_term && length > 0) { if (length > 1 && term[0] == '^' && term[length-1] == '^') { @@ -393,7 +406,7 @@ void emit_term(cql_transform_t ct, } } - if (length > 0) + if (process_term && length > 0) { /* Check for well-known globbing patterns that represent * simple truncation attributes as expected by, for example,