+static int cql_sort_modifiers(struct cql_node *cn,
+ void (*pr)(const char *buf, void *client_data),
+ void *client_data)
+{
+ int ascending = 1;
+ int caseSensitive = 0;
+ const char *missingValue = "highValue";
+ for (; cn; cn = cn->u.st.modifiers)
+ {
+ const char *indx = cn->u.st.index;
+ if (!strncmp(indx, "sort.", 5))
+ indx = indx + 5;
+ if (!strcmp(indx, "ignoreCase"))
+ caseSensitive = 0;
+ else if (!strcmp(indx, "respectCase"))
+ caseSensitive = 1;
+ else if (!strcmp(indx, "ascending"))
+ ascending = 1;
+ else if (!strcmp(indx, "descending"))
+ ascending = 0;
+ else if (!strcmp(indx, "missingOmit"))
+ missingValue = "omit";
+ else if (!strcmp(indx, "missingFail"))
+ missingValue = "abort";
+ else if (!strcmp(indx, "missingLow"))
+ missingValue = "lowValue";
+ else if (!strcmp(indx, "missingHigh"))
+ missingValue = "highValue";
+ else
+ return -1;
+ }
+ pr(ascending ? "1" : "0", client_data);
+ pr(",", client_data);
+ pr(caseSensitive ? "1" : "0", client_data);
+ pr(",", client_data);
+ pr(missingValue, client_data);
+ return 0;
+}
+