Changeset: a87d6754f7f1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a87d6754f7f1
Added Files:
sql/ChangeLog.linear-hashing
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
debian/control
monetdb5/mal/mal_client.c
monetdb5/modules/mal/clients.c
monetdb5/modules/mal/clients.h
monetdb5/modules/mal/clients.mal
monetdb5/modules/mal/sysmon.c
sql/backends/monet5/sql_upgrades.c
sql/scripts/26_sysmon.sql
sql/server/rel_select.c
sql/test/BugTracker-2010/Tests/TypeException_with_missing_function.Bug-2674.stable.err
sql/test/BugTracker-2012/Tests/create_function.Bug-3172.stable.err
sql/test/BugTracker-2012/Tests/table_function_with_column_subselects.Bug-3172.stable.err
sql/test/BugTracker-2012/Tests/table_returning_func_returns_too_many_columns.Bug-3077.stable.err
sql/test/BugTracker-2013/Tests/psm_functions_and_accessrights.Bug-3300.stable.err
sql/test/BugTracker-2016/Tests/invalidcolumns.Bug-3968.stable.err
sql/test/BugTracker-2017/Tests/udf_crash_subquery_scalar_paramters.Bug-6399.stable.err
sql/test/BugTracker-2018/Tests/crash-after-call-non-existing-loader.stable.err
sql/test/Tests/drop-function-if-exists.stable.err
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/miscellaneous/Tests/simple_selects.sql
sql/test/miscellaneous/Tests/simple_selects.stable.err
sql/test/sys-schema/Tests/systemfunctions.stable.out
sql/test/sys-schema/Tests/systemfunctions.stable.out.int128
testing/Mtest.py.in
Branch: default
Log Message:
Merged with linear-hashing
diffs (truncated from 1507 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
@@ -10466,7 +10466,7 @@ stdout of test 'MAL-signatures` in direc
[ "clients", "stopsession", "pattern clients.stopsession(sid:int):void ",
"CLTstopSession;", "Stop a particular session" ]
[ "clients", "stopsession", "pattern clients.stopsession(sid:sht):void ",
"CLTstopSession;", "" ]
[ "clients", "suspend", "pattern clients.suspend(id:int):void ",
"CLTsuspend;", "Put a client process to sleep for some time.\nIt will simple
sleep for a second at a time, until\nthe awake bit has been set in its
descriptor" ]
-[ "clients", "wakeup", "command clients.wakeup(id:int):void ",
"CLTwakeup;", "Wakeup a client process" ]
+[ "clients", "wakeup", "pattern clients.wakeup(id:int):void ",
"CLTwakeup;", "Wakeup a client process" ]
[ "color", "#fromstr", "command color.#fromstr():void ",
"color_fromstr;", "" ]
[ "color", "#tostr", "command color.#tostr():void ", "color_tostr;",
"" ]
[ "color", "blue", "command color.blue(c:color):int ", "CLRblue;",
"Extracts blue component from a color atom" ]
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
@@ -14872,7 +14872,7 @@ stdout of test 'MAL-signatures` in direc
[ "clients", "stopsession", "pattern clients.stopsession(sid:int):void ",
"CLTstopSession;", "Stop a particular session" ]
[ "clients", "stopsession", "pattern clients.stopsession(sid:sht):void ",
"CLTstopSession;", "" ]
[ "clients", "suspend", "pattern clients.suspend(id:int):void ",
"CLTsuspend;", "Put a client process to sleep for some time.\nIt will simple
sleep for a second at a time, until\nthe awake bit has been set in its
descriptor" ]
-[ "clients", "wakeup", "command clients.wakeup(id:int):void ",
"CLTwakeup;", "Wakeup a client process" ]
+[ "clients", "wakeup", "pattern clients.wakeup(id:int):void ",
"CLTwakeup;", "Wakeup a client process" ]
[ "color", "#fromstr", "command color.#fromstr():void ",
"color_fromstr;", "" ]
[ "color", "#tostr", "command color.#tostr():void ", "color_tostr;",
"" ]
[ "color", "blue", "command color.blue(c:color):int ", "CLRblue;",
"Extracts blue component from a color atom" ]
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
@@ -992,7 +992,7 @@ str CLTshutdown(Client cntxt, MalBlkPtr
str CLTstop(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str CLTstopSession(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str CLTsuspend(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
-str CLTwakeup(void *ret, int *id);
+str CLTwakeup(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
str CMDBATimprints(void *ret, bat *bid);
str CMDBATimprintsize(lng *ret, bat *bid);
str CMDBATnew(Client cntxt, MalBlkPtr m, MalStkPtr s, InstrPtr p);
diff --git a/debian/control b/debian/control
--- a/debian/control
+++ b/debian/control
@@ -252,7 +252,7 @@ Description: MonetDB5 128 bit integer (h
Package: monetdb-python3
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends},
- monetdb5-sql (= ${source:Version})
+ monetdb5-sql (= ${source:Version}), python3-numpy
Description: Integration of MonetDB and Python, allowing use of Python from
within SQL
MonetDB is a database management system that is developed from a
main-memory perspective with use of a fully decomposed storage model,
@@ -269,7 +269,7 @@ Description: Integration of MonetDB and
Package: monetdb-r
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends},
- monetdb5-sql (= ${source:Version})
+ monetdb5-sql (= ${source:Version}), r-base-core
Description: Integration of MonetDB and R, allowing use of R from within SQL
MonetDB is a database management system that is developed from a
main-memory perspective with use of a fully decomposed storage model,
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -605,7 +605,6 @@ MCreadClient(Client c)
return 1;
}
-
int
MCvalid(Client tc)
{
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
@@ -186,82 +186,91 @@ bailout:
str
CLTquit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int id;
+ str msg = MAL_SUCCEED;
+ int idx = cntxt->idx;
(void) mb; /* fool compiler */
- if ( pci->argc==2)
- id = *getArgReference_int(stk,pci,1);
- else id =cntxt->idx;
+ if ( pci->argc == 2 && cntxt->user == MAL_ADMIN)
+ idx = *getArgReference_int(stk,pci,1);
- if ( id < 0 || id > MAL_MAXCLIENTS)
+ if ( idx < 0 || idx > MAL_MAXCLIENTS)
throw(MAL,"clients.quit", "Illegal session id");
- if ( !(cntxt->user == MAL_ADMIN || mal_clients[id].user == cntxt->user)
)
- throw(MAL, "client.quit", INVCRED_ACCESS_DENIED);
/* A user can only quite a session under the same id */
- if ( cntxt->idx == mal_clients[id].idx)
- mal_clients[id].mode = FINISHCLIENT;
- else
- throw(MAL, "client.quit", INVCRED_ACCESS_DENIED);
- return MAL_SUCCEED;
+ MT_lock_set(&mal_contextLock);
+ if (mal_clients[idx].mode == FREECLIENT)
+ msg = createException(MAL,"clients.stop","Session not active
anymore");
+ else
+ mal_clients[idx].mode = FINISHCLIENT;
+ MT_lock_unset(&mal_contextLock);
+ return msg;
}
/* Stopping a client in a softmanner by setting the time out marker */
str
CLTstop(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int id = *getArgReference_int(stk,pci,1);
+ int idx = cntxt->idx;
+ str msg = MAL_SUCCEED;
(void) mb;
- if ( id < 0 || id > MAL_MAXCLIENTS)
+ if (cntxt->user == MAL_ADMIN)
+ idx = *getArgReference_int(stk,pci,1);
+
+ if ( idx < 0 || idx > MAL_MAXCLIENTS)
throw(MAL,"clients.stop","Illegal session id");
- if (cntxt->user == mal_clients[id].user || cntxt->user == MAL_ADMIN)
- mal_clients[id].querytimeout = 1; /* stop client in one
microsecond */
+
+ MT_lock_set(&mal_contextLock);
+ if (mal_clients[idx].mode == FREECLIENT)
+ msg = createException(MAL,"clients.stop","Session not active
anymore");
+ else
+ mal_clients[idx].querytimeout = 1; /* stop client in one
microsecond */
/* this forces the designated client to stop at the next instruction */
- return MAL_SUCCEED;
+ MT_lock_unset(&mal_contextLock);
+ return msg;
}
str
CLTsetoptimizer(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int idx;
- str opt;
+ int idx = cntxt->idx;
+ str opt, msg = MAL_SUCCEED;
(void) mb;
- if( pci->argc == 3){
+ if( pci->argc == 3 && cntxt->user == MAL_ADMIN){
idx = *getArgReference_int(stk,pci,1);
opt = *getArgReference_str(stk,pci,2);
} else {
- idx = cntxt->idx;
opt = *getArgReference_str(stk,pci,1);
}
if( idx < 0 || idx > MAL_MAXCLIENTS)
throw(MAL,"clients.setoptimizer","Illegal session id");
+ if (strNil(opt))
+ throw(MAL,"clients.setoptimizer","Input string cannot be NULL");
+ if (strlen(opt) >= sizeof(mal_clients[idx].optimizer))
+ throw(MAL,"clients.setoptimizer","Input string is too large");
+
+ MT_lock_set(&mal_contextLock);
if (mal_clients[idx].mode == FREECLIENT)
- throw(MAL,"clients.setoptimizer","Session not active anymore");
- if (cntxt->user == mal_clients[idx].user || cntxt->user == MAL_ADMIN){
- if (strNil(opt))
- throw(MAL,"clients.setoptimizer","Input string cannot
be NULL");
- if (strlen(opt) >= sizeof(mal_clients[idx].optimizer))
- throw(MAL,"clients.setoptimizer","Input string is too
large");
- strcpy_len(mal_clients[idx].optimizer, opt,
- sizeof(mal_clients[idx].optimizer));
- }
- return MAL_SUCCEED;
+ msg = createException(MAL,"clients.setoptimizer","Session not
active anymore");
+ else
+ strcpy_len(mal_clients[idx].optimizer, opt,
sizeof(mal_clients[idx].optimizer));
+ MT_lock_unset(&mal_contextLock);
+ return msg;
}
str
CLTsetworkerlimit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int idx, limit;
+ str msg = MAL_SUCCEED;
+ int idx = cntxt->idx, limit;
(void) mb;
- if(pci->argc == 3){
+ if (pci->argc == 3 && cntxt->user == MAL_ADMIN){
idx = *getArgReference_int(stk,pci,1);
limit = *getArgReference_int(stk,pci,2);
} else {
- idx = cntxt->idx;
limit = *getArgReference_int(stk,pci,1);
}
@@ -271,128 +280,164 @@ CLTsetworkerlimit(Client cntxt, MalBlkPt
throw(MAL, "clients.setworkerlimit","The number of workers
cannot be NULL");
if( limit < 0)
throw(MAL, "clients.setworkerlimit","The number of workers
cannot be negative");
+
+ MT_lock_set(&mal_contextLock);
if (mal_clients[idx].mode == FREECLIENT)
- throw(MAL,"clients.setworkerlimit","Session not active
anymore");
- if (cntxt->user == mal_clients[idx].user || cntxt->user == MAL_ADMIN){
+ msg = createException(MAL,"clients.setworkerlimit","Session not
active anymore");
+ else
mal_clients[idx].workerlimit = limit;
- }
- return MAL_SUCCEED;
+ MT_lock_unset(&mal_contextLock);
+ return msg;
}
str
CLTsetmemorylimit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int idx, limit;
+ str msg = MAL_SUCCEED;
+ int idx = cntxt->idx, limit;
(void) mb;
- if(pci->argc == 3){
+ if (pci->argc == 3 && cntxt->user == MAL_ADMIN){
idx = *getArgReference_sht(stk,pci,1);
limit = *getArgReference_int(stk,pci,2);
- } else{
- idx = cntxt->idx;
+ } else {
limit = *getArgReference_int(stk,pci,1);
}
if( idx < 0 || idx > MAL_MAXCLIENTS)
throw(MAL,"clients.setmemorylimit","Illegal session id");
- if (mal_clients[idx].mode == FREECLIENT)
- throw(MAL,"clients.setmemorylimit","Session not active
anymore");
if( is_int_nil(limit))
throw(MAL, "clients.setmemorylimit", "The memmory limit cannot
be NULL");
if( limit < 0)
throw(MAL, "clients.setmemorylimit", "The memmory limit cannot
be negative");
- if (cntxt->user == mal_clients[idx].user || cntxt->user == MAL_ADMIN){
+
+ MT_lock_set(&mal_contextLock);
+ if (mal_clients[idx].mode == FREECLIENT)
+ msg = createException(MAL,"clients.setmemorylimit","Session not
active anymore");
+ else
mal_clients[idx].memorylimit = limit;
- }
- return MAL_SUCCEED;
+ MT_lock_unset(&mal_contextLock);
+ return msg;
}
str
CLTstopSession(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int idx;
+ str msg = MAL_SUCCEED;
+ int idx = cntxt->idx;
- (void) mb;
- switch( getArgType(mb,pci,1)){
- case TYPE_bte:
- idx = *getArgReference_bte(stk,pci,1);
- break;
- case TYPE_sht:
- idx = *getArgReference_sht(stk,pci,1);
- break;
- case TYPE_int:
- idx = *getArgReference_int(stk,pci,1);
- break;
- default:
- throw(MAL,"clients.stopSession","Unexpected index type");
+ if (cntxt->user == MAL_ADMIN) {
+ switch( getArgType(mb,pci,1)){
+ case TYPE_bte:
+ idx = *getArgReference_bte(stk,pci,1);
+ break;
+ case TYPE_sht:
+ idx = *getArgReference_sht(stk,pci,1);
+ break;
+ case TYPE_int:
+ idx = *getArgReference_int(stk,pci,1);
+ break;
+ default:
+ throw(MAL,"clients.stopSession","Unexpected index
type");
+ }
}
if( idx < 0 || idx > MAL_MAXCLIENTS)
throw(MAL,"clients.stopSession","Illegal session id");
- if (mal_clients[idx].mode == FREECLIENT)
- throw(MAL,"clients.stopSession","Session not active anymore");
- if (cntxt->user == mal_clients[idx].user || cntxt->user == MAL_ADMIN){
+
+ MT_lock_set(&mal_contextLock);
+ if (mal_clients[idx].mode == FREECLIENT) {
+ msg = createException(MAL,"clients.stopSession","Session not
active anymore");
+ } else {
mal_clients[idx].querytimeout = 1; /* stop client in one
microsecond */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list