Don't set syntax to none if bad syntax is supplied
[yaz-moved-to-github.git] / client / client.c
index 3cfa3d5..bb3b465 100644 (file)
@@ -1,8 +1,8 @@
 /* 
- * Copyright (c) 1995-2002, Index Data
+ * Copyright (c) 1995-2003, Index Data
  * See the file LICENSE for details.
  *
- * $Id: client.c,v 1.176 2002-12-16 13:13:53 adam Exp $
+ * $Id: client.c,v 1.179 2003-01-27 21:31:35 adam Exp $
  */
 
 #include <stdio.h>
@@ -97,7 +97,8 @@ static int auto_reconnect = 0;
 typedef enum {
     QueryType_Prefix,
     QueryType_CCL,
-    QueryType_CCL2RPN
+    QueryType_CCL2RPN,
+    QueryType_CQL
 } QueryType;
 
 static QueryType queryType = QueryType_Prefix;
@@ -144,6 +145,7 @@ const char* query_type_as_string(QueryType q)
     case QueryType_Prefix: return "prefix (RPN sent to server)";
     case QueryType_CCL: return "CCL (CCL sent to server) ";
     case QueryType_CCL2RPN: return "CCL -> RPN (RPN sent to server)";
+    case QueryType_CQL: return "CQL (CQL sent to server)";
     default: 
         return "unknown Query type internal yaz-client error";
     }
@@ -693,7 +695,6 @@ static void display_record(Z_External *r)
                         
                         while (inbytesleft)
                         {
-                            int i;
                             size_t outbytesleft = sizeof(outbuf);
                             char *outp = outbuf;
                             size_t r = yaz_iconv (cd, (char**) &inp,
@@ -876,6 +877,7 @@ static int send_searchRequest(char *arg)
     Z_RPNQuery *RPNquery;
     Odr_oct ccl_query;
     YAZ_PQF_Parser pqf_parser;
+    Z_External *ext;
 
     if (queryType == QueryType_CCL2RPN)
     {
@@ -962,6 +964,16 @@ static int send_searchRequest(char *arg)
         query.u.type_1 = RPNquery;
         ccl_rpn_delete (rpn);
         break;
+    case QueryType_CQL:
+        query.which = Z_Query_type_104;
+        ext = odr_malloc(out, sizeof(*ext));
+        ext->direct_reference = odr_getoidbystr(out, "1.2.840.10003.16.2");
+        ext->indirect_reference = 0;
+        ext->descriptor = 0;
+        ext->which = Z_External_CQL;
+        ext->u.cql = odr_strdup(out, arg);
+        query.u.type_104 =  ext;
+        break;
     default:
         printf ("Unsupported query type\n");
         return 0;
@@ -2169,17 +2181,19 @@ int cmd_schema(char *arg)
 
 int cmd_format(char *arg)
 {
+    oid_value nsyntax;
     if (!arg || !*arg)
     {
         printf("Usage: format <recordsyntax>\n");
         return 0;
     }
-    recordsyntax = oid_getvalbyname (arg);
-    if (recordsyntax == VAL_NONE)
+    nsyntax = oid_getvalbyname (arg);
+    if (strcmp(arg, "none") && nsyntax == VAL_NONE)
     {
         printf ("unknown record syntax\n");
         return 0;
     }
+    recordsyntax = nsyntax;
     return 1;
 }
 
@@ -2226,12 +2240,15 @@ int cmd_querytype (char *arg)
         queryType = QueryType_Prefix;
     else if (!strcmp (arg, "ccl2rpn") || !strcmp (arg, "cclrpn"))
         queryType = QueryType_CCL2RPN;
+    else if (!strcmp(arg, "cql"))
+        queryType = QueryType_CQL;        
     else
     {
         printf ("Querytype must be one of:\n");
         printf (" prefix         - Prefix query\n");
         printf (" ccl            - CCL query\n");
         printf (" ccl2rpn        - CCL query converted to RPN\n");
+        printf (" cql            - CQL\n");
         return 0;
     }
     return 1;