cql_parser_strict
[yaz-moved-to-github.git] / include / yaz / cql.h
index 817e04b..cd36fe9 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2011 Index Data.
+ * Copyright (C) 1995-2013 Index Data.
  * All rights reserved.
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
  * All rights reserved.
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -41,10 +41,10 @@ typedef struct cql_parser *CQL_parser;
 
 /** \brief creates a CQL parser.
     \returns CCL parser
 
 /** \brief creates a CQL parser.
     \returns CCL parser
-    
+
     Returns CQL parser or NULL if parser could not be created.
  */
     Returns CQL parser or NULL if parser could not be created.
  */
-YAZ_EXPORT 
+YAZ_EXPORT
 CQL_parser cql_parser_create(void);
 
 /** \brief destroys a CQL parser.
 CQL_parser cql_parser_create(void);
 
 /** \brief destroys a CQL parser.
@@ -52,7 +52,7 @@ CQL_parser cql_parser_create(void);
 
     This function does nothing if NULL if received.
  */
 
     This function does nothing if NULL if received.
  */
-YAZ_EXPORT 
+YAZ_EXPORT
 void cql_parser_destroy(CQL_parser cp);
 
 /** \brief parses a CQL query (string)
 void cql_parser_destroy(CQL_parser cp);
 
 /** \brief parses a CQL query (string)
@@ -61,7 +61,7 @@ void cql_parser_destroy(CQL_parser cp);
     \retval 0 success
     \retval !=0 failure
  */
     \retval 0 success
     \retval !=0 failure
  */
-YAZ_EXPORT 
+YAZ_EXPORT
 int cql_parser_string(CQL_parser cp, const char *str);
 
 /** \brief parses CQL query (query stream)
 int cql_parser_string(CQL_parser cp, const char *str);
 
 /** \brief parses CQL query (query stream)
@@ -71,14 +71,14 @@ int cql_parser_string(CQL_parser cp, const char *str);
     \param client_data data to be passed to stream functions
     \retval 0 success
     \retval !=0 failure
     \param client_data data to be passed to stream functions
     \retval 0 success
     \retval !=0 failure
-    
+
     This function is similar to cql_parser_string but takes a
     functions to read each query character from a stream.
     This function is similar to cql_parser_string but takes a
     functions to read each query character from a stream.
-    
+
     The functions pointers getbytes, ungetbyte are similar to
     that known from stdios getc, ungetc.
 */
     The functions pointers getbytes, ungetbyte are similar to
     that known from stdios getc, ungetc.
 */
