cql_parser_strict
[yaz-moved-to-github.git] / util / cql2xcql.c
index 5c70d7a..bad3f3e 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2011 Index Data
+ * Copyright (C) 1995-2013 Index Data
  * See the file LICENSE for details.
  */
 #if HAVE_CONFIG_H
 #include <stdlib.h>
 
 #include <yaz/cql.h>
+#include <yaz/wrbuf.h>
 #include <yaz/options.h>
 
 static void usage(const char *prog)
 {
-    fprintf(stderr, "%s: [-c] [-n iterations] [infile]\n", prog);
+    fprintf(stderr, "%s: [-c] [-n iterations] [-s] [-S] [infile]\n", prog);
     exit(1);
 }
 
@@ -28,8 +29,10 @@ int main(int argc, char **argv)
     int convert_to_ccl = 0;
     char *arg;
     char *prog = argv[0];
+    int do_sortkeys = 0;
+    int do_strict = 0;
 
-    while ((ret = options("cn:", argv, argc, &arg)) != -2)
+    while ((ret = options("cn:sS", argv, argc, &arg)) != YAZ_OPTIONS_EOF)
     {
         switch (ret)
         {
@@ -42,12 +45,19 @@ int main(int argc, char **argv)
         case 'n':
             iterations = atoi(arg);
             break;
+        case 's':
+            do_sortkeys = 1;
+            break;
+        case 'S':
+            do_strict = 1;
+            break;
         default:
-            usage(prog);            
+            usage(prog);
         }
     }
 
     cp = cql_parser_create();
+    cql_parser_strict(cp, do_strict);
     if (fname)
     {
         int i;
@@ -67,6 +77,17 @@ int main(int argc, char **argv)
         }
         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;