X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=util%2Fcql2xcql.c;h=bad3f3e7d704b930fea794419842b0641fa47f0b;hp=5abdb57524b26b1baf5b8cf1382892b6c8704ae0;hb=5ae2f74ba9b27bb7e926d5908471ac79371f7823;hpb=379504a233e3e2cc85bca1e7b6d864f1395aec7c diff --git a/util/cql2xcql.c b/util/cql2xcql.c index 5abdb57..bad3f3e 100644 --- a/util/cql2xcql.c +++ b/util/cql2xcql.c @@ -1,14 +1,24 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2009 Index Data + * Copyright (C) 1995-2013 Index Data * See the file LICENSE for details. */ +#if HAVE_CONFIG_H +#include +#endif #include #include #include +#include #include +static void usage(const char *prog) +{ + fprintf(stderr, "%s: [-c] [-n iterations] [-s] [-S] [infile]\n", prog); + exit(1); +} + int main(int argc, char **argv) { CQL_parser cp; @@ -16,22 +26,38 @@ int main(int argc, char **argv) const char *fname = 0; int iterations = 1; int ret; + int convert_to_ccl = 0; char *arg; + char *prog = argv[0]; + int do_sortkeys = 0; + int do_strict = 0; - while ((ret = options("n:", argv, argc, &arg)) != -2) + while ((ret = options("cn:sS", argv, argc, &arg)) != YAZ_OPTIONS_EOF) { switch (ret) { case 0: fname = arg; break; + case 'c': + convert_to_ccl = 1; + break; case 'n': iterations = atoi(arg); break; + case 's': + do_sortkeys = 1; + break; + case 'S': + do_strict = 1; + break; + default: + usage(prog); } } cp = cql_parser_create(); + cql_parser_strict(cp, do_strict); if (fname) { int i; @@ -43,7 +69,26 @@ int main(int argc, char **argv) if (r) fprintf (stderr, "Syntax error\n"); else - cql_to_xml_stdio(cql_parser_result(cp), stdout); + { + if (convert_to_ccl) + { + cql_to_ccl_stdio(cql_parser_result(cp), stdout); + putchar('\n'); + } + else + cql_to_xml_stdio(cql_parser_result(cp), stdout); + if (do_sortkeys) + { + WRBUF w = wrbuf_alloc(); + r = cql_sortby_to_sortkeys(cql_parser_result(cp), + wrbuf_vp_puts, w); + if (r == 0) + printf("sortkeys: %s\n", wrbuf_cstr(w)); + else + fprintf(stderr, "failed to generate sortkeys\n"); + wrbuf_destroy(w); + } + } cql_parser_destroy(cp); return 0; }