Changeset: c7a75f6903ed for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c7a75f6903ed
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
monetdb5/mal/mal_client.h
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_private.h
monetdb5/modules/mal/clients.c
monetdb5/modules/mal/clients.h
monetdb5/modules/mal/clients.mal
sql/backends/monet5/sql_upgrades.c
sql/scripts/22_clients.sql
sql/test/Tests/systemfunctions.stable.out
sql/test/Tests/systemfunctions.stable.out.int128
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.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.powerpc64
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.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/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.32bit
sql/test/emptydb/Tests/check.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
sql/test/testdb-upgrade/Tests/upgrade.stable.out.powerpc64.int128
Branch: Apr2019
Log Message:
Implemented a print timeout.
Enable by using
call sys.setprinttimeout(seconds);
If a query doesn't finish within the specified number of seconds,
print a message to stderr (the logs) about which query is taking so
long. This message repeats every so may seconds.
diffs (truncated from 579 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
@@ -10740,6 +10740,7 @@ Ready.
[ "clients", "setListing", "pattern clients.setListing(flag:int):int ",
"CLTsetListing;", "Turn on/off echo of MAL instructions:\n\t1 - echo
input,\n\t2 - show mal instruction,\n\t4 - show details of type resolutoin,
\n\t8 - show binding information." ]
[ "clients", "setPassword", "pattern clients.setPassword(user:str,
pass:str):void ", "CLTsetPassword;", "Set the password for the
given user" ]
[ "clients", "setScenario", "pattern clients.setScenario(msg:str):str ",
"CLTsetScenario;", "Switch to other scenario handler, return previous
one." ]
+[ "clients", "setprinttimeout", "command
clients.setprinttimeout(n:int):void ", "CLTsetPrintTimeout;", "Print running
query every so many seconds." ]
[ "clients", "setsession", "pattern clients.setsession(n:lng):void ",
"CLTsetSessionTimeout;", "Abort a session after n seconds." ]
[ "clients", "settimeout", "pattern clients.settimeout(n:lng):void ",
"CLTsetTimeout;", "Abort a query after n seconds." ]
[ "clients", "settimeout", "pattern clients.settimeout(q:lng, s:lng):void
", "CLTsetTimeout;", "Abort a query after q seconds (q=0 means run
undisturbed).\nThe session timeout aborts the connection after spending
too\nmany seconds on query processing." ]
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
@@ -15136,6 +15136,7 @@ Ready.
[ "clients", "setListing", "pattern clients.setListing(flag:int):int ",
"CLTsetListing;", "Turn on/off echo of MAL instructions:\n\t1 - echo
input,\n\t2 - show mal instruction,\n\t4 - show details of type resolutoin,
\n\t8 - show binding information." ]
[ "clients", "setPassword", "pattern clients.setPassword(user:str,
pass:str):void ", "CLTsetPassword;", "Set the password for the
given user" ]
[ "clients", "setScenario", "pattern clients.setScenario(msg:str):str ",
"CLTsetScenario;", "Switch to other scenario handler, return previous
one." ]
+[ "clients", "setprinttimeout", "command
clients.setprinttimeout(n:int):void ", "CLTsetPrintTimeout;", "Print running
query every so many seconds." ]
[ "clients", "setsession", "pattern clients.setsession(n:lng):void ",
"CLTsetSessionTimeout;", "Abort a session after n seconds." ]
[ "clients", "settimeout", "pattern clients.settimeout(n:lng):void ",
"CLTsetTimeout;", "Abort a query after n seconds." ]
[ "clients", "settimeout", "pattern clients.settimeout(q:lng, s:lng):void
", "CLTsetTimeout;", "Abort a query after q seconds (q=0 means run
undisturbed).\nThe session timeout aborts the connection after spending
too\nmany seconds on query processing." ]
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
@@ -913,6 +913,7 @@ str CLTripemd160sum(str *ret, str *pw);
str CLTsessions(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str CLTsetListing(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str CLTsetPassword(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
+str CLTsetPrintTimeout(void *ret, int *secs);
str CLTsetScenario(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str CLTsetSessionTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
str CLTsetTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
diff --git a/monetdb5/mal/mal_client.h b/monetdb5/mal/mal_client.h
--- a/monetdb5/mal/mal_client.h
+++ b/monetdb5/mal/mal_client.h
@@ -86,6 +86,7 @@ typedef struct CLIENT {
lng session; /* usec since start of server */
lng qtimeout; /* query abort after x usec*/
lng stimeout; /* session abort after x usec */
+ lng lastprint; /* when we last printed the query */
/*
* Communication channels for the interconnect are stored here.
* It is perfectly legal to have a client without input stream.
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
@@ -19,6 +19,14 @@
#include "mal_type.h"
#include "mal_private.h"
+static lng qptimeout = 0; /* how often we print still running queries (usec) */
+static MT_Lock qptimeoutLock = MT_LOCK_INITIALIZER("qptimeoutLock");
+
+void
+setqptimeout(lng usecs)
+{
+ qptimeout = usecs;
+}
inline
ptr getArgReference(MalStkPtr stk, InstrPtr pci, int k)
@@ -289,6 +297,7 @@ str runMAL(Client cntxt, MalBlkPtr mb, M
* enough
*/
cntxt->lastcmd= time(0);
+ cntxt->lastprint = GDKusec();
if (env != NULL) {
int res = 1;
stk = env;
@@ -551,6 +560,18 @@ str runMALsequence(Client cntxt, MalBlkP
lastcheck = runtimeProfile.ticks;
}
+ if (qptimeout > 0) {
+ MT_lock_set(&qptimeoutLock);
+ lng t = GDKusec();
+ if (cntxt->lastprint + qptimeout < t) {
+ fprintf(stderr, "#%s: query already running
"LLFMT"s: %.200s\n",
+ cntxt->mythread->name, (t -
cntxt->lastprint)/1000000,
+ cntxt->query);
+ cntxt->lastprint = t;
+ }
+ MT_lock_unset(&qptimeoutLock);
+ }
+
/* The interpreter loop
* The interpreter is geared towards execution a MAL
* procedure together with all its descendant
diff --git a/monetdb5/mal/mal_private.h b/monetdb5/mal/mal_private.h
--- a/monetdb5/mal/mal_private.h
+++ b/monetdb5/mal/mal_private.h
@@ -48,6 +48,9 @@
__hidden extern MT_Lock mal_namespaceLock;
+__hidden void setqptimeout(lng usecs)
+ __attribute__((__visibility__("hidden")));
+
__hidden void mdbInit(void)
__attribute__((__visibility__("hidden")));
__hidden void mdbExit(void)
diff --git a/monetdb5/modules/mal/clients.c b/monetdb5/modules/mal/clients.c
--- a/monetdb5/modules/mal/clients.c
+++ b/monetdb5/modules/mal/clients.c
@@ -367,6 +367,17 @@ CLTgetTimeout(Client cntxt, MalBlkPtr mb
}
str
+CLTsetPrintTimeout(void *ret, int *secs)
+{
+ (void) ret;
+ if (is_int_nil(*secs))
+ setqptimeout(0);
+ else
+ setqptimeout((lng) *secs * 1000000);
+ return MAL_SUCCEED;
+}
+
+str
CLTwakeup(void *ret, int *id)
{
(void) ret; /* fool compiler */
diff --git a/monetdb5/modules/mal/clients.h b/monetdb5/modules/mal/clients.h
--- a/monetdb5/modules/mal/clients.h
+++ b/monetdb5/modules/mal/clients.h
@@ -32,6 +32,7 @@ mal_export str CLTsuspend(Client cntxt,
mal_export str CLTsetTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
mal_export str CLTsetSessionTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
mal_export str CLTgetTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+mal_export str CLTsetPrintTimeout(void *ret, int *secs);
mal_export str CLTwakeup(void *ret, int *id);
mal_export str CLTshutdown(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
diff --git a/monetdb5/modules/mal/clients.mal b/monetdb5/modules/mal/clients.mal
--- a/monetdb5/modules/mal/clients.mal
+++ b/monetdb5/modules/mal/clients.mal
@@ -88,6 +88,10 @@ comment "A query is aborted after q mill
The session timeout aborts the connection after spending too
many seconds on query processing.";
+command setprinttimeout(n:int):void
+address CLTsetPrintTimeout
+comment "Print running query every so many seconds.";
+
pattern shutdown(delay:int):str
address CLTshutdown;
pattern shutdown(delay:int, forced:bit):str
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
@@ -1553,6 +1553,12 @@ sql_update_apr2019(Client c, mvc *sql)
"grant execute on function sys.date_trunc(string,
timestamp) to public;\n"
"update sys.functions set system = true where schema_id
= (select id from sys.schemas where name = 'sys') and name = 'date_trunc' and
type = %d;\n", F_FUNC);
+ /* 22_clients.sql */
+ pos += snprintf(buf + pos, bufsize - pos,
+ "create procedure sys.setprinttimeout(\"timeout\"
integer)\n"
+ "external name clients.setprinttimeout;\n"
+ "update sys.functions set system = true where schema_id
= (select id from sys.schemas where name = 'sys') and name = 'setprinttimeout'
and type = %d;\n", F_PROC);
+
/* 26_sysmon.sql */
pos += snprintf(buf + pos, bufsize - pos,
"grant execute on function sys.queue to public;\n"
diff --git a/sql/scripts/22_clients.sql b/sql/scripts/22_clients.sql
--- a/sql/scripts/22_clients.sql
+++ b/sql/scripts/22_clients.sql
@@ -30,3 +30,6 @@ create procedure sys.settimeout("query"
external name clients.settimeout;
create procedure sys.setsession("timeout" bigint)
external name clients.setsession;
+
+create procedure sys.setprinttimeout("timeout" integer)
+ external name clients.setprinttimeout;
diff --git a/sql/test/Tests/systemfunctions.stable.out
b/sql/test/Tests/systemfunctions.stable.out
--- a/sql/test/Tests/systemfunctions.stable.out
+++ b/sql/test/Tests/systemfunctions.stable.out
@@ -1500,7 +1500,7 @@ Ready.
[ "sys", "querylog_catalog", 5, "clob", "" ]
[ "sys", "querylog_catalog", 6, "int", "" ]
[ "sys", "querylog_catalog", 7, "bigint", "" ]
-[ "sys", "querylog_enable", 0, "smallint", "create
procedure sys.querylog_enable(threshold smallint)\nexternal name
sql.querylog_enable_threshold;" ]
+[ "sys", "querylog_enable", 0, "int", "create procedure
sys.querylog_enable(threshold integer)\nexternal name sql.querylog_enable;" ]
[ "sys", "queue", 0, "bigint", "create function
sys.queue()\nreturns table(\n qtag bigint,\n \"user\" string,\n started
timestamp,\n estimate timestamp,\n progress int,\n status string,\n tag oid,\n
query string\n)\nexternal name sql.sysmon_queue;" ]
[ "sys", "queue", 1, "clob", "" ]
[ "sys", "queue", 2, "timestamp", "" ]
@@ -3237,6 +3237,7 @@ Ready.
[ "sys", "setmasklen", 0, "inet", "create function \"setmasklen\"
(p inet, mask int) returns inet\n external name inet.\"setmasklen\";" ]
[ "sys", "setmasklen", 1, "inet", "" ]
[ "sys", "setmasklen", 2, "int", "" ]
+[ "sys", "setprinttimeout", 0, "int", "create procedure
sys.setprinttimeout(\"timeout\" integer)\n external name
clients.setprinttimeout;" ]
[ "sys", "setsession", 0, "bigint", "create procedure
sys.setsession(\"timeout\" bigint)\n external name clients.setsession;" ]
[ "sys", "settimeout", 0, "bigint", "create procedure
sys.settimeout(\"query\" bigint)\n external name clients.settimeout;" ]
[ "sys", "settimeout", 0, "bigint", "create procedure
sys.settimeout(\"query\" bigint, \"session\" bigint)\n external name
clients.settimeout;" ]
diff --git a/sql/test/Tests/systemfunctions.stable.out.int128
b/sql/test/Tests/systemfunctions.stable.out.int128
--- a/sql/test/Tests/systemfunctions.stable.out.int128
+++ b/sql/test/Tests/systemfunctions.stable.out.int128
@@ -1601,7 +1601,7 @@ Ready.
[ "sys", "querylog_catalog", 5, "clob", "" ]
[ "sys", "querylog_catalog", 6, "int", "" ]
[ "sys", "querylog_catalog", 7, "bigint", "" ]
-[ "sys", "querylog_enable", 0, "smallint", "create
procedure sys.querylog_enable(threshold smallint)\nexternal name
sql.querylog_enable_threshold;" ]
+[ "sys", "querylog_enable", 0, "int", "create procedure
sys.querylog_enable(threshold integer)\nexternal name sql.querylog_enable;" ]
[ "sys", "queue", 0, "bigint", "create function
sys.queue()\nreturns table(\n qtag bigint,\n \"user\" string,\n started
timestamp,\n estimate timestamp,\n progress int,\n status string,\n tag oid,\n
query string\n)\nexternal name sql.sysmon_queue;" ]
[ "sys", "queue", 1, "clob", "" ]
[ "sys", "queue", 2, "timestamp", "" ]
@@ -3635,6 +3635,7 @@ Ready.
[ "sys", "setmasklen", 0, "inet", "create function \"setmasklen\"
(p inet, mask int) returns inet\n external name inet.\"setmasklen\";" ]
[ "sys", "setmasklen", 1, "inet", "" ]
[ "sys", "setmasklen", 2, "int", "" ]
+[ "sys", "setprinttimeout", 0, "int", "create procedure
sys.setprinttimeout(\"timeout\" integer)\n external name
clients.setprinttimeout;" ]
[ "sys", "setsession", 0, "bigint", "create procedure
sys.setsession(\"timeout\" bigint)\n external name clients.setsession;" ]
[ "sys", "settimeout", 0, "bigint", "create procedure
sys.settimeout(\"query\" bigint)\n external name clients.settimeout;" ]
[ "sys", "settimeout", 0, "bigint", "create procedure
sys.settimeout(\"query\" bigint, \"session\" bigint)\n external name
clients.settimeout;" ]
diff --git a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
@@ -5862,6 +5862,9 @@ returns timestamp
external name sql.date_trunc;
grant execute on function sys.date_trunc(string, timestamp) to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'date_trunc' and type = 1;
+create procedure sys.setprinttimeout("timeout" integer)
+external name clients.setprinttimeout;
+update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'setprinttimeout' and type = 2;
grant execute on function sys.queue to public;
grant select on sys.queue to public;
ALTER TABLE sys.keywords SET READ WRITE;
diff --git
a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
---
a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
+++
b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
@@ -5862,6 +5862,9 @@ returns timestamp
external name sql.date_trunc;
grant execute on function sys.date_trunc(string, timestamp) to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'date_trunc' and type = 1;
+create procedure sys.setprinttimeout("timeout" integer)
+external name clients.setprinttimeout;
+update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'setprinttimeout' and type = 2;
grant execute on function sys.queue to public;
grant select on sys.queue to public;
ALTER TABLE sys.keywords SET READ WRITE;
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
@@ -5072,6 +5072,9 @@ returns timestamp
external name sql.date_trunc;
grant execute on function sys.date_trunc(string, timestamp) to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'date_trunc' and type = 1;
+create procedure sys.setprinttimeout("timeout" integer)
+external name clients.setprinttimeout;
+update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'setprinttimeout' and type = 2;
grant execute on function sys.queue to public;
grant select on sys.queue to public;
ALTER TABLE sys.keywords SET READ WRITE;
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
@@ -5072,6 +5072,9 @@ returns timestamp
external name sql.date_trunc;
grant execute on function sys.date_trunc(string, timestamp) to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'date_trunc' and type = 1;
+create procedure sys.setprinttimeout("timeout" integer)
+external name clients.setprinttimeout;
+update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'setprinttimeout' and type = 2;
grant execute on function sys.queue to public;
grant select on sys.queue to public;
ALTER TABLE sys.keywords SET READ WRITE;
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
@@ -5913,6 +5913,9 @@ returns timestamp
external name sql.date_trunc;
grant execute on function sys.date_trunc(string, timestamp) to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'date_trunc' and type = 1;
+create procedure sys.setprinttimeout("timeout" integer)
+external name clients.setprinttimeout;
+update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'setprinttimeout' and type = 2;
grant execute on function sys.queue to public;
grant select on sys.queue to public;
ALTER TABLE sys.keywords SET READ WRITE;
diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64
@@ -5072,6 +5072,9 @@ returns timestamp
external name sql.date_trunc;
grant execute on function sys.date_trunc(string, timestamp) to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'date_trunc' and type = 1;
+create procedure sys.setprinttimeout("timeout" integer)
+external name clients.setprinttimeout;
+update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'setprinttimeout' and type = 2;
grant execute on function sys.queue to public;
grant select on sys.queue to public;
ALTER TABLE sys.keywords SET READ WRITE;
diff --git
a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128
@@ -5913,6 +5913,9 @@ returns timestamp
external name sql.date_trunc;
grant execute on function sys.date_trunc(string, timestamp) to public;
update sys.functions set system = true where schema_id = (select id from
sys.schemas where name = 'sys') and name = 'date_trunc' and type = 1;
+create procedure sys.setprinttimeout("timeout" integer)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list