b9b5f4d5b0445311966aebcfd0e5a1cf57c68d72
[yaz-moved-to-github.git] / include / yaz / cql.h
1 /* $Id: cql.h,v 1.5 2003-12-16 14:36:28 adam Exp $
2    Copyright (C) 2002-2003
3    Index Data Aps
4
5 This file is part of the YAZ toolkit.
6
7 See the file LICENSE.
8 */
9
10 #ifndef CQL_H_INCLUDED
11 #define CQL_H_INCLUDED
12 #include <stdio.h>
13 #include <yaz/yconfig.h>
14
15 YAZ_BEGIN_CDECL
16
17 typedef struct cql_parser *CQL_parser;
18
19 /**
20  * cql_parser_create:
21  *
22  * creates a CQL parser.
23  *
24  * Returns CQL parser or NULL if parser could not be created.
25  */
26 YAZ_EXPORT 
27 CQL_parser cql_parser_create(void);
28
29 /**
30  * cql_parser_destroy:
31  * @cp:  A CQL parser
32  *
33  * Destroy CQL parser. This function does nothing if
34  * NULL pointer is received.
35  */
36 YAZ_EXPORT 
37 void cql_parser_destroy(CQL_parser cp);
38
39 /**
40  * cql_parser_string:
41  * @cp:  A CQL parser.
42  * @str:  A query string to be parsed.
43  *
44  * Parses a CQL query string.
45  *
46  * Returns 0 if parsing was succesful; non-zero (error code) if
47  * unsuccesful.
48  */
49 YAZ_EXPORT 
50 int cql_parser_string(CQL_parser cp, const char *str);
51
52 /**
53  * cql_parser_stream:
54  * @cp:  A CQL parser.
55  * @getbyte:  Handler to read one character (for parsing).
56  * @ungetbyte: Handler to unread one byte (for parsing).
57  * @client_data:  User data associated with getbyte/ungetbyte handlers.
58  *
59  * Parses a CQL query from a user defined stream.
60  *
61  * Returns 0 if parsing was succesful; non-zero (error code) if
62  * unsuccesful.
63  */
64 YAZ_EXPORT 
65 int cql_parser_stream(CQL_parser cp,
66                       int (*getbyte)(void *client_data),
67                       void (*ungetbyte)(int b, void *client_data),
68                       void *client_data);
69
70 /**
71  * cql_parser_stdio:
72  * @cp:  A CQL parser.
73  * @f: FILE handler in read mode.
74  *
75  * Parses a CQL query from a file.
76  *
77  * Returns 0 if parsing was succesful; non-zero (error code) if
78  * unsuccesful.
79  */
80 YAZ_EXPORT
81 int cql_parser_stdio(CQL_parser cp, FILE *f);
82
83 #define CQL_NODE_ST 1
84 #define CQL_NODE_BOOL 2
85 #define CQL_NODE_MOD 3
86 struct cql_node {
87     int which;
88     union {
89         struct {
90             char *index;
91             char *term;
92             char *relation;
93             struct cql_node *modifiers;
94             struct cql_node *prefixes;
95         } st;
96         struct {
97             char *value;
98             struct cql_node *left;
99             struct cql_node *right;
100             struct cql_node *modifiers;
101             struct cql_node *prefixes;
102         } boolean;
103         struct {
104             char *name;
105             char *value;
106             struct cql_node *next;
107         } mod;
108     } u;
109 };
110
111 struct cql_properties;
112
113 struct cql_buf_write_info {
114     int max;
115     int off;
116     char *buf;
117 };
118
119 YAZ_EXPORT
120 void cql_buf_write_handler (const char *b, void *client_data);
121
122 YAZ_EXPORT
123 void cql_node_print(struct cql_node *cn);
124 YAZ_EXPORT
125 struct cql_node *cql_node_mk_sc(const char *index,
126                                 const char *relation,
127                                 const char *term);
128 YAZ_EXPORT
129 struct cql_node *cql_node_mk_boolean(const char *op);
130 YAZ_EXPORT
131 void cql_node_destroy(struct cql_node *cn);
132 YAZ_EXPORT
133 struct cql_node *cql_node_prefix(struct cql_node *n, 
134                                  const char *prefix,
135                                  const char *uri);
136 YAZ_EXPORT
137 struct cql_node *cql_node_mk_mod(const char *name,
138                                  const char *value);
139
140 YAZ_EXPORT
141 struct cql_node *cql_node_dup (struct cql_node *cp);
142 YAZ_EXPORT
143 struct cql_node *cql_parser_result(CQL_parser cp);
144
145 YAZ_EXPORT
146 void cql_to_xml(struct cql_node *cn, 
147                 void (*pr)(const char *buf, void *client_data),
148                 void *client_data);
149 YAZ_EXPORT
150 void cql_to_xml_stdio(struct cql_node *cn, FILE *f);
151 YAZ_EXPORT
152 int cql_to_xml_buf(struct cql_node *cn, char *out, int max);
153
154 YAZ_EXPORT
155 struct cql_node *cql_node_mk_proxargs(const char *relation,
156                                       const char *distance,
157                                       const char *unit,
158                                       const char *ordering);
159
160
161 YAZ_EXPORT
162 void cql_fputs(const char *buf, void *client_data);
163
164 typedef struct cql_transform_t_ *cql_transform_t;
165
166 YAZ_EXPORT
167 cql_transform_t cql_transform_open_FILE (FILE *f);
168 YAZ_EXPORT
169 cql_transform_t cql_transform_open_fname(const char *fname);
170 YAZ_EXPORT
171 void cql_transform_close(cql_transform_t ct);
172
173 YAZ_EXPORT
174 void cql_transform_pr(cql_transform_t ct,
175                       struct cql_node *cn,
176                       void (*pr)(const char *buf, void *client_data),
177                       void *client_data);
178
179 YAZ_EXPORT
180 int cql_transform_FILE(cql_transform_t ct,
181                        struct cql_node *cn, FILE *f);
182
183 YAZ_EXPORT
184 int cql_transform_buf(cql_transform_t ct,
185                       struct cql_node *cn, char *out, int max);
186 YAZ_EXPORT
187 int cql_transform_error(cql_transform_t ct, const char **addinfo);
188
189 YAZ_EXPORT
190 const char *cql_strerror(int code);
191
192 YAZ_END_CDECL
193
194 #endif
195 /* CQL_H_INCLUDED */