YAZ 5.35.1
cql.h
Go to the documentation of this file.
1/* This file is part of the YAZ toolkit.
2 * Copyright (C) Index Data.
3 * All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of Index Data nor the names of its contributors
13 * may be used to endorse or promote products derived from this
14 * software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
32#ifndef CQL_H_INCLUDED
33#define CQL_H_INCLUDED
34#include <stdio.h>
35#include <yaz/nmem.h>
36#include <yaz/wrbuf.h>
37
39
41typedef struct cql_parser *CQL_parser;
42
48YAZ_EXPORT
50
56YAZ_EXPORT
58
65YAZ_EXPORT
66int cql_parser_string(CQL_parser cp, const char *str);
67
82YAZ_EXPORT
84 int (*getbyte)(void *client_data),
85 void (*ungetbyte)(int b, void *client_data),
86 void *client_data);
87
97YAZ_EXPORT
98int cql_parser_stdio(CQL_parser cp, FILE *f);
99
107YAZ_EXPORT
108void cql_parser_strict(CQL_parser cp, int mode);
109
111#define CQL_NODE_ST 1
113#define CQL_NODE_BOOL 2
115#define CQL_NODE_SORT 3
116
119struct cql_node {
121 int which;
122 union {
124 struct {
126 char *index;
130 char *term;
132 char *relation;
139 } st;
141 struct {
143 char *value;
145 struct cql_node *left;
149 struct cql_node *modifiers;
152 struct {
153 char *index;
155 struct cql_node *next;
157 struct cql_node *modifiers;
161 } u;
162};
163
166struct cql_properties;
167
171 int max;
172 int off;
173 char *buf;
174};
175
178YAZ_EXPORT
179void cql_buf_write_handler(const char *b, void *client_data);
180
185YAZ_EXPORT
186void cql_node_print(struct cql_node *cn);
187
189YAZ_EXPORT
190struct cql_node *cql_node_mk_sc(NMEM nmem, const char *index,
191 const char *relation, const char *term);
192
197YAZ_EXPORT
198struct cql_node *cql_apply_prefix(NMEM nmem, struct cql_node *cn,
199 const char *prefix, const char *uri);
200
202YAZ_EXPORT
203struct cql_node *cql_node_mk_boolean(NMEM nmem, const char *op);
204
206YAZ_EXPORT
207struct cql_node *cql_node_mk_sort(NMEM nmem, const char *index,
208 struct cql_node *modifiers);
209
211YAZ_EXPORT
212void cql_node_destroy(struct cql_node *cn);
213
215YAZ_EXPORT
216struct cql_node *cql_node_dup (NMEM nmem, struct cql_node *cp);
217
222YAZ_EXPORT
224
229YAZ_EXPORT
231
237YAZ_EXPORT
238void cql_to_xml(struct cql_node *cn,
239 void (*pr)(const char *buf, void *client_data),
240 void *client_data);
245YAZ_EXPORT
246void cql_to_xml_stdio(struct cql_node *cn, FILE *f);
247
254YAZ_EXPORT
255int cql_to_xml_buf(struct cql_node *cn, char *out, int max);
256
262YAZ_EXPORT
263int cql_to_ccl(struct cql_node *cn,
264 void (*pr)(const char *buf, void *client_data),
265 void *client_data);
266
271YAZ_EXPORT
272void cql_to_ccl_stdio(struct cql_node *cn, FILE *f);
273
282YAZ_EXPORT
283int cql_to_ccl_buf(struct cql_node *cn, char *out, int max);
284
286YAZ_EXPORT
287void cql_fputs(const char *buf, void *client_data);
288
293
297YAZ_EXPORT
299
307YAZ_EXPORT
309
314YAZ_EXPORT
316
317
324YAZ_EXPORT
325int cql_transform_define_pattern(cql_transform_t ct, const char *pattern,
326 const char *value);
327
328
333YAZ_EXPORT
334int cql_transform_define_fname(cql_transform_t ct, const char *fname);
335
336
342YAZ_EXPORT
344
345
349YAZ_EXPORT
351
362YAZ_EXPORT
364 struct cql_node *cn,
365 void (*pr)(const char *buf, void *client_data),
366 void *client_data);
367
379YAZ_EXPORT
380int cql_transform_r(cql_transform_t ct, struct cql_node *cn,
382 void (*pr)(const char *buf, void *client_data),
383 void *client_data);
384
395YAZ_EXPORT
397 struct cql_node *cn, FILE *f);
398
407YAZ_EXPORT
409 struct cql_node *cn, char *out, int max);
410
416YAZ_EXPORT
417int cql_transform_error(cql_transform_t ct, const char **addinfo);
418
424YAZ_EXPORT
425void cql_transform_set_error(cql_transform_t ct, int error, const char *addinfo);
426
431YAZ_EXPORT
432const char *cql_strerror(int code);
433
437YAZ_EXPORT
438const char *cql_uri(void);
439
447YAZ_EXPORT
448int cql_strcmp(const char *s1, const char *s2);
449
458YAZ_EXPORT
459int cql_strncmp(const char *s1, const char *s2, size_t n);
460
487YAZ_EXPORT
488int cql_sortby_to_sortkeys(struct cql_node *cn,
489 void (*pr)(const char *buf, void *client_data),
490 void *client_data);
491
499YAZ_EXPORT
500int cql_sortby_to_sortkeys_buf(struct cql_node *cn, char *out, int max);
501
503
504#endif
505/* CQL_H_INCLUDED */
506/*
507 * Local variables:
508 * c-basic-offset: 4
509 * c-file-style: "Stroustrup"
510 * indent-tabs-mode: nil
511 * End:
512 * vim: shiftwidth=4 tabstop=8 expandtab
513 */
514
int cql_transform_FILE(cql_transform_t ct, struct cql_node *cn, FILE *f)
transforms PQF given a CQL tree from FILE (not re-entrant)
struct cql_node * cql_node_mk_sc(NMEM nmem, const char *index, const char *relation, const char *term)
creates a search clause node (st).
Definition cqlutil.c:55
void cql_node_print(struct cql_node *cn)
Prints a CQL node and all sub nodes. Hence this function prints the parse tree which is as returned b...
int cql_sortby_to_sortkeys(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
converts CQL sortby to sortkeys (ala versions 1.1)
int cql_to_ccl(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
converts CQL tree to CCL and writes to user-defined stream
Definition cql2ccl.c:249
struct cql_node * cql_node_mk_sort(NMEM nmem, const char *index, struct cql_node *modifiers)
creates a sort single spec node.
Definition cqlutil.c:91
cql_transform_t cql_transform_create(void)
creates a CQL transform handle
void cql_to_xml(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
converts CQL tree to XCQL and writes to user-defined stream
Definition xcqlutil.c:239
int cql_strcmp(const char *s1, const char *s2)
compares two CQL strings (ala strcmp)
Definition cqlutil.c:194
int cql_transform_define_FILE(cql_transform_t ct, FILE *f)
extends transform from opened file
int cql_strncmp(const char *s1, const char *s2, size_t n)
compares two CQL strings (ala strncmp)
Definition cqlutil.c:210
void cql_parser_strict(CQL_parser cp, int mode)
configures strict mode
Definition cql.c:1907
struct cql_transform_t_ * cql_transform_t
CQL transform handle. The transform describes how to convert from CQL to PQF (Type-1 AKA RPN).
Definition cql.h:292
struct cql_node * cql_apply_prefix(NMEM nmem, struct cql_node *cn, const char *prefix, const char *uri)
applies a prefix+uri to "unresolved" index and relation URIs. "unresolved" URIs are those nodes where...
Definition cqlutil.c:110
int cql_transform(cql_transform_t ct, struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
tranforms PQF given a CQL tree (NOT re-entrant)
cql_transform_t cql_transform_open_FILE(FILE *f)
creates a CQL transform handle from an opened file handle
struct cql_parser * CQL_parser
CQL parser handle (opaque pointer)
Definition cql.h:41
void cql_transform_set_error(cql_transform_t ct, int error, const char *addinfo)
sets error and addinfo for transform
cql_transform_t cql_transform_open_fname(const char *fname)
creates a CQL transform handle from a file
int cql_transform_define_fname(cql_transform_t ct, const char *fname)
extends transform from a file
int cql_transform_buf(cql_transform_t ct, struct cql_node *cn, char *out, int max)
transforms PQF given a CQL tree from buffer (not re-entrant)
void cql_transform_close(cql_transform_t ct)
destroys a CQL transform handle
void cql_to_xml_stdio(struct cql_node *cn, FILE *f)
converts CQL tree to XCQL and writes to file
Definition xcqlutil.c:246
void cql_fputs(const char *buf, void *client_data)
stream handle for file (used by cql_to_xml_stdio)
Definition cqlutil.c:18
struct cql_node * cql_parser_result(CQL_parser cp)
returns the parse tree of the most recently parsed CQL query.
Definition cql.c:1902
int cql_to_xml_buf(struct cql_node *cn, char *out, int max)
converts CQL tree to XCQL and writes result to buffer
Definition xcqlutil.c:264
struct cql_node * cql_parser_sort_result(CQL_parser cp)
returns the sortby tree of the most recently parsed CQL query.
int cql_parser_stream(CQL_parser cp, int(*getbyte)(void *client_data), void(*ungetbyte)(int b, void *client_data), void *client_data)
parses CQL query (query stream)
Definition cql.c:1864
void cql_node_destroy(struct cql_node *cn)
destroys a node and its children.
Definition cqlutil.c:173
int cql_to_ccl_buf(struct cql_node *cn, char *out, int max)
converts CQL tree to CCL and writes result to buffer
Definition cql2ccl.c:261
int cql_transform_define_pattern(cql_transform_t ct, const char *pattern, const char *value)
defines CQL transform pattern
void cql_parser_destroy(CQL_parser cp)
destroys a CQL parser.
Definition cql.c:1895
struct cql_node * cql_node_dup(NMEM nmem, struct cql_node *cp)
Definition cqlutil.c:24
int cql_transform_error(cql_transform_t ct, const char **addinfo)
returns additional information for last transform
CQL_parser cql_parser_create(void)
creates a CQL parser.
Definition cql.c:1880
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)
tranforms PQF given a CQL tree (re-entrant)
const char * cql_strerror(int code)
returns the CQL message corresponding to a given error code.
Definition cqlstrer.c:16
int cql_sortby_to_sortkeys_buf(struct cql_node *cn, char *out, int max)
converts CQL sortby to sortkeys ..
void cql_to_ccl_stdio(struct cql_node *cn, FILE *f)
converts CQL tree to CCL and writes to file
Definition cql2ccl.c:256
void cql_buf_write_handler(const char *b, void *client_data)
Handler for cql_buf_write_info.
Definition xcqlutil.c:251
const char * cql_uri(void)
returns the standard CQL context set URI.
Definition cqlutil.c:105
struct cql_node * cql_node_mk_boolean(NMEM nmem, const char *op)
creates a boolean node.
Definition cqlutil.c:78
int cql_parser_string(CQL_parser cp, const char *str)
parses a CQL query (string)
Definition cqlstring.c:35
int cql_parser_stdio(CQL_parser cp, FILE *f)
parses CQL query (from FILE)
Definition cqlstdio.c:34
Header for Nibble Memory functions.
Structure used by cql_buf_write_handler.
Definition cql.h:170
CQL parse tree (node)
Definition cql.h:119
struct cql_node::@10::@12 boolean
struct cql_node * right
Definition cql.h:147
char * value
Definition cql.h:143
char * relation_uri
Definition cql.h:134
struct cql_node::@10::@13 sort
struct cql_node * search
Definition cql.h:159
struct cql_node * next
Definition cql.h:155
struct cql_node::@10::@11 st
struct cql_node * extra_terms
Definition cql.h:138
union cql_node::@10 u
struct cql_node * modifiers
Definition cql.h:136
int which
Definition cql.h:121
char * relation
Definition cql.h:132
char * index
Definition cql.h:126
char * index_uri
Definition cql.h:128
struct cql_node * left
Definition cql.h:145
char * term
Definition cql.h:130
void * client_data
Definition cql.c:116
void(* ungetbyte)(int b, void *client_data)
Definition cql.c:115
int(* getbyte)(void *client_data)
Definition cql.c:114
string buffer
Definition wrbuf.h:43
Header for WRBUF (growing buffer)
#define YAZ_BEGIN_CDECL
Definition yconfig.h:56
#define YAZ_END_CDECL
Definition yconfig.h:57