36 int num_attr,
int max_attr,
37 Odr_int *attr_list,
char **attr_clist,
44 if (li->
lex_len >=
sizeof(buf)-1)
54 size_t len=strlen(src);
56 if (li->
lex_len == len+off && !memcmp(li->
lex_buf+off, src, len-off))
64 const char *sep_match;
72 if ((sep_match = strchr(li->
left_sep, **qptr)))
85 while (**qptr && **qptr != sep_char)
87 if (**qptr ==
'\\' && (*qptr)[1])
97 if (sep_char ==
' ' &&
130 if (*in ==
'\\' && len > 0)
185 return out - out_buf;
189 int num_attr,
Odr_int *attr_list,
190 char **attr_clist,
Odr_oid **attr_set)
195 if (!(cp = strchr(li->
lex_buf,
'=')) ||
199 if (attr_set[num_attr] == 0)
209 if (!(cp = strchr(li->
lex_buf,
'=')))
218 attr_set[num_attr] = attr_set[num_attr-1];
220 attr_set[num_attr] = 0;
231 for (i = cp - li->
lex_buf; i < li->lex_len; i++)
235 attr_list[2*num_attr+1] = 0;
236 attr_clist[num_attr] = (
char *)
odr_malloc(o, len+1);
238 attr_clist[num_attr][len] =
'\0';
241 attr_list[2*num_attr+1] =
odr_atoi(cp);
242 attr_clist[num_attr] = 0;
247 int num_attr,
Odr_int *attr_list,
248 char **attr_clist,
Odr_oid **attr_set)
265 memcpy(attr_tmp, attr_list, num_attr * 2 *
sizeof(*attr_tmp));
266 for (i = num_attr; --i >= 0; )
269 for (j = i+1; j<num_attr; j++)
270 if (attr_tmp[2*j] == attr_tmp[2*i])
371 int num_attr,
Odr_int *attr_list,
372 char **attr_clist,
Odr_oid **attr_set)
378 int num_attr,
Odr_int *attr_list,
390 rpn_term(li, o, num_attr, attr_list, attr_clist, attr_set)))
511 int num_attr,
int max_attr,
512 Odr_int *attr_list,
char **attr_clist,
550 attr_clist, attr_set)))
554 attr_clist, attr_set)))
587 int num_attr,
int max_attr,
604 attr_clist, attr_set)))
612 attr_clist, attr_set)))
622 if (num_attr >= max_attr)
628 attr_clist, attr_set))
634 attr_clist, attr_set);
640 attr_clist, attr_set);
652 char *attr_clist[512];
683 attr_array, attr_clist, attr_set)))
718 char *attr_clist[512];
740 *attributeSetP = top_set;
752 if (num_attr >= max_attr)
758 attr_clist, attr_set))
895 for (i = 0; i < num; i++)
912 *msg =
"no error";
break;
914 *msg =
"extra token";
break;
916 *msg =
"missing token";
break;
918 *msg =
"unknown attribute set";
break;
920 *msg =
"too many attributes";
break;
922 *msg =
"bad attribute specification";
break;
924 *msg =
"internal error";
break;
926 *msg =
"proximity error";
break;
928 *msg =
"bad integer";
break;
930 *msg =
"unknown error";
break;
void nmem_strsplit(NMEM nmem, const char *delim, const char *dstr, char ***darray, int *num)
allocates sub strings out of string using certain delimitors
Odr_null * odr_nullval(void)
char * odr_strdupn(ODR o, const char *str, size_t n)
Odr_int odr_atoi(const char *s)
Odr_bool * odr_booldup(ODR o, Odr_bool v)
char * odr_strdup(ODR o, const char *str)
Odr_int * odr_intdup(ODR o, Odr_int v)
void * odr_malloc(ODR o, size_t size)
Odr_oct * odr_create_Odr_oct(ODR o, const char *buf, int sz)
Odr_oid * odr_oiddup(ODR odr, const Odr_oid *o)
yaz_oid_db_t yaz_oid_std(void)
returns standard OID database
Odr_oid * yaz_string_to_oid_odr(yaz_oid_db_t oid_list, oid_class oclass, const char *name, ODR o)
creates ODR malloc'ed OID from string
const Odr_oid yaz_oid_attset_bib_1[]
static Z_AttributeList * get_attributeList(ODR o, int num_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set)
void yaz_pqf_destroy(YAZ_PQF_Parser p)
Z_FacetList * yaz_pqf_parse_facet_list(ODR o, const char *qbuf)
static int p_query_parse_attr(struct yaz_pqf_parser *li, ODR o, int num_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set)
static void pqf_parser_begin(struct yaz_pqf_parser *li, const char *buf)
static Z_Complex * rpn_complex(struct yaz_pqf_parser *li, ODR o, int num_attr, int max_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set)
static Z_FacetField * parse_facet(ODR odr, const char *facet)
YAZ_PQF_Parser yaz_pqf_create(void)
static int compare_term(struct yaz_pqf_parser *li, const char *src, size_t off)
static Z_RPNQuery * p_query_rpn_mk(ODR o, struct yaz_pqf_parser *li)
static Z_AttributesPlusTerm * rpn_term_attributes(struct yaz_pqf_parser *li, ODR o, Z_AttributeList *attributes)
Z_AttributeList * yaz_pqf_scan_attribute_list(YAZ_PQF_Parser p, ODR o, Odr_oid **attributeSetP, const char *qbuf)
static Odr_oid * query_oid_getvalbyname(struct yaz_pqf_parser *li, ODR o)
static Z_AttributeList * p_query_scan_attributes_mk(struct yaz_pqf_parser *li, ODR o, Odr_oid **attributeSetP)
Z_RPNQuery * p_query_rpn(ODR o, const char *qbuf)
static Z_Operand * rpn_simple(struct yaz_pqf_parser *li, ODR o, int num_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set)
int yaz_pqf_error(YAZ_PQF_Parser p, const char **msg, size_t *off)
static Z_AttributesPlusTerm * p_query_scan_mk(struct yaz_pqf_parser *li, ODR o, Odr_oid **attributeSetP)
Z_Term * z_Term_create(ODR o, int term_type, const char *buf, size_t len)
static Z_AttributesPlusTerm * rpn_term(struct yaz_pqf_parser *li, ODR o, int num_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set)
Z_AttributesPlusTerm * yaz_pqf_scan(YAZ_PQF_Parser p, ODR o, Odr_oid **attributeSetP, const char *qbuf)
static Z_ProximityOperator * rpn_proximity(struct yaz_pqf_parser *li, ODR o)
static int escape_string(char *out_buf, const char *in, int len)
static int query_token(struct yaz_pqf_parser *li)
static int lex(struct yaz_pqf_parser *li)
static void rpn_term_type(struct yaz_pqf_parser *li)
Z_RPNQuery * yaz_pqf_parse(YAZ_PQF_Parser p, ODR o, const char *qbuf)
static Z_RPNStructure * rpn_structure(struct yaz_pqf_parser *li, ODR o, int num_attr, int max_attr, Odr_int *attr_list, char **attr_clist, Odr_oid **attr_set)
Z_AttributeList * zget_AttributeList_use_string(ODR o, const char *name)
creates AttributeList with type=1(use) and string value
#define YAZ_PQF_ERROR_EXTRA
#define YAZ_PQF_ERROR_NONE
#define YAZ_PQF_ERROR_PROXIMITY
#define YAZ_PQF_ERROR_INTERNAL
#define YAZ_PQF_ERROR_ATTSET
#define YAZ_PQF_ERROR_BADATTR
#define YAZ_PQF_ERROR_MISSING
#define YAZ_PQF_ERROR_BAD_INTEGER
#define YAZ_PQF_ERROR_TOOMANY
struct yaz_pqf_parser * YAZ_PQF_Parser
Header for Z39.50 Protocol.
union Z_AttributeElement::@50 value
Z_ComplexAttribute * complex
Z_AttributeSetId * attributeSet
Z_AttributeElement ** attributes
Z_AttributeList * attributes
Z_StringOrNumeric ** list
Odr_int ** semanticAction
Z_AttributeList * attributes
Z_ResultSetId * resultSetId
Z_AttributesPlusTerm * attributesPlusTerm
Z_ProximityOperator * prox
union Z_ProximityOperator::@51 u
Z_AttributeSetId * attributeSetId
Z_RPNStructure * RPNStructure
union Z_RPNStructure::@46 u
union Z_StringOrNumeric::@72 u
Z_InternationalString * string
Z_InternationalString * characterString
#define xfree(x)
utility macro which calls xfree_f
#define xmalloc(x)
utility macro which calls malloc_f
#define Z_AttributeValue_numeric
#define Z_Operator_and_not
#define Z_Term_characterString
#define Z_ProximityOperator_private
#define Z_ProximityOperator_known
#define Z_AttributeValue_complex
#define Z_StringOrNumeric_string
#define Z_Operand_resultSetId
#define Z_RPNStructure_complex
#define Z_RPNStructure_simple