Changeset: 3b2c82d4448b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3b2c82d4448b
Branch: default
Log Message:

Merge branch ascii-flag into default.


diffs (truncated from 19798 to 300 lines):

diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -34319,6 +34319,16 @@ pattern batstr.asciify(X_0:bat[:str], X_
 BATSTRasciify;
 Transform BAT of strings from UTF8 to ASCII
 batstr
+caseFold
+pattern batstr.caseFold(X_0:bat[:str]):bat[:str]
+STRbatCaseFold;
+Fold the case of a string.
+batstr
+caseFold
+pattern batstr.caseFold(X_0:bat[:str], X_1:bat[:oid]):bat[:str]
+STRbatCaseFold;
+Fold the case of a string.
+batstr
 contains
 pattern batstr.contains(X_0:bat[:str], X_1:bat[:str]):bat[:bit]
 BATSTRcontains;
@@ -50299,6 +50309,11 @@ command str.asciify(X_0:str):str
 STRasciify;
 Transform string from UTF8 to ASCII
 str
+caseFold
+command str.caseFold(X_0:str):str
+STRcasefold;
+Fold the case of a string.
+str
 contains
 pattern str.contains(X_0:str, X_1:str):bit
 STRcontains;
@@ -50379,11 +50394,6 @@ pattern str.endswithselect(X_0:bat[:str]
 STRendswithselect;
 Select all head values of the first input BAT for which the@tail value end 
with the given suffix + icase.
 str
-epilogue
-command str.epilogue():void
-STRepilogue;
-(empty)
-str
 insert
 command str.insert(X_0:str, X_1:int, X_2:int, X_3:str):str
 STRinsert;
diff --git a/clients/Tests/MAL-signatures.test 
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -25409,6 +25409,16 @@ pattern batstr.asciify(X_0:bat[:str], X_
 BATSTRasciify;
 Transform BAT of strings from UTF8 to ASCII
 batstr
+caseFold
+pattern batstr.caseFold(X_0:bat[:str]):bat[:str]
+STRbatCaseFold;
+Fold the case of a string.
+batstr
+caseFold
+pattern batstr.caseFold(X_0:bat[:str], X_1:bat[:oid]):bat[:str]
+STRbatCaseFold;
+Fold the case of a string.
+batstr
 contains
 pattern batstr.contains(X_0:bat[:str], X_1:bat[:str]):bat[:bit]
 BATSTRcontains;
@@ -38664,6 +38674,11 @@ command str.asciify(X_0:str):str
 STRasciify;
 Transform string from UTF8 to ASCII
 str
+caseFold
+command str.caseFold(X_0:str):str
+STRcasefold;
+Fold the case of a string.
+str
 contains
 pattern str.contains(X_0:str, X_1:str):bit
 STRcontains;
@@ -38744,11 +38759,6 @@ pattern str.endswithselect(X_0:bat[:str]
 STRendswithselect;
 Select all head values of the first input BAT for which the@tail value end 
with the given suffix + icase.
 str
-epilogue
-command str.epilogue():void
-STRepilogue;
-(empty)
-str
 insert
 command str.insert(X_0:str, X_1:int, X_2:int, X_3:str):str
 STRinsert;
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -16,6 +16,7 @@ BAT *BATallnotequal_grp2(BAT *l, BAT *r,
 BAT *BATanyequal_grp(BAT *l, BAT *r, BAT *g, BAT *e, BAT *s);
 BAT *BATanyequal_grp2(BAT *l, BAT *r, BAT *rid, BAT *g, BAT *e, BAT *s);
 gdk_return BATappend(BAT *b, BAT *n, BAT *s, bool force) 
__attribute__((__warn_unused_result__));
+BAT *BATasciify(BAT *b, BAT *s);
 void BATassertProps(BAT *b);
 atomDesc BATatoms[MAXATOMS];
 BAT *BATattach(int tt, const char *heapfile, role_t role);
@@ -108,6 +109,7 @@ dbl BATcalcvariance_population(dbl *avgp
 dbl BATcalcvariance_sample(dbl *avgp, BAT *b);
 BAT *BATcalcxor(BAT *b1, BAT *b2, BAT *s1, BAT *s2);
 BAT *BATcalcxorcst(BAT *b, const ValRecord *v, BAT *s);
+BAT *BATcasefold(BAT *b, BAT *s);
 bool BATcheckorderidx(BAT *b);
 gdk_return BATclear(BAT *b, bool force);
 void BATcommit(BAT *b, BUN size);
@@ -204,6 +206,8 @@ gdk_return BATsum(void *res, int tp, BAT
 const char *BATtailname(const BAT *b);
 gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT 
*sr, int op, bool nil_matches, BUN estimate) 
__attribute__((__warn_unused_result__));
 BAT *BATthetaselect(BAT *b, BAT *s, const void *val, const char *op);
+BAT *BATtolower(BAT *b, BAT *s);
+BAT *BATtoupper(BAT *b, BAT *s);
 void BATtseqbase(BAT *b, oid o);
 BAT *BATunique(BAT *b, BAT *s);
 BAT *BATunmask(BAT *b);
@@ -265,7 +269,9 @@ gdk_return GDKanalyticalntile(BAT *r, BA
 gdk_return GDKanalyticalprod(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, 
int tp1, int tp2, int frame_type);
 gdk_return GDKanalyticalsum(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, 
int tp1, int tp2, int frame_type);
 gdk_return GDKanalyticalwindowbounds(BAT *r, BAT *b, BAT *p, BAT *l, const 
void *restrict bound, int tp1, int tp2, int unit, bool preceding, oid 
first_half);
+gdk_return GDKasciify(char **restrict buf, size_t *restrict buflen, const char 
*restrict s);
 int GDKatomcnt;
+gdk_return GDKcasefold(char **restrict buf, size_t *restrict buflen, const 
char *restrict s);
 void GDKclrerr(void);
 gdk_return GDKcopyenv(BAT **key, BAT **val, bool writable);
 gdk_return GDKcreatedir(const char *nme);
@@ -317,8 +323,13 @@ void GDKsetmallocsuccesscount(lng count)
 stream *GDKstdin;
 stream *GDKstdout;
 ssize_t GDKstrFromStr(unsigned char *restrict dst, const unsigned char 
*restrict src, ssize_t len, char quote);
+int GDKstrcasecmp(const char *s1, const char *s2);
+char *GDKstrcasestr(const char *haystack, const char *needle);
 str GDKstrdup(const char *s) __attribute__((__malloc__)) 
__attribute__((__warn_unused_result__));
+int GDKstrncasecmp(const char *str1, const char *str2, size_t l1, size_t l2);
 str GDKstrndup(const char *s, size_t n) __attribute__((__malloc__)) 
__attribute__((__warn_unused_result__));
+gdk_return GDKtolower(char **restrict buf, size_t *restrict buflen, const char 
*restrict s);
+gdk_return GDKtoupper(char **restrict buf, size_t *restrict buflen, const char 
*restrict s);
 gdk_return GDKtracer_fill_comp_info(BAT *id, BAT *component, BAT *log_level);
 gdk_return GDKtracer_flush_buffer(void);
 const char *GDKtracer_get_component_level(const char *comp);
@@ -1669,8 +1680,6 @@ FILE *getFile(stream *s);
 int getFileNo(stream *s);
 size_t getFileSize(stream *s);
 stream *gz_stream(stream *inner, int preset);
-stream *iconv_rstream(stream *restrict ss, const char *restrict charset, const 
char *restrict name);
-stream *iconv_wstream(stream *restrict ss, const char *restrict charset, const 
char *restrict name);
 bool isa_block_stream(const stream *s);
 stream *lz4_stream(stream *inner, int preset);
 stream *mapi_request_download(const char *filename, bool binary, bstream *rs, 
stream *ws);
diff --git a/clients/examples/C/CMakeLists.txt 
b/clients/examples/C/CMakeLists.txt
--- a/clients/examples/C/CMakeLists.txt
+++ b/clients/examples/C/CMakeLists.txt
@@ -43,11 +43,17 @@ target_link_libraries(smack01
 add_executable(streamcat
   streamcat.c)
 
+target_include_directories(streamcat
+  PRIVATE
+  $<$<BOOL:${Iconv_IS_BUILT_IN}>:${CMAKE_REQUIRED_INCLUDES}>
+  ../../mapiclient)
+
 target_link_libraries(streamcat
   PRIVATE
   monetdb_config_header
   stream
-  $<$<BOOL:${CURL_FOUND}>:CURL::libcurl>)
+  $<$<BOOL:${CURL_FOUND}>:CURL::libcurl>
+  $<$<BOOL:${Iconv_FOUND}>:Iconv::Iconv>)
 
 add_executable(testcondvar
   testcondvar.c)
diff --git a/clients/examples/C/streamcat.c b/clients/examples/C/streamcat.c
--- a/clients/examples/C/streamcat.c
+++ b/clients/examples/C/streamcat.c
@@ -437,68 +437,20 @@ opener_rastream(char *filename)
 }
 
 #ifdef HAVE_CURL
-#include <curl/curl.h>
-
-#ifndef CURL_WRITEFUNC_ERROR
-#define CURL_WRITEFUNC_ERROR 0
-#endif
-
-static size_t
-write_callback(char *buffer, size_t size, size_t nitems, void *userp)
-{
-       stream *s = userp;
-
-       /* size is expected to always be 1 */
-
-       ssize_t sz = mnstr_write(s, buffer, size, nitems);
-       if (sz < 0)
-               return CURL_WRITEFUNC_ERROR; /* indicate failure to library */
-       return (size_t) sz * size;
-}
+#include "curl-stream.h"
 
 static stream *
-open_urlstream(const char *url)
+opener_urlstream(char *url)
 {
-       CURL *handle;
-       stream *s;
-       CURLcode ret;
        char errbuf[CURL_ERROR_SIZE];
-
-       s = buffer_wastream(NULL, url);
-       if (s == NULL) {
-               return NULL;
-       }
-
-       if ((handle = curl_easy_init()) == NULL) {
-               mnstr_destroy(s);
-               return NULL;
-       }
-
-       errbuf[0] = 0;
-
-       if ((ret = curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, errbuf)) != 
CURLE_OK ||
-           (ret = curl_easy_setopt(handle, CURLOPT_URL, url)) != CURLE_OK ||
-           (ret = curl_easy_setopt(handle, CURLOPT_WRITEDATA, s)) != CURLE_OK 
||
-           (ret = curl_easy_setopt(handle, CURLOPT_VERBOSE, 0)) != CURLE_OK ||
-           (ret = curl_easy_setopt(handle, CURLOPT_NOSIGNAL, 1)) != CURLE_OK ||
-           (ret = curl_easy_setopt(handle, CURLOPT_FAILONERROR, 1)) != 
CURLE_OK ||
-           (ret = curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, 
write_callback)) != CURLE_OK ||
-           (ret = curl_easy_perform(handle)) != CURLE_OK) {
-               curl_easy_cleanup(handle);
-               mnstr_destroy(s);
-               if (errbuf[0])
-                       fprintf(stderr, "%s\n", errbuf);
-               else
-                       fprintf(stderr, "%s\n", curl_easy_strerror(ret));
-               return NULL;
-       }
-       curl_easy_cleanup(handle);
-       (void) mnstr_get_buffer(s);     /* switch to read-only */
+       stream *s = open_urlstream(url,  errbuf);
+       if (s == NULL)
+               fprintf(stderr, "%s\n", errbuf);
        return s;
 }
 #else
 static stream *
-open_urlstream(const char *url)
+opener_urlstream(char *url)
 {
        (void) url;
        return NULL;
@@ -506,13 +458,6 @@ open_urlstream(const char *url)
 #endif
 
 static stream *
-opener_urlstream(char *url)
-{
-       stream *s = open_urlstream(url);
-       return s;
-}
-
-static stream *
 opener_wstream(char *filename)
 {
        stream *s = open_wstream(filename);
@@ -528,6 +473,40 @@ opener_wastream(char *filename)
 }
 
 
+#ifdef HAVE_ICONV
+#include "iconv-stream.h"
+#else
+static stream *
+iconv_rstream(stream *restrict ss, const char *restrict charset, const char 
*restrict name)
+{
+       if (ss == NULL || charset == NULL || name == NULL)
+               return NULL;
+       if (ss->isutf8 ||
+           strcmp(charset, "utf-8") == 0 ||
+           strcmp(charset, "UTF-8") == 0 ||
+           strcmp(charset, "UTF8") == 0)
+               return ss;
+
+       fprintf(stderr, "ICONV support has been left out of this MonetDB");
+       return NULL;
+}
+
+static stream *
+iconv_wstream(stream *restrict ss, const char *restrict charset, const char 
*restrict name)
+{
+       if (ss == NULL || charset == NULL || name == NULL)
+               return NULL;
+       if (ss->isutf8 ||
+           strcmp(charset, "utf-8") == 0 ||
+           strcmp(charset, "UTF-8") == 0 ||
+           strcmp(charset, "UTF8") == 0)
+               return ss;
+
+       fprintf(stderr, "ICONV support has been left out of this MonetDB");
+       return NULL;
+}
+#endif
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to