1 /* $Id: cql.h,v 1.4 2003-05-27 09:46:26 mike Exp $
2 Copyright (C) 2002-2003
5 This file is part of the YAZ toolkit.
10 #ifndef CQL_H_INCLUDED
11 #define CQL_H_INCLUDED
13 #include <yaz/yconfig.h>
15 typedef struct cql_parser *CQL_parser;
20 * creates a CQL parser.
22 * Returns CQL parser or NULL if parser could not be created.
25 CQL_parser cql_parser_create(void);
31 * Destroy CQL parser. This function does nothing if
32 * NULL pointer is received.
35 void cql_parser_destroy(CQL_parser cp);
40 * @str: A query string to be parsed.
42 * Parses a CQL query string.
44 * Returns 0 if parsing was succesful; non-zero (error code) if
48 int cql_parser_string(CQL_parser cp, const char *str);
53 * @getbyte: Handler to read one character (for parsing).
54 * @ungetbyte: Handler to unread one byte (for parsing).
55 * @client_data: User data associated with getbyte/ungetbyte handlers.
57 * Parses a CQL query from a user defined stream.
59 * Returns 0 if parsing was succesful; non-zero (error code) if
63 int cql_parser_stream(CQL_parser cp,
64 int (*getbyte)(void *client_data),
65 void (*ungetbyte)(int b, void *client_data),
71 * @f: FILE handler in read mode.
73 * Parses a CQL query from a file.
75 * Returns 0 if parsing was succesful; non-zero (error code) if
79 int cql_parser_stdio(CQL_parser cp, FILE *f);
82 #define CQL_NODE_BOOL 2
83 #define CQL_NODE_MOD 3
91 struct cql_node *modifiers;
92 struct cql_node *prefixes;
96 struct cql_node *left;
97 struct cql_node *right;
98 struct cql_node *modifiers;
99 struct cql_node *prefixes;
104 struct cql_node *next;
109 struct cql_properties;
111 struct cql_buf_write_info {
118 void cql_buf_write_handler (const char *b, void *client_data);
121 void cql_node_print(struct cql_node *cn);
123 struct cql_node *cql_node_mk_sc(const char *index,
124 const char *relation,
127 struct cql_node *cql_node_mk_boolean(const char *op);
129 void cql_node_destroy(struct cql_node *cn);
131 struct cql_node *cql_node_prefix(struct cql_node *n,
135 struct cql_node *cql_node_mk_mod(const char *name,
139 struct cql_node *cql_node_dup (struct cql_node *cp);
141 struct cql_node *cql_parser_result(CQL_parser cp);
144 void cql_to_xml(struct cql_node *cn,
145 void (*pr)(const char *buf, void *client_data),
148 void cql_to_xml_stdio(struct cql_node *cn, FILE *f);
150 int cql_to_xml_buf(struct cql_node *cn, char *out, int max);
153 struct cql_node *cql_node_mk_proxargs(const char *relation,
154 const char *distance,
156 const char *ordering);
160 void cql_fputs(const char *buf, void *client_data);
162 typedef struct cql_transform_t_ *cql_transform_t;
165 cql_transform_t cql_transform_open_FILE (FILE *f);
167 cql_transform_t cql_transform_open_fname(const char *fname);
169 void cql_transform_close(cql_transform_t ct);
172 void cql_transform_pr(cql_transform_t ct,
174 void (*pr)(const char *buf, void *client_data),
178 int cql_transform_FILE(cql_transform_t ct,
179 struct cql_node *cn, FILE *f);
182 int cql_transform_buf(cql_transform_t ct,
183 struct cql_node *cn, char *out, int max);
185 int cql_transform_error(cql_transform_t ct, const char **addinfo);
188 const char *cql_strerror(int code);