MonetDB: sw_ew_c_sorting - canditer_next function is not inlined...

2024-02-27 Thread Lucas Pereira via checkin-list
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

2024-02-27 Thread Lucas Pereira via checkin-list
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

2024-02-27 Thread Yunus Koning via checkin-list
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 ...

2024-02-27 Thread Yunus Koning via checkin-list
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

2024-02-27 Thread Lucas Pereira via checkin-list
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++;   
\