Add YAZ_EXPORT to cql_transform_r fixes YAZ-793
[yaz-moved-to-github.git] / include / yaz / cql.h
index 148a9e0..bed8e85 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2011 Index Data.
+ * Copyright (C) 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:
@@ -33,6 +33,7 @@
 #define CQL_H_INCLUDED
 #include <stdio.h>
 #include <yaz/nmem.h>
+#include <yaz/wrbuf.h>
 
 YAZ_BEGIN_CDECL
 
@@ -41,10 +42,10 @@ typedef struct cql_parser *CQL_parser;
 
 /** \brief creates a CQL parser.
     \returns CCL parser
-    
+
     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.
@@ -52,7 +53,7 @@ CQL_parser cql_parser_create(void);
 
     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)
@@ -61,7 +62,7 @@ void cql_parser_destroy(CQL_parser cp);
     \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)
@@ -71,14 +72,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
-    
+
     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.
 */
-YAZ_EXPORT 
+YAZ_EXPORT
 int cql_parser_stream(CQL_parser cp,
                       int (*getbyte)(void *client_data),
                       void (*ungetbyte)(int b, void *client_data),
@@ -89,13 +90,23 @@ int cql_parser_stream(CQL_parser cp,
     \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);
 
+/** \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 */
@@ -132,7 +143,7 @@ struct cql_node {
             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;
@@ -224,7 +235,7 @@ struct cql_node *cql_parser_sort_result(CQL_parser cp);
     \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
@@ -249,7 +260,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
-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);
 
@@ -264,7 +275,9 @@ void cql_to_ccl_stdio(struct cql_node *cn, FILE *f);
     \param cn CQL node (tree)
     \param out buffer
     \param max size of buffer (max chars to write)
-    \returns length of resulting buffer
+    \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);
@@ -311,7 +324,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);
-    
+
 
 
 /** \brief destroys a CQL transform handle
@@ -320,7 +333,7 @@ int cql_transform_define_pattern(cql_transform_t ct, const char *pattern,
 YAZ_EXPORT
 void cql_transform_close(cql_transform_t ct);
 
-/** \brief tranforms PQF given a CQL tree
+/** \brief tranforms PQF given a CQL tree (NOT re-entrant)
     \param ct CQL transform handle
     \param cn CQL node tree
     \param pr print function
@@ -336,7 +349,24 @@ int cql_transform(cql_transform_t ct,
                   void (*pr)(const char *buf, void *client_data),
                   void *client_data);
 
-/** \brief transforms PQF given a CQL tree (from FILE)
+/** \brief tranforms PQF given a CQL tree (re-entrant)
+    \param ct CQL transform handle
+    \param cn CQL node tree
+    \param addinfo additional information (if error)
+    \param pr print function
+    \param client_data data to be passed to pr
+    \retval 0 success
+    \retval != 0 error code
+
+    The result is written to a user-defined stream.
+*/
+YAZ_EXPORT
+int cql_transform_r(cql_transform_t ct, struct cql_node *cn,
+                    WRBUF addinfo,
+                    void (*pr)(const char *buf, void *client_data),
+                    void *client_data);
+
+/** \brief transforms PQF given a CQL tree from FILE (not re-entrant)
     \param ct CQL transform handle
     \param cn CQL tree
     \param f FILE where output is written
@@ -350,7 +380,7 @@ YAZ_EXPORT
 int cql_transform_FILE(cql_transform_t ct,
                        struct cql_node *cn, FILE *f);
 
-/** \brief transforms PQF given a CQL tree (from FILE)
+/** \brief transforms PQF given a CQL tree from buffer (not re-entrant)
     \param ct CQL transform handle
     \param cn CQL tree
     \param out buffer for output
@@ -416,7 +446,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
-    
+
     This will take CQL_NODE_SORT entries and conver them to
 
     path,schema,ascending,caseSensitive,missingValue
@@ -443,7 +473,7 @@ int cql_sortby_to_sortkeys(struct cql_node *cn,
                            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)