Towards working facets
[yaz-moved-to-github.git] / src / cql2ccl.c
index 331b6db..81e2c5f 100644 (file)
@@ -91,7 +91,6 @@ static int node(struct cql_node *cn,
     const char *split_op = 0;
     const char *ccl_rel = 0;
     const char *rel = cn->u.st.relation;
-    const char *cp;
 
     if (cn->u.st.index && strcmp(cn->u.st.index,
                                  "cql.serverChoice"))
@@ -122,26 +121,38 @@ static int node(struct cql_node *cn,
         /* unsupported relation */
         return -1;
     }
-    cp = cn->u.st.term;
-    while (1)
+    for (; cn; cn = cn->u.st.extra_terms)
     {
-        if (ccl_field && ccl_rel)
+        const char *cp = cn->u.st.term;
+        while (1)
         {
-            pr(ccl_field, client_data);
-            pr(ccl_rel, client_data);
-            if (!split_op)
-                ccl_rel = 0;
+            if (ccl_field && ccl_rel)
+            {
+                pr(ccl_field, client_data);
+                pr(ccl_rel, client_data);
+                if (!split_op)
+                    ccl_rel = 0;
+            }
+            pr_term(&cp, split_op ? 1 : 0, pr, client_data);
+            while (*cp == ' ')
+                cp++;
+            if (*cp == '\0')
+                break;
+            pr(" ", client_data);
+            if (split_op)
+            {
+                pr(split_op, client_data);
+                pr(" ", client_data);
+            }
         }
-        pr_term(&cp, split_op ? 1 : 0, pr, client_data);
-        while (*cp == ' ')
-            cp++;
-        if (*cp == '\0')
-            break;
-        pr(" ", client_data);
-        if (split_op)
+        if (cn->u.st.extra_terms)
         {
-            pr(split_op, client_data);
             pr(" ", client_data);
+            if (split_op)
+            {
+                pr(split_op, client_data);
+                pr(" ", client_data);
+            }
         }
     }
     return 0;