MonetDB: Jul2021 - merge heads

2023-05-01 Thread Sjoerd Mullender
Changeset: 1258a1b4b80c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1258a1b4b80c
Modified Files:
.hgtags
Branch: Jul2021
Log Message:

merge heads


diffs (8 lines):

diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -840,3 +840,4 @@ 700e099bfee85318da09aabcd78ec7ea6e8fb6ef
 8a95168e853382b9b89ac7b67e343788ea837f3a Jul2021_31
 8a95168e853382b9b89ac7b67e343788ea837f3a Jul2021_SP9_release
 24385ee6130494440e09d31ec73f4aa2e2893e98 Jul2021_33
+05b3d9ea9165baf1d2956d5b06ad85f817ecc6d2 Jul2021_33
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


MonetDB: Jul2021 - Merge heads

2021-07-07 Thread Panagiotis Koutsourakis
Changeset: 2f44594a914e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2f44594a914e
Modified Files:
sql/server/sql_scan.c
Branch: Jul2021
Log Message:

Merge heads


diffs (truncated from 5186 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -9170,6 +9170,7 @@ stdout of test 'MAL-signatures` in direc
 [ "rapi",  "eval_aggr","pattern rapi.eval_aggr(X_0:ptr, X_1:str, 
X_2:any...):any... ", "RAPIevalAggr;",""  ]
 [ "rapi",  "prelude",  "command rapi.prelude():void ", "RAPIprelude;", 
""  ]
 [ "rapi",  "subeval_aggr", "pattern rapi.subeval_aggr(X_0:ptr, X_1:str, 
X_2:any...):any... ",  "RAPIevalAggr;",""  ]
+[ "remote","assert",   "pattern remote.assert(X_0:bit, X_1:str):void 
","RMTassert;",   ""  ]
 [ "remote","batbincopy",   "pattern remote.batbincopy():bat[:any] ",   
"RMTbincopyfrom;",  ""  ]
 [ "remote","batbincopy",   "pattern remote.batbincopy(X_0:bat[:any]):void 
",   "RMTbincopyto;",""  ]
 [ "remote","batload",  "pattern remote.batload(X_0:any_1, 
X_1:int):bat[:any_1] ",  "RMTbatload;",  ""  ]
@@ -9271,6 +9272,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "deltas",   "pattern sql.deltas(X_0:str, X_1:str) 
(X_2:bat[:int], X_3:bat[:lng], X_4:bat[:lng], X_5:bat[:lng], X_6:bat[:lng], 
X_7:bat[:lng], X_8:bat[:int]) ",  "mvc_delta_values;",""  ]
 [ "sql",   "deltas",   "pattern sql.deltas(X_0:str, X_1:str, X_2:str) 
(X_3:bat[:int], X_4:bat[:lng], X_5:bat[:lng], X_6:bat[:lng], X_7:bat[:lng], 
X_8:bat[:lng], X_9:bat[:int]) ", "mvc_delta_values;",""  ]
 [ "sql",   "dense_rank",   "pattern sql.dense_rank(X_0:any_1, X_1:bit, 
X_2:bit):int ", "SQLdense_rank;",   ""  ]
+[ "sql",   "deregister",   "pattern sql.deregister():int ",
"RAstatementEnd;",  ""  ]
 [ "sql",   "diff", "pattern sql.diff(X_0:any_1):bit ", "SQLdiff;", 
""  ]
 [ "sql",   "diff", "pattern sql.diff(X_0:bit, X_1:any_1):bit ",
"SQLdiff;", ""  ]
 [ "sql",   "drop_hash","unsafe pattern sql.drop_hash(X_0:str, 
X_1:str):void ", "SQLdrop_hash;",""  ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -12471,6 +12471,7 @@ stdout of test 'MAL-signatures` in direc
 [ "rapi",  "eval_aggr","pattern rapi.eval_aggr(X_0:ptr, X_1:str, 
X_2:any...):any... ", "RAPIevalAggr;",""  ]
 [ "rapi",  "prelude",  "command rapi.prelude():void ", "RAPIprelude;", 
""  ]
 [ "rapi",  "subeval_aggr", "pattern rapi.subeval_aggr(X_0:ptr, X_1:str, 
X_2:any...):any... ",  "RAPIevalAggr;",""  ]
+[ "remote","assert",   "pattern remote.assert(X_0:bit, X_1:str):void 
","RMTassert;",   ""  ]
 [ "remote","batbincopy",   "pattern remote.batbincopy():bat[:any] ",   
"RMTbincopyfrom;",  ""  ]
 [ "remote","batbincopy",   "pattern remote.batbincopy(X_0:bat[:any]):void 
",   "RMTbincopyto;",""  ]
 [ "remote","batload",  "pattern remote.batload(X_0:any_1, 
X_1:int):bat[:any_1] ",  "RMTbatload;",  ""  ]
@@ -12577,6 +12578,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "deltas",   "pattern sql.deltas(X_0:str, X_1:str) 
(X_2:bat[:int], X_3:bat[:lng], X_4:bat[:lng], X_5:bat[:lng], X_6:bat[:lng], 
X_7:bat[:lng], X_8:bat[:int]) ",  "mvc_delta_values;",""  ]
 [ "sql",   "deltas",   "pattern sql.deltas(X_0:str, X_1:str, X_2:str) 
(X_3:bat[:int], X_4:bat[:lng], X_5:bat[:lng], X_6:bat[:lng], X_7:bat[:lng], 
X_8:bat[:lng], X_9:bat[:int]) ", "mvc_delta_values;",""  ]
 [ "sql",   "dense_rank",   "pattern sql.dense_rank(X_0:any_1, X_1:bit, 
X_2:bit):int ", "SQLdense_rank;",   ""  ]
+[ "sql",   "deregister",   "pattern sql.deregister():int ",
"RAstatementEnd;",  ""  ]
 [ "sql",   "diff", "pattern sql.diff(X_0:any_1):bit ", "SQLdiff;", 
""  ]
 [ "sql",   "diff", "pattern sql.diff(X_0:bit, X_1:any_1):bit ",
"SQLdiff;", ""  ]
 [ "sql",   "drop_hash","unsafe pattern sql.drop_hash(X_0:str, 
X_1:str):void ", "SQLdrop_hash;",""  ]
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
@@ -937,6 +937,7 @@ const char *deleteRef;
 void deleteSymbol(Module scope, Symbol prg);
 const char *deltaRef;
 const char *dense_rankRef;
+const char *deregisterRef;
 malType destinationType(MalBlkPtr mb, InstrPtr p);
 const char *diffRef;
 const char *diffcandRef;
diff --git 

MonetDB: Jul2021 - Merge heads

2021-05-10 Thread Panagiotis Koutsourakis
Changeset: 870192670926 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/870192670926
Branch: Jul2021
Log Message:

Merge heads


diffs (truncated from 3493 to 300 lines):

diff --git a/clients/odbc/driver/SQLSpecialColumns.c 
b/clients/odbc/driver/SQLSpecialColumns.c
--- a/clients/odbc/driver/SQLSpecialColumns.c
+++ b/clients/odbc/driver/SQLSpecialColumns.c
@@ -221,7 +221,7 @@ MNDBSpecialColumns(ODBCStmt *stmt,
  "sys.tables t, "
  "sys.columns c, "
  "sys.keys k, "
- "sys.objects kc"
+ "sys.objects kc "
 "where s.id = t.schema_id and "
   "t.id = c.table_id and "
   "t.id = k.table_id and "
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -398,6 +398,7 @@ insert_string_bat(BAT *b, BAT *n, struct
r++;
}
}
+   assert(b->batCapacity >= b->batCount);
b->theap->dirty = true;
/* maintain hash */
for (r = oldcnt, cnt = BATcount(b); b->thash && r < cnt; r++) {
@@ -1293,10 +1294,12 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool 
 * there are no nils in b afterward if there weren't
 * any in either b or n to begin with */
b->tnonil &= n->tnonil;
-   if (b->thash != NULL && b->thash != (Hash *) 1) {
-   for (BUN i = updid, j = updid + BATcount(p); i < j; i++)
-   HASHdelete(b, i, Tloc(b, i));
-   }
+   /* if there is no hash, we don't start the loop, if
+* there is only a persisted hash, it will get destroyed
+* in the first iteration, after which there is no hash
+* and the loop ends */
+   for (BUN i = updid, j = updid + BATcount(p); i < j && b->thash; 
i++)
+   HASHdelete(b, i, Tloc(b, i));
if (n->ttype == TYPE_void) {
assert(b->ttype == TYPE_oid);
oid *o = Tloc(b, updid);
@@ -1365,7 +1368,11 @@ BATreplace(BAT *b, BAT *p, BAT *n, bool 
memcpy(Tloc(b, updid), Tloc(n, 0),
   BATcount(p) * b->twidth);
}
-   if (b->thash != NULL && b->thash != (Hash *) 1) {
+   /* either we have a hash that was updated above, or we
+* have no hash; we cannot have the case where there is
+* only a persisted (unloaded) hash since it would have
+* been destroyed above */
+   if (b->thash != NULL) {
for (BUN i = updid, j = updid + BATcount(p); i < j; i++)
HASHinsert(b, i, Tloc(b, i));
}
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -435,6 +435,8 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c
if (b->twidth == width) {
if (newsize <= old->size) {
/* nothing to do */
+   if (cap > b->batCapacity)
+   BATsetcapacity(b, cap);
return GDK_SUCCEED;
}
return BATextend(b, newsize >> shift);
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3931,13 +3931,15 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA
if ((parent = VIEWtparent(l)) != 0) {
BAT *b = BBPdescriptor(parent);
if (l->hseqbase == b->hseqbase &&
-   BATcount(l) == BATcount(b))
+   BATcount(l) == BATcount(b) &&
+   ATOMtype(l->ttype) == ATOMtype(b->ttype))
l = b;
}
if ((parent = VIEWtparent(r)) != 0) {
BAT *b = BBPdescriptor(parent);
if (r->hseqbase == b->hseqbase &&
-   BATcount(r) == BATcount(b))
+   BATcount(r) == BATcount(b) &&
+   ATOMtype(r->ttype) == ATOMtype(b->ttype))
r = b;
}
 
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -761,22 +761,19 @@ BATsave(BAT *bd)
 {
gdk_return err = GDK_SUCCEED;
const char *nme;
-   BAT bs;
-   Heap hs, vhs;
-   BAT *b = bd;
-   bool dosync = (BBP_status(b->batCacheid) & BBPPERSISTENT) != 0;
+   bool dosync = (BBP_status(bd->batCacheid) & BBPPERSISTENT) != 0;
 
-   assert(!GDKinmemory(b->theap->farmid));
-   BATcheck(b, GDK_FAIL);
+   assert(!GDKinmemory(bd->theap->farmid));
+   BATcheck(bd, GDK_FAIL);
 
-   assert(b->batCacheid > 0);
+   assert(bd->batCacheid > 0);
/* views cannot be saved, but make an exception for
 * 

MonetDB: Jul2021 - Merge heads.

2021-05-03 Thread Sjoerd Mullender
Changeset: d001f016cdd7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d001f016cdd7
Branch: Jul2021
Log Message:

Merge heads.


diffs (truncated from 753 to 300 lines):

diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -2382,9 +2382,9 @@ sql_update_jul2021(Client c, mvc *sql, c
"drop procedure 
sys.flush_log();\n");
 
pos += snprintf(buf + pos, bufsize - pos,
-   "drop procedure 
sys.deltas(string);\n"
-   "drop procedure 
sys.deltas(string, string);\n"
-   "drop procedure 
sys.deltas(string, string, string);\n");
+   "drop function 
sys.deltas(string);\n"
+   "drop function 
sys.deltas(string, string);\n"
+   "drop function 
sys.deltas(string, string, string);\n");
pos += snprintf(buf + pos, bufsize - pos,
"create function 
sys.deltas (\"schema\" string)\n"
"returns table (id int, 
segments bigint, \"all\" bigint, inserted bigint, updates bigint, deletes 
bigint, level int)\n"
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
@@ -1555,37 +1555,92 @@ static sql_rel *
return rel;
 }
 
+static void reset_has_nil(sql_rel *rel, sql_exp *e);
+
 static void
-reset_has_nil(sql_exp *e)
+exps_reset_has_nil(sql_rel *rel, list *exps)
+{
+   if (!list_empty(exps))
+   for(node *n=exps->h; n; n=n->next)
+   reset_has_nil(rel, n->data);
+}
+
+static void
+reset_has_nil(sql_rel *rel, sql_exp *e)
 {
-   set_has_nil(e);
-   if (is_convert(e->type))
-   reset_has_nil(e->l);
+   switch (e->type) {
+   case e_column: {
+   if (((is_right(rel->op) || is_full(rel->op)) && 
rel_find_exp(rel->l, e) != NULL) ||
+   ((is_left(rel->op) || is_full(rel->op)) && 
rel_find_exp(rel->r, e) != NULL))
+   set_has_nil(e);
+   } break;
+   case e_convert: {
+   reset_has_nil(rel, e->l);
+   if (has_nil((sql_exp*)e->l))
+   set_has_nil(e);
+   } break;
+   case e_func: {
+   sql_subfunc *f = e->f;
+
+   exps_reset_has_nil(rel, e->l);
+   if (!f->func->semantics && e->l && have_nil(e->l))
+   set_has_nil(e);
+   } break;
+   case e_aggr: {
+   sql_subfunc *a = e->f;
+
+   exps_reset_has_nil(rel, e->l);
+   if ((a->func->s || strcmp(a->func->base.name, "count") != 0) && 
!a->func->semantics && !has_nil(e) && e->l && have_nil(e->l))
+   set_has_nil(e);
+   } break;
+   case e_cmp: {
+   if (e->flag == cmp_or || e->flag == cmp_filter) {
+   exps_reset_has_nil(rel, e->l);
+   exps_reset_has_nil(rel, e->r);
+   if (have_nil(e->l) || have_nil(e->r))
+   set_has_nil(e);
+   } else if (e->flag == cmp_in || e->flag == cmp_notin) {
+   reset_has_nil(rel, e->l);
+   exps_reset_has_nil(rel, e->r);
+   if (has_nil((sql_exp*)e->l) || have_nil(e->r))
+   set_has_nil(e);
+   } else {
+   reset_has_nil(rel, e->l);
+   reset_has_nil(rel, e->r);
+   if (e->f)
+   reset_has_nil(rel, e->f);
+   if (!is_semantics(e) && (((sql_exp*)e->l) || 
has_nil((sql_exp*)e->r) || (e->f && has_nil((sql_exp*)e->f
+   set_has_nil(e);
+   }
+   } break;
+   default:
+   break;
+   }
 }
 
 static sql_exp *
-rewrite_inner(mvc *sql, sql_rel *rel, sql_rel *inner, operator_type *op)
+rewrite_inner(mvc *sql, sql_rel *rel, sql_rel *inner, operator_type op, 
sql_rel **rewrite)
 {
int single = is_single(inner);
sql_rel *d = NULL;
 
reset_single(inner);
if (single && is_project(rel->op))
-   *op = op_left;
+   op = op_left;
 
if (!is_project(inner->op))
inner = rel_project(sql->sa, inner, rel_projections(sql, inner, 
NULL, 1, 1));
 
if (is_join(rel->op)){ /* TODO handle set operators etc */
if (is_right(rel->op))
-   d = rel->l = rel_crossproduct(sql->sa, rel->l,