X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fxcqlutil.c;h=19b5036fe78f954c50ac5d6bda1d35b680c97b5e;hp=1b15aa24e21e9b204134c4c4fa4348ce152afd7b;hb=262800f89e3280c5b594faf6eea2c98e988ee2cb;hpb=ed51c750eb5540c5a3a34ef3beb0c043a6e65f7c diff --git a/src/xcqlutil.c b/src/xcqlutil.c index 1b15aa2..19b5036 100644 --- a/src/xcqlutil.c +++ b/src/xcqlutil.c @@ -118,9 +118,36 @@ static void cql_to_xml_mod(struct cql_node *m, } } +static void cql_sort_to_xml(struct cql_node *cn, + void (*pr)(const char *buf, void *client_data), + void *client_data, int level) +{ + if (cn) + { + pr_n("\n", pr, client_data, level); + for (; cn; cn = cn->u.sort.next) + { + pr_n("\n", pr, client_data, level+2); + + if (cn->u.sort.index) + { + pr_n("", pr, client_data, level+4); + pr_cdata(cn->u.sort.index, pr, client_data); + pr_n("\n", pr, client_data, 0); + + cql_to_xml_mod(cn->u.sort.modifiers, + pr, client_data, level+6); + } + pr_n("\n", pr, client_data, level+2); + } + pr_n("\n", pr, client_data, level); + } +} + static void cql_to_xml_r(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), - void *client_data, int level) + void *client_data, int level, + struct cql_node *sort_node) { if (!cn) return; @@ -171,6 +198,7 @@ static void cql_to_xml_r(struct cql_node *cn, pr_n("\n", pr, client_data, 0); } } + cql_sort_to_xml(sort_node, pr, client_data, level+2); pr_n("\n", pr, client_data, level); break; case CQL_NODE_BOOL: @@ -191,16 +219,20 @@ static void cql_to_xml_r(struct cql_node *cn, if (cn->u.boolean.left) { printf ("%*s\n", level+2, ""); - cql_to_xml_r(cn->u.boolean.left, pr, client_data, level+4); + cql_to_xml_r(cn->u.boolean.left, pr, client_data, level+4, 0); printf ("%*s\n", level+2, ""); } if (cn->u.boolean.right) { printf ("%*s\n", level+2, ""); - cql_to_xml_r(cn->u.boolean.right, pr, client_data, level+4); + cql_to_xml_r(cn->u.boolean.right, pr, client_data, level+4, 0); printf ("%*s\n", level+2, ""); } + cql_sort_to_xml(sort_node, pr, client_data, level+2); pr_n("\n", pr, client_data, level); + break; + case CQL_NODE_SORT: + cql_to_xml_r(cn->u.sort.search, pr, client_data, level, cn); } } @@ -208,7 +240,7 @@ void cql_to_xml(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data) { - cql_to_xml_r(cn, pr, client_data, 0); + cql_to_xml_r(cn, pr, client_data, 0, 0); } void cql_to_xml_stdio(struct cql_node *cn, FILE *f)