1 /* $Id: cqlutil.c,v 1.2 2004-03-10 16:34:29 adam Exp $
2 Copyright (C) 2002-2004
5 This file is part of the YAZ toolkit.
15 void cql_fputs(const char *buf, void *client_data)
17 FILE *f = (FILE *) client_data;
21 struct cql_node *cql_node_dup (struct cql_node *cp)
23 struct cql_node *cn = 0;
30 cn = cql_node_mk_sc(cp->u.st.index,
33 cn->u.st.modifiers = cql_node_dup(cp->u.st.modifiers);
34 cn->u.st.prefixes = cql_node_dup(cp->u.st.prefixes);
37 cn = cql_node_mk_boolean(cp->u.boolean.value);
38 cn->u.boolean.left = cql_node_dup(cp->u.boolean.left);
39 cn->u.boolean.right = cql_node_dup(cp->u.boolean.right);
40 cn->u.boolean.prefixes = cql_node_dup(cp->u.boolean.prefixes);
45 struct cql_node *cql_node_mk_sc(const char *index,
49 struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));
50 p->which = CQL_NODE_ST;
53 p->u.st.index = strdup(index);
56 p->u.st.term = strdup(term);
59 p->u.st.relation = strdup(relation);
60 p->u.st.modifiers = 0;
65 struct cql_node *cql_node_mk_boolean(const char *op)
67 struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));
68 p->which = CQL_NODE_BOOL;
69 p->u.boolean.value = 0;
71 p->u.boolean.value = strdup(op);
72 p->u.boolean.left = 0;
73 p->u.boolean.right = 0;
74 p->u.boolean.modifiers = 0;
75 p->u.boolean.prefixes = 0;
79 struct cql_node *cql_node_prefix(struct cql_node *n, const char *prefix,
82 struct cql_node **cpp = 0;
83 if (n->which == CQL_NODE_ST)
85 cpp = &n->u.st.prefixes;
87 else if (n->which == CQL_NODE_BOOL)
89 cpp = &n->u.boolean.prefixes;
93 struct cql_node *cp = cql_node_mk_sc(prefix, "=", uri);
94 cp->u.st.modifiers = *cpp;
100 void cql_node_destroy(struct cql_node *cn)
107 free (cn->u.st.index);
108 free (cn->u.st.relation);
109 free (cn->u.st.term);
110 cql_node_destroy(cn->u.st.modifiers);
111 cql_node_destroy(cn->u.st.prefixes);
114 free (cn->u.boolean.value);
115 cql_node_destroy(cn->u.boolean.left);
116 cql_node_destroy(cn->u.boolean.right);
117 cql_node_destroy(cn->u.boolean.prefixes);
118 cql_node_destroy(cn->u.boolean.modifiers);