X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=zutil%2Fyaz-ccl.c;h=440972f3231a9d3bc2304230dfc62cd35727717f;hb=356e1d9e8eeb92d9ca9e883c1048ad79e5a5c49f;hp=2740396d5813007e2812efb7d70409043fd6f136;hpb=e347736dafbae4bbd1eec56e3577353662aee332;p=yaz-moved-to-github.git diff --git a/zutil/yaz-ccl.c b/zutil/yaz-ccl.c index 2740396..440972f 100644 --- a/zutil/yaz-ccl.c +++ b/zutil/yaz-ccl.c @@ -1,10 +1,27 @@ /* - * Copyright (c) 1996-1999, Index Data. + * Copyright (c) 1996-2000, Index Data. * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * * $Log: yaz-ccl.c,v $ - * Revision 1.4 1999-12-20 15:20:13 adam + * Revision 1.9 2000-11-27 14:16:55 adam + * Fixed bug in ccl_rpn_simple regarding resultSetId's. + * + * Revision 1.8 2000/11/16 13:03:13 adam + * Function ccl_rpn_query sets attributeSet to Bib-1. + * + * Revision 1.7 2000/11/16 09:58:02 adam + * Implemented local AttributeSet setting for CCL field maps. + * + * Revision 1.6 2000/02/02 15:13:23 adam + * Minor change. + * + * Revision 1.5 2000/01/31 13:15:22 adam + * Removed uses of assert(3). Cleanup of ODR. CCL parser update so + * that some characters are not surrounded by spaces in resulting term. + * ILL-code updates. + * + * Revision 1.4 1999/12/20 15:20:13 adam * Implemented ccl_pquery to convert from CCL tree to prefix query. * * Revision 1.3 1999/11/30 13:47:12 adam @@ -40,7 +57,6 @@ #include #include #include -#include #include @@ -56,13 +72,10 @@ static Z_AttributesPlusTerm *ccl_rpn_term (ODR o, struct ccl_rpn_node *p) Z_AttributeElement **elements; zapt = (Z_AttributesPlusTerm *)odr_malloc (o, sizeof(*zapt)); - assert (zapt); term_octet = (Odr_oct *)odr_malloc (o, sizeof(*term_octet)); - assert (term_octet); term = (Z_Term *)odr_malloc (o, sizeof(*term)); - assert(term); for (attr = p->u.t.attr_list; attr; attr = attr->next) num++; @@ -77,11 +90,26 @@ static Z_AttributesPlusTerm *ccl_rpn_term (ODR o, struct ccl_rpn_node *p) { elements[i] = (Z_AttributeElement *) odr_malloc (o, sizeof(**elements)); - assert (elements[i]); elements[i]->attributeType = (int *)odr_malloc(o, sizeof(int)); *elements[i]->attributeType = attr->type; elements[i]->attributeSet = 0; + if (attr->set && *attr->set) + { + int value = oid_getvalbyname (attr->set); + + if (value != VAL_NONE) + { + int oid[OID_SIZE]; + struct oident ident; + + ident.oclass = CLASS_ATTSET; + ident.proto = PROTO_Z3950; + ident.value = value; + elements[i]->attributeSet = + odr_oiddup (o, oid_ent_to_oid (&ident, oid)); + } + } elements[i]->which = Z_AttributeValue_numeric; elements[i]->value.numeric = (int *)odr_malloc (o, sizeof(int)); @@ -111,7 +139,6 @@ static Z_Operand *ccl_rpn_simple (ODR o, struct ccl_rpn_node *p) Z_Operand *zo; zo = (Z_Operand *)odr_malloc (o, sizeof(*zo)); - assert (zo); switch (p->kind) { @@ -121,10 +148,10 @@ static Z_Operand *ccl_rpn_simple (ODR o, struct ccl_rpn_node *p) break; case CCL_RPN_SET: zo->which = Z_Operand_resultSetId; - zo->u.resultSetId = p->u.setname; + zo->u.resultSetId = odr_strdup (o, p->u.setname); break; default: - assert (0); + return 0; } return zo; } @@ -135,9 +162,7 @@ static Z_Complex *ccl_rpn_complex (ODR o, struct ccl_rpn_node *p) Z_Operator *zo; zc = (Z_Complex *)odr_malloc (o, sizeof(*zc)); - assert (zc); zo = (Z_Operator *)odr_malloc (o, sizeof(*zo)); - assert (zo); zc->roperator = zo; switch (p->kind) @@ -185,7 +210,7 @@ static Z_Complex *ccl_rpn_complex (ODR o, struct ccl_rpn_node *p) #endif break; default: - assert (0); + return 0; } zc->s1 = ccl_rpn_structure (o, p->u.p[0]); zc->s2 = ccl_rpn_structure (o, p->u.p[1]); @@ -197,7 +222,6 @@ static Z_RPNStructure *ccl_rpn_structure (ODR o, struct ccl_rpn_node *p) Z_RPNStructure *zs; zs = (Z_RPNStructure *)odr_malloc (o, sizeof(*zs)); - assert (zs); switch (p->kind) { case CCL_RPN_AND: @@ -213,7 +237,7 @@ static Z_RPNStructure *ccl_rpn_structure (ODR o, struct ccl_rpn_node *p) zs->u.simple = ccl_rpn_simple (o, p); break; default: - assert (0); + return 0; } return zs; } @@ -221,10 +245,14 @@ static Z_RPNStructure *ccl_rpn_structure (ODR o, struct ccl_rpn_node *p) Z_RPNQuery *ccl_rpn_query (ODR o, struct ccl_rpn_node *p) { Z_RPNQuery *zq; + oident bib1; + int oid[OID_SIZE]; + bib1.proto = PROTO_Z3950; + bib1.oclass = CLASS_ATTSET; + bib1.value = VAL_BIB1; zq = (Z_RPNQuery *)odr_malloc (o, sizeof(*zq)); - assert (zq); - zq->attributeSetId = NULL; + zq->attributeSetId = odr_oiddup (o, oid_ent_to_oid (&bib1, oid)); zq->RPNStructure = ccl_rpn_structure (o, p); return zq; } @@ -253,7 +281,7 @@ static void ccl_pquery_complex (WRBUF w, struct ccl_rpn_node *p) wrbuf_puts(w, "@prox 0 2 0 1 known 2 "); break; default: - assert(0); + wrbuf_puts(w, "@ bad op (unknown) "); }; ccl_pquery(w, p->u.p[0]); ccl_pquery(w, p->u.p[1]); @@ -287,7 +315,5 @@ void ccl_pquery (WRBUF w, struct ccl_rpn_node *p) wrbuf_puts (w, p->u.t.term); wrbuf_puts (w, "} "); break; - default: - assert (0); - }; + } }