Reformat a bit
[yaz-moved-to-github.git] / src / cqlutil.c
index 2c25dea..43e499b 100644 (file)
@@ -1,16 +1,14 @@
-/* $Id: cqlutil.c,v 1.13 2008-01-06 16:22:02 adam Exp $
-   Copyright (C) 1995-2007, 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-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>
@@ -23,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;
 
@@ -45,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;
 }
@@ -85,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";
@@ -130,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;
 }
 
@@ -146,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);
     }
 }
 
@@ -187,6 +212,7 @@ int cql_strncmp(const char *s1, const char *s2, size_t n)
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab