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