MonetDB: Jun2020 - Missed case, don't apply topN merging if the ...

2020-05-22 Thread Pedro Ferreira
Changeset: cc438cd295bf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cc438cd295bf
Modified Files:
sql/server/rel_optimizer.c
Branch: Jun2020
Log Message:

Missed case, don't apply topN merging if the under relation has more than one 
reference. Added merging of offsets if expressions are atoms


diffs (97 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -2079,28 +2079,47 @@ rel_push_topn_and_sample_down(mvc *sql, 
operator_type relation_type = is_topn(rel->op) ? op_topn : 
op_sample;
sql_rel *(*func) (sql_allocator *, sql_rel *, list *) = 
is_topn(rel->op) ? rel_topn : rel_sample;
 
-   /* nested topN relations without offset */
-   if (r && is_topn(rel->op) && is_topn(r->op) && 
list_length(rel->exps) == 1 && list_length(r->exps) == 1) {
+   /* nested topN relations */
+   if (r && is_topn(rel->op) && is_topn(r->op) && !rel_is_ref(r)) {
sql_exp *topN1 = rel->exps->h->data, *topN2 = 
r->exps->h->data;
-
-   if (topN1->l && topN2->l) {
-   atom *a1 = (atom *)topN1->l, *a2 = (atom 
*)topN2->l;
-
-   if (a1->tpe.type->localtype == 
a2->tpe.type->localtype && !a1->isnull && !a2->isnull) {
-   if (atom_cmp(a1, a2) < 0) {
-   rel->l = r->l;
-   r->l = NULL;
-   rel_destroy(r);
-   (*changes)++;
-   return rel;
-   } else {
-   rel->l = NULL;
-   rel_destroy(rel);
-   rel = r;
-   (*changes)++;
-   return rel;
+   sql_exp *offset1 = list_length(rel->exps) > 1 ? 
rel->exps->h->next->data : NULL;
+   sql_exp *offset2 = list_length(r->exps) > 1 ? 
r->exps->h->next->data : NULL;
+
+   if (topN1->l && topN2->l && (!offset1 || offset1->l) && 
(!offset2 || offset2->l)) { /* no parameters */
+   bool changed = false;
+
+   if ((!offset1 || (offset1->type == e_atom && 
offset1->l)) && (!offset2 || (offset2->type == e_atom && offset2->l))) { /* 
only atoms */
+   if (!offset1 && offset2) {
+   list_append(rel->exps, 
exp_copy(sql, offset2));
+   changed = true;
+   } else if (offset1 && offset2) { /* sum 
offsets */
+   atom *b1 = (atom *)offset1->l, 
*b2 = (atom *)offset2->l, *c = atom_add(b1, b2);
+   
+   if (!c) /* error, don't apply 
optimization, WARNING because of this the offset optimization must come before 
the limit one */
+   return rel;
+   if (atom_cmp(c, b2) < 0) /* 
overflow */
+   c = atom_int(sql->sa, 
sql_bind_localtype("lng"), GDK_lng_max);
+   offset1->l = c;
+   changed = true;
}
}
+
+   if (topN1->type == e_atom && topN1->l && 
topN2->type == e_atom && topN2->l) { /* only atoms */
+   atom *a1 = (atom *)topN1->l, *a2 = 
(atom *)topN2->l;
+
+   if (!a2->isnull && (a1->isnull || 
atom_cmp(a1, a2) >= 0)) { /* topN1 is not set or is larger than topN2 */
+   rel->exps->h->data = 
exp_copy(sql, topN2);
+   changed = true;
+   }
+   }
+
+   if (changed) {
+   rel->l = r->l;
+   r->l = NULL;
+   rel_destroy(r);
+   (*changes)++;
+   return rel;
+   }
}
}
 
@@ -5505,6 +5524,8 @@ find_candidate_join2semi(sql_rel *rel, b
(c=find_candidate_join2semi(rel->r, swap)) 

MonetDB: unlock - the storage is now organised using column_storage

2020-05-22 Thread Niels Nes
Changeset: 96178f0350b8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=96178f0350b8
Modified Files:
gdk/gdk_logger.c
monetdb5/optimizer/opt_pushselect.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cat.c
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_storage.h
sql/storage/bat/bat_table.c
sql/storage/store.c
Branch: unlock
Log Message:

the storage is now organised using column_storage
consisting of a bat for storage and bats for
updates (id,val).

insert first claims a slot, which marks this slot 'deleted'
in the gtrans (or any intermediate savepoint) and marked as
used localy using the updates on the deleted column.

Deletes are updates on the deleted column.

Updates are like before treated within private bats.


diffs (truncated from 1227 to 300 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1649,6 +1649,8 @@ logger_load(int debug, const char *fn, c
}
for( ; log_id <= lg->saved_id; log_id++)
(void)logger_cleanup(lg, log_id);  /* ignore error of 
removing file */
+   } else {
+   lg->id = lg->saved_id+1;
}
return GDK_SUCCEED;
   error:
@@ -1698,7 +1700,7 @@ logger_new(int debug, const char *fn, co
.prefuncp = prefuncp,
.postfuncp = postfuncp,
 
-   .id = 1,
+   .id = 0,
.saved_id = getBBPlogno(),  /* get saved log numer 
from bbp */
.saved_tid = (int)getBBPtransid(),  /* get saved 
transaction id from bbp */
};
diff --git a/monetdb5/optimizer/opt_pushselect.c 
b/monetdb5/optimizer/opt_pushselect.c
--- a/monetdb5/optimizer/opt_pushselect.c
+++ b/monetdb5/optimizer/opt_pushselect.c
@@ -35,6 +35,16 @@ PushNil(MalBlkPtr mb, InstrPtr p, int po
return p;
 }
 
+static InstrPtr
+ReplaceWithNil(MalBlkPtr mb, InstrPtr p, int pos, int tpe)
+{
+   p = pushNil(mb, p, tpe); /* push at end */
+   getArg(p, pos) = getArg(p, p->argc-1);
+   p->argc--;
+   return p;
+}
+
+
 #define MAX_TABLES 64
 
 typedef struct subselect_t {
@@ -611,12 +621,12 @@ OPTpushselectImplementation(Client cntxt
}
if (q && getModuleId(q) == sqlRef && getFunctionId(q) 
== deltaRef) {
InstrPtr r = copyInstruction(p);
-   InstrPtr t = copyInstruction(p);
+   InstrPtr s = copyInstruction(p);
InstrPtr u = copyInstruction(q);

-   if( r == NULL || t== NULL ||u == NULL){
+   if( r == NULL || s == NULL ||u == NULL){
freeInstruction(r);
-   freeInstruction(t);
+   freeInstruction(s);
freeInstruction(u);
GDKfree(vars);
GDKfree(nvars);
@@ -631,17 +641,28 @@ OPTpushselectImplementation(Client cntxt
getArg(r, 1) = getArg(q, 1); /* column */
r->typechk = TYPE_UNKNOWN;
pushInstruction(mb,r);
-   getArg(t, 0) = newTmpVariable(mb, 
newBatType(TYPE_oid));
-   setVarCList(mb,getArg(t,0));
-   pushInstruction(mb,t);
+   getArg(s, 0) = newTmpVariable(mb, 
newBatType(TYPE_oid));
+   setVarCList(mb,getArg(s,0));
+   getArg(s, 1) = getArg(q, 3); /* updates */
+   s = ReplaceWithNil(mb, s, 2, TYPE_bat); /* no 
candidate list */
+   setArgType(mb, s, 2, newBatType(TYPE_oid));
+   /* make sure to resolve again */
+   s->token = ASSIGNsymbol; 
+   s->typechk = TYPE_UNKNOWN;
+   s->fcn = NULL;
+   s->blk = NULL;
+   pushInstruction(mb,s);
 
setFunctionId(u, subdeltaRef);
getArg(u, 0) = getArg(p,0);
getArg(u, 1) = getArg(r,0);
getArg(u, 2) = getArg(p,2); /* pre-cands */
getArg(u, 3) = getArg(q,2); /* update ids */
-   u = pushArgument(mb, u, getArg(t,0));
+   u = pushArgument(mb, u, getArg(s,0)); /* 
selected updated values ids */
+   u->token = ASSIGNsymbol; 
   

MonetDB: Jun2020 - merged

2020-05-22 Thread Niels Nes
Changeset: ce3dc71b7633 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce3dc71b7633
Modified Files:
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimizer.c
Branch: Jun2020
Log Message:

merged


diffs (160 lines):

diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -1525,7 +1525,7 @@ exp_is_eqjoin(sql_exp *e)
 }
 
 static sql_exp *
-rel_find_exp_( sql_rel *rel, sql_exp *e) 
+rel_find_exp_and_corresponding_rel_( sql_rel *rel, sql_exp *e, sql_rel **res) 
 {
sql_exp *ne = NULL;
 
@@ -1540,9 +1540,11 @@ rel_find_exp_( sql_rel *rel, sql_exp *e)
ne = exps_bind_column(rel->exps, e->r, NULL, 1);
}
}
+   if (ne && res)
+   *res = rel;
return ne;
case e_convert:
-   return rel_find_exp_(rel, e->l);
+   return rel_find_exp_and_corresponding_rel_(rel, e->l, res);
case e_aggr:
case e_func: 
if (e->l) {
@@ -1551,7 +1553,7 @@ rel_find_exp_( sql_rel *rel, sql_exp *e)

ne = n->data;
while (ne != NULL && n != NULL) {
-   ne = rel_find_exp_(rel, n->data);
+   ne = rel_find_exp_and_corresponding_rel_(rel, 
n->data, res);
n = n->next;
}
return ne;
@@ -1568,7 +1570,7 @@ rel_find_exp_( sql_rel *rel, sql_exp *e)

ne = n->data;
while (ne != NULL && n != NULL) {
-   ne = rel_find_exp_(rel, n->data);
+   ne = rel_find_exp_and_corresponding_rel_(rel, 
n->data, res);
n = n->next;
}
return ne;
@@ -1579,9 +1581,9 @@ rel_find_exp_( sql_rel *rel, sql_exp *e)
 }
 
 sql_exp *
-rel_find_exp( sql_rel *rel, sql_exp *e)
+rel_find_exp_and_corresponding_rel(sql_rel *rel, sql_exp *e, sql_rel **res)
 {
-   sql_exp *ne = rel_find_exp_(rel, e);
+   sql_exp *ne = rel_find_exp_and_corresponding_rel_(rel, e, res);
 
if (rel && !ne) {
switch(rel->op) {
@@ -1589,38 +1591,53 @@ rel_find_exp( sql_rel *rel, sql_exp *e)
case op_right:
case op_full:
case op_join:
-   ne = rel_find_exp(rel->l, e);
+   ne = rel_find_exp_and_corresponding_rel(rel->l, e, res);
if (!ne) 
-   ne = rel_find_exp(rel->r, e);
+   ne = rel_find_exp_and_corresponding_rel(rel->r, 
e, res);
break;
case op_table:
if (rel->exps && e->type == e_column && e->l && 
exps_bind_column2(rel->exps, e->l, e->r)) 
ne = e;
+   if (ne && res)
+   *res = rel;
break;
case op_union:
case op_except:
case op_inter:
{
if (rel->l)
-   ne = rel_find_exp(rel->l, e);
-   else if (rel->exps && e->l)
+   ne = rel_find_exp_and_corresponding_rel(rel->l, 
e, res);
+   else if (rel->exps && e->l) {
ne = exps_bind_column2(rel->exps, e->l, e->r);
-   else if (rel->exps)
+   if (ne && res)
+   *res = rel;
+   } else if (rel->exps) {
ne = exps_bind_column(rel->exps, e->r, NULL, 1);
+   if (ne && res)
+   *res = rel;
+   }
}
break;
case op_basetable: 
if (rel->exps && e->type == e_column && e->l) 
ne = exps_bind_column2(rel->exps, e->l, e->r);
+   if (ne && res)
+   *res = rel;
break;
default:
if (!is_project(rel->op) && rel->l)
-   ne = rel_find_exp(rel->l, e);
+   ne = rel_find_exp_and_corresponding_rel(rel->l, 
e, res);
}
}
return ne;
 }
 
+sql_exp *
+rel_find_exp( sql_rel *rel, sql_exp *e)
+{
+   return rel_find_exp_and_corresponding_rel(rel, e, NULL);
+}
+
 int
 exp_is_true(mvc *sql, sql_exp *e) 
 {
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -123,6 +123,7 @@ extern 

MonetDB: Jun2020 - add more projects around relations when intro...

2020-05-22 Thread Niels Nes
Changeset: 2f87799f6ece for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2f87799f6ece
Modified Files:
sql/server/rel_optimizer.c
sql/server/rel_unnest.c
sql/test/mergetables/Tests/sqlsmith-exists2.stable.out
sql/test/subquery/Tests/subquery5.stable.out
Branch: Jun2020
Log Message:

add more projects around relations when introduction set operators
reduce explosion of relations when rewriting outer joins into inner + union


diffs (215 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -7701,7 +7701,6 @@ rel_simplify_predicates(mvc *sql, sql_re
} else if (is_atom(r->type) && r->l) { 
/* direct literal */
atom *a = r->l;
int flag = a->data.val.bval;
-   list *args = l->l;
 
assert(list_length(args) == 1);
l = args->h->data;
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -2966,7 +2966,7 @@ include_tid(sql_rel *r)
 static sql_rel *
 rewrite_outer2inner_union(mvc *sql, sql_rel *rel, int *changes)
 {
-   if (is_outerjoin(rel->op) && !list_empty(rel->exps) && 
rel_has_freevar(sql,rel)) {
+   if (is_outerjoin(rel->op) && !list_empty(rel->exps) && 
(rel_has_freevar(sql,rel->l) || rel_has_freevar(sql,rel->r) || 
exps_have_rel_exp(rel->exps))) {
sql_exp *f = exp_atom_bool(sql->sa, 0);
int nrcols = rel->nrcols;
 
@@ -2975,37 +2975,57 @@ rewrite_outer2inner_union(mvc *sql, sql_
nrcols += include_tid(rel->r);
rel->nrcols = nrcols;
if (is_left(rel->op)) {
-   sql_rel *except = rel_setop(sql->sa, rel_dup(rel->l), 
rel_project(sql->sa, rel_dup(rel), rel_projections(sql, rel->l, NULL, 1, 1)), 
op_except);
+   sql_rel *except = rel_setop(sql->sa, 
+   rel_project(sql->sa, rel_dup(rel->l), 
rel_projections(sql, rel->l, NULL, 1, 1)), 
+   rel_project(sql->sa, rel_dup(rel), 
rel_projections(sql, rel->l, NULL, 1, 1)), op_except);
except->exps = rel_projections(sql, rel->l, NULL, 1, 1);
sql_rel *nrel = rel_crossproduct(sql->sa, except, 
rel_dup(rel->r),  op_left);
rel_join_add_exp(sql->sa, nrel, f);
rel->op = op_join;
-   nrel = rel_setop(sql->sa, rel, nrel, op_union);
+   nrel = rel_setop(sql->sa, 
+   rel_project(sql->sa, rel,  
rel_projections(sql, rel, NULL, 1, 1)),
+   rel_project(sql->sa, nrel, 
rel_projections(sql, nrel, NULL, 1, 1)),
+   op_union);
rel_set_exps(nrel, rel_projections(sql, rel, NULL, 1, 
1));
return nrel;
} else if (is_right(rel->op)) {
-   sql_rel *except = rel_setop(sql->sa, rel_dup(rel->r), 
rel_project(sql->sa, rel_dup(rel), rel_projections(sql, rel->r, NULL, 1, 1)), 
op_except);
+   sql_rel *except = rel_setop(sql->sa, 
+   rel_project(sql->sa, rel_dup(rel->r), 
rel_projections(sql, rel->r, NULL, 1, 1)), 
+   rel_project(sql->sa, rel_dup(rel), 
rel_projections(sql, rel->r, NULL, 1, 1)), op_except);
except->exps = rel_projections(sql, rel->r, NULL, 1, 1);
sql_rel *nrel = rel_crossproduct(sql->sa, 
rel_dup(rel->l), except, op_right);
rel_join_add_exp(sql->sa, nrel, f);
rel->op = op_join;
-   nrel = rel_setop(sql->sa, rel, nrel, op_union);
+   nrel = rel_setop(sql->sa, 
+   rel_project(sql->sa, rel,  
rel_projections(sql, rel, NULL, 1, 1)),
+   rel_project(sql->sa, nrel, 
rel_projections(sql, nrel, NULL, 1, 1)),
+   op_union);
rel_set_exps(nrel, rel_projections(sql, rel, NULL, 1, 
1));
return nrel;
} else if (is_full(rel->op)) {
-   sql_rel *except = rel_setop(sql->sa, rel_dup(rel->l), 
rel_project(sql->sa, rel_dup(rel), rel_projections(sql, rel->l, NULL, 1, 1)), 
op_except);
+   sql_rel *except = rel_setop(sql->sa, 
+   rel_project(sql->sa, rel_dup(rel->l), 
rel_projections(sql, rel->l, NULL, 1, 1)), 
+  

MonetDB: mbedded - merged with default

2020-05-22 Thread Niels Nes
Changeset: f6ef69aad4ed for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f6ef69aad4ed
Modified Files:
gdk/gdk_bbp.c
gdk/gdk_cross.c
gdk/gdk_logger.c
gdk/gdk_posix.c
gdk/gdk_storage.c
gdk/gdk_string.c
gdk/gdk_system.c
gdk/gdk_tracer.c
gdk/gdk_utils.c
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimizer.c
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/server/sql_parser.y
sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err
sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.out
sql/test/mergetables/Tests/sqlsmith-exists2.sql
sql/test/mergetables/Tests/sqlsmith-exists2.stable.out
sql/test/miscellaneous/Tests/groupby_error.sql
sql/test/miscellaneous/Tests/groupby_error.stable.out
sql/test/miscellaneous/Tests/simple_plans.stable.out
sql/test/subquery/Tests/subquery6.sql
sql/test/subquery/Tests/subquery6.stable.err
sql/test/subquery/Tests/subquery6.stable.out
Branch: mbedded
Log Message:

merged with default


diffs (truncated from 2213 to 300 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -652,8 +652,8 @@ fixdatebats(void)
}
fp = fopen(filename, "w");
if (fp == NULL) {
-   TRC_CRITICAL(GDK, "cannot create file %s: %s\n",
-filename, GDKstrerror(errno, 
(char[128]){0}, 128));
+   GDKsyserror("cannot create file %s\n",
+   filename);
return GDK_FAIL;
}
fclose(fp);
@@ -1137,7 +1137,7 @@ BBPaddfarm(const char *dirname, int role
return GDK_FAIL;
}
} else {
-   GDKerror("%s: cannot create directory\n", dirname);
+   GDKsyserror("%s: cannot create directory\n", dirname);
return GDK_FAIL;
}
}
@@ -1161,7 +1161,6 @@ BBPaddfarm(const char *dirname, int role
 * database */
bbpdir = GDKfilepath(i, BATDIR, "BBP", "dir");
if (bbpdir == NULL) {
-   GDKerror("malloc failed\n");
return GDK_FAIL;
}
if (stat(bbpdir, ) != -1 || errno != ENOENT) 
{
@@ -1172,7 +1171,6 @@ BBPaddfarm(const char *dirname, int role
GDKfree(bbpdir);
bbpdir = GDKfilepath(i, BAKDIR, "BBP", "dir");
if (bbpdir == NULL) {
-   GDKerror("malloc failed\n");
return GDK_FAIL;
}
if (stat(bbpdir, ) != -1 || errno != ENOENT) 
{
@@ -1332,7 +1330,6 @@ BBPinit(void)
if (j == i) {
char *d = GDKfilepath(i, NULL, BATDIR, NULL);
if (d == NULL) {
-   TRC_CRITICAL(GDK, "malloc failed\n");
return GDK_FAIL;
}
BBPdiskscan(d, strlen(d) - strlen(BATDIR));
@@ -2953,7 +2950,7 @@ BBPprepare(bool subcommit)
ret = BBPrecover(0);
if (ret == GDK_SUCCEED) {
if (mkdir(bakdirpath, MONETDB_DIRMODE) < 0 && errno != 
EEXIST) {
-   GDKsyserror("BBPprepare: cannot create 
directory %s\n", bakdirpath);
+   GDKsyserror("cannot create directory %s\n", 
bakdirpath);
ret = GDK_FAIL;
}
/* if BAKDIR already exists, don't signal error */
@@ -2963,7 +2960,7 @@ BBPprepare(bool subcommit)
if (ret == GDK_SUCCEED && start_subcommit) {
/* make a new SUBDIR (subdir of BAKDIR) */
if (mkdir(subdirpath, MONETDB_DIRMODE) < 0) {
-   GDKsyserror("BBPprepare: cannot create directory %s\n", 
subdirpath);
+   GDKsyserror("cannot create directory %s\n", subdirpath);
ret = GDK_FAIL;
}
TRC_DEBUG(IO_, "mkdir %s = %d\n", subdirpath, (int) ret);
@@ -3262,7 +3259,6 @@ force_move(int farmid, const char *srcdi
strncpy(srcpath, name, len);
srcpath[len] = '\0';
if(!(dstpath = GDKfilepath(farmid, dstdir, srcpath, NULL))) {
-   GDKsyserror("force_move: malloc fail\n");
 

MonetDB: mbedded - align code with default

2020-05-22 Thread Niels Nes
Changeset: 463633f14094 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=463633f14094
Modified Files:
common/utils/mcrypt.c
Branch: mbedded
Log Message:

align code with default


diffs (29 lines):

diff --git a/common/utils/mcrypt.c b/common/utils/mcrypt.c
--- a/common/utils/mcrypt.c
+++ b/common/utils/mcrypt.c
@@ -251,7 +251,7 @@ mcrypt_SHA384Sum(const char *string, siz
 }
 #endif
 
-#if defined(HAVE_SHA512_UPDATE)
+#ifdef HAVE_SHA512_UPDATE
 /**
  * Returns a malloced string representing the hex representation of
  * the SHA-512 hash of the given string.
@@ -297,7 +297,7 @@ mcrypt_SHA512Sum(const char *string, siz
 }
 #endif
 
-#if defined(HAVE_RIPEMD160_UPDATE)
+#ifdef HAVE_RIPEMD160_UPDATE
 /**
  * Returns a malloced string representing the hex representation of
  * the RIPEMD-160 hash of the given string.
@@ -343,7 +343,6 @@ mcrypt_BackendSum(const char *string, si
 #else
(void) string;
(void) len;
-   fprintf(stderr, "No digest function available.\n");
return NULL;
 #endif
 }
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: scoping - Merged with default

2020-05-22 Thread Pedro Ferreira
Changeset: fe1ec107fdef for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fe1ec107fdef
Added Files:
.bumpversion.cfg
sql/test/BugTracker-2020/Tests/ilike-matches.Bug-6864.sql
sql/test/BugTracker-2020/Tests/ilike-matches.Bug-6864.stable.err
sql/test/BugTracker-2020/Tests/ilike-matches.Bug-6864.stable.out
Removed Files:
vertoo.config
vertoo.data
Modified Files:
.hgtags
MonetDB.spec
NT/monetdb_config.h.in
NT/rules.msc
buildtools/conf/Maddlog
clients/mapilib/mapi.rc
clients/odbc/driver/driver.rc
clients/odbc/winsetup/setup.rc
configure.ag
debian/changelog
gdk/gdk_batop.c
gdk/gdk_bbp.c
gdk/gdk_cross.c
gdk/gdk_join.c
gdk/gdk_logger.c
gdk/gdk_posix.c
gdk/gdk_storage.c
gdk/gdk_string.c
gdk/gdk_system.c
gdk/gdk_tracer.c
gdk/gdk_utils.c
gdk/libbat.rc
geom/monetdb5/geom.c
libversions
monetdb5/mal/mal_client.c
monetdb5/modules/mal/pcre.c
monetdb5/tools/libmonetdb5.rc
sql/backends/monet5/UDF/pyapi3/pyheader.h
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_rank.c
sql/common/sql_types.c
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimizer.c
sql/server/rel_outer_join_optimizer.h
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_rewriter.c
sql/server/rel_rewriter.h
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/server/sql_parser.y
sql/server/sql_partition.c
sql/server/sql_semantic.c
sql/storage/bat/bat_storage.c
sql/storage/sql_storage.h
sql/storage/store.c

sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out.single

sql/test/BugTracker-2016/Tests/memory-consumption-query-PLAN-25joins.Bug-3972.stable.out
sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err
sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.out
sql/test/BugTracker-2020/Tests/All

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-query.stable.out

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.stable.out

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out
sql/test/mergetables/Tests/sqlsmith-exists2.sql
sql/test/mergetables/Tests/sqlsmith-exists2.stable.out
sql/test/miscellaneous/Tests/groupby_error.sql
sql/test/miscellaneous/Tests/groupby_error.stable.out
sql/test/miscellaneous/Tests/simple_plans.stable.out
sql/test/subquery/Tests/subquery6.sql
sql/test/subquery/Tests/subquery6.stable.err
sql/test/subquery/Tests/subquery6.stable.out
sql/test/wlcr/Tests/wlr110.py
sql/test/wlcr/Tests/wlr35.py
testing/Mfilter.py
testing/Mtest.py.in
Branch: scoping
Log Message:

Merged with default


diffs (truncated from 4786 to 300 lines):

diff --git a/.bumpversion.cfg b/.bumpversion.cfg
new file mode 100644
--- /dev/null
+++ b/.bumpversion.cfg
@@ -0,0 +1,32 @@
+[bumpversion]
+current_version = 11.38.0
+commit = False
+tag = False
+
+[bumpversion:file:configure.ag]
+
+[bumpversion:file:MonetDB.spec]
+
+[bumpversion:file:NT/rules.msc]
+
+[bumpversion:file:NT/monetdb_config.h.in]
+
+[bumpversion:file:gdk/libbat.rc]
+parse = (?P\d+),(?P\d+),(?P\d+)
+serialize = {major},{minor},{patch}
+
+[bumpversion:file:clients/odbc/winsetup/setup.rc]
+parse = (?P\d+),(?P\d+),(?P\d+)
+serialize = {major},{minor},{patch}
+
+[bumpversion:file:clients/odbc/driver/driver.rc]
+parse = (?P\d+),(?P\d+),(?P\d+)
+serialize = {major},{minor},{patch}
+
+[bumpversion:file:clients/mapilib/mapi.rc]
+parse = (?P\d+),(?P\d+),(?P\d+)
+serialize = {major},{minor},{patch}
+
+[bumpversion:file:monetdb5/tools/libmonetdb5.rc]
+parse = (?P\d+),(?P\d+),(?P\d+)
+serialize = {major},{minor},{patch}
diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -766,3 +766,6 @@ 179977ed07cd8095f99a6a07968b8e9d1affa753
 6b76e1fa9b32421197acf26f63948c858e487d6a Jun2020_root
 03ea637c10b5217782acf5db261b4cd71a9afb25 Jun2020_1
 03ea637c10b5217782acf5db261b4cd71a9afb25 Jun2020_release
+0d51d6758f2b1f3f1804415545f8551a38da1848 Jun2020_3
+03ea637c10b5217782acf5db261b4cd71a9afb25 Jun2020_release
+0d51d6758f2b1f3f1804415545f8551a38da1848 Jun2020_release
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -984,6 +984,10 @@ fi
 %postun -p /sbin/ldconfig
 
 %changelog
+* Mon May 18 2020 Sjoerd Mullender  - 11.37.3-20200518
+- Rebuilt.
+- 

MonetDB: default - Merged with Jun2020

2020-05-22 Thread Pedro Ferreira
Changeset: 15f8f49fa732 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=15f8f49fa732
Modified Files:
gdk/gdk_bbp.c
gdk/gdk_cross.c
gdk/gdk_logger.c
gdk/gdk_posix.c
gdk/gdk_storage.c
gdk/gdk_string.c
gdk/gdk_system.c
gdk/gdk_tracer.c
gdk/gdk_utils.c
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimizer.c
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/server/sql_parser.y
sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err
sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.out
sql/test/mergetables/Tests/sqlsmith-exists2.sql
sql/test/mergetables/Tests/sqlsmith-exists2.stable.out
sql/test/miscellaneous/Tests/groupby_error.sql
sql/test/miscellaneous/Tests/groupby_error.stable.out
sql/test/miscellaneous/Tests/simple_plans.stable.out
sql/test/subquery/Tests/subquery6.sql
sql/test/subquery/Tests/subquery6.stable.err
sql/test/subquery/Tests/subquery6.stable.out
Branch: default
Log Message:

Merged with Jun2020


diffs (truncated from 2127 to 300 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -652,8 +652,8 @@ fixdatebats(void)
}
fp = fopen(filename, "w");
if (fp == NULL) {
-   TRC_CRITICAL(GDK, "cannot create file %s: %s\n",
-filename, GDKstrerror(errno, 
(char[128]){0}, 128));
+   GDKsyserror("cannot create file %s\n",
+   filename);
return GDK_FAIL;
}
fclose(fp);
@@ -1137,7 +1137,7 @@ BBPaddfarm(const char *dirname, int role
return GDK_FAIL;
}
} else {
-   GDKerror("%s: cannot create directory\n", dirname);
+   GDKsyserror("%s: cannot create directory\n", dirname);
return GDK_FAIL;
}
}
@@ -1161,7 +1161,6 @@ BBPaddfarm(const char *dirname, int role
 * database */
bbpdir = GDKfilepath(i, BATDIR, "BBP", "dir");
if (bbpdir == NULL) {
-   GDKerror("malloc failed\n");
return GDK_FAIL;
}
if (stat(bbpdir, ) != -1 || errno != ENOENT) 
{
@@ -1172,7 +1171,6 @@ BBPaddfarm(const char *dirname, int role
GDKfree(bbpdir);
bbpdir = GDKfilepath(i, BAKDIR, "BBP", "dir");
if (bbpdir == NULL) {
-   GDKerror("malloc failed\n");
return GDK_FAIL;
}
if (stat(bbpdir, ) != -1 || errno != ENOENT) 
{
@@ -1332,7 +1330,6 @@ BBPinit(void)
if (j == i) {
char *d = GDKfilepath(i, NULL, BATDIR, NULL);
if (d == NULL) {
-   TRC_CRITICAL(GDK, "malloc failed\n");
return GDK_FAIL;
}
BBPdiskscan(d, strlen(d) - strlen(BATDIR));
@@ -2953,7 +2950,7 @@ BBPprepare(bool subcommit)
ret = BBPrecover(0);
if (ret == GDK_SUCCEED) {
if (mkdir(bakdirpath, MONETDB_DIRMODE) < 0 && errno != 
EEXIST) {
-   GDKsyserror("BBPprepare: cannot create 
directory %s\n", bakdirpath);
+   GDKsyserror("cannot create directory %s\n", 
bakdirpath);
ret = GDK_FAIL;
}
/* if BAKDIR already exists, don't signal error */
@@ -2963,7 +2960,7 @@ BBPprepare(bool subcommit)
if (ret == GDK_SUCCEED && start_subcommit) {
/* make a new SUBDIR (subdir of BAKDIR) */
if (mkdir(subdirpath, MONETDB_DIRMODE) < 0) {
-   GDKsyserror("BBPprepare: cannot create directory %s\n", 
subdirpath);
+   GDKsyserror("cannot create directory %s\n", subdirpath);
ret = GDK_FAIL;
}
TRC_DEBUG(IO_, "mkdir %s = %d\n", subdirpath, (int) ret);
@@ -3262,7 +3259,6 @@ force_move(int farmid, const char *srcdi
strncpy(srcpath, name, len);
srcpath[len] = '\0';
if(!(dstpath = GDKfilepath(farmid, dstdir, srcpath, NULL))) {
-   GDKsyserror("force_move: malloc fail\n");
 

MonetDB: Jun2020 - Making rel_join2semijoin more restrinct. The ...

2020-05-22 Thread Pedro Ferreira
Changeset: 941ce0aadf4e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=941ce0aadf4e
Modified Files:
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimizer.c
Branch: Jun2020
Log Message:

Making rel_join2semijoin more restrinct. The found column must be the single 
group by column projected at a group relation to be unique


diffs (160 lines):

diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -1525,7 +1525,7 @@ exp_is_eqjoin(sql_exp *e)
 }
 
 static sql_exp *
-rel_find_exp_( sql_rel *rel, sql_exp *e) 
+rel_find_exp_and_corresponding_rel_( sql_rel *rel, sql_exp *e, sql_rel **res) 
 {
sql_exp *ne = NULL;
 
@@ -1540,9 +1540,11 @@ rel_find_exp_( sql_rel *rel, sql_exp *e)
ne = exps_bind_column(rel->exps, e->r, NULL, 1);
}
}
+   if (ne && res)
+   *res = rel;
return ne;
case e_convert:
-   return rel_find_exp_(rel, e->l);
+   return rel_find_exp_and_corresponding_rel_(rel, e->l, res);
case e_aggr:
case e_func: 
if (e->l) {
@@ -1551,7 +1553,7 @@ rel_find_exp_( sql_rel *rel, sql_exp *e)

ne = n->data;
while (ne != NULL && n != NULL) {
-   ne = rel_find_exp_(rel, n->data);
+   ne = rel_find_exp_and_corresponding_rel_(rel, 
n->data, res);
n = n->next;
}
return ne;
@@ -1568,7 +1570,7 @@ rel_find_exp_( sql_rel *rel, sql_exp *e)

ne = n->data;
while (ne != NULL && n != NULL) {
-   ne = rel_find_exp_(rel, n->data);
+   ne = rel_find_exp_and_corresponding_rel_(rel, 
n->data, res);
n = n->next;
}
return ne;
@@ -1579,9 +1581,9 @@ rel_find_exp_( sql_rel *rel, sql_exp *e)
 }
 
 sql_exp *
-rel_find_exp( sql_rel *rel, sql_exp *e)
+rel_find_exp_and_corresponding_rel(sql_rel *rel, sql_exp *e, sql_rel **res)
 {
-   sql_exp *ne = rel_find_exp_(rel, e);
+   sql_exp *ne = rel_find_exp_and_corresponding_rel_(rel, e, res);
 
if (rel && !ne) {
switch(rel->op) {
@@ -1589,38 +1591,53 @@ rel_find_exp( sql_rel *rel, sql_exp *e)
case op_right:
case op_full:
case op_join:
-   ne = rel_find_exp(rel->l, e);
+   ne = rel_find_exp_and_corresponding_rel(rel->l, e, res);
if (!ne) 
-   ne = rel_find_exp(rel->r, e);
+   ne = rel_find_exp_and_corresponding_rel(rel->r, 
e, res);
break;
case op_table:
if (rel->exps && e->type == e_column && e->l && 
exps_bind_column2(rel->exps, e->l, e->r)) 
ne = e;
+   if (ne && res)
+   *res = rel;
break;
case op_union:
case op_except:
case op_inter:
{
if (rel->l)
-   ne = rel_find_exp(rel->l, e);
-   else if (rel->exps && e->l)
+   ne = rel_find_exp_and_corresponding_rel(rel->l, 
e, res);
+   else if (rel->exps && e->l) {
ne = exps_bind_column2(rel->exps, e->l, e->r);
-   else if (rel->exps)
+   if (ne && res)
+   *res = rel;
+   } else if (rel->exps) {
ne = exps_bind_column(rel->exps, e->r, NULL, 1);
+   if (ne && res)
+   *res = rel;
+   }
}
break;
case op_basetable: 
if (rel->exps && e->type == e_column && e->l) 
ne = exps_bind_column2(rel->exps, e->l, e->r);
+   if (ne && res)
+   *res = rel;
break;
default:
if (!is_project(rel->op) && rel->l)
-   ne = rel_find_exp(rel->l, e);
+   ne = rel_find_exp_and_corresponding_rel(rel->l, 
e, res);
}
}
return ne;
 }
 
+sql_exp *
+rel_find_exp( sql_rel *rel, sql_exp *e)
+{
+   return rel_find_exp_and_corresponding_rel(rel, e, NULL);
+}
+
 int
 exp_is_true(mvc *sql, sql_exp *e) 
 {
diff --git 

MonetDB: Jun2020 - Small fixes for rel_join2semijoin optimizer.

2020-05-22 Thread Pedro Ferreira
Changeset: 842feff7722a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=842feff7722a
Modified Files:
sql/server/rel_optimizer.c
sql/server/rel_unnest.c
Branch: Jun2020
Log Message:

Small fixes for rel_join2semijoin optimizer.

Disallow rel_join2semijoin on selection relations, because upper projections 
may use the right side of the semijoin.
Only e_columns are allowed as the single projection under the candidate join 
(e.g. aggregates may not be distinct). A better way to fix this would be adding 
an "unique" property under SQL expressions.
Fixed grouping cardinalities at exp_reset_card.


diffs (53 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -5452,11 +5452,14 @@ find_simple_projection_for_join2semi(sql
 
if (rel->card < CARD_AGGR) /* const or groupby without group by 
exps */
return true;
-   if (e->card <= CARD_AGGR || find_prop(e->p, PROP_HASHCOL))
-   return true;
-   sql_exp *found = rel_find_exp(rel->l, e); /* grouping column on 
inner relation */
-   if (found && (found->card <= CARD_AGGR || find_prop(found->p, 
PROP_HASHCOL)))
-   return true;
+   /* a single group by column in the projection list from a group 
by relation is guaranteed to be unique, but not an aggregate */
+   if (e->type == e_column) {
+   if (is_groupby(rel->op) || find_prop(e->p, 
PROP_HASHCOL))
+   return true;
+   sql_exp *found = rel_find_exp(rel->l, e); /* grouping 
column on inner relation */
+   if (found && ((found->type == e_column && found->card 
<= CARD_AGGR) || find_prop(found->p, PROP_HASHCOL)))
+   return true;
+   }
}
return false;
 }
@@ -5524,7 +5527,7 @@ static sql_rel *
 rel_join2semijoin(mvc *sql, sql_rel *rel, int *changes)
 {
(void)sql;
-   if ((is_simple_project(rel->op) || is_groupby(rel->op) || 
(is_select(rel->op) && !rel_is_ref(rel))) && rel->l) {
+   if ((is_simple_project(rel->op) || is_groupby(rel->op)) && rel->l) {
bool swap = false;
sql_rel *l = rel->l;
sql_rel *c = find_candidate_join2semi(l, );
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -1652,7 +1652,7 @@ exp_reset_card(mvc *sql, sql_rel *rel, s
switch(e->type) {
case e_aggr:
case e_column:
-   e->card = CARD_AGGR;
+   e->card = rel->card;
break;
case e_func:
case e_convert:
@@ -1673,6 +1673,8 @@ exp_reset_card(mvc *sql, sql_rel *rel, s
l = rel->l;
if (e->card < l->card)
e->card = l->card;
+   if (need_distinct(rel)) /* Need distinct, all expressions 
should have CARD_AGGR at max */
+   e->card = MIN(e->card, CARD_AGGR);
break;
case e_aggr: /* should have been corrected by rewrites already */
case e_cmp:  
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jun2020 - Propagate not through 'and' and 'or' symbols ...

2020-05-22 Thread Pedro Ferreira
Changeset: 5ed6b50c85cb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5ed6b50c85cb
Modified Files:
sql/server/rel_select.c
Branch: Jun2020
Log Message:

Propagate not through 'and' and 'or' symbols if possible. No more rewrites on 
this file today


diffs (164 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
@@ -2208,52 +2208,90 @@ rel_in_exp(sql_query *query, sql_rel *re
return rel_select_add_exp(sql->sa, rel, e);;
 }
 
-#define SIMPLIFY_NOT(sc, NEXT_CALL) \
-   switch (sc->data.sym->token) { \
-   case SQL_IN: \
-   sc->data.sym->token = SQL_NOT_IN; \
-   return NEXT_CALL; \
-   case SQL_NOT_IN: \
-   sc->data.sym->token = SQL_IN; \
-   return NEXT_CALL; \
-   case SQL_EXISTS: \
-   sc->data.sym->token = SQL_NOT_EXISTS; \
-   return NEXT_CALL; \
-   case SQL_NOT_EXISTS: \
-   sc->data.sym->token = SQL_EXISTS; \
-   return NEXT_CALL; \
-   case SQL_LIKE: \
-   sc->data.sym->token = SQL_NOT_LIKE; \
-   return NEXT_CALL; \
-   case SQL_NOT_LIKE: \
-   sc->data.sym->token = SQL_LIKE; \
-   return NEXT_CALL; \
-   case SQL_BETWEEN: \
-   sc->data.sym->token = SQL_NOT_BETWEEN; \
-   return NEXT_CALL; \
-   case SQL_NOT_BETWEEN: \
-   sc->data.sym->token = SQL_BETWEEN; \
-   return NEXT_CALL; \
-   case SQL_IS_NULL: \
-   sc->data.sym->token = SQL_IS_NOT_NULL; \
-   return NEXT_CALL; \
-   case SQL_IS_NOT_NULL: \
-   sc->data.sym->token = SQL_IS_NULL; \
-   return NEXT_CALL; \
-   case SQL_NOT: /* nested NOTs eliminate each other */ \
-   sc->data.sym = sc->data.sym->data.sym; \
-   return NEXT_CALL; \
-   case SQL_COMPARE: { \
-   dnode *cmp_n = sc->data.sym->data.lval->h; \
-   comp_type neg_cmp_type = 
negate_compare(compare_str2type(cmp_n->next->data.sval)); /* negate the 
comparator */ \
-   cmp_n->next->data.sval = sa_strdup(sql->sa, 
compare_func(neg_cmp_type, 0)); \
-   if (cmp_n->next->next->next) /* negating ANY/ALL */ \
-   cmp_n->next->next->next->data.i_val = 
cmp_n->next->next->next->data.i_val == 0 ? 1 : 0; \
-   return NEXT_CALL; \
-   } \
-   default: \
-   break; \
+static bool 
+not_symbol_can_be_propagated(mvc *sql, symbol *sc)
+{
+   switch (sc->token) {
+   case SQL_IN:
+   case SQL_NOT_IN:
+   case SQL_EXISTS:
+   case SQL_NOT_EXISTS:
+   case SQL_LIKE:
+   case SQL_NOT_LIKE:
+   case SQL_BETWEEN:
+   case SQL_NOT_BETWEEN:
+   case SQL_IS_NULL:
+   case SQL_IS_NOT_NULL:
+   case SQL_NOT:
+   case SQL_COMPARE:
+   return true;
+   case SQL_AND:
+   case SQL_OR: {
+   symbol *lo = sc->data.lval->h->data.sym;
+   symbol *ro = sc->data.lval->h->next->data.sym;
+   return not_symbol_can_be_propagated(sql, lo) && 
not_symbol_can_be_propagated(sql, ro);
+   }
+   default:
+   return false;
} 
+}
+
+/* Warning, this function assumes the entire bison tree can be negated, so 
call it after 'not_symbol_can_be_propagated' */
+static void
+negate_symbol_tree(mvc *sql, symbol *sc)
+{
+   switch (sc->token) {
+   case SQL_IN:
+   sc->token = SQL_NOT_IN;
+   break;
+   case SQL_NOT_IN:
+   sc->token = SQL_IN;
+   break;
+   case SQL_EXISTS:
+   sc->token = SQL_NOT_EXISTS;
+   break;
+   case SQL_NOT_EXISTS:
+   sc->token = SQL_EXISTS;
+   break;
+   case SQL_LIKE:
+   sc->token = SQL_NOT_LIKE;
+   break;
+   case SQL_NOT_LIKE:
+   sc->token = SQL_LIKE;
+   break;
+   case SQL_BETWEEN:
+   sc->token = SQL_NOT_BETWEEN;
+   break;
+   case SQL_NOT_BETWEEN:
+   sc->token = SQL_BETWEEN;
+   break;
+   case SQL_IS_NULL:
+   sc->token = SQL_IS_NOT_NULL;
+   break;
+   case SQL_IS_NOT_NULL:
+   sc->token = SQL_IS_NULL;
+   break;
+   case SQL_NOT: /* nested NOTs eliminate each other */
+   memmove(sc, sc->data.sym, sizeof(symbol));
+   break;
+   case SQL_COMPARE: {
+   dnode *cmp_n = sc->data.lval->h;
+   comp_type neg_cmp_type = 
negate_compare(compare_str2type(cmp_n->next->data.sval)); /* negate the 
comparator */
+   cmp_n->next->data.sval = sa_strdup(sql->sa, 
compare_func(neg_cmp_type, 0));
+   if (cmp_n->next->next->next) /* negating ANY/ALL */
+   

MonetDB: Jun2020 - Cleanup and propagate not through comparison ...

2020-05-22 Thread Pedro Ferreira
Changeset: 7e044dae5c3e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7e044dae5c3e
Modified Files:
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_select.c
sql/server/sql_parser.y
Branch: Jun2020
Log Message:

Cleanup and propagate not through comparison symbols


diffs (105 lines):

diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -67,6 +67,42 @@ swap_compare( comp_type t )
 }
 
 comp_type 
+negate_compare( comp_type t )
+{
+   switch(t) {
+   case cmp_equal:
+   return cmp_notequal;
+   case cmp_notequal:
+   return cmp_equal;
+   case cmp_lt:
+   return cmp_gte;
+   case cmp_lte:
+   return cmp_gt;
+   case cmp_gte:
+   return cmp_lt;
+   case cmp_gt:
+   return cmp_lte;
+
+   case cmp_in:
+   return cmp_notin;
+   case cmp_notin:
+   return cmp_in;
+
+   case mark_in:
+   return mark_notin;
+   case mark_notin:
+   return mark_in;
+   case mark_exists:
+   return mark_notexists;
+   case mark_notexists:
+   return mark_exists;
+
+   default:
+   return t;
+   }
+}
+
+comp_type 
 range2lcompare( int r )
 {
if (r&1) {
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -25,6 +25,7 @@
 
 extern comp_type compare_str2type(const char *compare_op);
 extern comp_type swap_compare( comp_type t );
+extern comp_type negate_compare( comp_type t );
 extern comp_type range2lcompare( int r );
 extern comp_type range2rcompare( int r );
 extern int compare2range( int l, int r );
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
@@ -2243,6 +2243,14 @@ rel_in_exp(sql_query *query, sql_rel *re
case SQL_NOT: /* nested NOTs eliminate each other */ \
sc->data.sym = sc->data.sym->data.sym; \
return NEXT_CALL; \
+   case SQL_COMPARE: { \
+   dnode *cmp_n = sc->data.sym->data.lval->h; \
+   comp_type neg_cmp_type = 
negate_compare(compare_str2type(cmp_n->next->data.sval)); /* negate the 
comparator */ \
+   cmp_n->next->data.sval = sa_strdup(sql->sa, 
compare_func(neg_cmp_type, 0)); \
+   if (cmp_n->next->next->next) /* negating ANY/ALL */ \
+   cmp_n->next->next->next->data.i_val = 
cmp_n->next->next->next->data.i_val == 0 ? 1 : 0; \
+   return NEXT_CALL; \
+   } \
default: \
break; \
} 
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -3622,24 +3622,8 @@ predicate:
  ;
 
 pred_exp:
-NOT pred_exp 
-   { $$ = $2;
-
- if ($$->token == SQL_EXISTS)
-   $$->token = SQL_NOT_EXISTS;
- else if ($$->token == SQL_NOT_EXISTS)
-   $$->token = SQL_EXISTS;
- else if ($$->token == SQL_NOT_BETWEEN)
-   $$->token = SQL_BETWEEN;
- else if ($$->token == SQL_BETWEEN)
-   $$->token = SQL_NOT_BETWEEN;
- else if ($$->token == SQL_NOT_LIKE)
-   $$->token = SQL_LIKE;
- else if ($$->token == SQL_LIKE)
-   $$->token = SQL_NOT_LIKE;
- else
-   $$ = _symbol_create_symbol(SQL_NOT, $2); }
- |   predicate { $$ = $1; }
+NOT pred_exp { $$ = _symbol_create_symbol(SQL_NOT, $2); }
+ |  predicate   { $$ = $1; }
  ;
 
 comparison_predicate:
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jun2020 - better type check for in

2020-05-22 Thread Niels Nes
Changeset: bb7a72ae8e6a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bb7a72ae8e6a
Modified Files:
gdk/gdk_cross.c
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err
sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.out
sql/test/miscellaneous/Tests/simple_plans.stable.out
sql/test/subquery/Tests/subquery6.stable.err
sql/test/subquery/Tests/subquery6.stable.out
Branch: Jun2020
Log Message:

better type check for in
fixed issued with unroling of single joins


diffs (227 lines):

diff --git a/gdk/gdk_cross.c b/gdk/gdk_cross.c
--- a/gdk/gdk_cross.c
+++ b/gdk/gdk_cross.c
@@ -27,7 +27,7 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l
cnt1 = canditer_init(, l, sl);
cnt2 = canditer_init(, r, sr);
 
-   if (max_one && cnt2 > 1) {
+   if (max_one && cnt1 > 0 && cnt2 > 1) {
GDKerror("more than one match");
return GDK_FAIL;
}
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
@@ -687,13 +687,13 @@ rel_op_(mvc *sql, sql_schema *s, char *f
 }
 
 static sql_exp*
-exp_values_set_supertype(mvc *sql, sql_exp *values)
+exp_values_set_supertype(mvc *sql, sql_exp *values, sql_exp *opt_le)
 {
assert(is_values(values));
list *vals = exp_get_values(values), *nexps;
-   sql_subtype *tpe = exp_subtype(vals->h->data);
-
-   if (tpe)
+   sql_subtype *tpe = 
opt_le?exp_subtype(opt_le):exp_subtype(vals->h->data);
+
+   if (!opt_le && tpe)
values->tpe = *tpe;
 
for (node *m = vals->h; m; m = m->next) {
@@ -893,7 +893,7 @@ rel_values(sql_query *query, symbol *tab
}
/* loop to check types */
for (m = exps->h; m; m = m->next)
-   if (!(m->data = exp_values_set_supertype(sql, (sql_exp*) 
m->data)))
+   if (!(m->data = exp_values_set_supertype(sql, (sql_exp*) 
m->data, NULL)))
return NULL;
 
r = rel_project(sql->sa, NULL, exps);
@@ -2137,7 +2137,7 @@ rel_in_value_exp(sql_query *query, sql_r
} else { /* if it's not a tuple, enforce coersion on the type 
for every element on the list */
sql_subtype super;

-   if (!(values = exp_values_set_supertype(sql, values)))
+   if (!(values = exp_values_set_supertype(sql, values, 
le)))
return NULL;
if (rel_binop_check_types(sql, rel ? *rel : NULL, le, 
values, 0) < 0)
return NULL;
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -1242,6 +1242,8 @@ push_up_join(mvc *sql, sql_rel *rel, lis
rel->r = rel_dup(jl);
rel->exps = sa_list(sql->sa);
nj = rel_crossproduct(sql->sa, rel_dup(d), 
rel_dup(jr), j->op);
+   if (j->single)
+   set_single(nj);
rel_destroy(j);
j = nj;
set_dependent(j);
@@ -1281,6 +1283,8 @@ push_up_join(mvc *sql, sql_rel *rel, lis
if (!rd) {
rel->r = rel_dup(jl);
sql_rel *nj = rel_crossproduct(sql->sa, rel, 
rel_dup(jr), j->op);
+   if (j->single)
+   set_single(nj);
nj->exps = exps_copy(sql, j->exps);
rel_destroy(j);
j = nj; 
@@ -1294,6 +1298,8 @@ push_up_join(mvc *sql, sql_rel *rel, lis
if (!ld) {
rel->r = rel_dup(jr);
sql_rel *nj = rel_crossproduct(sql->sa, 
rel_dup(jl), rel, j->op);
+   if (j->single)
+   set_single(nj);
nj->exps = exps_copy(sql, j->exps);
rel_destroy(j);
j = nj; 
diff --git a/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err 
b/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err
--- a/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err
+++ b/sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err
@@ -23,34 +23,7 @@ stderr of test 'lateral.Bug-6310` in dir
 # cmdline opt  gdk_dbpath = 
/home/niels/scratch/rc-old/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2017
 # cmdline opt  gdk_debug = 536870922
 
-# 16:49:27 >  
-# 16:49:27 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-31693" "--port=34067"

MonetDB: mbedded - small fix for numpy/ pyintegration

2020-05-22 Thread Niels Nes
Changeset: 05b1c8b235ef for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=05b1c8b235ef
Modified Files:
cmake/monetdb-findpackages.cmake
sql/backends/monet5/UDF/pyapi3/CMakeLists.txt
Branch: mbedded
Log Message:

small fix for numpy/ pyintegration


diffs (24 lines):

diff --git a/cmake/monetdb-findpackages.cmake b/cmake/monetdb-findpackages.cmake
--- a/cmake/monetdb-findpackages.cmake
+++ b/cmake/monetdb-findpackages.cmake
@@ -28,6 +28,8 @@ else()
 endif()
 if(PY3INTEGRATION)
   set(HAVE_LIBPY3 "${Python3_NumPy_FOUND}")
+else()
+  message(STATUS "Disable Py3integration, because required NumPy is missing")
 endif(PY3INTEGRATION)
 
 if(WIN32)
diff --git a/sql/backends/monet5/UDF/pyapi3/CMakeLists.txt 
b/sql/backends/monet5/UDF/pyapi3/CMakeLists.txt
--- a/sql/backends/monet5/UDF/pyapi3/CMakeLists.txt
+++ b/sql/backends/monet5/UDF/pyapi3/CMakeLists.txt
@@ -6,7 +6,7 @@
 # Copyright 1997 - July 2008 CWI, August 2008 - 2020 MonetDB B.V.
 #]]
 
-if(PY3INTEGRATION)
+if(HAVE_LIBPY3)
   add_library(pyapi3 MODULE)
 
   target_sources(pyapi3
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jun2020 - Good programming practices: no duplicated code

2020-05-22 Thread Pedro Ferreira
Changeset: 2016ee14c9ba for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2016ee14c9ba
Modified Files:
sql/server/rel_select.c
Branch: Jun2020
Log Message:

Good programming practices: no duplicated code


diffs (137 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
@@ -2208,6 +2208,45 @@ rel_in_exp(sql_query *query, sql_rel *re
return rel_select_add_exp(sql->sa, rel, e);;
 }
 
+#define SIMPLIFY_NOT(sc, NEXT_CALL) \
+   switch (sc->data.sym->token) { \
+   case SQL_IN: \
+   sc->data.sym->token = SQL_NOT_IN; \
+   return NEXT_CALL; \
+   case SQL_NOT_IN: \
+   sc->data.sym->token = SQL_IN; \
+   return NEXT_CALL; \
+   case SQL_EXISTS: \
+   sc->data.sym->token = SQL_NOT_EXISTS; \
+   return NEXT_CALL; \
+   case SQL_NOT_EXISTS: \
+   sc->data.sym->token = SQL_EXISTS; \
+   return NEXT_CALL; \
+   case SQL_LIKE: \
+   sc->data.sym->token = SQL_NOT_LIKE; \
+   return NEXT_CALL; \
+   case SQL_NOT_LIKE: \
+   sc->data.sym->token = SQL_LIKE; \
+   return NEXT_CALL; \
+   case SQL_BETWEEN: \
+   sc->data.sym->token = SQL_NOT_BETWEEN; \
+   return NEXT_CALL; \
+   case SQL_NOT_BETWEEN: \
+   sc->data.sym->token = SQL_BETWEEN; \
+   return NEXT_CALL; \
+   case SQL_IS_NULL: \
+   sc->data.sym->token = SQL_IS_NOT_NULL; \
+   return NEXT_CALL; \
+   case SQL_IS_NOT_NULL: \
+   sc->data.sym->token = SQL_IS_NULL; \
+   return NEXT_CALL; \
+   case SQL_NOT: /* nested NOTs eliminate each other */ \
+   sc->data.sym = sc->data.sym->data.sym; \
+   return NEXT_CALL; \
+   default: \
+   break; \
+   } 
+
 sql_exp *
 rel_logical_value_exp(sql_query *query, sql_rel **rel, symbol *sc, int f, 
exp_kind ek)
 {
@@ -2464,42 +2503,7 @@ rel_logical_value_exp(sql_query *query, 
return le;
}
case SQL_NOT: {
-   switch (sc->data.sym->token) {
-   case SQL_IN:
-   sc->data.sym->token = SQL_NOT_IN;
-   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
-   case SQL_NOT_IN:
-   sc->data.sym->token = SQL_IN;
-   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
-   case SQL_EXISTS:
-   sc->data.sym->token = SQL_NOT_EXISTS;
-   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
-   case SQL_NOT_EXISTS:
-   sc->data.sym->token = SQL_EXISTS;
-   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
-   case SQL_LIKE:
-   sc->data.sym->token = SQL_NOT_LIKE;
-   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
-   case SQL_NOT_LIKE:
-   sc->data.sym->token = SQL_LIKE;
-   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
-   case SQL_BETWEEN:
-   sc->data.sym->token = SQL_NOT_BETWEEN;
-   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
-   case SQL_NOT_BETWEEN:
-   sc->data.sym->token = SQL_BETWEEN;
-   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
-   case SQL_IS_NULL:
-   sc->data.sym->token = SQL_IS_NOT_NULL;
-   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
-   case SQL_IS_NOT_NULL:
-   sc->data.sym->token = SQL_IS_NULL;
-   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
-   case SQL_NOT: /* nested NOTs eliminate each other */
-   return rel_logical_value_exp(query, rel, 
sc->data.sym->data.sym, f, ek);
-   default:
-   break;
-   } 
+   SIMPLIFY_NOT(sc, rel_logical_value_exp(query, rel, 
sc->data.sym, f, ek));
sql_exp *le = rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
 
if (!le)
@@ -2813,42 +2817,7 @@ rel_logical_exp(sql_query *query, sql_re
}
case SQL_NOT: {
sql_exp *le, *ls;
-   switch (sc->data.sym->token) {
-   case SQL_IN:
-   sc->data.sym->token = SQL_NOT_IN;
-   return rel_logical_exp(query, rel, sc->data.sym, f);
-   case SQL_NOT_IN:
-   sc->data.sym->token = SQL_IN;
-   return rel_logical_exp(query, rel, 

MonetDB: Jun2020 - Fixed sqlite query optimizing early on nested...

2020-05-22 Thread Pedro Ferreira
Changeset: a48f714e5586 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a48f714e5586
Modified Files:
sql/server/rel_select.c
sql/test/miscellaneous/Tests/groupby_error.sql
sql/test/miscellaneous/Tests/groupby_error.stable.out
Branch: Jun2020
Log Message:

Fixed sqlite query optimizing early on nested not symbols in the parser


diffs (138 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
@@ -2464,6 +2464,42 @@ rel_logical_value_exp(sql_query *query, 
return le;
}
case SQL_NOT: {
+   switch (sc->data.sym->token) {
+   case SQL_IN:
+   sc->data.sym->token = SQL_NOT_IN;
+   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
+   case SQL_NOT_IN:
+   sc->data.sym->token = SQL_IN;
+   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
+   case SQL_EXISTS:
+   sc->data.sym->token = SQL_NOT_EXISTS;
+   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
+   case SQL_NOT_EXISTS:
+   sc->data.sym->token = SQL_EXISTS;
+   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
+   case SQL_LIKE:
+   sc->data.sym->token = SQL_NOT_LIKE;
+   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
+   case SQL_NOT_LIKE:
+   sc->data.sym->token = SQL_LIKE;
+   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
+   case SQL_BETWEEN:
+   sc->data.sym->token = SQL_NOT_BETWEEN;
+   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
+   case SQL_NOT_BETWEEN:
+   sc->data.sym->token = SQL_BETWEEN;
+   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
+   case SQL_IS_NULL:
+   sc->data.sym->token = SQL_IS_NOT_NULL;
+   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
+   case SQL_IS_NOT_NULL:
+   sc->data.sym->token = SQL_IS_NULL;
+   return rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
+   case SQL_NOT: /* nested NOTs eliminate each other */
+   return rel_logical_value_exp(query, rel, 
sc->data.sym->data.sym, f, ek);
+   default:
+   break;
+   } 
sql_exp *le = rel_logical_value_exp(query, rel, sc->data.sym, 
f, ek);
 
if (!le)
@@ -2784,6 +2820,32 @@ rel_logical_exp(sql_query *query, sql_re
case SQL_NOT_IN:
sc->data.sym->token = SQL_IN;
return rel_logical_exp(query, rel, sc->data.sym, f);
+   case SQL_EXISTS:
+   sc->data.sym->token = SQL_NOT_EXISTS;
+   return rel_logical_exp(query, rel, sc->data.sym, f);
+   case SQL_NOT_EXISTS:
+   sc->data.sym->token = SQL_EXISTS;
+   return rel_logical_exp(query, rel, sc->data.sym, f);
+   case SQL_LIKE:
+   sc->data.sym->token = SQL_NOT_LIKE;
+   return rel_logical_exp(query, rel, sc->data.sym, f);
+   case SQL_NOT_LIKE:
+   sc->data.sym->token = SQL_LIKE;
+   return rel_logical_exp(query, rel, sc->data.sym, f);
+   case SQL_BETWEEN:
+   sc->data.sym->token = SQL_NOT_BETWEEN;
+   return rel_logical_exp(query, rel, sc->data.sym, f);
+   case SQL_NOT_BETWEEN:
+   sc->data.sym->token = SQL_BETWEEN;
+   return rel_logical_exp(query, rel, sc->data.sym, f);
+   case SQL_IS_NULL:
+   sc->data.sym->token = SQL_IS_NOT_NULL;
+   return rel_logical_exp(query, rel, sc->data.sym, f);
+   case SQL_IS_NOT_NULL:
+   sc->data.sym->token = SQL_IS_NULL;
+   return rel_logical_exp(query, rel, sc->data.sym, f);
+   case SQL_NOT: /* nested NOTs eliminate each other */
+   return rel_logical_exp(query, rel, 
sc->data.sym->data.sym, f);
default:
break;
} 
diff --git a/sql/test/miscellaneous/Tests/groupby_error.sql 
b/sql/test/miscellaneous/Tests/groupby_error.sql
--- a/sql/test/miscellaneous/Tests/groupby_error.sql
+++ b/sql/test/miscellaneous/Tests/groupby_error.sql
@@ -35,9 +35,19 @@ SELECT col0 FROM tab2 WHERE - - col2;
 SELECT 1 FROM tab0 WHERE 

MonetDB: mbedded - typo

2020-05-22 Thread Niels Nes
Changeset: b5703abaab7c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b5703abaab7c
Modified Files:
cmake/monetdb-findpackages.cmake
Branch: mbedded
Log Message:

typo


diffs (12 lines):

diff --git a/cmake/monetdb-findpackages.cmake b/cmake/monetdb-findpackages.cmake
--- a/cmake/monetdb-findpackages.cmake
+++ b/cmake/monetdb-findpackages.cmake
@@ -18,7 +18,7 @@ if(${CMAKE_VERSION} VERSION_LESS "3.14.0
 set(Python_EXECUTABLE "${Python3_EXECUTABLE}")
   endif(Python3_Interpreter_FOUND)
   if(NumPy_FOUND)
-set(Python3_Numpy_FOUND 1)
+set(Python3_NumPy_FOUND 1)
   endif(NumPy_FOUND)
 else()
   find_package(Python3 COMPONENTS Interpreter Development NumPy)
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: mbedded - fix bugs in library detection and add tests

2020-05-22 Thread Arjen de Rijke
Changeset: 7389e7d623d7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7389e7d623d7
Added Files:
ctest/cmake/detect-bz2.cmake
ctest/cmake/detect-commoncrypto.cmake
ctest/cmake/detect-curl.cmake
ctest/cmake/detect-iconv.cmake
ctest/cmake/detect-libz.cmake
ctest/cmake/detect-lz4.cmake
ctest/cmake/detect-openssl.cmake
ctest/cmake/detect-pcre.cmake
ctest/cmake/detect-proj.cmake
ctest/cmake/detect-xml.cmake
ctest/cmake/test_detect_bz2.c.in
ctest/cmake/test_detect_commoncrypto.c.in
ctest/cmake/test_detect_curl.c.in
ctest/cmake/test_detect_iconv.c.in
ctest/cmake/test_detect_libz.c.in
ctest/cmake/test_detect_lz4.c.in
ctest/cmake/test_detect_openssl.c.in
ctest/cmake/test_detect_pcre.c.in
ctest/cmake/test_detect_proj.c.in
ctest/cmake/test_detect_xml.c.in
Removed Files:
ctest/cmake/test_detect.c
ctest/cmake/test_detect_bz2.c
ctest/cmake/test_detect_curl.c
ctest/cmake/test_detect_libz.c
ctest/cmake/test_detect_lz4.c
ctest/cmake/test_detect_pcre.c
ctest/cmake/test_detect_proj.c
Modified Files:
cmake/monetdb-functions.cmake
ctest/cmake/CMakeLists.txt
monetdb_config.h.in
monetdb_config_win32.h.in
Branch: mbedded
Log Message:

fix bugs in library detection and add tests


diffs (truncated from 1143 to 300 lines):

diff --git a/cmake/monetdb-functions.cmake b/cmake/monetdb-functions.cmake
--- a/cmake/monetdb-functions.cmake
+++ b/cmake/monetdb-functions.cmake
@@ -119,18 +119,22 @@ function(monetdb_cmake_summary)
 message(STATUS "Linux distro: ${LINUX_DISTRO}")
 message(STATUS "Linux distro version: ${LINUX_DISTRO_VERSION}")
   endif()
+  message(STATUS "Iconv library: ${Iconv_FOUND}")
+  message(STATUS "Pthread library: ${CMAKE_USE_PTHREADS_INIT}")
+  message(STATUS "Pcre library: ${PCRE_FOUND}")
+  message(STATUS "Openssl library: ${OPENSSL_FOUND}")
+  message(STATUS "Commoncrypto library: ${COMMONCRYPTO_FOUND}")
+  message(STATUS "Bz2 library: ${BZIP2_FOUND}")
+  message(STATUS "Curl library: ${CURL_FOUND}")
+  message(STATUS "Lzma library: ${LIBLZMA_FOUND}")
+  message(STATUS "Libxml2 library: ${LIBXML2_FOUND}")
+  message(STATUS "Zlib library: ${ZLIB_FOUND}")
+  message(STATUS "Lz4 library: ${LZ4_FOUND}")
+  message(STATUS "Proj library: ${PROJ_FOUND}")
   message(STATUS "Geos library: ${GEOS_FOUND}")
   message(STATUS "Gdal library: ${GDAL_FOUND}")
-  message(STATUS "Lzma library: ${LZMA_FOUND}")
-  message(STATUS "Libxml2 library: ${LIBXML2_FOUND}")
-  message(STATUS "Curl library: ${CURL_FOUND}")
-  message(STATUS "Bz2 library: ${BZ2_FOUND}")
-  message(STATUS "Zlib library: ${LIBZ_FOUND}")
-  message(STATUS "Proj library: ${PROJ_FOUND}")
-  message(STATUS "Lz4 library: ${LZ4_FOUND}")
   message(STATUS "Cfitsio library: ${CFITSIO_FOUND}")
   message(STATUS "Kvm library: ${KVM_FOUND}")
-  message(STATUS "Pcre library: ${PCRE_FOUND}")
   message(STATUS "Netcdf library: ${NETCDF_FOUND}")
   message(STATUS "Readline library: ${READLINE_FOUND}")
   message(STATUS "-")
diff --git a/ctest/cmake/CMakeLists.txt b/ctest/cmake/CMakeLists.txt
--- a/ctest/cmake/CMakeLists.txt
+++ b/ctest/cmake/CMakeLists.txt
@@ -16,55 +16,23 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux"
   get_os_release_info(LINUX_DISTRO LINUX_DISTRO_VERSION)
 endif()
 
-add_executable(test_detect test_detect.c)
-target_link_libraries(test_detect
-  PRIVATE
-  monetdb_config_header)
-add_test(testDetect test_detect)
-
-add_executable(test_detect_pcre test_detect_pcre.c)
-target_link_libraries(test_detect_pcre
-  PRIVATE
-  monetdb_config_header)
-add_test(testDetectPcre test_detect_pcre)
-
-add_executable(test_detect_bz2 test_detect_bz2.c)
-target_link_libraries(test_detect_bz2
-  PRIVATE
-  monetdb_config_header)
-add_test(testDetectBz2 test_detect_bz2)
-
-add_executable(test_detect_curl test_detect_curl.c)
-target_link_libraries(test_detect_curl
-  PRIVATE
-  monetdb_config_header)
-add_test(testDetectCurl test_detect_curl)
-
-add_executable(test_detect_libz test_detect_libz.c)
-target_link_libraries(test_detect_libz
-  PRIVATE
-  monetdb_config_header)
-add_test(testDetectLibz test_detect_libz)
-
-add_executable(test_detect_lz4 test_detect_lz4.c)
-target_link_libraries(test_detect_lz4
-  PRIVATE
-  monetdb_config_header)
-add_test(testDetectLz4 test_detect_lz4)
-
-add_executable(test_detect_proj test_detect_proj.c)
-target_link_libraries(test_detect_proj
-  PRIVATE
-  monetdb_config_header)
-add_test(testDetectProj test_detect_proj)
-
+include(${CMAKE_CURRENT_SOURCE_DIR}/detect-iconv.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/detect-pthreadh.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/detect-pcre.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/detect-openssl.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/detect-commoncrypto.cmake)

MonetDB: mbedded - only add PYINTEGRATION if we have NumPy

2020-05-22 Thread Niels Nes
Changeset: b8f6409c85fc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b8f6409c85fc
Modified Files:
cmake/monetdb-findpackages.cmake
Branch: mbedded
Log Message:

only add PYINTEGRATION if we have NumPy


diffs (22 lines):

diff --git a/cmake/monetdb-findpackages.cmake b/cmake/monetdb-findpackages.cmake
--- a/cmake/monetdb-findpackages.cmake
+++ b/cmake/monetdb-findpackages.cmake
@@ -17,6 +17,9 @@ if(${CMAKE_VERSION} VERSION_LESS "3.14.0
   if(Python3_Interpreter_FOUND)
 set(Python_EXECUTABLE "${Python3_EXECUTABLE}")
   endif(Python3_Interpreter_FOUND)
+  if(NumPy_FOUND)
+set(Python3_Numpy_FOUND 1)
+  endif(NumPy_FOUND)
 else()
   find_package(Python3 COMPONENTS Interpreter Development NumPy)
   if(Python3_Interpreter_FOUND)
@@ -24,7 +27,7 @@ else()
   endif(Python3_Interpreter_FOUND)
 endif()
 if(PY3INTEGRATION)
-  set(HAVE_LIBPY3 "${Python3_FOUND}")
+  set(HAVE_LIBPY3 "${Python3_NumPy_FOUND}")
 endif(PY3INTEGRATION)
 
 if(WIN32)
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: mbedded - so now on one line and with quotes and ; (con...

2020-05-22 Thread Niels Nes
Changeset: e0b7d53126fc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e0b7d53126fc
Modified Files:
clients/mapilib/CMakeLists.txt
Branch: mbedded
Log Message:

so now on one line and with quotes and ; (consistency would be nice)


diffs (13 lines):

diff --git a/clients/mapilib/CMakeLists.txt b/clients/mapilib/CMakeLists.txt
--- a/clients/mapilib/CMakeLists.txt
+++ b/clients/mapilib/CMakeLists.txt
@@ -47,8 +47,7 @@ set_target_properties(mapi
   PROPERTIES
   VERSION ${MAPI_VERSION}
   SOVERSION ${MAPI_VERSION_MAJOR}
-  PUBLIC_HEADER mapi.h 
-   PUBLIC_HEADER mapi_querytype.h)
+  PUBLIC_HEADER "mapi.h;mapi_querytype.h")
 
 if (NOT WIN32)
   configure_file(monetdb-mapi.pc.in
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: mbedded - need 2 lines of PUBLIC_HEADER

2020-05-22 Thread Niels Nes
Changeset: 74e82e39e631 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=74e82e39e631
Modified Files:
clients/mapilib/CMakeLists.txt
Branch: mbedded
Log Message:

need 2 lines of PUBLIC_HEADER


diffs (13 lines):

diff --git a/clients/mapilib/CMakeLists.txt b/clients/mapilib/CMakeLists.txt
--- a/clients/mapilib/CMakeLists.txt
+++ b/clients/mapilib/CMakeLists.txt
@@ -47,7 +47,8 @@ set_target_properties(mapi
   PROPERTIES
   VERSION ${MAPI_VERSION}
   SOVERSION ${MAPI_VERSION_MAJOR}
-  PUBLIC_HEADER mapi.h mapi_querytype.h)
+  PUBLIC_HEADER mapi.h 
+   PUBLIC_HEADER mapi_querytype.h)
 
 if (NOT WIN32)
   configure_file(monetdb-mapi.pc.in
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: mbedded - we need mapi_querytype.h

2020-05-22 Thread Niels Nes
Changeset: 942baf37b62b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=942baf37b62b
Modified Files:
clients/mapilib/CMakeLists.txt
Branch: mbedded
Log Message:

we need mapi_querytype.h


diffs (12 lines):

diff --git a/clients/mapilib/CMakeLists.txt b/clients/mapilib/CMakeLists.txt
--- a/clients/mapilib/CMakeLists.txt
+++ b/clients/mapilib/CMakeLists.txt
@@ -47,7 +47,7 @@ set_target_properties(mapi
   PROPERTIES
   VERSION ${MAPI_VERSION}
   SOVERSION ${MAPI_VERSION_MAJOR}
-  PUBLIC_HEADER mapi.h /mapi_querytype.h)
+  PUBLIC_HEADER mapi.h mapi_querytype.h)
 
 if (NOT WIN32)
   configure_file(monetdb-mapi.pc.in
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: mbedded - we need mapi_querytype.h

2020-05-22 Thread Niels Nes
Changeset: a7f5f9049936 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a7f5f9049936
Modified Files:
clients/mapilib/CMakeLists.txt
Branch: mbedded
Log Message:

we need mapi_querytype.h


diffs (12 lines):

diff --git a/clients/mapilib/CMakeLists.txt b/clients/mapilib/CMakeLists.txt
--- a/clients/mapilib/CMakeLists.txt
+++ b/clients/mapilib/CMakeLists.txt
@@ -47,7 +47,7 @@ set_target_properties(mapi
   PROPERTIES
   VERSION ${MAPI_VERSION}
   SOVERSION ${MAPI_VERSION_MAJOR}
-  PUBLIC_HEADER mapi.h)
+  PUBLIC_HEADER mapi.h /mapi_querytype.h)
 
 if (NOT WIN32)
   configure_file(monetdb-mapi.pc.in
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jun2020 - sqlsmith queries with timeouts and MAL errors

2020-05-22 Thread Pedro Ferreira
Changeset: bb00415a51ee for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bb00415a51ee
Modified Files:
sql/test/mergetables/Tests/sqlsmith-exists2.sql
Branch: Jun2020
Log Message:

sqlsmith queries with timeouts and MAL errors


diffs (210 lines):

diff --git a/sql/test/mergetables/Tests/sqlsmith-exists2.sql 
b/sql/test/mergetables/Tests/sqlsmith-exists2.sql
--- a/sql/test/mergetables/Tests/sqlsmith-exists2.sql
+++ b/sql/test/mergetables/Tests/sqlsmith-exists2.sql
@@ -283,5 +283,206 @@ select
  and (ref_4.i is not null)
  limit 56) as subq_0
  on (true) where true limit 85;
+  --long output
+
+select 
+ subq_1.c0 as c0, 
+ subq_1.c0 as c1, 
+ subq_1.c0 as c2, 
+ subq_0.c0 as c3, 
+ subq_0.c1 as c4, 
+ subq_0.c0 as c5, 
+ subq_0.c0 as c6
+from 
+ (select 
+ ref_0.col0 as c0, 
+ ref_1.bb as c1
+ from 
+ tab0 as ref_0
+ right join analytics as ref_1
+ on (exists (
+ select 
+ ref_1.aa as c0
+ from 
+ longtable as ref_2
+ where ref_0.col2 is not null))
+ where ((ref_1.aa is null) 
+ and ((false) 
+ and (ref_0.col2 is not null))) 
+ or (ref_0.col2 is not null)) as subq_0
+ inner join (select 
+ ref_3.col3 as c0
+ from 
+ tbl_productsales as ref_3
+ where (ref_3.col3 is null) 
+ and (exists (
+ select 
+ ref_3.col6 as c0, 
+ ref_3.col2 as c1, 
+ ref_4.col1 as c2, 
+ ref_4.col1 as c3, 
+ ref_4.col2 as c4, 
+ ref_3.col4 as c5, 
+ ref_4.col0 as c6, 
+ ref_4.col0 as c7
+ from 
+ tab0 as ref_4
+ where (true) 
+ and (true)))
+ limit 173) as subq_1
+ on ((subq_1.c0 is not null) 
+ or (subq_0.c0 is null))
+where subq_1.c0 is not null;
+  --empty
+
+select 
+ ref_0.col2 as c0, 
+ cast(nullif(ref_0.col1,
+ ref_0.col0) as int) as c1, 
+ 29 as c2, 
+ ref_0.col1 as c3, 
+ ref_0.col1 as c4, 
+ ref_0.col0 as c5
+from 
+ tab1 as ref_0
+where (((true) 
+ and ((ref_0.col0 is not null) 
+ and (ref_0.col2 is null))) 
+ or (false)) 
+ or (exists (
+ select 
+ ref_1.col2 as c0, 
+ subq_0.c0 as c1, 
+ ref_1.col1 as c2, 
+ subq_0.c6 as c3, 
+ ref_0.col1 as c4, 
+ ref_1.col2 as c5, 
+ ref_1.col1 as c6, 
+ ref_1.col0 as c7, 
+ ref_0.col2 as c8, 
+ ref_1.col1 as c9, 
+ ref_1.col0 as c10, 
+ subq_0.c1 as c11, 
+ ref_0.col2 as c12, 
+ subq_0.c3 as c13, 
+ ref_1.col1 as c14
+ from 
+ tab0 as ref_1
+ right join (select 
+ 17 as c0, 
+ ref_0.col1 as c1, 
+ ref_3.aa as c2, 
+ ref_0.col1 as c3, 
+ ref_3.aa as c4, 
+ ref_3.aa as c5, 
+ ref_0.col0 as c6
+ from 
+ tbl_productsales as ref_2
+ inner join analytics as ref_3
+ on (ref_2.col1 = ref_3.aa )
+ where true) as subq_0
+ on ((false) 
+ or ((ref_1.col1 is null) 
+ and ((true) 
+ and ((true) 
+ and subq_0.c5 is null) 
+ or (false)) 
+ or ((false) 
+ or (true))) 
+ and (exists (
+ select 
+ ref_1.col0 as c0, 
+ subq_0.c0 as c1, 
+ subq_0.c3 as c2, 
+ ref_4.col1 as c3, 
+ subq_0.c0 as c4
+ from 
+ tab0 as ref_4
+ where exists (
+ select 
+ ref_4.col1 as c0, 
+ ref_0.col0 as c1
+ from 
+ tab2 as ref_5
+ where true
+ where ((exists (
+ select 
+ ref_6.col1 as c0, 
+ ref_0.col2 as c1, 
+ ref_1.col0 as c2, 
+ subq_0.c1 as c3, 
+ ref_1.col1 as c4, 
+ subq_0.c3 as c5, 
+ ref_1.col0 as c6, 
+ ref_1.col2 as c7
+ from 
+ tab1 as ref_6
+ where false)) 
+ or (exists (
+ select 
+ ref_0.col1 as c0, 
+ subq_0.c4 as c1, 
+ ref_0.col2 as c2, 
+ ref_1.col0 as c3, 
+ ref_1.col0 as c4, 
+ ref_0.col1 as c5
+ from 
+ tab1 as ref_7
+ where ref_1.col2 is null))) 
+ and (subq_0.c5 is not null)))
+limit 74;
+ -- 96  14  29  14  14  51
+ -- 59   5  29   5   5  85
+ -- 68  47  29  47  47  91
+
+select 
+ cast(coalesce(subq_1.c0,
+ cast(nullif(subq_0.c0,
+ 93) as int)) as int) as c0, 
+ subq_1.c0 as c1
+from 
+ (select 
+ ref_0.col4 as c0, 
+ ref_0.col7 as c1, 
+ ref_0.col4 as c2
+ from 
+ another_t as ref_0
+ where false
+ limit 139) as subq_0
+ inner join (select 
+ ref_1.col1 as c0
+ from 
+ longtable as ref_1
+ where 7 is not null
+ limit 114) as subq_1
+ on (exists (
+ select 
+ ref_3.col1 as c0, 
+ subq_1.c0 as c1, 
+ ref_3.col0 as c2, 
+ ref_2.bb as c3, 
+ ref_4.col8 as c4
+ from 
+ analytics as ref_2
+ left join tab2 as ref_3
+ left join longtable as ref_4
+ on (subq_0.c0 is null)
+ on (ref_2.bb = ref_4.col1 )
+ where false))
+where (((exists (
+ select 
+ ref_5.col5 as c0
+ from 
+ longtable as ref_5
+ where ((false) 
+ and (subq_0.c1 is not null)) 
+ or (false))) 
+ or ((true) 
+ and ((true) 
+ and (false 
+ or (subq_1.c0 is not null)) 
+ and ((subq_0.c0 is null) 
+ or (false));
+  -- empty
 
 ROLLBACK;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jun2020 - Fix for sqlsmith crash, ie if a topN relation...

2020-05-22 Thread Pedro Ferreira
Changeset: 4ce20134d011 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4ce20134d011
Modified Files:
sql/server/rel_optimizer.c
sql/test/mergetables/Tests/sqlsmith-exists2.stable.out
Branch: Jun2020
Log Message:

Fix for sqlsmith crash, ie if a topN relation has more than one reference, it 
cannot be pushed down


diffs (99 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -2109,7 +2109,7 @@ rel_push_topn_and_sample_down(mvc *sql, 
 
/* push topn/sample under projections */
 
-   if (r && is_simple_project(r->op) && !need_distinct(r) && 
!rel_is_ref(r) && r->l && !r->r) {
+   if (!rel_is_ref(rel) && r && is_simple_project(r->op) && 
!need_distinct(r) && !rel_is_ref(r) && r->l && !r->r) {
sql_rel *x = r, *px = x;
 
while (is_simple_project(x->op) && !need_distinct(x) && 
!rel_is_ref(x) && x->l && !x->r) {
diff --git a/sql/test/mergetables/Tests/sqlsmith-exists2.stable.out 
b/sql/test/mergetables/Tests/sqlsmith-exists2.stable.out
--- a/sql/test/mergetables/Tests/sqlsmith-exists2.stable.out
+++ b/sql/test/mergetables/Tests/sqlsmith-exists2.stable.out
@@ -221,6 +221,83 @@ stdout of test 'sqlsmith-exists2` in dir
 [ 1]
 [ 1]
 [ 1]
+#select 
+# ref_1.col3 as c0, 
+# ref_1.col4 as c1, 
+# cast(nullif(ref_0.col0,
+# subq_0.c8) as int) as c2 from 
+# tab1 as ref_0
+# right join tbl_productsales as ref_1
+# on (exists (
+# select 
+# ref_1.col1 as c0, 
+# ref_2.col2 as c1, 
+# ref_0.col0 as c2, 
+# ref_2.col0 as c3, 
+# ref_2.col0 as c4, 
+# ref_1.col2 as c5
+# from 
+# tab1 as ref_2
+# where false))
+# inner join (select 
+# ref_4.i as c0, 
+# ref_3.col0 as c1, 
+# ref_4.i as c2, 
+# ref_4.i as c3, 
+# ref_4.i as c4, 
+# ref_4.i as c5, 
+# ref_3.col2 as c6, 
+# ref_4.i as c7, 
+# ref_3.col2 as c8, 
+% .,   .,  . # table_name
+% c0,  c1, c2 # name
+% varchar, int,int # type
+% 9,   3,  1 # length
+[ "Mobo Game", 200,NULL]
+[ "Mobo Game", 200,NULL]
+[ "Mobo Game", 200,NULL]
+[ "Mobo Game", 200,NULL]
+[ "Mobo Game", 200,NULL]
+[ "Mobo Game", 200,NULL]
+[ "Mobo Game", 200,NULL]
+[ "Mobo Game", 200,NULL]
+[ "Mobo Game", 200,NULL]
+[ "PKO Game",  400,NULL]
+[ "PKO Game",  400,NULL]
+[ "PKO Game",  400,NULL]
+[ "PKO Game",  400,NULL]
+[ "PKO Game",  400,NULL]
+[ "PKO Game",  400,NULL]
+[ "PKO Game",  400,NULL]
+[ "PKO Game",  400,NULL]
+[ "PKO Game",  400,NULL]
+[ "Shirt", 500,NULL]
+[ "Shirt", 500,NULL]
+[ "Shirt", 500,NULL]
+[ "Shirt", 500,NULL]
+[ "Shirt", 500,NULL]
+[ "Shirt", 500,NULL]
+[ "Shirt", 500,NULL]
+[ "Shirt", 500,NULL]
+[ "Shirt", 500,NULL]
+[ "Shorts",100,NULL]
+[ "Shorts",100,NULL]
+[ "Shorts",100,NULL]
+[ "Shorts",100,NULL]
+[ "Shorts",100,NULL]
+[ "Shorts",100,NULL]
+[ "Shorts",100,NULL]
+[ "Shorts",100,NULL]
+[ "Shorts",100,NULL]
+[ "Ball",  0,  NULL]
+[ "Ball",  0,  NULL]
+[ "Ball",  0,  NULL]
+[ "Ball",  0,  NULL]
+[ "Ball",  0,  NULL]
+[ "Ball",  0,  NULL]
+[ "Ball",  0,  NULL]
+[ "Ball",  0,  NULL]
+[ "Ball",  0,  NULL]
 #ROLLBACK;
 
 # 22:12:15 >  
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jun2020 - Starting the day with breakfast bugs and cras...

2020-05-22 Thread Pedro Ferreira
Changeset: 92957b73e447 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=92957b73e447
Modified Files:
sql/test/mergetables/Tests/sqlsmith-exists2.sql
sql/test/miscellaneous/Tests/groupby_error.sql
sql/test/subquery/Tests/subquery6.sql
Branch: Jun2020
Log Message:

Starting the day with breakfast bugs and crashes :S


diffs (83 lines):

diff --git a/sql/test/mergetables/Tests/sqlsmith-exists2.sql 
b/sql/test/mergetables/Tests/sqlsmith-exists2.sql
--- a/sql/test/mergetables/Tests/sqlsmith-exists2.sql
+++ b/sql/test/mergetables/Tests/sqlsmith-exists2.sql
@@ -241,4 +241,47 @@ from tab1
   on (true);
  -- 27 rows with 1
 
+select 
+ ref_1.col3 as c0, 
+ ref_1.col4 as c1, 
+ cast(nullif(ref_0.col0,
+ subq_0.c8) as int) as c2 from 
+ tab1 as ref_0
+ right join tbl_productsales as ref_1
+ on (exists (
+ select 
+ ref_1.col1 as c0, 
+ ref_2.col2 as c1, 
+ ref_0.col0 as c2, 
+ ref_2.col0 as c3, 
+ ref_2.col0 as c4, 
+ ref_1.col2 as c5
+ from 
+ tab1 as ref_2
+ where false))
+ inner join (select 
+ ref_4.i as c0, 
+ ref_3.col0 as c1, 
+ ref_4.i as c2, 
+ ref_4.i as c3, 
+ ref_4.i as c4, 
+ ref_4.i as c5, 
+ ref_3.col2 as c6, 
+ ref_4.i as c7, 
+ ref_3.col2 as c8, 
+ ref_4.i as c9
+ from 
+ tab0 as ref_3
+ right join integers as ref_4
+ on (true)
+ where ((73 is null) 
+ and (ref_4.i is not null)) 
+ or (true)) 
+ and (ref_4.i is null)) 
+ or (ref_3.col2 is null)) 
+ or (true)) 
+ and (ref_4.i is not null)
+ limit 56) as subq_0
+ on (true) where true limit 85;
+
 ROLLBACK;
diff --git a/sql/test/miscellaneous/Tests/groupby_error.sql 
b/sql/test/miscellaneous/Tests/groupby_error.sql
--- a/sql/test/miscellaneous/Tests/groupby_error.sql
+++ b/sql/test/miscellaneous/Tests/groupby_error.sql
@@ -32,6 +32,12 @@ SELECT col0 FROM tab2 WHERE - - col2;
-- 75
-- 46
 
+SELECT 1 FROM tab0 WHERE NOT (NOT NULL IN (1));
+   --empty
+
+SELECT - col0 + + CAST ( NULL AS INTEGER ) AS col2 FROM tab0 AS cor0 WHERE NOT 
( NOT + - CAST ( NULL AS INTEGER ) NOT IN ( col0 / CAST ( col2 AS INTEGER ) - + 
col1 ) );
+   --empty
+
 PLAN SELECT DISTINCT col0, col1, col2, col0 FROM tab0;
 
 SELECT DISTINCT col0, col1, col2, col0 FROM tab0;
diff --git a/sql/test/subquery/Tests/subquery6.sql 
b/sql/test/subquery/Tests/subquery6.sql
--- a/sql/test/subquery/Tests/subquery6.sql
+++ b/sql/test/subquery/Tests/subquery6.sql
@@ -36,6 +36,12 @@ WHERE ctr1.ctr_total_return >
   AND ctr1.ctr_customer_sk = TotalSales;
--empty
 
+SELECT i FROM integers i1 WHERE (SELECT CASE WHEN i1.i IS NULL THEN (SELECT 
FALSE FROM integers i2) ELSE TRUE END);
+   --error, more than one row returned by a subquery used as an expression
+
+SELECT (SELECT (SELECT SUM(col1)) IN (MAX(col2))) FROM another_t;
+   --False
+
 DROP TABLE tbl_ProductSales;
 DROP TABLE another_T;
 DROP TABLE integers;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list