MonetDB: default - Approve 32 bit output.

2021-06-11 Thread Sjoerd Mullender
Changeset: 48eb5cc65564 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/48eb5cc65564
Modified Files:
sql/test/emptydb/Tests/check.stable.out.32bit
Branch: default
Log Message:

Approve 32 bit output.


diffs (226 lines):

diff --git a/sql/test/emptydb/Tests/check.stable.out.32bit 
b/sql/test/emptydb/Tests/check.stable.out.32bit
--- a/sql/test/emptydb/Tests/check.stable.out.32bit
+++ b/sql/test/emptydb/Tests/check.stable.out.32bit
@@ -154,6 +154,7 @@
 \dSf sys."covar_pop"
 \dSf sys."covar_samp"
 \dSf sys."createorderindex"
+\dSf sys."current_sessionid"
 \dSf sys."date_to_str"
 \dSf sys."date_trunc"
 \dSf sys."db_users"
@@ -567,6 +568,7 @@ SYSTEM PROCEDUREsys.createorderi
 SYSTEM WINDOW   sys.cume_dist
 SYSTEM FUNCTION sys.curdate
 SYSTEM FUNCTION sys.current_date
+SYSTEM FUNCTION sys.current_sessionid
 SYSTEM FUNCTION sys.current_time
 SYSTEM FUNCTION sys.current_timestamp
 SYSTEM FUNCTION sys.curtime
@@ -643,7 +645,6 @@ SYSTEM PROCEDUREsys.hot_snapshot
 SYSTEM FUNCTION sys.hour
 SYSTEM FUNCTION sys.identity
 SYSTEM FUNCTION sys.ifthenelse
-SYSTEM FILTER FUNCTION  sys.ilike
 SYSTEM FUNCTION sys.imprintsize
 SYSTEM FUNCTION sys.index
 SYSTEM FUNCTION sys.insert
@@ -716,7 +717,6 @@ SYSTEM FUNCTION sys.newurl
 SYSTEM FUNCTION sys.next_value_for
 SYSTEM FUNCTION sys.not
 SYSTEM AGGREGATEsys.not_exist
-SYSTEM FILTER FUNCTION  sys.not_ilike
 SYSTEM FILTER FUNCTION  sys.not_like
 SYSTEM AGGREGATEsys.not_unique
 SYSTEM WINDOW   sys.nth_value
