X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=util%2Fcql2pqf.c;h=0baa17570cc19b2f78dc68b7df5c0ca5f379482a;hp=c2a404db5d57c11bcf24b6d040b5f7b5bfa80907;hb=5ef9ca5de57e415b34c21fe0d17a79f7b8e6b636;hpb=0c46d2e66bdeea1600e700124a81a5d0a65d349e diff --git a/util/cql2pqf.c b/util/cql2pqf.c index c2a404d..0baa175 100644 --- a/util/cql2pqf.c +++ b/util/cql2pqf.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2013 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H @@ -10,12 +10,17 @@ #include #include +#include #include #include static void usage(void) { - fprintf(stderr, "usage\n cql2pqf [-n ] [-r] []\n"); + fprintf(stderr, "usage\n cql2pqf [-n ] [-r] [-s] [-S] " + "[]\n"); + fprintf(stderr, " -r reverse conversion (RPN to Solr/CQL)\n"); + fprintf(stderr, " -s Solr instead of CQL\n"); + fprintf(stderr, " -S strict CQL 2.0\n"); exit(1); } @@ -26,12 +31,14 @@ int main(int argc, char **argv) char *query = 0; char *fname = 0; int reverse = 0; - int verbose = 1; + int solr = 0; + int verbose = 0; + int do_strict = 0; int ret; char *arg; - while ((ret = options("n:rv", argv, argc, &arg)) != -2) + while ((ret = options("n:rsSv", argv, argc, &arg)) != -2) { switch (ret) { @@ -47,6 +54,12 @@ int main(int argc, char **argv) case 'r': reverse = 1; break; + case 'S': + do_strict = 1; + break; + case 's': + solr = 1; + break; case 'v': verbose = 1; break; @@ -54,23 +67,32 @@ int main(int argc, char **argv) usage(); } } - if (!fname) - usage(); - if (!strcmp(fname, "-")) - ct = cql_transform_create(); - else - ct = cql_transform_open_fname(fname); - if (!ct) + if (fname) { - fprintf(stderr, "failed to read properties %s\n", fname); - exit(1); + ct = cql_transform_open_fname(fname); + if (!ct) + { + fprintf(stderr, "failed to read properties %s\n", fname); + exit(1); + } } + else + ct = cql_transform_create(); if (reverse) { + char buf[1024]; + if (!query) - usage(); - else + { + if (fgets(buf, sizeof buf, stdin)) + { + if (*buf && buf[strlen(buf)-1] == '\n') + buf[strlen(buf)-1] = '\0'; + query = buf; + } + } + if (query) { ODR odr = odr_createmem(ODR_ENCODE); YAZ_PQF_Parser pp = yaz_pqf_create(); @@ -81,9 +103,13 @@ int main(int argc, char **argv) } else { - int ret = cql_transform_rpn2cql_stream(ct, cql_fputs, + int ret = 0; + if (solr) + ret = solr_transform_rpn2solr_stream(ct, cql_fputs, + stdout, rpn); + else + ret = cql_transform_rpn2cql_stream(ct, cql_fputs, stdout, rpn); - if (ret) { const char *addinfo; @@ -102,6 +128,7 @@ int main(int argc, char **argv) CQL_parser cp = cql_parser_create(); int r = 0; + cql_parser_strict(cp, do_strict); if (query) { if (verbose) @@ -114,6 +141,10 @@ int main(int argc, char **argv) if (r) fprintf(stderr, "Syntax error\n"); + else if (solr) + { + printf("CQL to Solr not supported (supported is reverse -r)\n"); + } else { r = cql_transform_FILE(ct, cql_parser_result(cp), stdout);