Changeset: 924d61516c92 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/924d61516c92
Modified Files:
        monetdb5/modules/atoms/str.c
        sql/test/sys-schema/Tests/webExamplesStringFunctions.test
Branch: default
Log Message:

Remove 'asciify' test and improve 'asciify' return msg in case of error.


diffs (75 lines):

diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c
--- a/monetdb5/modules/atoms/str.c
+++ b/monetdb5/modules/atoms/str.c
@@ -65,6 +65,7 @@
 #include <string.h>
 #ifdef HAVE_ICONV
 #include <iconv.h>
+#include <locale.h>
 #endif
 #include "mal_interpreter.h"
 
@@ -5046,37 +5047,40 @@ static str
 STRasciify(str *r, const str *s)
 {
 #ifdef HAVE_ICONV
-       /* Handle NULL and return early */
+
        if (strNil(*s)) {
                if ((*r = GDKstrdup(str_nil)) == NULL)
                        throw(MAL, "str.asciify", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
                else
                        return MAL_SUCCEED;
        }
+
        iconv_t cd;
        const str f = "UTF-8", t = "ASCII//TRANSLIT";
        str in = *s, out;
-       size_t in_len = strlen(in), out_len = in_len * 4;       /* oversized as 
a single utf8 char could change into multiple
-                                                                               
                                   ascii char */
-       /* man iconv; /TRANSLIT */
+       size_t in_len = strlen(in), out_len = in_len * 4; /* oversized as a 
single utf8 char could change into multiple ascii char */
+
        if ((cd = iconv_open(t, f)) == (iconv_t) (-1))
-               throw(MAL, "str.asciify", "ICONV: cannot convert from (%s) to 
(%s).", f,
-                         t);
+               throw(MAL, "str.asciify", "ICONV: cannot convert from (%s) to 
(%s).", f, t);
+
        if ((*r = out = GDKmalloc(out_len)) == NULL) {
                iconv_close(cd);
                throw(MAL, "str.asciify", SQLSTATE(HY013) MAL_MALLOC_FAIL);
        }
+
        str o = out;
+
        if (iconv(cd, &in, &in_len, &o, &out_len) == (size_t) -1) {
                GDKfree(out);
                *r = NULL;
                iconv_close(cd);
-               throw(MAL, "str.asciify",
-                         "ICONV: string conversion failed from (%s) to (%s)", 
f, t);
+               throw(MAL, "str.asciify", "Conversion failed, possibly due to 
system locale %s.", setlocale(0, NULL));
        }
+
        *o = '\0';
        iconv_close(cd);
        return MAL_SUCCEED;
+
 #else
        throw(MAL, "str.asciify", "ICONV library not available.");
 #endif
diff --git a/sql/test/sys-schema/Tests/webExamplesStringFunctions.test 
b/sql/test/sys-schema/Tests/webExamplesStringFunctions.test
--- a/sql/test/sys-schema/Tests/webExamplesStringFunctions.test
+++ b/sql/test/sys-schema/Tests/webExamplesStringFunctions.test
@@ -16,11 +16,6 @@ select ascii(R'€')
 ----
 8364
 
-query T
-select asciify(R'a € sign')
-----
-a EUR sign
-
 query I
 select char_length(R'2€')
 ----
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to