cqltransform.c File Reference

Implements CQL transform (CQL to RPN conversion). More...

#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <yaz/rpn2cql.h>
#include <yaz/xmalloc.h>
#include <yaz/diagsrw.h>
#include <yaz/tokenizer.h>
#include <yaz/wrbuf.h>
#include <yaz/z-core.h>
#include <yaz/matchstr.h>
#include <yaz/oid_db.h>
#include <yaz/log.h>

Go to the source code of this file.

Data Structures

struct  cql_prop_entry
struct  cql_transform_t_

Functions

cql_transform_t cql_transform_create (void)
 creates a CQL transform handle
static int cql_transform_parse_tok_line (cql_transform_t ct, const char *pattern, yaz_tok_parse_t tp)
int cql_transform_define_pattern (cql_transform_t ct, const char *pattern, const char *value)
 defines CQL transform pattern
cql_transform_t cql_transform_open_FILE (FILE *f)
 creates a CQL transform handle from am opened file handle
void cql_transform_close (cql_transform_t ct)
 destroys a CQL transform handle
cql_transform_t cql_transform_open_fname (const char *fname)
 creates a CQL transform handle from a file
static int compare_attr (Z_AttributeElement *a, Z_AttributeElement *b)
const char * cql_lookup_reverse (cql_transform_t ct, const char *category, Z_AttributeList *attributes)
 find a pattern that has a subset of attributes
static const char * cql_lookup_property (cql_transform_t ct, const char *pat1, const char *pat2, const char *pat3)
int cql_pr_attr_uri (cql_transform_t ct, const char *category, const char *uri, const char *val, const char *default_val, void(*pr)(const char *buf, void *client_data), void *client_data, int errcode)
int cql_pr_attr (cql_transform_t ct, const char *category, const char *val, const char *default_val, void(*pr)(const char *buf, void *client_data), void *client_data, int errcode)
static void cql_pr_int (int val, void(*pr)(const char *buf, void *client_data), void *client_data)
static int cql_pr_prox (cql_transform_t ct, struct cql_node *mods, void(*pr)(const char *buf, void *client_data), void *client_data)
static const char * wcchar (int start, const char *term, int length)
static int has_modifier (struct cql_node *cn, const char *name)
void emit_term (cql_transform_t ct, struct cql_node *cn, const char *term, int length, void(*pr)(const char *buf, void *client_data), void *client_data)
void emit_terms (cql_transform_t ct, struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data, const char *op)
void emit_wordlist (cql_transform_t ct, struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data, const char *op)
void cql_transform_r (cql_transform_t ct, struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
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
int cql_transform_FILE (cql_transform_t ct, struct cql_node *cn, FILE *f)
 transforms PQF given a CQL tree (from FILE)
int cql_transform_buf (cql_transform_t ct, struct cql_node *cn, char *out, int max)
 transforms PQF given a CQL tree (from FILE)
int cql_transform_error (cql_transform_t ct, const char **addinfo)
 returns additional information for last transform
void cql_transform_set_error (cql_transform_t ct, int error, const char *addinfo)
 sets error and addinfo for transform


Detailed Description

Implements CQL transform (CQL to RPN conversion).

Evaluation order of rules:

always relation structure position truncation index relationModifier

Definition in file cqltransform.c.


Function Documentation

static int compare_attr ( Z_AttributeElement a,
Z_AttributeElement b 
) [static]

static const char* cql_lookup_property ( cql_transform_t  ct,
const char *  pat1,
const char *  pat2,
const char *  pat3 
) [static]

const char* cql_lookup_reverse ( cql_transform_t  ct,
const char *  category,
Z_AttributeList attributes 
)

find a pattern that has a subset of attributes

Parameters:
ct CQL transform handle
category pattern category
attributes RPN attributes
Returns:
pattern value or NULL if not found

Definition at line 322 of file cqltransform.c.

References cql_prop_entry::attr_list, Z_AttributeList::attributes, compare_attr(), cql_transform_t_::entry, cql_prop_entry::next, Z_AttributeList::num_attributes, and cql_prop_entry::pattern.

Referenced by rpn2cql_attr().

int cql_pr_attr ( cql_transform_t  ct,
const char *  category,
const char *  val,
const char *  default_val,
void(*)(const char *buf, void *client_data)  pr,
void *  client_data,
int  errcode 
)

Definition at line 475 of file cqltransform.c.

References cql_pr_attr_uri().

Referenced by cql_transform_r(), and emit_term().

int cql_pr_attr_uri ( cql_transform_t  ct,
const char *  category,
const char *  uri,
const char *  val,
const char *  default_val,
void(*)(const char *buf, void *client_data)  pr,
void *  client_data,
int  errcode 
)

static void cql_pr_int ( int  val,
void(*)(const char *buf, void *client_data)  pr,
void *  client_data 
) [static]

Definition at line 486 of file cqltransform.c.

Referenced by cql_pr_prox().

static int cql_pr_prox ( cql_transform_t  ct,
struct cql_node mods,
void(*)(const char *buf, void *client_data)  pr,
void *  client_data 
) [static]

int cql_transform ( cql_transform_t  ct,
struct cql_node cn,
void(*)(const char *buf, void *client_data)  pr,
void *  client_data 
)

tranforms PQF given a CQL tree

Parameters:
ct CQL transform handle
cn CQL node tree
pr print function
client_data data to be passed to pr
Return values:
0 success
!= 0 error
The result is written to a user-defined stream.

Definition at line 885 of file cqltransform.c.

References cql_transform_t_::addinfo, cql_apply_prefix(), cql_strcmp(), cql_strncmp(), cql_transform_r(), cql_transform_t_::entry, cql_transform_t_::error, cql_prop_entry::next, nmem_create(), nmem_destroy(), cql_prop_entry::pattern, cql_prop_entry::value, and xfree.

Referenced by cql2pqf(), cql_transform_buf(), and cql_transform_FILE().

int cql_transform_buf ( cql_transform_t  ct,
struct cql_node cn,
char *  out,
int  max 
)

transforms PQF given a CQL tree (from FILE)

Parameters:
ct CQL transform handle
cn CQL tree
out buffer for output
max maximum bytes for output (size of buffer)
Return values:
0 success
!=0 failure (error code)

Definition at line 914 of file cqltransform.c.

References cql_transform_t_::addinfo, cql_buf_write_info::buf, cql_buf_write_handler(), cql_transform(), cql_transform_t_::error, cql_buf_write_info::max, cql_buf_write_info::off, xstrdup, and YAZ_SRW_TOO_MANY_CHARS_IN_QUERY.

Referenced by cql2pqf().

void cql_transform_close ( cql_transform_t  ct  ) 

cql_transform_t cql_transform_create ( void   ) 

creates a CQL transform handle

Returns:
transform handle or NULL for failure

Definition at line 52 of file cqltransform.c.

References cql_transform_t_::addinfo, cql_transform_t_::entry, cql_transform_t_::error, cql_transform_t_::nmem, nmem_create(), cql_transform_t_::tok_cfg, cql_transform_t_::w, wrbuf_alloc(), xmalloc, and yaz_tok_cfg_create().

Referenced by cql_transform_open_FILE().

int cql_transform_define_pattern ( cql_transform_t  ct,
const char *  pattern,
const char *  value 
)

defines CQL transform pattern

Parameters:
ct CQL transform handle
pattern pattern string
value pattern value
Returns:
0 for succes; -1 for failure

Definition at line 202 of file cqltransform.c.

References cql_transform_parse_tok_line(), cql_transform_t_::tok_cfg, yaz_tok_cfg_single_tokens(), yaz_tok_parse_buf(), and yaz_tok_parse_destroy().

int cql_transform_error ( cql_transform_t  ct,
const char **  addinfo 
)

returns additional information for last transform

Parameters:
ct CQL transform handle
addinfo additional info (result)
Returns:
error code

Definition at line 938 of file cqltransform.c.

References cql_transform_t_::addinfo, and cql_transform_t_::error.

Referenced by cql2pqf().

int cql_transform_FILE ( cql_transform_t  ct,
struct cql_node cn,
FILE *  f 
)

transforms PQF given a CQL tree (from FILE)

Parameters:
ct CQL transform handle
cn CQL tree
f FILE where output is written
Return values:
0 success
!=0 failure (error code)
The result is written to a file specified by FILE handle (which must be opened for writing.

Definition at line 909 of file cqltransform.c.

References cql_fputs(), and cql_transform().

cql_transform_t cql_transform_open_FILE ( FILE *  f  ) 

creates a CQL transform handle from am opened file handle

Parameters:
f file where transformation spec is read
Returns:
transform handle or NULL for failure
The transformation spec is read from a FILE handle which is assumed opened for reading.

Definition at line 213 of file cqltransform.c.

References cql_transform_close(), cql_transform_create(), cql_transform_parse_tok_line(), cql_prop_entry::pattern, cql_transform_t_::tok_cfg, cql_transform_t_::w, wrbuf_rewind(), xfree, xstrdup, yaz_tok_cfg_single_tokens(), YAZ_TOK_EOF, yaz_tok_move(), yaz_tok_parse_buf(), yaz_tok_parse_destroy(), yaz_tok_parse_string(), and YAZ_TOK_STRING.

Referenced by cql_transform_open_fname().

cql_transform_t cql_transform_open_fname ( const char *  fname  ) 

creates a CQL transform handle from a file

Parameters:
fname name of where transformation spec is read
Returns:
transform handle or NULL for failure

Definition at line 276 of file cqltransform.c.

References cql_transform_open_FILE().

Referenced by cql2pqf(), and xml_config_read().

static int cql_transform_parse_tok_line ( cql_transform_t  ct,
const char *  pattern,
yaz_tok_parse_t  tp 
) [static]

void cql_transform_r ( cql_transform_t  ct,
struct cql_node cn,
void(*)(const char *buf, void *client_data)  pr,
void *  client_data 
)

void cql_transform_set_error ( cql_transform_t  ct,
int  error,
const char *  addinfo 
)

sets error and addinfo for transform

Parameters:
ct CQL transform handle
error error code
addinfo additional info

Definition at line 944 of file cqltransform.c.

References cql_transform_t_::addinfo, cql_transform_t_::error, xfree, and xstrdup.

Referenced by cql_transform_rpn2cql_stream(), rpn2cql_simple(), and rpn2cql_structure().

void emit_term ( cql_transform_t  ct,
struct cql_node cn,
const char *  term,
int  length,
void(*)(const char *buf, void *client_data)  pr,
void *  client_data 
)

void emit_terms ( cql_transform_t  ct,
struct cql_node cn,
void(*)(const char *buf, void *client_data)  pr,
void *  client_data,
const char *  op 
)

Definition at line 751 of file cqltransform.c.

References emit_term(), cql_node::st, and cql_node::u.

Referenced by cql_transform_r().

void emit_wordlist ( cql_transform_t  ct,
struct cql_node cn,
void(*)(const char *buf, void *client_data)  pr,
void *  client_data,
const char *  op 
)

Definition at line 779 of file cqltransform.c.

References emit_term(), cql_node::st, and cql_node::u.

Referenced by cql_transform_r().

static int has_modifier ( struct cql_node cn,
const char *  name 
) [static]

Definition at line 599 of file cqltransform.c.

References cql_node::st, and cql_node::u.

Referenced by emit_term().

static const char* wcchar ( int  start,
const char *  term,
int  length 
) [static]

Definition at line 583 of file cqltransform.c.

Referenced by emit_term().


Generated on Mon Dec 29 12:08:46 2008 for YAZ by  doxygen 1.5.6