@@ -1130,6 +1130,7 @@ create window covar_samp(e1 real, e2 rea
 create window covar_samp(e1 smallint, e2 smallint) returns double external 
name "sql"."covariance";
 create window covar_samp(e1 tinyint, e2 tinyint) returns double external name 
"sql"."covariance";
 create procedure sys.createorderindex(sys string, tab string, col string) 
external name sql.createorderindex;
+create function sys.current_sessionid() returns int external name 
clients.current_sessionid;
 create function date_to_str(d date, format string) returns string external 
name mtime."date_to_str";
 create function sys.date_trunc(txt string, t timestamp with time zone) returns 
timestamp with time zone external name sql.date_trunc;
 create function sys.date_trunc(txt string, t timestamp) returns timestamp 
external name sql.date_trunc;
@@ -1150,7 +1151,7 @@ create procedure sys.droporderindex(sys 
 create function sys.dump_database(describe boolean) returns table(o int, stmt 
string) begin set schema sys; truncate sys.dump_statements; insert into 
sys.dump_statements values (1, 'START TRANSACTION;'); insert into 
sys.dump_statements values ((select count(*) from sys.dump_statements) + 1, 
'SET SCHEMA "sys";'); insert into sys.dump_statements select (select count(*) 
from sys.dump_statements) + rank() over(), stmt from sys.dump_create_roles; 
insert into sys.dump_statements select (select count(*) from 
sys.dump_statements) + rank() over(), stmt from sys.dump_create_users; insert 
into sys.dump_statements select (select count(*) from sys.dump_statements) + 
rank() over(), stmt from sys.dump_create_schemas; insert into 
sys.dump_statements select (select count(*) from sys.dump_statements) + rank() 
over(), stmt from sys.dump_user_defined_types; insert into sys.dump_statements 
select (select count(*) from sys.dump_statements) + rank() over(), stmt from 
sys.dump_add_schemas_to_users; insert 
 into sys.dump_statements select (select count(*) from sys.dump_statements) + 
rank() over(), stmt from sys.dump_grant_user_privileges; insert into 
sys.dump_statements select (select count(*) from sys.dump_statements) + rank() 
over(), stmt from sys.dump_sequences; insert into sys.dump_statements select 
(select count(*) from sys.dump_statements) + rank() over(), stmt from 
sys.dump_start_sequences; insert into sys.dump_statements select (select 
count(*) from sys.dump_statements) + rank() over(order by stmts.o), stmts.s 
from (select * from sys.dump_functions f union select * from sys.dump_tables t) 
as stmts(o, s); insert into sys.dump_statements select (select count(*) from 
sys.dump_statements) + rank() over(), stmt from sys.dump_column_defaults; 
insert into sys.dump_statements select (select count(*) from 
sys.dump_statements) + rank() over(), stmt from sys.dump_table_constraint_type; 
insert into sys.dump_statements select (select count(*) from 
sys.dump_statements) + rank() over(), stmt 
 from sys.dump_indices; insert into sys.dump_statements select (select count(*) 
from sys.dump_statements) + rank() over(), stmt from sys.dump_foreign_keys; 
insert into sys.dump_statements select (select count(*) from 
sys.dump_statements) + rank() over(), stmt from sys.dump_partition_tables; 
insert into sys.dump_statements select (select count(*) from 
sys.dump_statements) + rank() over(), stmt from sys.dump_triggers; insert into 

MonetDB: default - Merge with Jul2021 branch.

2021-06-11 Thread Sjoerd Mullender
Changeset: ed74c966801b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ed74c966801b
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk_bat.c
gdk/gdk_bbp.c
gdk/gdk_calc.c
gdk/gdk_hash.c
gdk/gdk_hash.h
gdk/gdk_join.c
gdk/gdk_private.h
gdk/gdk_select.c
monetdb5/mal/CMakeLists.txt
monetdb5/mal/mal_private.h
monetdb5/modules/mal/mkey.c
monetdb5/modules/mal/tracer.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_upgrades.c
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128
sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade/Tests/upgrade.stable.out
sql/test/emptydb-upgrade/Tests/upgrade.stable.out.32bit
sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade/Tests/upgrade.stable.out
sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit
sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
testing/Mz.py.in
testing/sqllogictest.py
Branch: default
Log Message:

Merge with Jul2021 branch.


diffs (truncated from 114122 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
@@ -331,6 +331,7 @@ gdk_return GDKtracer_set_adapter(const c
 gdk_return GDKtracer_set_component_level(const char *comp, const char *lvl);
 gdk_return GDKtracer_set_flush_level(const char *lvl);
 gdk_return GDKtracer_set_layer_level(const char *layer, const char *lvl);
+gdk_return GDKtracer_set_tracefile(const char *tracefile);
 gdk_return GDKtracer_stop(void);
 size_t GDKuniqueid(size_t offset);
 gdk_return GDKupgradevarheap(BAT *b, var_t v, BUN cap, bool copyall) 
__attribute__((__warn_unused_result__));
@@ -895,6 +896,7 @@ const char *columnRef;
 const char *comment_onRef;
 const char *commitRef;
 str compileString(Symbol *fcn, Client c, str s);
+char *concatErrors(char *err1, const char *err2) __attribute__((__nonnull__(1, 
2))) __attribute__((__returns_nonnull__));
 const char *connectRef;
 const char *contextRef;
 str convertConstant(malType type, ValPtr vr);
diff --git a/clients/mapilib/monetdb-mapi.pc.in 
b/clients/mapilib/monetdb-mapi.pc.in
--- a/clients/mapilib/monetdb-mapi.pc.in
+++ b/clients/mapilib/monetdb-mapi.pc.in
@@ -4,11 +4,15 @@
 #
 # Copyright 1997 - July 2008 CWI, August 2008 - 2021 MonetDB B.V.
 
+prefix=@CMAKE_INSTALL_PREFIX@
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
+
 Name: monetdb-mapi
 Description: MonetDB MAPI C-client libary
 URL: https://www.monetdb.org/
 Version: @MONETDB_VERSION@
 Requires.private: monetdb-stream = @MONETDB_VERSION@ openssl
 
-Libs: -L@CMAKE_INSTALL_FULL_LIBDIR@ -lmapi
-Cflags: -I@CMAKE_INSTALL_FULL_INCLUDEDIR@/monetdb
+Libs: -L${libdir} -lmapi
+Cflags: -I${includedir}/monetdb
diff --git a/common/stream/monetdb-stream.pc.in 
b/common/stream/monetdb-stream.pc.in
--- a/common/stream/monetdb-stream.pc.in
+++ b/common/stream/monetdb-stream.pc.in
@@ -4,12 +4,16 @@
 #
 # Copyright 1997 - July 2008 CWI, August 2008 - 2021 MonetDB B.V.
 
+prefix=@CMAKE_INSTALL_PREFIX@
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
+
 Name: monetdb-stream
 Description: MonetDB streams libary
 URL: https://www.monetdb.org/
 Version: @MONETDB_VERSION@
 Requires.private: @PKG_ZLIB@ @PKG_BZIP2@ @PKG_CURL@ @PKG_LZMA@ @PKG_SNAPPY@
 
-Libs: -L@CMAKE_INSTALL_FULL_LIBDIR@ -lstream
+Libs: -L${libdir} -lstream
 Libs.private: @SOCKET_LIBS@ @PKG_LIBICONV@
-Cflags: -I@CMAKE_INSTALL_FULL_INCLUDEDIR@/monetdb
+Cflags: -I${includedir}/monetdb
diff --git a/ctest/monetdb5/mal/test_malEmbeddedBoot.c 
b/ctest/monetdb5/mal/test_malEmbeddedBoot.c
--- a/ctest/monetdb5/mal/test_malEmbeddedBoot.c
+++ b/ctest/monetdb5/mal/test_malEmbeddedBoot.c
@@ -17,8 +17,8 @@ main(void)
 gdk_return gdk_res;
 
 gdk_res = GDKinit(NULL, 0, true);
-if (gdk_res == GDK_FAIL) {
-   msg = createException(MAL, "embedded.monetdb_startup", "GDKinit() 
failed");
+if (gdk_res != GDK_SUCCEED) {
+   msg = 

MonetDB: Jul2021 - Be more defensive with potential self referen...

2021-06-11 Thread Pedro Ferreira
Changeset: 0aa4c19a7eb6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0aa4c19a7eb6
Modified Files:
sql/server/rel_optimizer.c
sql/test/SQLancer/Tests/sqlancer16.test
Branch: Jul2021
Log Message:

Be more defensive with potential self references created by rel_push_func_down 
optimizer


diffs (169 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
@@ -1432,22 +1432,22 @@ exps_need_push_down( list *exps )
return 0;
 }
 
-static sql_exp *exp_push_single_func_down(visitor *v, sql_rel *rel, sql_exp 
*e, int depth);
+static sql_exp *exp_push_single_func_down(visitor *v, sql_rel *rel, sql_rel 
*ol, sql_rel *or, sql_exp *e, int depth);
 
 static list *
-exps_push_single_func_down(visitor *v, sql_rel *rel, list *exps, int depth)
+exps_push_single_func_down(visitor *v, sql_rel *rel, sql_rel *ol, sql_rel *or, 
list *exps, int depth)
 {
if (mvc_highwater(v->sql))
return sql_error(v->sql, 10, SQLSTATE(42000) "Query too 
complex: running out of stack space");
 
for (node *n = exps->h; n; n = n->next)
-   if ((n->data = exp_push_single_func_down(v, rel, n->data, 
depth)) == NULL)
+   if ((n->data = exp_push_single_func_down(v, rel, ol, or, 
n->data, depth)) == NULL)
return NULL;
return exps;
 }
 
 static sql_exp *
-exp_push_single_func_down(visitor *v, sql_rel *rel, sql_exp *e, int depth)
+exp_push_single_func_down(visitor *v, sql_rel *rel, sql_rel *ol, sql_rel *or, 
sql_exp *e, int depth)
 {
if (mvc_highwater(v->sql))
return sql_error(v->sql, 10, SQLSTATE(42000) "Query too 
complex: running out of stack space");
@@ -1455,26 +1455,26 @@ exp_push_single_func_down(visitor *v, sq
switch(e->type) {
case e_cmp: {
if (e->flag == cmp_or || e->flag == cmp_filter) {
-   if ((e->l = exps_push_single_func_down(v, rel, e->l, 
depth + 1)) == NULL)
+   if ((e->l = exps_push_single_func_down(v, rel, ol, or, 
e->l, depth + 1)) == NULL)
return NULL;
-   if ((e->r = exps_push_single_func_down(v, rel, e->r, 
depth + 1)) == NULL)
+   if ((e->r = exps_push_single_func_down(v, rel, ol, or, 
e->r, depth + 1)) == NULL)
return NULL;
} else if (e->flag == cmp_in || e->flag == cmp_notin) {
-   if ((e->l = exp_push_single_func_down(v, rel, e->l, 
depth + 1)) == NULL)
+   if ((e->l = exp_push_single_func_down(v, rel, ol, or, 
e->l, depth + 1)) == NULL)
return NULL;
-   if ((e->r = exps_push_single_func_down(v, rel, e->r, 
depth + 1)) == NULL)
+   if ((e->r = exps_push_single_func_down(v, rel, ol, or, 
e->r, depth + 1)) == NULL)
return NULL;
} else {
-   if ((e->l = exp_push_single_func_down(v, rel, e->l, 
depth + 1)) == NULL)
+   if ((e->l = exp_push_single_func_down(v, rel, ol, or, 
e->l, depth + 1)) == NULL)
return NULL;
-   if ((e->r = exp_push_single_func_down(v, rel, e->r, 
depth + 1)) == NULL)
+   if ((e->r = exp_push_single_func_down(v, rel, ol, or, 
e->r, depth + 1)) == NULL)
return NULL;
-   if (e->f && (e->f = exp_push_single_func_down(v, rel, 
e->f, depth + 1)) == NULL)
+   if (e->f && (e->f = exp_push_single_func_down(v, rel, 
ol, or, e->f, depth + 1)) == NULL)
return NULL;
}
} break;
case e_convert:
-   if ((e->l = exp_push_single_func_down(v, rel, e->l, depth + 1)) 
== NULL)
+   if ((e->l = exp_push_single_func_down(v, rel, ol, or, e->l, 
depth + 1)) == NULL)
return NULL;
break;
case e_aggr:
@@ -1491,11 +1491,11 @@ exp_push_single_func_down(visitor *v, sq
exp_label(v->sql->sa, e, ++v->sql->label);
/* we need a full projection, group by's and unions 
cannot be extended with more expressions */
if (mustr) {
-   if (!is_simple_project(r->op) || 
!list_empty(r->r) || !r->l)
+   if (r == or) /* don't project twice */
rel->r = r = rel_project(v->sql->sa, r, 
rel_projections(v->sql, r, NULL, 1, 1));
list_append(r->exps, e);
} else {
-   if (!is_simple_project(l->op) || 
!list_empty(l->r) || !l->l)
+   if (l == ol) /* don't project twice */
  

MonetDB: default - attempt lower timeout on sys.stop

2021-06-11 Thread svetlin
Changeset: 0bab22842b80 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0bab22842b80
Modified Files:
monetdb5/mal/mal_interpreter.c
Branch: default
Log Message:

attempt lower timeout on sys.stop


diffs (20 lines):

diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -515,6 +515,8 @@ str runMALsequence(Client cntxt, MalBlkP
exceptionVar = -1;
 
QryCtx qry_ctx = {.querytimeout=cntxt->querytimeout, 
.starttime=mb->starttime};
+   /* very short timeout */
+   QryCtx qry_ctx_abort = {.querytimeout=100, .starttime=mb->starttime};
/* save, in case this function is called recursively */
QryCtx *qry_ctx_save = MT_thread_get_qry_ctx();
MT_thread_set_qry_ctx(_ctx);
@@ -546,6 +548,7 @@ str runMALsequence(Client cntxt, MalBlkP
if (stk->cmd == 'x' ) {
stk->cmd = 0;
stkpc = mb->stop;
+   MT_thread_set_qry_ctx(_ctx_abort);
ret= createException(MAL, "mal.interpreter", 
"prematurely stopped client");
break;
}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - merge

2021-06-11 Thread svetlin
Changeset: 0f97614b1db8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0f97614b1db8
Branch: default
Log Message:

merge


diffs (88 lines):

diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -209,6 +209,10 @@ prepareProfilerEvent(Client cntxt, MalBl
if(malprofileruser!= MAL_ADMIN && malprofileruser != cntxt->user)
return NULL;
 
+/* align the variable namings with EXPLAIN and TRACE */
+   if( pci->pc == 1 && start)
+   renameVariables(mb);
+
logbuf = (struct logbuf) {0};
 
usec= pci->clock;
diff --git a/monetdb5/modules/mal/profiler.c b/monetdb5/modules/mal/profiler.c
--- a/monetdb5/modules/mal/profiler.c
+++ b/monetdb5/modules/mal/profiler.c
@@ -90,6 +90,7 @@ CMDstartTrace(Client cntxt, MalBlkPtr mb
(void) mb;
(void) stk;
(void) pci;
+   renameVariables(mb); // to keep in sink with explain
return startTrace(cntxt);
 }
 
diff --git a/monetdb5/optimizer/opt_dataflow.c 
b/monetdb5/optimizer/opt_dataflow.c
--- a/monetdb5/optimizer/opt_dataflow.c
+++ b/monetdb5/optimizer/opt_dataflow.c
@@ -417,15 +417,21 @@ OPTdataflowImplementation(Client cntxt, 
// collect BAT variables garbage collected 
within the block
if( !simple)
for( k=q->retc; kargc; k++){
-   if (getState(states,q,k) & 
VAR2READ &&  getEndScope(mb,getArg(q,k)) == j && 
isaBatType(getVarType(mb,getArg(q,k))) )
-   top = 
dflowGarbagesink(cntxt, mb, getArg(q,k), sink, top);
+   if (getState(states,q,k) & 
VAR2READ &&  getEndScope(mb,getArg(q,k)) == j && 
isaBatType(getVarType(mb,getArg(q,k))) ){
+   InstrPtr r;
+   top = 
dflowGarbagesink(cntxt, mb, getArg(q,k), sink, top);
+   r = 
newInstruction(NULL,languageRef, passRef);
+   getArg(r,0) = 
newTmpVariable(mb,TYPE_void);
+   r= addArgument(mb,r, 
getArg(q,k));
+   pushInstruction(mb,r);
+   }
}
}
/* exit parallel block */
if ( ! simple){
// force the pending final garbage statements
-   for( j=0; jbarrier= EXITsymbol;
getArg(q,0) = flowblock;
diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -189,6 +189,7 @@ SQLsetTrace(Client cntxt, MalBlkPtr mb)
pushEndInstruction(mb);
if( msg == MAL_SUCCEED)
msg = chkTypes(cntxt->usermodule, mb, TRUE);
+   renameVariables(mb);
return msg;
 }
 
diff --git a/sql/test/Tests/setoptimizer.test b/sql/test/Tests/setoptimizer.test
--- a/sql/test/Tests/setoptimizer.test
+++ b/sql/test/Tests/setoptimizer.test
@@ -29,7 +29,7 @@ query TTT nosort
 select * from optimizers()
 
 minimal_pipe
-optimizer.inline();optimizer.remap();optimizer.bincopyfrom();optimizer.deadcode();optimizer.multiplex();optimizer.generator();optimizer.garbageCollector();
+optimizer.inline();optimizer.remap();optimizer.bincopyfrom();optimizer.deadcode();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.garbageCollector();
 stable
 minimal_fast
 optimizer.minimalfast()
diff --git a/testing/Mz.py.in b/testing/Mz.py.in
--- a/testing/Mz.py.in
+++ b/testing/Mz.py.in
@@ -13,6 +13,7 @@
 #   which OUT/ERR differ or not and which tests were skipped.
 #   dump HTML-stuff only at end
 #   print an ascii summary at end, too
+# - use sorting in .explain.functions_histogram
 # - if no diffs, but warnings, say so at end
 # - produce, keep & reference LOG
 # - add a "grep-like" function and replace "inlined" grep
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - add test for sys.stop

2021-06-11 Thread svetlin
Changeset: 6bd49e0793a7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6bd49e0793a7
Added Files:
sql/test/sysmon/Tests/stop.SQL.py
Modified Files:
sql/test/sysmon/Tests/All
Branch: default
Log Message:

add test for sys.stop


diffs (56 lines):

diff --git a/sql/test/sysmon/Tests/All b/sql/test/sysmon/Tests/All
--- a/sql/test/sysmon/Tests/All
+++ b/sql/test/sysmon/Tests/All
@@ -6,3 +6,5 @@ timeout_cross
 timeout_join
 timeout_aggr
 timeout_select
+stop
+
diff --git a/sql/test/sysmon/Tests/stop.SQL.py 
b/sql/test/sysmon/Tests/stop.SQL.py
new file mode 100644
--- /dev/null
+++ b/sql/test/sysmon/Tests/stop.SQL.py
@@ -0,0 +1,42 @@
+from MonetDBtesting.sqltest import SQLTestCase
+import threading
+from time import sleep
+import sys
+
+ERR = False
+
+def mine_excepthook(args):
+global ERR
+ERR = True
+
+# overide here because it ignores SystemExit
+threading.excepthook = mine_excepthook
+
+def run_slow_qry(qry):
+with SQLTestCase() as tc:
+tc.execute(qry)\
+.assertFailed(err_message="prematurely stopped client")
+
+with SQLTestCase() as tc:
+tc.drop()
+tc.execute("create table foo(id bigserial, value int);").assertSucceeded()
+tc.execute("create table bar(id bigserial, value int);").assertSucceeded()
+tc.execute("insert into foo(value) (select * from 
generate_series(0,1));").assertSucceeded()
+tc.execute("insert into bar(value) (select * from 
generate_series(0,1));").assertSucceeded()
+qry = "select * from foo, bar;"
+t = threading.Thread(target=run_slow_qry, args=(qry,))
+t.start()
+sleep(1)
+# get qry tag
+tag = None
+tc.execute(f"select tag from sys.queue where 
query='{qry}';").assertSucceeded()
+data = tc.test_results[-1:].pop().data
+if len(data) > 0:
+tag = data.pop()[0]
+tc.execute(f"call sys.stop({tag});").assertSucceeded()
+t.join(timeout=3)
+if ERR:
+raise SystemExit(1)
+if t.is_alive():
+raise SystemExit("stop long running query failed!")
+
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: iso - Merged with Jul2021

2021-06-11 Thread Pedro Ferreira
Changeset: 849eaf61ce90 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/849eaf61ce90
Branch: iso
Log Message:

Merged with Jul2021


diffs (truncated from 2965 to 300 lines):

diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -89,14 +89,14 @@ ntile##IMP##TPE: \
 #define ANALYTICAL_NTILE_SINGLE_IMP(TPE, LNG_HGE, UPCAST) \
do {\
TPE ntl = *(TPE*) ntile; \
-   if (!is_##TPE##_nil(ntl) && ntl < 0) goto invalidntile; \
+   if (!is_##TPE##_nil(ntl) && ntl <= 0) goto invalidntile; \
ANALYTICAL_NTILE(SINGLE, TPE, ntl, LNG_HGE, UPCAST, ;); \
} while (0)
 
 #define ANALYTICAL_NTILE_MULTI_IMP(TPE, LNG_HGE, UPCAST) \
do {\
TPE *restrict nn = (TPE*)Tloc(n, 0);\
-   ANALYTICAL_NTILE(MULTI, TPE, nn[k], LNG_HGE, UPCAST, if (val < 
0) goto invalidntile;); \
+   ANALYTICAL_NTILE(MULTI, TPE, nn[k], LNG_HGE, UPCAST, if (val <= 
0) goto invalidntile;); \
} while (0)
 
 gdk_return
@@ -1838,7 +1838,7 @@ GDKanalyticalsum(BAT *r, BAT *p, BAT *o,
 bailout:
GDKerror("42000!error while calculating floating-point sum\n");
res = GDK_FAIL;
-   goto cleanup; 
+   goto cleanup;
 calc_overflow:
GDKerror("22003!overflow in calculation.\n");
res = GDK_FAIL;
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -914,9 +914,10 @@ mskWrite(const msk *a, stream *s, size_t
 }
 
 static void *
-mskRead(msk *a, size_t *dstlen, stream *s, size_t cnt)
+mskRead(msk *A, size_t *dstlen, stream *s, size_t cnt)
 {
int8_t v;
+   msk *a = A;
if (cnt != 1)
return NULL;
if (a == NULL || *dstlen == 0) {
@@ -924,8 +925,11 @@ mskRead(msk *a, size_t *dstlen, stream *
return NULL;
*dstlen = 1;
}
-   if (mnstr_readBte(s, ) != 1)
+   if (mnstr_readBte(s, ) != 1) {
+   if (a != A)
+   GDKfree(a);
return NULL;
+   }
*a = v != 0;
return a;
 }
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -999,7 +999,9 @@ movestrbats(void)
continue;
char *oldpath = GDKfilepath(0, BATDIR, 
BBP_physical(b->batCacheid), "tail");
char *newpath = GDKfilepath(0, BATDIR, b->theap->filename, 
NULL);
-   int ret = MT_rename(oldpath, newpath);
+   int ret = -1;
+   if (oldpath != NULL && newpath != NULL)
+   ret = MT_rename(oldpath, newpath);
GDKfree(oldpath);
GDKfree(newpath);
if (ret < 0)
@@ -3134,8 +3136,11 @@ BBPsync(int cnt, bat *restrict subcommit
MT_lock_set((i));
}
BAT *b = dirty_bat(, subcommit != NULL);
-   if (i <= 0)
+   if (i <= 0) {
+   if (lock)
+   MT_lock_unset((subcommit ? 
subcommit[idx] : idx));
break;
+   }
if (BBP_status(i) & BBPEXISTING) {
if (b != NULL && BBPbackup(b, subcommit != 
NULL) != GDK_SUCCEED) {
BBP_status_off(i, BBPSYNCING);
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -922,7 +922,12 @@ logger_create_types_file(logger *lg, con
 #elif defined(HAVE_FSYNC)
 && fsync(fileno(fp)) < 0
 #endif
-   ) || fclose(fp) < 0) {
+   )) {
+   MT_remove(filename);
+   GDKerror("flushing log file %s failed", filename);
+   return GDK_FAIL;
+   }
+   if (fclose(fp) < 0) {
MT_remove(filename);
GDKerror("closing log file %s failed", filename);
return GDK_FAIL;
@@ -1242,6 +1247,7 @@ check_version(logger *lg, FILE *fp, cons
assert(!lg->inmemory);
if (fscanf(fp, "%6d", ) != 1) {
GDKerror("Could not read the version number from the file 
'%s/log'.\n", lg->dir);
+   fclose(fp);
return GDK_FAIL;
}
if (version < 52300) {  /* first CATALOG_VERSION for "new" log format */
@@ -1250,8 +1256,10 @@ check_version(logger *lg, FILE *fp, cons
lg->dcatalog = logbat_new(TYPE_oid, BATSIZE, PERSISTENT);
if (lg->catalog_bid == NULL || lg->catalog_id == NULL || 
lg->dcatalog == NULL) {
GDKerror("cannot create catalog bats");
+   fclose(fp);
return GDK_FAIL;
}
+   /* old_logger_load always closes fp */
if 

MonetDB: iso - More predicates to fix

2021-06-11 Thread Pedro Ferreira
Changeset: d8877f746297 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d8877f746297
Modified Files:
sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
Branch: iso
Log Message:

More predicates to fix


diffs (52 lines):

diff --git a/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py 
b/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
--- a/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
+++ b/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
@@ -39,8 +39,41 @@ with SQLTestCase() as mdb1:
 mdb1.execute('commit;').assertSucceeded()
 mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
 
+mdb1.execute('create table x(y int, z int);').assertSucceeded()
+mdb1.execute('insert into x values (1, 1);').assertSucceeded()
 mdb1.execute('start transaction;').assertSucceeded()
+mdb2.execute('start transaction;').assertSucceeded()
+mdb1.execute("create view myv(a,b) as select y, z from 
x;").assertSucceeded()
+mdb2.execute("alter table x drop column y;").assertSucceeded()
+mdb1.execute('commit;').assertSucceeded()
+mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
+mdb1.execute('select * from 
myv;').assertSucceeded().assertDataResultMatch([(1,1)])
+
+mdb1.execute("create table ups.no (a int, b int);").assertSucceeded()
+mdb1.execute('insert into ups.no values (2, 2);').assertSucceeded()
+mdb1.execute('start transaction;').assertSucceeded()
+mdb2.execute('start transaction;').assertSucceeded()
+mdb1.execute("create function sys.another() returns table(i int) begin 
return select a from ups.no; end;").assertSucceeded()
+mdb2.execute("alter table ups.no drop column a;").assertSucceeded()
+mdb1.execute('commit;').assertSucceeded()
+mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
+mdb1.execute('select * from 
another();').assertSucceeded().assertDataResultMatch([(2,2)])
+
+mdb1.execute("CREATE TABLE y (i int);").assertSucceeded()
+mdb1.execute('truncate integers;').assertSucceeded()
+mdb1.execute('insert into integers values 
(1,1),(2,2),(3,3);').assertSucceeded()
+mdb1.execute('start transaction;').assertSucceeded()
+mdb2.execute('start transaction;').assertSucceeded()
+mdb1.execute("alter table y add constraint nono foreign key(i) 
references integers(i)").assertSucceeded()
+mdb2.execute("insert into y values (4)").assertSucceeded() # violates 
foreign key
+mdb1.execute('commit;').assertSucceeded()
+mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
+
+mdb1.execute('start transaction;').assertSucceeded()
+mdb1.execute('drop table y;').assertSucceeded()
 mdb1.execute('drop table integers;').assertSucceeded()
+mdb1.execute('drop function another;').assertSucceeded()
+mdb1.execute('drop table ups.no;').assertSucceeded()
 mdb1.execute('drop schema ups;').assertSucceeded()
 mdb1.execute('ALTER TABLE parent1 DROP TABLE 
child1;').assertSucceeded()
 mdb1.execute('DROP TABLE parent1;').assertSucceeded()
@@ -48,4 +81,6 @@ with SQLTestCase() as mdb1:
 mdb1.execute('ALTER TABLE parent2 DROP TABLE 
child2;').assertSucceeded()
 mdb1.execute('DROP TABLE parent2;').assertSucceeded()
 mdb1.execute('DROP TABLE child2;').assertSucceeded()
+mdb1.execute('DROP VIEW myv;').assertSucceeded()
+mdb1.execute('DROP TABLE x;').assertSucceeded()
 mdb1.execute('commit;').assertSucceeded()
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jul2021 - Remove references to --set sql_logdir: it no ...

2021-06-11 Thread Sjoerd Mullender
Changeset: 7d2bf1a67acc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7d2bf1a67acc
Modified Files:
gdk/gdk_logger.c
Branch: Jul2021
Log Message:

Remove references to --set sql_logdir: it no longer exists.


diffs (35 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1732,11 +1732,7 @@ logger_load(int debug, const char *fn, c
 * shouldn't exist */
if (fp != NULL) {
GDKerror("there is no logger catalog, "
-"but there is a log file. "
-"Are you sure you are using the correct "
-"combination of database "
-"(--dbpath) and log directory "
-"(--set %s_logdir)?\n", fn);
+"but there is a log file.\n");
goto error;
}
 
@@ -1800,17 +1796,7 @@ logger_load(int debug, const char *fn, c
 
/* the catalog exists, and so should the log file */
if (fp == NULL && !LOG_DISABLED(lg)) {
-   GDKerror("There is a logger catalog, but no log file. "
-"Are you sure you are using the correct "
-"combination of database (--dbpath) and "
-"log directory (--set %s_logdir)? "
-"If you have done a recent update of the "
-"server, it may be that your logs are in "
-"an old location.  You should then either use "
-"--set %s_logdir= "
-"or move the old log directory to the new "
-"location (%s).\n",
-fn, fn, lg->dir);
+   GDKerror("There is a logger catalog, but no log 
file.\n");
goto error;
}
if (fp != NULL) {
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jul2021 - Coverity inspired fixes.

2021-06-11 Thread Sjoerd Mullender
Changeset: 3fffd12ab87c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3fffd12ab87c
Modified Files:
gdk/gdk_analytic_func.c
gdk/gdk_atoms.c
gdk/gdk_bbp.c
gdk/gdk_logger.c
gdk/gdk_logger_old.c
gdk/gdk_select.c
gdk/gdk_storage.c
Branch: Jul2021
Log Message:

Coverity inspired fixes.


diffs (truncated from 400 to 300 lines):

diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -89,14 +89,14 @@ ntile##IMP##TPE: \
 #define ANALYTICAL_NTILE_SINGLE_IMP(TPE, LNG_HGE, UPCAST) \
do {\
TPE ntl = *(TPE*) ntile; \
-   if (!is_##TPE##_nil(ntl) && ntl < 0) goto invalidntile; \
+   if (!is_##TPE##_nil(ntl) && ntl <= 0) goto invalidntile; \
ANALYTICAL_NTILE(SINGLE, TPE, ntl, LNG_HGE, UPCAST, ;); \
} while (0)
 
 #define ANALYTICAL_NTILE_MULTI_IMP(TPE, LNG_HGE, UPCAST) \
do {\
TPE *restrict nn = (TPE*)Tloc(n, 0);\
-   ANALYTICAL_NTILE(MULTI, TPE, nn[k], LNG_HGE, UPCAST, if (val < 
0) goto invalidntile;); \
+   ANALYTICAL_NTILE(MULTI, TPE, nn[k], LNG_HGE, UPCAST, if (val <= 
0) goto invalidntile;); \
} while (0)
 
 gdk_return
@@ -1838,7 +1838,7 @@ GDKanalyticalsum(BAT *r, BAT *p, BAT *o,
 bailout:
GDKerror("42000!error while calculating floating-point sum\n");
res = GDK_FAIL;
-   goto cleanup; 
+   goto cleanup;
 calc_overflow:
GDKerror("22003!overflow in calculation.\n");
res = GDK_FAIL;
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -914,9 +914,10 @@ mskWrite(const msk *a, stream *s, size_t
 }
 
 static void *
-mskRead(msk *a, size_t *dstlen, stream *s, size_t cnt)
+mskRead(msk *A, size_t *dstlen, stream *s, size_t cnt)
 {
int8_t v;
+   msk *a = A;
if (cnt != 1)
return NULL;
if (a == NULL || *dstlen == 0) {
@@ -924,8 +925,11 @@ mskRead(msk *a, size_t *dstlen, stream *
return NULL;
*dstlen = 1;
}
-   if (mnstr_readBte(s, ) != 1)
+   if (mnstr_readBte(s, ) != 1) {
+   if (a != A)
+   GDKfree(a);
return NULL;
+   }
*a = v != 0;
return a;
 }
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -999,7 +999,9 @@ movestrbats(void)
continue;
char *oldpath = GDKfilepath(0, BATDIR, 
BBP_physical(b->batCacheid), "tail");
char *newpath = GDKfilepath(0, BATDIR, b->theap->filename, 
NULL);
-   int ret = MT_rename(oldpath, newpath);
+   int ret = -1;
+   if (oldpath != NULL && newpath != NULL)
+   ret = MT_rename(oldpath, newpath);
GDKfree(oldpath);
GDKfree(newpath);
if (ret < 0)
@@ -3134,8 +3136,11 @@ BBPsync(int cnt, bat *restrict subcommit
MT_lock_set((i));
}
BAT *b = dirty_bat(, subcommit != NULL);
-   if (i <= 0)
+   if (i <= 0) {
+   if (lock)
+   MT_lock_unset((subcommit ? 
subcommit[idx] : idx));
break;
+   }
if (BBP_status(i) & BBPEXISTING) {
if (b != NULL && BBPbackup(b, subcommit != 
NULL) != GDK_SUCCEED) {
BBP_status_off(i, BBPSYNCING);
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -922,7 +922,12 @@ logger_create_types_file(logger *lg, con
 #elif defined(HAVE_FSYNC)
 && fsync(fileno(fp)) < 0
 #endif
-   ) || fclose(fp) < 0) {
+   )) {
+   MT_remove(filename);
+   GDKerror("flushing log file %s failed", filename);
+   return GDK_FAIL;
+   }
+   if (fclose(fp) < 0) {
MT_remove(filename);
GDKerror("closing log file %s failed", filename);
return GDK_FAIL;
@@ -1242,6 +1247,7 @@ check_version(logger *lg, FILE *fp, cons
assert(!lg->inmemory);
if (fscanf(fp, "%6d", ) != 1) {
GDKerror("Could not read the version number from the file 
'%s/log'.\n", lg->dir);
+   fclose(fp);
return GDK_FAIL;
}
if (version < 52300) {  /* first CATALOG_VERSION for "new" log format */
@@ -1250,8 +1256,10 @@ check_version(logger *lg, FILE *fp, cons
lg->dcatalog = logbat_new(TYPE_oid, BATSIZE, PERSISTENT);
if (lg->catalog_bid == NULL || lg->catalog_id == NULL || 
lg->dcatalog == NULL) {
GDKerror("cannot 

MonetDB: iso - Adding more predicates

2021-06-11 Thread Pedro Ferreira
Changeset: 57efa07c77d9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/57efa07c77d9
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_cat.c
Branch: iso
Log Message:

Adding more predicates


diffs (118 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4098,6 +4098,7 @@ static stmt *
 insert_check_fkey(backend *be, list *inserts, sql_key *k, stmt *idx_inserts, 
stmt *pin)
 {
mvc *sql = be->mvc;
+   sql_trans *tr = sql->session->tr;
char *msg = NULL;
stmt *cs = list_fetch(inserts, 0), *s = cs;
sql_subtype *lng = sql_bind_localtype("lng");
@@ -4105,6 +4106,13 @@ insert_check_fkey(backend *be, list *ins
sql_subtype *bt = sql_bind_localtype("bit");
sql_subfunc *ne = sql_bind_func_result(sql, "sys", "<>", F_FUNC, bt, 2, 
lng, lng);
 
+   for (node *m = k->columns->h; m; m = m->next) {
+   sql_kc *c = m->data;
+
+   /* foreach column add predicate */
+   tr->predicates = add_predicate(sql->pa, tr->predicates, c->c);
+   }
+
if (pin && list_length(pin->op4.lval))
s = pin->op4.lval->h->data;
if (s->key && s->nrcols == 0) {
@@ -4206,6 +4214,7 @@ static void
 sql_insert_check_null(backend *be, sql_table *t, list *inserts)
 {
mvc *sql = be->mvc;
+   sql_trans *tr = sql->session->tr;
node *m, *n;
sql_subfunc *cnt = sql_bind_func(sql, "sys", "count", 
sql_bind_localtype("void"), NULL, F_AGGR);
 
@@ -4218,6 +4227,9 @@ sql_insert_check_null(backend *be, sql_t
stmt *s = i;
char *msg = NULL;
 
+   /* foreach column add predicate */
+   tr->predicates = add_predicate(sql->pa, tr->predicates, 
c);
+
if (!(s->key && s->nrcols == 0)) {
s = stmt_selectnil(be, column(be, i));
s = stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1);
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -45,6 +45,17 @@
if (store_readonly(sql->session->tr->store))\
throw(SQL,"sql.cat",SQLSTATE(25006) "Schema statements cannot 
be executed on a readonly database.");
 
+static list *
+add_predicate(sql_allocator *sa, list *l, sql_column *c)
+{
+   pl *p = SA_ZNEW(sa, pl);
+   p->c = c;
+   if (!l)
+   l = sa_list(sa);
+   list_append(l, p);
+   return l;
+}
+
 static char *
 SaveArgReference(MalStkPtr stk, InstrPtr pci, int arg)
 {
@@ -202,6 +213,7 @@ static char *
 alter_table_add_range_partition(mvc *sql, char *msname, char *mtname, char 
*psname, char *ptname, ptr min, ptr max,
bit with_nills, 
int update)
 {
+   sql_trans *tr = sql->session->tr;
sql_table *mt = NULL, *pt = NULL;
sql_part *err = NULL;
str msg = MAL_SUCCEED, err_min = NULL, err_max = NULL, conflict_err_min 
= NULL, conflict_err_max = NULL;
@@ -319,6 +331,18 @@ alter_table_add_range_partition(mvc *sql
}
 
 finish:
+   if (!msg) {
+   if (isPartitionedByColumnTable(mt)) {
+   sql_column *c = list_fetch(pt->columns->l, 
mt->part.pcol->colnr);
+   tr->predicates = add_predicate(sql->pa, tr->predicates, 
c);
+   } else {
+   for (node *n = mt->part.pexp->cols->h; n; n = n->next) {
+   int next = *(int*) n->data;
+   sql_column *c = list_fetch(pt->columns->l, 
next);
+   tr->predicates = add_predicate(sql->pa, 
tr->predicates, c);
+   }
+   }
+   }
if (err_min)
GDKfree(err_min);
if (err_max)
@@ -334,6 +358,7 @@ static char *
 alter_table_add_value_partition(mvc *sql, MalStkPtr stk, InstrPtr pci, char 
*msname, char *mtname, char *psname,
char *ptname, 
bit with_nills, int update)
 {
+   sql_trans *tr = sql->session->tr;
sql_table *mt = NULL, *pt = NULL;
str msg = MAL_SUCCEED;
sql_part *err = NULL;
@@ -420,6 +445,18 @@ alter_table_add_value_partition(mvc *sql
}
 
 finish:
+   if (!msg) {
+   if (isPartitionedByColumnTable(mt)) {
+   sql_column *c = list_fetch(pt->columns->l, 
mt->part.pcol->colnr);
+   tr->predicates = add_predicate(sql->pa, tr->predicates, 
c);
+   } else {
+   for (node *n = mt->part.pexp->cols->h; n; n = n->next) {
+   int next = *(int*) n->data;
+   sql_column *c = 

MonetDB: Jul2021 - Approve new plan.

2021-06-11 Thread Sjoerd Mullender
Changeset: 734333d6e5eb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/734333d6e5eb
Modified Files:
sql/test/miscellaneous/Tests/simple_plans.test
Branch: Jul2021
Log Message:

Approve new plan.


diffs (18 lines):

diff --git a/sql/test/miscellaneous/Tests/simple_plans.test 
b/sql/test/miscellaneous/Tests/simple_plans.test
--- a/sql/test/miscellaneous/Tests/simple_plans.test
+++ b/sql/test/miscellaneous/Tests/simple_plans.test
@@ -474,12 +474,8 @@ plan select count(*) from another_t t1, 
 project (
 | project (
 | | crossproduct (
-| | | group by (
-| | | | table("sys"."another_t") [ "another_t"."%TID%" NOT NULL as 
"t1"."%TID%" ] COUNT 
-| | | ) [  ] [ "sys"."count"() NOT NULL as "%2"."%2" ],
-| | | group by (
-| | | | table("sys"."another_t") [ "another_t"."%TID%" NOT NULL as 
"t2"."%TID%" ] COUNT 
-| | | ) [  ] [ "sys"."count"() NOT NULL as "%3"."%3" ]
+| | |  [ "sys"."cnt"(clob "sys", clob "another_t") NOT NULL as "%2"."%2" ],
+| | |  [ "sys"."cnt"(clob "sys", clob "another_t") NOT NULL as "%3"."%3" ]
 | | ) [  ]
 | ) [ "sys"."sql_mul"("%2"."%2" NOT NULL, "%3"."%3" NOT NULL) NOT NULL as 
"%1"."%1" ]
 ) [ "%1"."%1" NOT NULL ]
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jul2021 - Fix test by adding table to merge table.

2021-06-11 Thread Sjoerd Mullender
Changeset: dfde312b4e50 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/dfde312b4e50
Modified Files:
sql/test/mergetables/Tests/addtable.test
Branch: Jul2021
Log Message:

Fix test by adding table to merge table.


diffs (20 lines):

diff --git a/sql/test/mergetables/Tests/addtable.test 
b/sql/test/mergetables/Tests/addtable.test
--- a/sql/test/mergetables/Tests/addtable.test
+++ b/sql/test/mergetables/Tests/addtable.test
@@ -34,7 +34,10 @@ create merge table ups(a int)
 statement ok
 create table notsame(b int)
 
-statement ok rowcount 2
+statement ok
+alter table ups add table notsame
+
+statement ok rowcount 1
 insert into notsame values (1)
 
 query II rowsort
@@ -75,3 +78,4 @@ 2
 
 statement ok
 rollback
+
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jul2021 - Don't stop processing input when we encounter...

2021-06-11 Thread Sjoerd Mullender
Changeset: c2e65485 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c2e65485
Modified Files:
testing/sqllogictest.py
Branch: Jul2021
Log Message:

Don't stop processing input when we encounter a comment.


diffs (14 lines):

diff --git a/testing/sqllogictest.py b/testing/sqllogictest.py
--- a/testing/sqllogictest.py
+++ b/testing/sqllogictest.py
@@ -610,7 +610,9 @@ class SQLLogic:
 if not line:
 break
 if line[0] == '#': # skip mal comments
-break
+if self.approve:
+self.approve.write(line)
+continue
 conn = None
 # look for connection string
 if line.startswith('@connection'):
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jul2021 - Sort explain.function_histogram output (and a...

2021-06-11 Thread Sjoerd Mullender
Changeset: 1020e1b87dae for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1020e1b87dae
Modified Files:
sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test

sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.test
sql/test/BugTracker-2017/Tests/side-effect.Bug-6397.test
sql/test/BugTracker/Tests/explain.SF-1739353.test
sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.test

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-0join-query.test

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-0join-view.test

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-query.test

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-view.test

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

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.test
sql/test/SQLancer/Tests/sqlancer10.test
sql/test/SQLancer/Tests/sqlancer13.test
sql/test/mapi/Tests/sql_int128.test
sql/test/miscellaneous/Tests/simple_plans.test
sql/test/remote/Tests/partition_elim.test
testing/explain.py
Branch: Jul2021
Log Message:

Sort explain.function_histogram output (and also 
explain.function_with_more_than_one_result_bat)


diffs (truncated from 2260 to 300 lines):

diff --git 
a/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test 
b/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test
--- a/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test
+++ b/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test
@@ -105,174 +105,160 @@ top N (
 query T python .explain.function_histogram
 EXPLAIN select * from oblo
 
-user.main
-1
-querylog.define
-1
-sql.mvc
-1
-sql.tid
-1
-sql.bind
-1
-sql.emptybind
-1
-sql.delta
-1
 algebra.projection
 1
 bat.pack
 5
+querylog.define
+1
+sql.bind
+1
+sql.delta
+1
+sql.emptybind
+1
+sql.mvc
+1
 sql.resultSet
 1
+sql.tid
+1
+user.main
+1
 
 query T python .explain.function_histogram
 EXPLAIN select * from oblo OFFSET 2
 
-user.main
-1
-querylog.define
-1
-sql.mvc
-1
-sql.tid
-1
-sql.bind
-1
-sql.emptybind
-1
-sql.delta
-1
 algebra.projection
 2
 algebra.subslice
 1
 bat.pack
 5
+querylog.define
+1
+sql.bind
+1
+sql.delta
+1
+sql.emptybind
+1
+sql.mvc
+1
 sql.resultSet
 1
+sql.tid
+1
+user.main
+1
 
 query T python .explain.function_histogram
 EXPLAIN select * from oblo LIMIT 2
 
-user.main
-1
-querylog.define
-1
-sql.mvc
-1
-sql.tid
-1
-sql.bind
-1
-sql.emptybind
-1
-sql.delta
-1
 algebra.projection
 2
 algebra.subslice
 1
 bat.pack
 5
+querylog.define
+1
+sql.bind
+1
+sql.delta
+1
+sql.emptybind
+1
+sql.mvc
+1
 sql.resultSet
 1
+sql.tid
+1
+user.main
+1
 
 query T python .explain.function_histogram
 EXPLAIN select * from oblo LIMIT 1 OFFSET 2
 
-user.main
-1
-querylog.define
-1
-sql.mvc
-1
-sql.tid
-1
-sql.bind
-1
-sql.emptybind
-1
-sql.delta
-1
 algebra.projection
 2
 algebra.subslice
 1
 bat.pack
 5
+querylog.define
+1
+sql.bind
+1
+sql.delta
+1
+sql.emptybind
+1
+sql.mvc
+1
 sql.resultSet
 1
+sql.tid
+1
+user.main
+1
 
 query T python .explain.function_histogram
 EXPLAIN select * from oblo LIMIT 2 OFFSET 1
 
-user.main
-1
-querylog.define
-1
-sql.mvc
-1
-sql.tid
-1
-sql.bind
-1
-sql.emptybind
-1
-sql.delta
-1
 algebra.projection
 2
 algebra.subslice
 1
 bat.pack
 5
+querylog.define
+1
+sql.bind
+1
+sql.delta
+1
+sql.emptybind
+1
+sql.mvc
+1
 sql.resultSet
 1
+sql.tid
+1
+user.main
+1
 
 query T python .explain.function_histogram
 EXPLAIN select * from oblo ORDER BY a
 
-user.main
-1
-querylog.define
-1
-sql.mvc
-1
-sql.tid
-1
-sql.bind
-1
-sql.emptybind
-1
-sql.delta
-1
 algebra.projection
 2
 algebra.sort
 1
 bat.pack
 5
+querylog.define
+1
+sql.bind
+1
+sql.delta
+1
+sql.emptybind
+1
+sql.mvc
+1
 sql.resultSet
 1
+sql.tid
+1
+user.main
+1
 
 query T python .explain.function_histogram
 EXPLAIN select * from oblo ORDER BY a OFFSET 2
 
-user.main
-1
-querylog.define
-1
-sql.mvc
-1
-sql.tid
-1
-sql.bind
-1
-sql.emptybind
-1
-sql.delta
-1
 algebra.projection
 3
 algebra.sort
@@ -281,98 +267,112 @@ algebra.subslice
 1
 bat.pack
 5
+querylog.define
+1
+sql.bind
+1
+sql.delta
+1
+sql.emptybind
+1
+sql.mvc
+1
 sql.resultSet
 1
+sql.tid
+1
+user.main
+1
 
 query T python .explain.function_histogram
 EXPLAIN select * from oblo ORDER BY a LIMIT 2
 
-user.main
-1
-querylog.define
-1
-sql.mvc
-1
-sql.tid
-1
-sql.bind
-1
-sql.emptybind
-1
-sql.delta
+algebra.firstn
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jul2021 - Fix some test output types.

2021-06-11 Thread Sjoerd Mullender
Changeset: 6b2527eb7a16 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6b2527eb7a16
Modified Files:
sql/test/SQLancer/Tests/sqlancer13.test
sql/test/SQLancer/Tests/sqlancer16.test
Branch: Jul2021
Log Message:

Fix some test output types.


diffs (255 lines):

diff --git a/sql/test/SQLancer/Tests/sqlancer13.test 
b/sql/test/SQLancer/Tests/sqlancer13.test
--- a/sql/test/SQLancer/Tests/sqlancer13.test
+++ b/sql/test/SQLancer/Tests/sqlancer13.test
@@ -191,7 +191,7 @@ query I rowsort
 SELECT 1 FROM t2, t1 WHERE (t2.c0 > 4 OR false) AND (CASE WHEN 9 IN (t2.c0, 
t1.c2) THEN TRUE END)
 
 
-query T rowsort
+query I rowsort
 SELECT t1.c2 FROM t2, t1 WHERE (t2.c0)^(2))) NOT BETWEEN SYMMETRIC 
(least(t1.c2, t1.c2)) AND (4))AND(NOT (TRUEOR(least(FALSE, 
FALSEAND(CASE WHEN (9) NOT IN (t2.c0, t1.c2) THEN TRUE ELSE greatest(TRUE, 
FALSE) END))
 
 
@@ -388,7 +388,64 @@ 108
 query I rowsort
 SELECT 1 FROM t0, t1 CROSS JOIN (SELECT DISTINCT t1.c0 > 4 FROM t1, t2 WHERE 
t2.c2) AS sub0 WHERE (('Bw') NOT IN (least(t0.c2, t0.c2), CAST(t1.c0 AS 
VARCHAR(64 IS NULL
 
-58 values hashing to 8fdc0683e1f7f9ff9590af46dca75282
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
 
 statement ok
 ROLLBACK
@@ -399,13 +456,13 @@ START TRANSACTION
 statement ok
 CREATE TABLE "sys"."t1" ("c3" BOOLEAN)
 
-query T rowsort
+query R rowsort
 select (345*(case when t1.c3 then 0 else 58.9 end))*3 from t1
 union all
 select (345*(case when t1.c3 then 0 else 58.9 end))*3 from t1
 
 
-query T rowsort
+query R rowsort
 select (11*(case when t1.c3 then 0 else 0.57 end))*3 from t1
 union all
 select (11*(case when t1.c3 then 0 else 0.57 end))*3 from t1
@@ -414,10 +471,10 @@ select (11*(case when t1.c3 then 0 else 
 statement ok
 ROLLBACK
 
-query T rowsort
+query R rowsort
 select round((0.52)*(0.10), -8)
 
-0.
+0.000
 
 statement ok
 START TRANSACTION
@@ -551,26 +608,26 @@ SELECT CAST(10)+(0.3607000614109831)
 
 102 values hashing to a98471bd784fc82e6e3165302bc0080a
 
-query T rowsort
+query I rowsort
 SELECT t1.c2 > 10 + 0.3607000614109831 FROM t1
 
-False
-False
-False
+0
+0
+0
 
-query T rowsort
+query I rowsort
 SELECT t1.c2 > 10 + 0.36 FROM t1
 
-False
-False
-False
+0
+0
+0
 
-query T rowsort
+query I rowsort
 SELECT t1.c2 > 10 + 0.36111 FROM t1
 
-False
-False
-False
+0
+0
+0
 
 query I rowsort
 SELECT CAST(SUM(count) AS BIGINT) FROM (SELECT 
CAST(10)+(0.3607000614109831)))<(least(t1.c2, t1.c2))) AS INT) as count 
FROM t0, t1) as res
@@ -761,43 +818,43 @@ INSERT INTO t0(c0) VALUES(BLOB ''), (BLO
 statement ok
 INSERT INTO t2(c0) VALUES(BLOB '050aC56fd0')
 
-query T rowsort
+query I rowsort
 SELECT '' >= t1.c3 FROM t0, t1, t2
 
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
-False
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
 
 statement ok
 DROP TABLE t0
diff --git a/sql/test/SQLancer/Tests/sqlancer16.test 
b/sql/test/SQLancer/Tests/sqlancer16.test
--- a/sql/test/SQLancer/Tests/sqlancer16.test
+++ b/sql/test/SQLancer/Tests/sqlancer16.test
@@ -106,7 +106,7 @@ CREATE TABLE "t1" ("c2" BIGINT NOT NULL,
 statement ok rowcount 4
 INSERT INTO "t1" VALUES (69), (-12), (9), (0)
 
-query T rowsort
+query I rowsort
 SELECT -3 < least((SELECT 1 WHERE FALSE), (SELECT DISTINCT 2 FROM t1)) FROM t1
 
 True
@@ -122,7 +122,7 @@ 0
 69
 9
 
-query T rowsort
+query I rowsort
 SELECT least((SELECT 1 WHERE FALSE), (SELECT DISTINCT 2 FROM t1)) > -3 FROM t1
 
 True
@@ -151,7 +151,7 @@ statement ok rowcount 9
 INSERT INTO "t0" VALUES (INTERVAL '6' SECOND),(INTERVAL '9' SECOND),(INTERVAL 
'1' SECOND),
 (INTERVAL '0' SECOND),(INTERVAL '9' SECOND),(INTERVAL '4' SECOND),(INTERVAL 
'6' SECOND),(INTERVAL '1' SECOND),(NULL)
 
-query T rowsort
+query I rowsort
 SELECT (SELECT 2 WHERE FALSE) = ANY(SELECT 3 WHERE FALSE)
 
 False
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Oct2020 - Added test and fix for bug #7142. Only regula...

2021-06-11 Thread Pedro Ferreira
Changeset: 358cb6f436fb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/358cb6f436fb
Added Files:
sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.sql
sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.stable.err
sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.stable.out
Modified Files:
sql/server/rel_psm.c
sql/test/BugTracker-2021/Tests/All
Branch: Oct2020
Log Message:

Added test and fix for bug #7142. Only regular functions can return tables


diffs (129 lines):

diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -862,11 +862,15 @@ rel_create_func(sql_query *query, dlist 
int instantiate = (sql->emode == m_instantiate);
int deps = (sql->emode == m_deps);
int create = (!instantiate && !deps);
-   bit vararg = FALSE;
+   bit vararg = FALSE, union_err = 0;
char *F = NULL, *fn = NULL, is_func;
 
-   if (res && res->token == SQL_TABLE)
-   type = F_UNION;
+   if (res && res->token == SQL_TABLE) {
+   if (type == F_FUNC)
+   type = F_UNION;
+   else
+   union_err = 1;
+   }
 
FUNC_TYPE_STR(type)
 
@@ -876,7 +880,9 @@ rel_create_func(sql_query *query, dlist 
if (STORE_READONLY && create)
return sql_error(sql, 06, SQLSTATE(42000) "Schema statements 
cannot be executed on a readonly database.");
 
-   if (res && type == F_PROC)
+   if (union_err)
+   return sql_error(sql, 02, SQLSTATE(42000) "CREATE %s: %ss 
cannot return tables", F, fn);
+   else if (res && type == F_PROC)
return sql_error(sql, 02, SQLSTATE(42000) "CREATE %s: 
procedures cannot have return parameters", F);
else if (res && (type == F_FILT || type == F_LOADER))
return sql_error(sql, 02, SQLSTATE(42000) "CREATE %s: %s 
functions don't have to specify a return type", F, fn);
diff --git a/sql/test/BugTracker-2021/Tests/All 
b/sql/test/BugTracker-2021/Tests/All
--- a/sql/test/BugTracker-2021/Tests/All
+++ b/sql/test/BugTracker-2021/Tests/All
@@ -13,3 +13,4 @@ batappend-undefined.Bug-7130
 KNOWNFAIL?WITH-alias-DELETE-1.deletes-wrong-tuples.Bug-7133
 KNOWNFAIL?WITH-alias-DELETE-2.deletes-too-many-tuples.Bug-7133
 HAVE_LIBPY3?python-aggregates-void-bat.Bug-7138
+HAVE_LIBPY3?aggregates-tables.Bug-7142
diff --git a/sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.sql 
b/sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.sql
@@ -0,0 +1,29 @@
+START TRANSACTION;
+
+CREATE AGGREGATE linear_least_squares(xg DOUBLE, yg DOUBLE)
+RETURNS TABLE (a DOUBLE, b DOUBLE)
+LANGUAGE PYTHON {
+import numpy as np
+# Define an inner function to do the work
+def perform_least_squares(x, y):
+mx = np.average(x)
+my = np.average(y)
+N = len(x)
+a = (np.dot(x,y) - mx*my)/(np.dot(x,x) - N*mx*mx)
+b = (my*np.dot(x,x) - mx*(np.dot(x,y)))/(np.dot(x,x) - N*mx*mx)
+return [a, b]
+ab = {"a": list(), "b": list()}
+try:
+groups = np.unique(aggr_group)
+for i in range(groups):
+a,b = perform_least_squares(xg[aggr_group==groups[i]], 
yg[aggr_group==groups[i]])
+ab["a"].append(a)
+ab["b"].append(b)
+except NameError:
+a,b = perform_least_squares(xg, yg)
+ab["a"].append(a)
+ab["b"].append(b)
+return ab
+};
+
+ROLLBACK;
diff --git 
a/sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.stable.err 
b/sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.stable.err
@@ -0,0 +1,30 @@
+stderr of test 'aggregates-tables.Bug-7142` in directory 
'sql/test/BugTracker-2021` itself:
+
+
+# 11:30:33 >  
+# 11:30:33 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-218832" "--port=38265"
+# 11:30:33 >  
+
+MAPI  = (monetdb) /var/tmp/mtest-218832/.s.monetdb.38265
+QUERY = CREATE AGGREGATE linear_least_squares(xg DOUBLE, yg DOUBLE)
+RETURNS TABLE (a DOUBLE, b DOUBLE)
+LANGUAGE PYTHON {
+import numpy as np
+# Define an inner function to do the work
+def perform_least_squares(x, y):
+mx = np.average(x)
+my = np.average(y)
+N = len(x)
+a = (np.dot(x,y) - mx*my)/(np.dot(x,x) - N*mx*mx)
+b = (my*np.dot(x,x) - mx*(np.dot(x,y)))/(np.dot(x,x) - N*mx*mx)
+return [a, b]
+ab = {"a": list(), "b": list()}
+try:
+groups = np.unique(aggr_group)
+ERROR = !CREATE AGGREGATE: aggregates cannot return tables
+CODE  = 42000
+
+# 11:30:33 >  
+# 11:30:33 >  "Done."
+# 

MonetDB: default - Also align variables during profiling

2021-06-11 Thread Martin Kersten
Changeset: 61e18cba214a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/61e18cba214a
Modified Files:
monetdb5/mal/mal_profiler.c
Branch: default
Log Message:

Also align variables during profiling


diffs (14 lines):

diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -209,6 +209,10 @@ prepareProfilerEvent(Client cntxt, MalBl
if(malprofileruser!= MAL_ADMIN && malprofileruser != cntxt->user)
return NULL;
 
+/* align the variable namings with EXPLAIN and TRACE */
+   if( pci->pc == 1 && start)
+   renameVariables(mb);
+
logbuf = (struct logbuf) {0};
 
usec= pci->clock;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Align variable names in TRACE and EXPLAIN

2021-06-11 Thread Martin Kersten
Changeset: 8617e2b4cf31 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8617e2b4cf31
Modified Files:
monetdb5/modules/mal/profiler.c
sql/backends/monet5/sql_execute.c
Branch: default
Log Message:

Align variable names in TRACE and EXPLAIN


diffs (22 lines):

diff --git a/monetdb5/modules/mal/profiler.c b/monetdb5/modules/mal/profiler.c
--- a/monetdb5/modules/mal/profiler.c
+++ b/monetdb5/modules/mal/profiler.c
@@ -90,6 +90,7 @@ CMDstartTrace(Client cntxt, MalBlkPtr mb
(void) mb;
(void) stk;
(void) pci;
+   renameVariables(mb); // to keep in sink with explain
return startTrace(cntxt);
 }
 
diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -189,6 +189,7 @@ SQLsetTrace(Client cntxt, MalBlkPtr mb)
pushEndInstruction(mb);
if( msg == MAL_SUCCEED)
msg = chkTypes(cntxt->usermodule, mb, TRUE);
+   renameVariables(mb);
return msg;
 }
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: iso - More crude protection for merge tables and changi...

2021-06-11 Thread Pedro Ferreira
Changeset: 6aaea4bc569c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6aaea4bc569c
Modified Files:
sql/storage/store.c
sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
Branch: iso
Log Message:

More crude protection for merge tables and changing schemas


diffs (36 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -4607,6 +4607,8 @@ sql_trans_add_table(sql_trans *tr, sql_t
int res = 0;
sql_table *dup = NULL;
 
+   if (os_has_changes(mt->s->parts, tr)) /* for inserts disallow 
concurrent transactions */
+   return -2;
/* merge table depends on part table */
if ((res = sql_trans_create_dependency(tr, pt->base.id, mt->base.id, 
TABLE_DEPENDENCY)))
return res;
@@ -4933,6 +4935,8 @@ sql_trans_set_table_schema(sql_trans *tr
oid rid;
int res = 0;
 
+   if (os_has_changes(os->parts, tr)) /* because of merge tables disallow 
if there are changes there */
+   return -2;
rid = store->table_api.column_find_row(tr, find_sql_column(systable, 
"id"), >base.id, NULL);
assert(!is_oid_nil(rid));
if ((res = store->table_api.column_update_value(tr, 
find_sql_column(systable, "schema_id"), rid, &(ns->base.id
diff --git a/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py 
b/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
--- a/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
+++ b/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
@@ -26,9 +26,9 @@ with SQLTestCase() as mdb1:
 mdb1.execute('start transaction;').assertSucceeded()
 mdb2.execute('start transaction;').assertSucceeded()
 mdb1.execute("ALTER TABLE parent1 ADD TABLE child1 AS PARTITION FROM 
'1' TO '2';").assertSucceeded() # these merge tables are very difficult, maybe 
allow only 1 transaction on the system?
-mdb2.execute("alter table child1 set schema ups;").assertSucceeded()
+mdb2.execute("alter table child1 set schema 
ups;").assertFailed(err_code="42000", err_message="ALTER TABLE: transaction 
conflict detected")
 mdb1.execute('commit;').assertSucceeded()
-mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
+mdb2.execute('rollback;').assertSucceeded()
 
 mdb1.execute('create merge table parent2(a int) PARTITION BY RANGE ON 
(a);').assertSucceeded()
 mdb1.execute('create table child2(c int);').assertSucceeded()
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: iso - More predicates to fix

2021-06-11 Thread Pedro Ferreira
Changeset: c6319350f7da for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c6319350f7da
Modified Files:
sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
Branch: iso
Log Message:

More predicates to fix


diffs (57 lines):

diff --git a/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py 
b/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
--- a/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
+++ b/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
@@ -5,28 +5,47 @@ with SQLTestCase() as mdb1:
 mdb1.connect(username="monetdb", password="monetdb")
 mdb2.connect(username="monetdb", password="monetdb")
 
-mdb1.execute("CREATE TABLE integers (i int);").assertSucceeded()
+mdb1.execute("CREATE TABLE integers (i int, j int);").assertSucceeded()
 mdb1.execute('start transaction;').assertSucceeded()
 mdb2.execute('start transaction;').assertSucceeded()
 mdb1.execute('alter table integers add primary key 
(i);').assertSucceeded()
-mdb2.execute('insert into integers values 
(5),(5),(5);').assertSucceeded()
+mdb2.execute('insert into integers values 
(5,1),(5,2),(5,3);').assertSucceeded()
+mdb1.execute('commit;').assertSucceeded()
+mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
+
+mdb1.execute('start transaction;').assertSucceeded()
+mdb2.execute('start transaction;').assertSucceeded()
+mdb1.execute('alter table integers alter j set not 
null;').assertSucceeded()
+mdb2.execute('insert into integers values 
(6,NULL),(7,NULL),(8,NULL);').assertSucceeded()
 mdb1.execute('commit;').assertSucceeded()
 mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
 
 mdb1.execute('create schema ups;').assertSucceeded()
-mdb1.execute('create merge table parent(a int) PARTITION BY RANGE ON 
(a);').assertSucceeded()
+mdb1.execute('create merge table parent1(a int) PARTITION BY RANGE ON 
(a);').assertSucceeded()
 mdb1.execute('create table child1(c int);').assertSucceeded()
 mdb1.execute('start transaction;').assertSucceeded()
 mdb2.execute('start transaction;').assertSucceeded()
-mdb1.execute("ALTER TABLE parent ADD TABLE child1 AS PARTITION FROM 
'1' TO '2';").assertSucceeded() # these merge tables are very difficult, maybe 
allow only 1 transaction on the system?
+mdb1.execute("ALTER TABLE parent1 ADD TABLE child1 AS PARTITION FROM 
'1' TO '2';").assertSucceeded() # these merge tables are very difficult, maybe 
allow only 1 transaction on the system?
 mdb2.execute("alter table child1 set schema ups;").assertSucceeded()
 mdb1.execute('commit;').assertSucceeded()
 mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
 
+mdb1.execute('create merge table parent2(a int) PARTITION BY RANGE ON 
(a);').assertSucceeded()
+mdb1.execute('create table child2(c int);').assertSucceeded()
+mdb1.execute('start transaction;').assertSucceeded()
+mdb2.execute('start transaction;').assertSucceeded()
+mdb1.execute("ALTER TABLE parent2 ADD TABLE child2 AS PARTITION FROM 
'1' TO '2';").assertSucceeded()
+mdb2.execute("insert into child2 values (3);").assertSucceeded()
+mdb1.execute('commit;').assertSucceeded()
+mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
+
 mdb1.execute('start transaction;').assertSucceeded()
 mdb1.execute('drop table integers;').assertSucceeded()
 mdb1.execute('drop schema ups;').assertSucceeded()
-mdb1.execute('ALTER TABLE parent DROP TABLE child1;').assertSucceeded()
-mdb1.execute('DROP TABLE parent;').assertSucceeded()
+mdb1.execute('ALTER TABLE parent1 DROP TABLE 
child1;').assertSucceeded()
+mdb1.execute('DROP TABLE parent1;').assertSucceeded()
 mdb1.execute('DROP TABLE child1;').assertSucceeded()
+mdb1.execute('ALTER TABLE parent2 DROP TABLE 
child2;').assertSucceeded()
+mdb1.execute('DROP TABLE parent2;').assertSucceeded()
+mdb1.execute('DROP TABLE child2;').assertSucceeded()
 mdb1.execute('commit;').assertSucceeded()
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: iso - Don't re-lock on predicate failure, cleanup

2021-06-11 Thread Pedro Ferreira
Changeset: 006f30e15e4d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/006f30e15e4d
Modified Files:
sql/server/sql_mvc.c
sql/storage/store.c
Branch: iso
Log Message:

Don't re-lock on predicate failure, cleanup


diffs (138 lines):

diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -441,7 +441,7 @@ mvc_debug_on(mvc *m, int flg)
 void
 mvc_cancel_session(mvc *m)
 {
-   (void)sql_trans_end(m->session, 0);
+   (void)sql_trans_end(m->session, SQL_ERR);
 }
 
 int
@@ -460,7 +460,7 @@ mvc_trans(mvc *m)
/* TODO Change into recreate all */
m->qc = qc_create(m->pa, m->clientid, seqnr);
if (!m->qc) {
-   (void)sql_trans_end(m->session, 0);
+   (void)sql_trans_end(m->session, SQL_ERR);
return -1;
}
}
@@ -511,7 +511,7 @@ mvc_commit(mvc *m, int chain, const char
}
 
if (!tr->parent && !name) {
-   if (sql_trans_end(m->session, 1) != SQL_OK) {
+   if (sql_trans_end(m->session, ok) != SQL_OK) {
/* transaction conflict */
return createException(SQL, "sql.commit", 
SQLSTATE(4) "%s transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead", operation);
}
@@ -541,7 +541,7 @@ mvc_commit(mvc *m, int chain, const char
/* if there is nothing to commit reuse the current transaction */
if (tr->changes == NULL) {
if (!chain)
-   (void)sql_trans_end(m->session, ok == SQL_OK ? 1 : 0); 
/* if a conflict happened while committing, rollback */
+   (void)sql_trans_end(m->session, ok);
m->type = Q_TRANS;
/* save points not handled by WLC...
msg = WLCcommit(m->clientid);
@@ -566,7 +566,7 @@ mvc_commit(mvc *m, int chain, const char
return msg;
}
*/
-   (void)sql_trans_end(m->session, ok == SQL_OK ? 1 : 0); /* if a conflict 
happened while committing, rollback */
+   (void)sql_trans_end(m->session, ok);
if (chain)
sql_trans_begin(m->session);
m->type = Q_TRANS;
@@ -615,7 +615,7 @@ mvc_rollback(mvc *m, int chain, const ch
/* make sure we do not reuse changed data */
if (tr->changes)
tr->status = 1;
-   (void)sql_trans_end(m->session, 0);
+   (void)sql_trans_end(m->session, SQL_ERR);
if (chain)
sql_trans_begin(m->session);
}
@@ -831,7 +831,7 @@ mvc_destroy(mvc *m)
tr = m->session->tr;
if (tr) {
if (m->session->tr->active)
-   (void)sql_trans_end(m->session, 0);
+   (void)sql_trans_end(m->session, SQL_ERR);
while (tr->parent)
tr = sql_trans_destroy(tr);
}
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3237,7 +3237,7 @@ sql_trans_copy_column( sql_trans *tr, sq
 }
 
 static void
-sql_trans_rollback(sql_trans *tr)
+sql_trans_rollback(sql_trans *tr, int locked)
 {
sqlstore *store = tr->store;
 
@@ -3263,7 +3263,8 @@ sql_trans_rollback(sql_trans *tr)
list_prepend(nl, n->data);
 
/* rollback */
-   store_lock(store);
+   if (!locked)
+   store_lock(store);
ulng oldest = store_oldest(store);
ulng commit_ts = store_get_timestamp(store); /* use most recent 
timestamp such that we can cleanup savely */
for(node *n=nl->h; n; n = n->next) {
@@ -3288,7 +3289,8 @@ sql_trans_rollback(sql_trans *tr)
list_destroy(tr->changes);
tr->changes = NULL;
tr->logchanges = 0;
-   store_unlock(store);
+   if (!locked)
+   store_unlock(store);
}
if (tr->localtmps.dset) {
list_destroy2(tr->localtmps.dset, tr->store);
@@ -3328,7 +3330,7 @@ sql_trans_destroy(sql_trans *tr)
tr->name = NULL;
}
if (tr->changes)
-   sql_trans_rollback(tr);
+   sql_trans_rollback(tr, 0);
sqlstore *store = tr->store;
store_lock(store);
cs_destroy(>localtmps, tr->store);
@@ -3457,6 +3459,7 @@ sql_trans_commit(sql_trans *tr)
ulng oldest = store_oldest(store);
 
if (tr->predicates && (ok = sql_trans_valid(tr)) != LOG_OK) {
+   sql_trans_rollback(tr, 1);
store_unlock(store);
MT_lock_unset(>commit);
return ok;
@@ -6327,17 +6330,13 @@ sql_trans_begin(sql_session *s)
 }
 
 int

MonetDB: iso - Compilation fix and more predicates to fix

2021-06-11 Thread Pedro Ferreira
Changeset: 29aae82e4d0d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/29aae82e4d0d
Added Files:
sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
Modified Files:
sql/include/sql_relation.h
sql/test/miscellaneous/Tests/All
sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
Branch: iso
Log Message:

Compilation fix and more predicates to fix


diffs (84 lines):

diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -289,7 +289,7 @@ typedef struct relation {
 
 typedef struct pl {
sql_column *c;
-   comp_type cmp;
+   unsigned int cmp;
atom *r; /* if r is NULL then a full match is required */
atom *f; /* make it match range expressions */
uint8_t
diff --git a/sql/test/miscellaneous/Tests/All b/sql/test/miscellaneous/Tests/All
--- a/sql/test/miscellaneous/Tests/All
+++ b/sql/test/miscellaneous/Tests/All
@@ -21,3 +21,4 @@ vessels
 prepare
 transaction_isolation
 transaction_isolation2
+transaction_isolation3
diff --git a/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py 
b/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
--- a/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
+++ b/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
@@ -188,13 +188,12 @@ with SQLTestCase() as mdb1:
 mdb2.execute('rollback;').assertSucceeded()
 mdb1.execute('DROP FUNCTION myfunc;').assertSucceeded()
 
-# currently runs up till here..
 mdb1.execute('start transaction;').assertSucceeded()
 mdb2.execute('start transaction;').assertSucceeded()
 mdb1.execute('insert into longs values (4),(5),(6);').assertSucceeded()
 mdb2.execute('insert into longs values (5),(6),(7);').assertSucceeded()
 mdb1.execute('commit;').assertSucceeded()
-mdb2.execute('commit;').assertFailed() # Duplicate values on the 
primary key 'i' from 'longs'
+mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead") # Duplicate values on the primary key 'i' from 'longs'
 mdb1.execute('SELECT i FROM longs order by 
i;').assertDataResultMatch([(1,),(2,),(3,),(4,),(5,),(6,)])
 
 mdb1.execute('start transaction;').assertSucceeded()
@@ -202,7 +201,7 @@ with SQLTestCase() as mdb1:
 mdb1.execute('delete from longs where i > 3;').assertRowCount(3)
 mdb2.execute('insert into integers values (4);').assertSucceeded()
 mdb1.execute('commit;').assertSucceeded()
-mdb2.execute('commit;').assertFailed() # The foreign key value 4 
doesn't exist on the primary key
+mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead") # The foreign key value 4 doesn't exist on the primary 
key
 mdb1.execute('SELECT i FROM longs order by 
i;').assertDataResultMatch([(1,),(2,),(3,)])
 
 mdb1.execute('start transaction;').assertSucceeded()
diff --git a/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py 
b/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
new file mode 100644
--- /dev/null
+++ b/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
@@ -0,0 +1,32 @@
+from MonetDBtesting.sqltest import SQLTestCase
+
+with SQLTestCase() as mdb1:
+with SQLTestCase() as mdb2:
+mdb1.connect(username="monetdb", password="monetdb")
+mdb2.connect(username="monetdb", password="monetdb")
+
+mdb1.execute("CREATE TABLE integers (i int);").assertSucceeded()
+mdb1.execute('start transaction;').assertSucceeded()
+mdb2.execute('start transaction;').assertSucceeded()
+mdb1.execute('alter table integers add primary key 
(i);').assertSucceeded()
+mdb2.execute('insert into integers values 
(5),(5),(5);').assertSucceeded()
+mdb1.execute('commit;').assertSucceeded()
+mdb2.execute('commit;').assertFailed(err_code="4", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
+
+mdb1.execute('create schema ups;').assertSucceeded()
+mdb1.execute('create merge table parent(a int) PARTITION BY RANGE ON 
(a);').assertSucceeded()
+mdb1.execute('create table child1(c int);').assertSucceeded()
+mdb1.execute('start transaction;').assertSucceeded()
+mdb2.execute('start transaction;').assertSucceeded()
+mdb1.execute("ALTER TABLE parent ADD TABLE child1 AS PARTITION FROM 
'1' TO '2';").assertSucceeded() # these merge tables are very difficult, maybe 
allow only 1 transaction on the system?
+mdb2.execute("alter table child1 set schema ups;").assertSucceeded()
+mdb1.execute('commit;').assertSucceeded()
+mdb2.execute('commit;').assertFailed(err_code="4",