Reformat a bit
[yaz-moved-to-github.git] / src / cqlutil.c
index b9ff63f..43e499b 100644 (file)
@@ -1,12 +1,14 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2010 Index Data
+ * Copyright (C) 1995-2011 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>
@@ -19,7 +21,7 @@ void cql_fputs(const char *buf, void *client_data)
     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;
 
@@ -41,6 +43,11 @@ struct cql_node *cql_node_dup (NMEM nmem, struct cql_node *cp)
         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;
 }
@@ -81,6 +88,19 @@ struct cql_node *cql_node_mk_boolean(NMEM nmem, const char *op)
     return p;
 }
 
+struct cql_node *cql_node_mk_sort(NMEM nmem, const char *index,
+    struct cql_node *modifiers)
+{
+    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;
+    return p;
+}
+
 const char *cql_uri(void)
 {
     return "info:srw/cql-context-set/1/cql-v1.2";
@@ -126,6 +146,10 @@ struct cql_node *cql_apply_prefix(NMEM nmem,
         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;
 }
 
@@ -142,6 +166,11 @@ void cql_node_destroy(struct cql_node *cn)
         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);
     }
 }