backtrace: show error if pipe fails YAZ-805
[yaz-moved-to-github.git] / src / cqlutil.c
index 7dba5a7..c0c256f 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2011 Index Data
+ * Copyright (C) Index Data
  * See the file LICENSE for details.
  */
 /**
@@ -21,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;
 
@@ -34,7 +34,7 @@ struct cql_node *cql_node_dup (NMEM nmem, struct cql_node *cp)
                             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;
@@ -43,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;
 }
@@ -93,6 +98,7 @@ struct cql_node *cql_node_mk_sort(NMEM nmem, const char *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;
 }
 
@@ -110,7 +116,7 @@ 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)))
             {
@@ -141,6 +147,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;
 }