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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to