1 /* $Id: srw-xcql.c,v 1.1 2003-01-06 08:20:28 adam Exp $
2 Copyright (C) 2002-2003
5 This file is part of the YAZ toolkit.
10 #include <yaz/srw-util.h>
12 struct cql_node *xcql_to_cqlnode(struct xcql__operandType *p)
14 struct cql_node *cn = 0;
15 if (p && p->searchClause)
17 cn = cql_node_mk_sc(p->searchClause->index,
18 p->searchClause->relation->value,
19 p->searchClause->term);
20 if (p->searchClause->relation->modifiers)
22 struct xcql__modifiersType *mods =
23 p->searchClause->relation->modifiers;
24 struct cql_node **cnp = &cn->u.st.modifiers;
27 for (i = 0; i < mods->__sizeModifier; i++)
29 *cnp = cql_node_mk_mod(mods->modifier[i]->type,
30 mods->modifier[i]->value);
31 cnp = &(*cnp)->u.mod.next;
34 if (p->searchClause->prefixes)
36 struct xcql__prefixesType *prefixes = p->searchClause->prefixes;
37 struct cql_node **cnp = &cn->u.st.prefixes;
40 for (i = 0; i < prefixes->__sizePrefix; i++)
42 *cnp = cql_node_mk_mod(prefixes->prefix[i]->name,
43 prefixes->prefix[i]->identifier);
44 cnp = &(*cnp)->u.mod.next;
48 else if (p && p->triple)
50 cn = cql_node_mk_boolean(p->triple->boolean->value);
52 if (p->triple->boolean->modifiers)
54 struct xcql__modifiersType *mods =
55 p->triple->boolean->modifiers;
56 struct cql_node **cnp = &cn->u.bool.modifiers;
59 for (i = 0; i < mods->__sizeModifier; i++)
61 *cnp = cql_node_mk_mod(mods->modifier[i]->type,
62 mods->modifier[i]->value);
63 cnp = &(*cnp)->u.mod.next;
66 if (p->triple->prefixes)
68 struct xcql__prefixesType *prefixes = p->triple->prefixes;
69 struct cql_node **cnp = &cn->u.bool.prefixes;
72 for (i = 0; i < prefixes->__sizePrefix; i++)
74 *cnp = cql_node_mk_mod(prefixes->prefix[i]->name,
75 prefixes->prefix[i]->identifier);
76 cnp = &(*cnp)->u.mod.next;
79 cn->u.bool.left = xcql_to_cqlnode(p->triple->leftOperand);
80 cn->u.bool.right = xcql_to_cqlnode(p->triple->rightOperand);