-/* $Id: cqlutil.c,v 1.9 2005-06-27 22:03:59 adam Exp $
- Copyright (C) 1995-2005, Index Data ApS
- Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE for details.
-*/
-
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2013 Index Data
+ * See the file LICENSE for details.
+ */
/**
* \file cqlutil.c
* \brief Implements CQL tree node utilities.
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdlib.h>
#include <string.h>
fputs(buf, f);
}
-struct cql_node *cql_node_dup (NMEM nmem, struct cql_node *cp)
+struct cql_node *cql_node_dup(NMEM nmem, struct cql_node *cp)
{
struct cql_node *cn = 0;
cp->u.st.relation,
cp->u.st.term);
cn->u.st.modifiers = cql_node_dup(nmem, cp->u.st.modifiers);
- cn->u.st.index_uri = cp->u.st.index_uri ?
+ cn->u.st.index_uri = cp->u.st.index_uri ?
nmem_strdup(nmem, cp->u.st.index_uri) : 0;
cn->u.st.relation_uri = cp->u.st.relation_uri ?
nmem_strdup(nmem, cp->u.st.relation_uri) : 0;
cn = cql_node_mk_boolean(nmem, cp->u.boolean.value);
cn->u.boolean.left = cql_node_dup(nmem, cp->u.boolean.left);
cn->u.boolean.right = cql_node_dup(nmem, cp->u.boolean.right);
+ break;
+ case CQL_NODE_SORT:
+ cn = cql_node_mk_sort(nmem, cp->u.sort.index, cp->u.sort.modifiers);
+ cn->u.sort.next = cql_node_dup(nmem, cp->u.sort.next);
+ cn->u.sort.search = cql_node_dup(nmem, cp->u.sort.search);
}
return cn;
}
p->u.st.relation = nmem_strdup(nmem, relation);
p->u.st.relation_uri = 0;
p->u.st.modifiers = 0;
+ p->u.st.extra_terms = 0;
return p;
}
return p;
}
-const char *cql_uri()
+struct cql_node *cql_node_mk_sort(NMEM nmem, const char *index,
+ struct cql_node *modifiers)
{
- return "info:srw/cql-context-set/1/cql-v1.1";
+ struct cql_node *p = (struct cql_node *) nmem_malloc(nmem, sizeof(*p));
+ p->which = CQL_NODE_SORT;
+ p->u.sort.index = 0;
+ if (index)
+ p->u.sort.index = nmem_strdup(nmem, index);
+ p->u.sort.modifiers = modifiers;
+ p->u.sort.next = 0;
+ p->u.sort.search = 0;
+ return p;
+}
+
+const char *cql_uri(void)
+{
+ return "info:srw/cql-context-set/1/cql-v1.2";
}
struct cql_node *cql_apply_prefix(NMEM nmem,
if (!n->u.st.index_uri && n->u.st.index)
{ /* not yet resolved.. */
const char *cp = strchr(n->u.st.index, '.');
- if (prefix && cp &&
+ if (prefix && cp &&
strlen(prefix) == (size_t) (cp - n->u.st.index) &&
!cql_strncmp(n->u.st.index, prefix, strlen(prefix)))
{
cql_apply_prefix(nmem, n->u.boolean.left, prefix, uri);
cql_apply_prefix(nmem, n->u.boolean.right, prefix, uri);
}
+ else if (n->which == CQL_NODE_SORT)
+ {
+ cql_apply_prefix(nmem, n->u.sort.search, prefix, uri);
+ }
return n;
}
cql_node_destroy(cn->u.boolean.left);
cql_node_destroy(cn->u.boolean.right);
cql_node_destroy(cn->u.boolean.modifiers);
+ break;
+ case CQL_NODE_SORT:
+ cql_node_destroy(cn->u.sort.search);
+ cql_node_destroy(cn->u.sort.next);
+ cql_node_destroy(cn->u.sort.modifiers);
}
}
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab