X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=zutil%2Fpquery.c;h=d17147edf788ac039a2ba2a43774ab1ede2c95be;hb=651ccb74d12f2968e791b3f411a6c55bca68428a;hp=0df4c1b4a3d2703c50a54831fa5866ae9446450f;hpb=fd4adcc80d442f84c6a1894e890b1b6ccd02615e;p=yaz-moved-to-github.git diff --git a/zutil/pquery.c b/zutil/pquery.c index 0df4c1b..d17147e 100644 --- a/zutil/pquery.c +++ b/zutil/pquery.c @@ -1,13 +1,14 @@ /* - * Copyright (c) 1995-2001, Index Data. + * Copyright (c) 1995-2002, Index Data. * See the file LICENSE for details. * - * $Id: pquery.c,v 1.11 2001-11-13 23:00:43 adam Exp $ + * $Id: pquery.c,v 1.15 2002-05-07 11:01:14 adam Exp $ */ #include #include #include +#include #include #include @@ -70,7 +71,13 @@ static int query_token (struct lex_info *li) ++(*qptr); } li->lex_buf = *qptr; - + + if (**qptr == li->escape_char && isdigit ((*qptr)[1])) + { + ++(li->lex_len); + ++(*qptr); + return 'l'; + } while (**qptr && **qptr != sep_char) { if (**qptr == '\\') @@ -83,7 +90,8 @@ static int query_token (struct lex_info *li) } if (**qptr) ++(*qptr); - if (li->lex_len >= 1 && li->lex_buf[0] == li->escape_char) + if (sep_char == ' ' && + li->lex_len >= 1 && li->lex_buf[0] == li->escape_char) { if (compare_term (li, "and", 1)) return 'a'; @@ -253,6 +261,7 @@ static Z_AttributesPlusTerm *rpn_term (struct lex_info *li, ODR o, elements[k]->attributeType = &attr_tmp[2*i]; elements[k]->attributeSet = yaz_oidval_to_z3950oid(o, CLASS_ATTSET, attr_set[i]); + if (attr_clist[i]) { elements[k]->which = Z_AttributeValue_complex; @@ -310,13 +319,13 @@ static Z_Operand *rpn_simple (struct lex_info *li, ODR o, oid_proto proto, if (!(zo->u.attributesPlusTerm = rpn_term (li, o, proto, num_attr, attr_list, attr_clist, attr_set))) - return NULL; + return 0; lex (li); break; case 's': lex (li); if (!li->query_look) - return NULL; + return 0; zo->which = Z_Operand_resultSetId; zo->u.resultSetId = (char *)odr_malloc (o, li->lex_len+1); memcpy (zo->u.resultSetId, li->lex_buf, li->lex_len); @@ -324,7 +333,7 @@ static Z_Operand *rpn_simple (struct lex_info *li, ODR o, oid_proto proto, lex (li); break; default: - return NULL; + return 0; } return zo; } @@ -462,7 +471,9 @@ static Z_RPNStructure *rpn_structure (struct lex_info *li, ODR o, return NULL; if (num_attr >= max_attr) return NULL; - p_query_parse_attr(li, o, num_attr, attr_list, attr_clist, attr_set); + if (!p_query_parse_attr(li, o, num_attr, attr_list, + attr_clist, attr_set)) + return 0; num_attr++; lex (li); return @@ -575,10 +586,12 @@ Z_AttributesPlusTerm *p_query_scan_mk (struct lex_info *li, { lex (li); if (!li->query_look) - return NULL; + return 0; if (num_attr >= max_attr) - return NULL; - p_query_parse_attr(li, o, num_attr, attr_list, attr_clist, attr_set); + return 0; + if (!p_query_parse_attr(li, o, num_attr, attr_list, + attr_clist, attr_set)) + return 0; num_attr++; lex (li); }