X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=util%2Fcql2pqf.c;h=edf99315cd9c3ef5c3d59647427b639513a09fe8;hp=a63d30db898527ed5ac47cc89d2561d98a510734;hb=8007b02f1f71539935da4895cea16fac3422e64c;hpb=c6e47cbbff56f39f6d81b079ebaeac41d793d4d9 diff --git a/util/cql2pqf.c b/util/cql2pqf.c index a63d30d..edf9931 100644 --- a/util/cql2pqf.c +++ b/util/cql2pqf.c @@ -1,60 +1,139 @@ -/* $Id: cql2pqf.c,v 1.1 2003-10-27 12:21:39 adam Exp $ - Copyright (C) 2002-2003 - Index Data Aps - -This file is part of the YAZ toolkit. - -See the file LICENSE. -*/ +/* This file is part of the YAZ toolkit. + * Copyright (C) 1995-2009 Index Data + * See the file LICENSE for details. + */ #include #include -#include +#include +#include +#include + +static void usage(void) +{ + fprintf(stderr, "usage\n cql2pqf [-n ] [-r] []\n"); + exit(1); +} int main(int argc, char **argv) { cql_transform_t ct; - int r; - int i, it = 1; - CQL_parser cp = cql_parser_create(); + int i, iterations = 1; + char *query = 0; + char *fname = 0; + int reverse = 0; - if (argc < 2) + int ret; + char *arg; + + while ((ret = options("n:r", argv, argc, &arg)) != -2) { - fprintf (stderr, "usage\n cqltransform [] [interations]\n"); - exit (1); + switch (ret) + { + case 0: + if (!fname) + fname = arg; + else + query = arg; + break; + case 'r': + reverse = 1; + break; + case 'n': + iterations = atoi(arg); + break; + default: + usage(); + } } - ct = cql_transform_open_fname(argv[1]); + if (!fname) + usage(); + if (!strcmp(fname, "-")) + ct = cql_transform_create(); + else + ct = cql_transform_open_fname(fname); if (!ct) { - fprintf (stderr, "failed to read properties %s\n", argv[1]); - exit (1); + fprintf(stderr, "failed to read properties %s\n", fname); + exit(1); } - if (argc >= 4) - it = atoi(argv[3]); - for (i = 0; i= 3) - r = cql_parser_string(cp, argv[2]); - else - r = cql_parser_stdio(cp, stdin); - - if (r) - fprintf (stderr, "Syntax error\n"); + if (!query) + usage(); + else + { + ODR odr = odr_createmem(ODR_ENCODE); + YAZ_PQF_Parser pp = yaz_pqf_create(); + Z_RPNQuery *rpn = yaz_pqf_parse(pp, odr, query); + if (!rpn) + { + fprintf(stderr, "PQF syntax error\n"); + } + else + { + int ret = cql_transform_rpn2cql_stream(ct, cql_fputs, + stdout, rpn); + + if (ret) + { + const char *addinfo; + int r = cql_transform_error(ct, &addinfo); + printf("Transform error %d %s\n", r, addinfo ? addinfo : ""); + } + else + printf("\n"); + } + yaz_pqf_destroy(pp); + odr_destroy(odr); + } + } else { - r = cql_transform_FILE(ct, cql_parser_result(cp), stdout); - printf("\n"); + CQL_parser cp = cql_parser_create(); + int r = 0; + + if (query) + { + for (i = 0; i