From: Adam Dickmeiss Date: Wed, 3 Apr 2013 11:21:58 +0000 (+0200) Subject: Merge branch 'normal_cql' X-Git-Tag: v4.2.52~1 X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=commitdiff_plain;h=87ff4e1db83ca09c8996ba09cb0a66055b5f9409;hp=6c0bd6a620f90abcd498ceb5a5bb40ba15f19ad5 Merge branch 'normal_cql' --- diff --git a/src/cql.y b/src/cql.y index ea828dc..67e2f76 100644 --- a/src/cql.y +++ b/src/cql.y @@ -56,7 +56,7 @@ %} %pure_parser -%token PREFIX_NAME SIMPLE_STRING AND OR NOT PROX GE LE NE EXACT SORTBY +%token SIMPLE_STRING AND OR NOT PROX GE LE NE EXACT SORTBY %% @@ -145,12 +145,12 @@ searchClause: $$.cql = $3.cql; } | -searchTerm extraTerms { +searchTerm { struct cql_node *st = cql_node_dup(((CQL_parser) parm)->nmem, $0.rel); - st->u.st.extra_terms = $2.cql; st->u.st.term = nmem_strdup(((CQL_parser)parm)->nmem, $1.buf); $$.cql = st; } + | index relation modifiers { $$.rel = cql_node_mk_sc(((CQL_parser) parm)->nmem, $1.buf, $2.buf, 0); @@ -161,18 +161,6 @@ searchTerm extraTerms { } ; -extraTerms: -SIMPLE_STRING extraTerms { - struct cql_node *st = cql_node_mk_sc(((CQL_parser) parm)->nmem, - /* index */ 0, /* rel */ 0, $1.buf); - st->u.st.extra_terms = $2.cql; - $$.cql = st; -} -| -{ $$.cql = 0; } -; - - /* unary NOT search SIMPLE_STRING here .. */ boolean: @@ -201,7 +189,7 @@ modifiers '/' searchTerm relation_symbol searchTerm } ; -relation: PREFIX_NAME | relation_symbol; +relation: SIMPLE_STRING | relation_symbol; relation_symbol: '=' @@ -218,7 +206,6 @@ index: searchTerm: SIMPLE_STRING -| PREFIX_NAME | AND | OR | NOT @@ -338,11 +325,8 @@ int yylex(YYSTYPE *lval, void *vp) } else { - int relation_like = 0; while (c != 0 && !strchr(" \n()=<>/", c)) { - if (c == '.') - relation_like = 1; if (c == '\\') { putb(lval, cp, c); @@ -384,18 +368,6 @@ int yylex(YYSTYPE *lval, void *vp) lval->buf = "sortby"; return SORTBY; } - if (!cql_strcmp(lval->buf, "all")) - relation_like = 1; - if (!cql_strcmp(lval->buf, "any")) - relation_like = 1; - if (!cql_strcmp(lval->buf, "adj")) - relation_like = 1; - if (!cql_strcmp(lval->buf, "within")) - relation_like = 1; - if (!cql_strcmp(lval->buf, "encloses")) - relation_like = 1; - if (relation_like) - return PREFIX_NAME; } return SIMPLE_STRING; } diff --git a/src/cql2ccl.c b/src/cql2ccl.c index 81e2c5f..331b6db 100644 --- a/src/cql2ccl.c +++ b/src/cql2ccl.c @@ -91,6 +91,7 @@ static int node(struct cql_node *cn, const char *split_op = 0; const char *ccl_rel = 0; const char *rel = cn->u.st.relation; + const char *cp; if (cn->u.st.index && strcmp(cn->u.st.index, "cql.serverChoice")) @@ -121,38 +122,26 @@ static int node(struct cql_node *cn, /* unsupported relation */ return -1; } - for (; cn; cn = cn->u.st.extra_terms) + cp = cn->u.st.term; + while (1) { - const char *cp = cn->u.st.term; - while (1) + if (ccl_field && ccl_rel) { - if (ccl_field && ccl_rel) - { - pr(ccl_field, client_data); - pr(ccl_rel, client_data); - if (!split_op) - ccl_rel = 0; - } - pr_term(&cp, split_op ? 1 : 0, pr, client_data); - while (*cp == ' ') - cp++; - if (*cp == '\0') - break; - pr(" ", client_data); - if (split_op) - { - pr(split_op, client_data); - pr(" ", client_data); - } + pr(ccl_field, client_data); + pr(ccl_rel, client_data); + if (!split_op) + ccl_rel = 0; } - if (cn->u.st.extra_terms) + pr_term(&cp, split_op ? 1 : 0, pr, client_data); + while (*cp == ' ') + cp++; + if (*cp == '\0') + break; + pr(" ", client_data); + if (split_op) { + pr(split_op, client_data); pr(" ", client_data); - if (split_op) - { - pr(split_op, client_data); - pr(" ", client_data); - } } } return 0; diff --git a/src/cqltransform.c b/src/cqltransform.c index 8253e50..90dcb37 100644 --- a/src/cqltransform.c +++ b/src/cqltransform.c @@ -762,29 +762,10 @@ 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, - const char *op) + void *client_data) { - 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, @@ -863,7 +844,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, "and"); + emit_terms(ct, cn, pr, client_data); break; case CQL_NODE_BOOL: (*pr)("@", client_data); diff --git a/src/xcqlutil.c b/src/xcqlutil.c index fe75f0b..de6116c 100644 --- a/src/xcqlutil.c +++ b/src/xcqlutil.c @@ -188,16 +188,6 @@ static void cql_to_xml_r(struct cql_node *cn, pr_cdata(cn->u.st.term, pr, client_data); pr_n("\n", pr, client_data, 0); } - if (cn->u.st.extra_terms) - { - struct cql_node *n = cn->u.st.extra_terms; - for (; n; n = n->u.st.extra_terms) - { - pr_n("", pr, client_data, level+2); - pr_cdata(n->u.st.term, pr, client_data); - pr_n("\n", pr, client_data, 0); - } - } cql_sort_to_xml(sort_node, pr, client_data, level+2); pr_n("\n", pr, client_data, level); break; diff --git a/test/cql/11.1.err b/test/cql/11.1.err index e69de29..f83d884 100644 --- a/test/cql/11.1.err +++ b/test/cql/11.1.err @@ -0,0 +1 @@ +Syntax error diff --git a/test/cql/11.1.out b/test/cql/11.1.out index a8ff186..e69de29 100644 --- a/test/cql/11.1.out +++ b/test/cql/11.1.out @@ -1,8 +0,0 @@ - - cql.serverChoice - - = - - a - b - diff --git a/test/cql/11.2.out b/test/cql/11.2.out index aaa51fb..88c7cb3 100644 --- a/test/cql/11.2.out +++ b/test/cql/11.2.out @@ -1,9 +1,7 @@ - cql.serverChoice + a - = + b - a - b c diff --git a/test/cql/11.3.err b/test/cql/11.3.err index e69de29..f83d884 100644 --- a/test/cql/11.3.err +++ b/test/cql/11.3.err @@ -0,0 +1 @@ +Syntax error diff --git a/test/cql/11.3.out b/test/cql/11.3.out index 3a66149..e69de29 100644 --- a/test/cql/11.3.out +++ b/test/cql/11.3.out @@ -1,8 +0,0 @@ - - cql.serverChoice - - = - - a.b - c - diff --git a/test/cql/11.4.out b/test/cql/11.4.out index ef54784..b5c4126 100644 --- a/test/cql/11.4.out +++ b/test/cql/11.4.out @@ -1,9 +1,7 @@ - cql.serverChoice + and - = + b - and - b c diff --git a/test/cql/11.5.err b/test/cql/11.5.err index e69de29..f83d884 100644 --- a/test/cql/11.5.err +++ b/test/cql/11.5.err @@ -0,0 +1 @@ +Syntax error diff --git a/test/cql/11.5.out b/test/cql/11.5.out index 50f2571..e69de29 100644 --- a/test/cql/11.5.out +++ b/test/cql/11.5.out @@ -1,8 +0,0 @@ - - cql.serverChoice - - = - - all - a - diff --git a/test/cql/11.7.err b/test/cql/11.7.err index e69de29..f83d884 100644 --- a/test/cql/11.7.err +++ b/test/cql/11.7.err @@ -0,0 +1 @@ +Syntax error diff --git a/test/cql/11.7.out b/test/cql/11.7.out index 0d59eb1..e69de29 100644 --- a/test/cql/11.7.out +++ b/test/cql/11.7.out @@ -1,26 +0,0 @@ - - - and - - - - cql.serverChoice - - = - - dc.title - a - b - c - - - - - cql.serverChoice - - = - - d - - - diff --git a/test/cql2pqf/1.2.err b/test/cql2pqf/1.2.err index e69de29..f83d884 100644 --- a/test/cql2pqf/1.2.err +++ b/test/cql2pqf/1.2.err @@ -0,0 +1 @@ +Syntax error diff --git a/test/cql2pqf/1.2.out b/test/cql2pqf/1.2.out index 413ec53..c4d2fb1 100644 --- a/test/cql2pqf/1.2.out +++ b/test/cql2pqf/1.2.out @@ -1,2 +1 @@ Parsing CQL a b -@attr 6=1 @attr 2=3 @attr 4=1 @and @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "a" @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "b" diff --git a/test/test_cql2ccl.c b/test/test_cql2ccl.c index b52ad14..06a1c61 100644 --- a/test/test_cql2ccl.c +++ b/test/test_cql2ccl.c @@ -110,8 +110,7 @@ static void tst(void) YAZ_CHECK(tst_query("\\*", "\"*\"")); YAZ_CHECK(tst_query("\"\\*\"", "\"*\"")); - YAZ_CHECK(tst_query("a b", "\"a\" \"b\"")); - YAZ_CHECK(tst_query("ab bc", "\"ab\" \"bc\"")); + YAZ_CHECK(tst_query("\"a b\"", "\"a b\"")); YAZ_CHECK(tst_query("\\\\", "\"\\\\\"")); YAZ_CHECK(tst_query("\\\"", "\"\\\"\"")); @@ -131,17 +130,12 @@ static void tst(void) YAZ_CHECK(tst_query("title all \"\"", "title=\"\"")); YAZ_CHECK(tst_query("title all x", "title=\"x\"")); - YAZ_CHECK(tst_query("title all x y", "title=\"x\" and title=\"y\"")); YAZ_CHECK(tst_query("title all \"x y\"", "title=\"x\" and title=\"y\"")); YAZ_CHECK(tst_query("title any x", "title=\"x\"")); - YAZ_CHECK(tst_query("title any x y", "title=\"x\" or title=\"y\"")); YAZ_CHECK(tst_query("title any \"x y\"", "title=\"x\" or title=\"y\"")); YAZ_CHECK(tst_query("title = \"x y\"", "title=\"x y\"")); - YAZ_CHECK(tst_query("title = x y", "title=\"x\" \"y\"")); - - YAZ_CHECK(tst_query("title = x y z", "title=\"x\" \"y\" \"z\"")); YAZ_CHECK(tst_query("dc.title=encyclopedia prox dinosaurs", "(dc.title=\"encyclopedia\") % (\"dinosaurs\")"));