ac2a4577091f2a928c082114873d469ffe6172e3
[yaz-moved-to-github.git] / util / cql2pqf.c
1 /* This file is part of the YAZ toolkit.
2  * Copyright (C) 1995-2008 Index Data
3  * See the file LICENSE for details.
4  */
5
6 #include <stdlib.h>
7 #include <stdio.h>
8
9 #include <yaz/cql.h>
10 #include <yaz/options.h>
11
12 static void usage(void)
13 {
14     fprintf (stderr, "usage\n cql2pqf [-n <n>] <properties> [<query>]\n");
15     exit (1);
16 }
17
18 int main(int argc, char **argv)
19 {
20     cql_transform_t ct;
21     int r = 0;
22     int i, iterations = 1;
23     CQL_parser cp = cql_parser_create();
24     char *query = 0;
25     char *fname = 0;
26
27     int ret;
28     char *arg;
29
30     while ((ret = options("n:", argv, argc, &arg)) != -2)
31     {
32         switch (ret)
33         {
34         case 0:
35             if (!fname)
36                 fname = arg;
37             else
38                 query = arg;
39             break;
40         case 'n':
41             iterations = atoi(arg);
42             break;
43         default:
44             usage();
45         }
46     }
47     if (!fname)
48         usage();
49     ct = cql_transform_open_fname(fname);
50     if (!ct)
51     {
52         fprintf (stderr, "failed to read properties %s\n", fname);
53         exit (1);
54     }
55
56     if (query)
57     {
58         for (i = 0; i<iterations; i++)
59             r = cql_parser_string(cp, query);
60     }
61     else
62         r = cql_parser_stdio(cp, stdin);
63
64     if (r)
65         fprintf (stderr, "Syntax error\n");
66     else
67     {
68         r = cql_transform_FILE(ct, cql_parser_result(cp), stdout);
69         printf("\n");
70         if (r)
71         {
72             const char *addinfo;
73             cql_transform_error(ct, &addinfo);
74             printf ("Transform error %d %s\n", r, addinfo ? addinfo : "");
75         }
76         else
77         {
78             FILE *null = fopen("/dev/null", "w");
79             for (i = 1; i<iterations; i++)
80                 cql_transform_FILE(ct, cql_parser_result(cp), null);
81             fclose(null);
82         }
83     }
84     cql_transform_close(ct);
85     cql_parser_destroy(cp);
86     return 0;
87 }
88 /*
89  * Local variables:
90  * c-basic-offset: 4
91  * indent-tabs-mode: nil
92  * End:
93  * vim: shiftwidth=4 tabstop=8 expandtab
94  */
95