MonetDB: sw_ew_c_sorting - canditer_next function is not inlined...
Changeset: 135abe4b8fd6 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/135abe4b8fd6 Modified Files: monetdb5/modules/atoms/str.c Branch: sw_ew_c_sorting Log Message: canditer_next function is not inlined. Use canditer_next_dense macro diffs (12 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 @@ -5638,7 +5638,7 @@ STRcontainsselect(Client cntxt, MalBlkPt vr_len = STR_LEN; \ matches = 0; \ for (canditer_setidx(, lx), n = lx; n < lci.ncand; n++) { \ - lo = canditer_next(); \ + lo = canditer_next_dense(); \ vl = VALUE(l, lo - lbase); \ cmp = STR_CMP; \ if (cmp < 0) { \ ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: sw_ew_c_sorting - Merge with Dec2023 branch
Changeset: 07ebc5d4e461 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/07ebc5d4e461 Branch: sw_ew_c_sorting Log Message: Merge with Dec2023 branch diffs (246 lines): diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c --- a/sql/server/rel_optimize_sel.c +++ b/sql/server/rel_optimize_sel.c @@ -875,12 +875,12 @@ exps_merge_select_rse( mvc *sql, list *l le->flag == re->flag && le->flag <= cmp_lt) { sql_exp *mine = NULL, *maxe = NULL; - if (!(mine = rel_binop_(sql, NULL, le->r, re->r, "sys", "sql_min", card_value))) { + if (!(mine = rel_binop_(sql, NULL, exp_copy(sql, le->r), exp_copy(sql, re->r), "sys", "sql_min", card_value))) { sql->session->status = 0; sql->errstr[0] = '\0'; continue; } - if (!(maxe = rel_binop_(sql, NULL, le->f, re->f, "sys", "sql_max", card_value))) { + if (!(maxe = rel_binop_(sql, NULL, exp_copy(sql, le->f), exp_copy(sql, re->f), "sys", "sql_max", card_value))) { sql->session->status = 0; sql->errstr[0] = '\0'; continue; diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c --- a/sql/server/sql_scan.c +++ b/sql/server/sql_scan.c @@ -1495,9 +1495,17 @@ sql_get_next_token(YYSTYPE *yylval, void case 'e': case 'E': assert(yylval->sval[1] == '\''); - GDKstrFromStr((unsigned char *) str, - (unsigned char *) yylval->sval + 2, - lc->yycur-lc->yysval - 2, '\''); + if (GDKstrFromStr((unsigned char *) str, + (unsigned char *) yylval->sval + 2, + lc->yycur-lc->yysval - 2, '\'') < 0) { + char *err = GDKerrbuf; + if (strncmp(err, GDKERROR, strlen(GDKERROR)) == 0) + err += strlen(GDKERROR); + else if (*err == '!') + err++; + sql_error(c, 1, SQLSTATE(42000) "%s", err); + return LEX_ERROR; + } quote = '\''; break; case 'u': @@ -1539,10 +1547,13 @@ sql_get_next_token(YYSTYPE *yylval, void src++; *dst = 0; } else { - GDKstrFromStr((unsigned char *)str, - (unsigned char *)yylval->sval + 1, - lc->yycur - lc->yysval - 1, - '\''); + if (GDKstrFromStr((unsigned char *)str, + (unsigned char *)yylval->sval + 1, + lc->yycur - lc->yysval - 1, + '\'') < 0) { + sql_error(c, 1, SQLSTATE(42000) "%s", GDKerrbuf); + return LEX_ERROR; + } } break; } diff --git a/sql/test/BugTracker-2023/Tests/misc-crashes-7390.test b/sql/test/BugTracker-2023/Tests/misc-crashes-7390.test --- a/sql/test/BugTracker-2023/Tests/misc-crashes-7390.test +++ b/sql/test/BugTracker-2023/Tests/misc-crashes-7390.test @@ -244,7 +244,7 @@ DROP TABLE v0 statement ok CREATE TABLE v0(v1 INT) -statement error +statement error 42000!CATALOG: no such function 'sys'.'=' UPDATE v0 SET v1 = (WITH v0 AS (SELECT 42039652.00) SELECT STDDEV_POP (96) OVER (ORDER BY v1) FROM v0, v0 LIMIT 37 OFFSET 62) = 8 statement ok @@ -423,15 +423,15 @@ DROP TABLE v0 -- SELECT ALL ( SELECT - - - - - - - - - - 48 FROM ( SELECT NULL - - - - - - - - 89 FROM ( VALUES ( - - - - - - - - - - 74 ) , ( - - - - - 128 ) , ( - - - - - - 8 ) , ( - - - - 61 ) ) AS v1 ( v1 ) GROUP BY ( ) , GROUPING SETS ( GROUPING SETS ( GROUPING SETS ( ( ) ) ) ) , ( ) ORDER BY - - - - - - - - - - 255 LIKE v1 / CASE WHEN v1 IS NULL THEN - - 75 END DESC , v1 , v1 LIMIT 63 ) AS v1 UNION SELECT - - - - - - - - - - - - - 74 WHERE - v1 < - 89088397.00 ) FROM ( SELECT * FROM ( VALUES ( - - - - - -
MonetDB: literal_features - merge with default
Changeset: fdb40ac745a4 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/fdb40ac745a4 Modified Files: sql/server/rel_select.c Branch: literal_features Log Message: merge with default diffs (truncated from 1275 to 300 lines): 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 @@ -1728,7 +1728,6 @@ int mnstr_writeShtArray(stream *restrict int mnstr_writeStr(stream *restrict s, const char *restrict val); stream *open_rastream(const char *filename); stream *open_rstream(const char *filename); -stream *open_urlstream(const char *url); stream *open_wastream(const char *filename); stream *open_wstream(const char *filename); stream *openssl_rstream(const char *hostname, BIO *bio); 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 @@ -46,7 +46,8 @@ add_executable(streamcat target_link_libraries(streamcat PRIVATE monetdb_config_header - stream) + stream + $<$:CURL::libcurl>) 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 @@ -436,6 +436,75 @@ opener_rastream(char *filename) return s; } +#ifdef HAVE_CURL +#include + +#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; +} + +static stream * +open_urlstream(const 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 */ + return s; +} +#else +static stream * +open_urlstream(const char *url) +{ + (void) url; + return NULL; +} +#endif + static stream * opener_urlstream(char *url) { diff --git a/clients/mapiclient/CMakeLists.txt b/clients/mapiclient/CMakeLists.txt --- a/clients/mapiclient/CMakeLists.txt +++ b/clients/mapiclient/CMakeLists.txt @@ -54,6 +54,7 @@ target_link_libraries(mclient mapi stream $<$:Readline::Readline> + $<$:CURL::libcurl> $<$:Iconv::Iconv> $<$:${GETOPT_LIB}>) diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -3072,10 +3072,74 @@ doFile(Mapi mid, stream *fp, bool useins return errseen; } +#ifdef HAVE_CURL +#include + +#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; +} + +static stream * +open_urlstream(const char *url, char *errbuf) +{ + CURL *handle; + stream *s; + CURLcode ret; + + s = buffer_wastream(NULL, url); + if (s == NULL) { + snprintf(errbuf, CURL_ERROR_SIZE, "could not allocate memory"); + return NULL; + } + + if ((handle = curl_easy_init()) == NULL) { + mnstr_destroy(s); + snprintf(errbuf,
MonetDB: literal_features - rudimentary check for pk-uk pair in ...
Changeset: 63e038204127 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/63e038204127 Modified Files: sql/server/rel_select.c Branch: literal_features Log Message: rudimentary check for pk-uk pair in group by diffs (57 lines): diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -1414,8 +1414,51 @@ rel_column_ref(sql_query *query, sql_rel } } if (!exp) { - if (inner && !is_sql_aggr(f) && is_groupby(inner->op) && inner->l && (exp = rel_bind_column3(sql, inner->l, sname, tname, cname, f))) - return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column '%s.%s' in query results without an aggregate function", tname, cname); + if (inner && !is_sql_aggr(f) && is_groupby(inner->op) && inner->l && (exp = rel_bind_column3(sql, inner->l, sname, tname, cname, f))) { + sql_table* t = find_table_or_view_on_scope(sql, NULL, sname, tname, "SELECT", false); + bool check_pk_with_uk = false; + if (t) { + sql_idx* pki = NULL; + sql_idx* uki = NULL; + for (node * n = ol_first_node(t->idxs); n; n = n->next) { + sql_idx *i = n->data; + + switch (i->key->type) { + case pkey: + pki = i; + continue; + case ukey: + case unndkey: + uki = i; + continue; + default: + continue; + } + } + + if (uki && pki) { + if (pki->columns->cnt == 1 && uki->columns->cnt == 1 && ((list*) inner->r)->cnt == 1) { + sql_column* pkc = ((sql_kc *)pki->columns->h->data)->c; + sql_column* ukc = ((sql_kc *)uki->columns->h->data)->c; + (void) pkc; + (void) ukc; + sql_exp* gbe = ((list*) inner->r)->h->data; + assert(gbe->type == e_column); + if (strcmp(gbe->alias.name, pkc->base.name) == 0 && strcmp(exp->alias.name, ukc->base.name) == 0) + check_pk_with_uk = true; + } + } + } + + if (check_pk_with_uk) { + sql->session->status = 0; + sql->errstr[0] = 0; + exp->card = CARD_AGGR; + list_append(inner->exps, exp); + } + else + return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column '%s.%s' in query results without an aggregate function", tname, cname); + } } if (!exp) ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: sw_ew_c_sorting - Run through NILS first
Changeset: 44785cef0c10 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/44785cef0c10 Modified Files: monetdb5/modules/atoms/str.c Branch: sw_ew_c_sorting Log Message: Run through NILS first diffs (53 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 @@ -5617,22 +5617,32 @@ STRcontainsselect(Client cntxt, MalBlkPt do { \ canditer_init(, sorted_r, sorted_cr); \ canditer_init(, sorted_l, sorted_cl); \ - for (BUN lidx = 0,ridx = 0; ridx < rci.ncand; ridx++) { \ + for (lx = 0; lx < lci.ncand; lx++) { \ + lo = canditer_next(); \ + vl = VALUE(l, lo - lbase); \ + if (!strNil(vl)) \ + break; \ + } \ + for (rx = 0; rx < rci.ncand; rx++) { \ + ro = canditer_next(); \ + vr = VALUE(r, ro - rbase); \ + if (!strNil(vr)) { \ + canditer_setidx(, rx); \ + break; \ + } \ + } \ + for (; rx < rci.ncand; rx++) { \ GDK_CHECK_TIMEOUT(timeoffset, counter, GOTO_LABEL_TIMEOUT_HANDLER(exit)); \ ro = canditer_next(); \ vr = VALUE(r, ro - rbase); \ - if (strNil(vr)) \ - continue; \ - vr_len = STR_LEN; \ + vr_len = STR_LEN; \ matches = 0; \ - for (canditer_setidx(, lidx), n = lidx; n < lci.ncand; n++) { \ + for (canditer_setidx(, lx), n = lx; n < lci.ncand; n++) { \ lo = canditer_next(); \ vl = VALUE(l, lo - lbase); \ - if (strNil(vl)) \ - continue; \ cmp = STR_CMP; \ if (cmp < 0) { \ - lidx++; \ + lx++; \