X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fsortspec.c;h=1eb3845cd909c5378bac7527de292f50d9143f66;hp=8d1e19c97d92e47c0ada243424571902d42b9f60;hb=0a479be82be90639f4e37c4ead12baca543e88bf;hpb=fa7650ec6fedd74a17b0229b52504f2f0b8b8c38 diff --git a/src/sortspec.c b/src/sortspec.c index 8d1e19c..1eb3845 100644 --- a/src/sortspec.c +++ b/src/sortspec.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2012 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ /** @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -120,9 +121,7 @@ Z_SortKeySpecList *yaz_sort_spec(ODR out, const char *arg) odr_malloc(out, sizeof(Odr_oct)); i++; sks->u.missingValueData->len = strlen(sort_flags+i); - sks->u.missingValueData->size = sks->u.missingValueData->len; - sks->u.missingValueData->buf = (unsigned char*) - odr_strdup(out, sort_flags+i); + sks->u.missingValueData->buf = odr_strdup(out, sort_flags+i); i += strlen(sort_flags+i) - 1; break; } @@ -342,50 +341,47 @@ int yaz_srw_sortkeys_to_sort_spec(const char *srw_sortkeys, WRBUF w) if (srw_sortkeys) nmem_strsplit_blank(nmem, srw_sortkeys, &sortspec, &num_sortspec); - if (num_sortspec > 0) + for (i = 0; i < num_sortspec; i++) { - for (i = 0; i < num_sortspec; i++) - { - char **arg; - int num_arg; - int ascending = 1; - int case_sensitive = 0; - const char *missing = 0; - nmem_strsplitx(nmem, ",", sortspec[i], &arg, &num_arg, 0); - - if (num_arg > 2 && arg[2][0]) - ascending = atoi(arg[2]); - if (num_arg > 3 && arg[3][0]) - case_sensitive = atoi(arg[3]); - if (num_arg > 4 && arg[4][0]) - missing = arg[4]; - - if (i) - wrbuf_puts(w, " "); - - wrbuf_puts(w, arg[0]); /* field */ + char **arg; + int num_arg; + int ascending = 1; + int case_sensitive = 0; + const char *missing = 0; + nmem_strsplitx(nmem, ",", sortspec[i], &arg, &num_arg, 0); + + if (num_arg > 2 && arg[2][0]) + ascending = atoi(arg[2]); + if (num_arg > 3 && arg[3][0]) + case_sensitive = atoi(arg[3]); + if (num_arg > 4 && arg[4][0]) + missing = arg[4]; + + if (i) wrbuf_puts(w, " "); - wrbuf_puts(w, ascending ? "a" : "d"); - wrbuf_puts(w, case_sensitive ? "s" : "i"); - if (missing) + wrbuf_puts(w, arg[0]); /* field */ + wrbuf_puts(w, " "); + + wrbuf_puts(w, ascending ? "a" : "d"); + wrbuf_puts(w, case_sensitive ? "s" : "i"); + if (missing) + { + if (!strcmp(missing, "omit")) { + ; + } + else if (!strcmp(missing, "abort")) + wrbuf_puts(w, "!"); + else if (!strcmp(missing, "lowValue")) { + ; + } + else if (!strcmp(missing, "highValue")) { + ; + } + else { - if (!strcmp(missing, "omit")) { - ; - } - else if (!strcmp(missing, "abort")) - wrbuf_puts(w, "!"); - else if (!strcmp(missing, "lowValue")) { - ; - } - else if (!strcmp(missing, "highValue")) { - ; - } - else - { - wrbuf_puts(w, "="); - wrbuf_puts(w, missing); - } + wrbuf_puts(w, "="); + wrbuf_puts(w, missing); } } } @@ -404,35 +400,33 @@ int yaz_solr_sortkeys_to_sort_spec(const char *solr_sortkeys, WRBUF w) if (solr_sortkeys) nmem_strsplit(nmem, ",", solr_sortkeys, &sortspec, &num_sortspec); - if (num_sortspec > 0) + for (i = 0; i < num_sortspec; i++) { - for (i = 0; i < num_sortspec; i++) - { - char **arg; - int num_arg; - char order = 'a'; - int case_sensitive = 0; - nmem_strsplitx(nmem, " ", sortspec[i], &arg, &num_arg, 0); + char **arg; + int num_arg; + char order = 'a'; + int case_sensitive = 0; + nmem_strsplitx(nmem, " ", sortspec[i], &arg, &num_arg, 0); - if (num_arg != 2) - return 0; - - if (arg[1][0]) { - order = tolower(arg[1][0]); - } - if (order != 'a' || order != 'd') - return 0; + if (num_arg != 2) + return -1; - if (i) - wrbuf_puts(w, " "); + if (!yaz_matchstr(arg[1], "asc")) + order = 'a'; + else if (!yaz_matchstr(arg[1], "desc")) + order = 'd'; + else + return -1; - wrbuf_puts(w, arg[0]); /* field */ + if (i) wrbuf_puts(w, " "); - wrbuf_putc(w, order); - // Always in-sensitive - wrbuf_puts(w, case_sensitive ? "s" : "i"); - } + wrbuf_puts(w, arg[0]); /* field */ + wrbuf_puts(w, " "); + + wrbuf_putc(w, order); + // Always in-sensitive + wrbuf_puts(w, case_sensitive ? "s" : "i"); } nmem_destroy(nmem); return 0;