-YAZ_EXPORT 
+YAZ_EXPORT
 int cql_parser_stream(CQL_parser cp,
                       int (*getbyte)(void *client_data),
                       void (*ungetbyte)(int b, void *client_data),
 int cql_parser_stream(CQL_parser cp,
                       int (*getbyte)(void *client_data),
                       void (*ungetbyte)(int b, void *client_data),
@@ -89,13 +89,23 @@ int cql_parser_stream(CQL_parser cp,
     \param f file where query is read from
     \retval 0 success
     \retval !=0 failure
     \param f file where query is read from
     \retval 0 success
     \retval !=0 failure
-    
-    This function is similar to cql_parser_string but reads from 
+
+    This function is similar to cql_parser_string but reads from
     stdio FILE handle instead.
 */
 YAZ_EXPORT
 int cql_parser_stdio(CQL_parser cp, FILE *f);
 
     stdio FILE handle instead.
 */
 YAZ_EXPORT
 int cql_parser_stdio(CQL_parser cp, FILE *f);
 
+/** \brief configures strict mode
+    \param cp CQL parser
+    \param mode 1=enable strict mode, 0=disable strict mode
+
+    This function is similar to cql_parser_string but reads from
+    stdio FILE handle instead.
+*/
+YAZ_EXPORT
+void cql_parser_strict(CQL_parser cp, int mode);
+
 /** \brief Node type: search term */
 #define CQL_NODE_ST 1
 /** \brief Node type: boolean */
 /** \brief Node type: search term */
 #define CQL_NODE_ST 1
 /** \brief Node type: boolean */
@@ -132,7 +142,7 @@ struct cql_node {
             char *value;
             /** left operand */
             struct cql_node *left;
             char *value;
             /** left operand */
             struct cql_node *left;
-            /** right operand */ 
+            /** right operand */
             struct cql_node *right;
             /** modifiers (NULL for no list) */
             struct cql_node *modifiers;
             struct cql_node *right;
             /** modifiers (NULL for no list) */
             struct cql_node *modifiers;
@@ -224,7 +234,7 @@ struct cql_node *cql_parser_sort_result(CQL_parser cp);
     \param client_data data to be passed to pr function
  */
 YAZ_EXPORT
     \param client_data data to be passed to pr function
  */
 YAZ_EXPORT
-void cql_to_xml(struct cql_node *cn, 
+void cql_to_xml(struct cql_node *cn,
                 void (*pr)(const char *buf, void *client_data),
                 void *client_data);
 /** \brief converts CQL tree to XCQL and writes to file
                 void (*pr)(const char *buf, void *client_data),
                 void *client_data);
 /** \brief converts CQL tree to XCQL and writes to file
@@ -249,7 +259,7 @@ int cql_to_xml_buf(struct cql_node *cn, char *out, int max);
     \param client_data data to be passed to pr function
  */
 YAZ_EXPORT
     \param client_data data to be passed to pr function
  */
 YAZ_EXPORT
-int cql_to_ccl(struct cql_node *cn, 
+int cql_to_ccl(struct cql_node *cn,
                void (*pr)(const char *buf, void *client_data),
                void *client_data);
 
                void (*pr)(const char *buf, void *client_data),
                void *client_data);
 
@@ -260,6 +270,17 @@ int cql_to_ccl(struct cql_node *cn,
 YAZ_EXPORT
 void cql_to_ccl_stdio(struct cql_node *cn, FILE *f);
 
 YAZ_EXPORT
 void cql_to_ccl_stdio(struct cql_node *cn, FILE *f);
 
+/** \brief converts CQL tree to CCL and writes result to buffer
+    \param cn CQL node (tree)
+    \param out buffer
+    \param max size of buffer (max chars to write)
+    \retval 0 OK
+    \retval -1 conversion error
+    \retval -2 buffer too small (truncated)
+ */
+YAZ_EXPORT
+int cql_to_ccl_buf(struct cql_node *cn, char *out, int max);
+
 /** \brief stream handle for file (used by cql_to_xml_stdio) */
 YAZ_EXPORT
 void cql_fputs(const char *buf, void *client_data);
 /** \brief stream handle for file (used by cql_to_xml_stdio) */
 YAZ_EXPORT
 void cql_fputs(const char *buf, void *client_data);
@@ -302,7 +323,7 @@ cql_transform_t cql_transform_open_fname(const char *fname);
 YAZ_EXPORT
 int cql_transform_define_pattern(cql_transform_t ct, const char *pattern,
                                  const char *value);
 YAZ_EXPORT
 int cql_transform_define_pattern(cql_transform_t ct, const char *pattern,
                                  const char *value);
-    
+
 
 
 /** \brief destroys a CQL transform handle
 
 
 /** \brief destroys a CQL transform handle
@@ -407,7 +428,7 @@ int cql_strncmp(const char *s1, const char *s2, size_t n);
     \param cn CQL tree
     \param pr print function
     \param client_data data to be passed to pr function
     \param cn CQL tree
     \param pr print function
     \param client_data data to be passed to pr function
-    
+
     This will take CQL_NODE_SORT entries and conver them to
 
     path,schema,ascending,caseSensitive,missingValue
     This will take CQL_NODE_SORT entries and conver them to
 
     path,schema,ascending,caseSensitive,missingValue
@@ -434,7 +455,7 @@ int cql_sortby_to_sortkeys(struct cql_node *cn,
                            void (*pr)(const char *buf, void *client_data),
                            void *client_data);
 
                            void (*pr)(const char *buf, void *client_data),
                            void *client_data);
 
-/** \brief converts CQL sortby to sortkeys .. 
+/** \brief converts CQL sortby to sortkeys ..
     \param cn CQL tree
     \param out result buffer
     \param max size of buffer (allocated)
     \param cn CQL tree
     \param out result buffer
     \param max size of buffer (allocated)