X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=zutil%2Fpquery.c;h=46b221ad88f67f7fd2e68df6d4e2a14d888c8855;hb=ed00497d5186ebac1435b0f5e1ef2fe732cfa05c;hp=0df4c1b4a3d2703c50a54831fa5866ae9446450f;hpb=fd4adcc80d442f84c6a1894e890b1b6ccd02615e;p=yaz-moved-to-github.git diff --git a/zutil/pquery.c b/zutil/pquery.c index 0df4c1b..46b221a 100644 --- a/zutil/pquery.c +++ b/zutil/pquery.c @@ -1,8 +1,8 @@ /* - * 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.14 2002-05-01 10:22:52 adam Exp $ */ #include @@ -70,7 +70,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 +89,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 +260,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 +318,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 +332,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 +470,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 +585,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); }