Changeset: 30614f273837 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=30614f273837
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        gdk/gdk_join.c
        monetdb5/ChangeLog
        monetdb5/modules/mal/Tests/inspect05.stable.out
        monetdb5/modules/mal/clients.c
        monetdb5/modules/mal/clients.h
        monetdb5/modules/mal/clients.mal
        monetdb5/optimizer/opt_garbageCollector.c
        monetdb5/optimizer/opt_mitosis.c
        sql/ChangeLog
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_upgrades.c
        sql/common/sql_types.c
        sql/scripts/22_clients.sql
        sql/server/rel_rel.h
        sql/server/rel_select.c
        sql/server/rel_select.h
        sql/test/BugTracker-2014/Tests/aggregates-intervals.Bug-3533.sql
        sql/test/BugTracker-2014/Tests/aggregates-intervals.Bug-3533.stable.err
        sql/test/BugTracker-2014/Tests/aggregates-intervals.Bug-3533.stable.out
        
sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out.single
        sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out
        sql/test/emptydb-upgrade-chain-hge/Tests/package.py
        sql/test/emptydb-upgrade-chain/Tests/package.py
        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/emptydb/Tests/package-hge.py
        sql/test/emptydb/Tests/package.py
        sql/test/sys-schema/Tests/systemfunctions.stable.out
        sql/test/sys-schema/Tests/systemfunctions.stable.out.int128
        sql/test/testdb-upgrade-chain-hge/Tests/package.py
        sql/test/testdb-upgrade-chain/Tests/package.py
        sql/test/testdb/Tests/package-hge.py
        sql/test/testdb/Tests/package.py
        testing/Mtest.py.in
Branch: sq2default
Log Message:

merged with default


diffs (truncated from 1267 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
@@ -10776,10 +10776,13 @@ stdout of test 'MAL-signatures` in direc
 [ "clients",   "setquerytimeout",      "pattern 
clients.setquerytimeout(sid:bte, n:int):void ",        "CLTqueryTimeout;",     
""      ]
 [ "clients",   "setquerytimeout",      "pattern 
clients.setquerytimeout(sid:int, n:int):void ",        "CLTqueryTimeout;",     
"A query is aborted after q seconds (q=0 means run undisturbed)."       ]
 [ "clients",   "setquerytimeout",      "pattern 
clients.setquerytimeout(sid:sht, n:int):void ",        "CLTqueryTimeout;",     
""      ]
+[ "clients",   "setsession",   "pattern clients.setsession(n:lng):void ",      
"CLTsetSessionTimeout;",        "Abort a session after  n seconds."     ]
 [ "clients",   "setsessiontimeout",    "pattern 
clients.setsessiontimeout(n:int):void ",       "CLTsessionTimeout;",   ""      ]
 [ "clients",   "setsessiontimeout",    "pattern 
clients.setsessiontimeout(sid:bte, n:int):void ",      "CLTsessionTimeout;",   
""      ]
 [ "clients",   "setsessiontimeout",    "pattern 
clients.setsessiontimeout(sid:int, n:int):void ",      "CLTsessionTimeout;",   
"Set the session timeout for a particulat session id"   ]
 [ "clients",   "setsessiontimeout",    "pattern 
clients.setsessiontimeout(sid:sht, n:int):void ",      "CLTsessionTimeout;",   
""      ]
+[ "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."   ]
 [ "clients",   "setworkerlimit",       "pattern 
clients.setworkerlimit(n:int):void ",  "CLTsetworkerlimit;",   ""      ]
 [ "clients",   "setworkerlimit",       "pattern 
clients.setworkerlimit(sid:int, n:int):void ", "CLTsetworkerlimit;",   "Limit 
the number of worker threads per query"  ]
 [ "clients",   "sha1sum",      "command clients.sha1sum(pw:str):str ", 
"CLTsha1sum;",  "Return hex string representation of the SHA-1 hash of the 
given string"        ]
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
@@ -15164,10 +15164,13 @@ stdout of test 'MAL-signatures` in direc
 [ "clients",   "setquerytimeout",      "pattern 
clients.setquerytimeout(sid:bte, n:int):void ",        "CLTqueryTimeout;",     
""      ]
 [ "clients",   "setquerytimeout",      "pattern 
clients.setquerytimeout(sid:int, n:int):void ",        "CLTqueryTimeout;",     
"A query is aborted after q seconds (q=0 means run undisturbed)."       ]
 [ "clients",   "setquerytimeout",      "pattern 
clients.setquerytimeout(sid:sht, n:int):void ",        "CLTqueryTimeout;",     
""      ]
+[ "clients",   "setsession",   "pattern clients.setsession(n:lng):void ",      
"CLTsetSessionTimeout;",        "Abort a session after  n seconds."     ]
 [ "clients",   "setsessiontimeout",    "pattern 
clients.setsessiontimeout(n:int):void ",       "CLTsessionTimeout;",   ""      ]
 [ "clients",   "setsessiontimeout",    "pattern 
clients.setsessiontimeout(sid:bte, n:int):void ",      "CLTsessionTimeout;",   
""      ]
 [ "clients",   "setsessiontimeout",    "pattern 
clients.setsessiontimeout(sid:int, n:int):void ",      "CLTsessionTimeout;",   
"Set the session timeout for a particulat session id"   ]
 [ "clients",   "setsessiontimeout",    "pattern 
clients.setsessiontimeout(sid:sht, n:int):void ",      "CLTsessionTimeout;",   
""      ]
+[ "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."   ]
 [ "clients",   "setworkerlimit",       "pattern 
clients.setworkerlimit(n:int):void ",  "CLTsetworkerlimit;",   ""      ]
 [ "clients",   "setworkerlimit",       "pattern 
clients.setworkerlimit(sid:int, n:int):void ", "CLTsetworkerlimit;",   "Limit 
the number of worker threads per query"  ]
 [ "clients",   "sha1sum",      "command clients.sha1sum(pw:str):str ", 
"CLTsha1sum;",  "Return hex string representation of the SHA-1 hash of the 
given string"        ]
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
@@ -717,7 +717,9 @@ str ALGfirstn(Client cntxt, MalBlkPtr mb
 str ALGgroupby(bat *res, const bat *gids, const bat *cnts);
 str ALGintersect(bat *r1, const bat *lid, const bat *rid, const bat *slid, 
const bat *srid, const bit *nil_matches, const lng *estimate);
 str ALGjoin(bat *r1, bat *r2, const bat *l, const bat *r, const bat *sl, const 
bat *sr, const bit *nil_matches, const lng *estimate);
+str ALGjoin1(bat *r1, const bat *l, const bat *r, const bat *sl, const bat 
*sr, const bit *nil_matches, const lng *estimate);
 str ALGleftjoin(bat *r1, bat *r2, const bat *l, const bat *r, const bat *sl, 
const bat *sr, const bit *nil_matches, const lng *estimate);
+str ALGleftjoin1(bat *r1, const bat *l, const bat *r, const bat *sl, const bat 
*sr, const bit *nil_matches, const lng *estimate);
 str ALGmaxany(ptr result, const bat *bid);
 str ALGmaxany_skipnil(ptr result, const bat *bid, const bit *skipnil);
 str ALGminany(ptr result, const bat *bid);
@@ -911,14 +913,16 @@ str CLTchangeUsername(Client cntxt, MalB
 str CLTcheckPermission(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 str CLTgetClientId(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CLTgetPasswordHash(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+str CLTgetProfile(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CLTgetScenario(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
-str CLTgetTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CLTgetUsername(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CLTgetUsers(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CLTmd5sum(str *ret, str *pw);
+str CLTqueryTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CLTquit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CLTremoveUser(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str CLTripemd160sum(str *ret, str *pw);
+str CLTsessionTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 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);
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3391,8 +3391,6 @@ leftjoin(BAT **r1p, BAT **r2p, BAT *l, B
 
        /* only_misses implies left output only */
        assert(!only_misses || r2p == NULL);
-       /* only no right output allowed for semijoin and diff */
-       assert(r2p != NULL || (semi | only_misses));
        /* if nil_on_miss is set, we really need a right output */
        assert(!nil_on_miss || r2p != NULL);
        /* if not_in is set, then so is only_misses */
diff --git a/monetdb5/ChangeLog b/monetdb5/ChangeLog
--- a/monetdb5/ChangeLog
+++ b/monetdb5/ChangeLog
@@ -1,6 +1,14 @@
 # ChangeLog file for MonetDB5
 # This file is updated with Maddlog
 
+* Tue Nov 19 2019 Pedro Ferreira <pedro.ferre...@monetdbsolutions.com>
+- Added session identifier, number of workers and memory claim to the
+  sysmon queue. 
+- The worker (number of threads), memory (in MB) and optimizer pipeline 
+  limits can now be set per user session basis. The query and session
+  timeouts are now set in seconds.
+- With required privileges an user can set resource limits for a session.
+
 * Wed Nov 13 2019 Sjoerd Mullender <sjo...@acm.org>
 - There are now versions of group.(sub)group(done) that produce a single
   output containing just the groups.
diff --git a/monetdb5/modules/mal/Tests/inspect05.stable.out 
b/monetdb5/modules/mal/Tests/inspect05.stable.out
--- a/monetdb5/modules/mal/Tests/inspect05.stable.out
+++ b/monetdb5/modules/mal/Tests/inspect05.stable.out
@@ -79,25 +79,26 @@ stdout of test 'inspect05` in directory 
 [ 48@0,        "orderidx",     "pattern",      "bat",  "(bv:bat[:any_1], 
l:bat[:any_1]...):void ",     "OIDXmerge;"    ]
 [ 49@0,        "orderidx",     "pattern",      "bat",  "(bv:bat[:any_1], 
pieces:int):void ",   "OIDXcreate;"   ]
 [ 50@0,        "orderidx",     "pattern",      "bat",  "(bv:bat[:any_1]):void 
",       "OIDXcreate;"   ]
-[ 51@0,        "partition",    "pattern",      "bat",  "(b:bat[:any_1], 
pieces:int, n:int):bat[:any_1] ",      "CMDBATpartition2;"     ]
-[ 52@0,        "partition",    "pattern",      "bat",  
"(b:bat[:any_1]):bat[:any_1]... ",      "CMDBATpartition;"      ]
-[ 53@0,        "replace",      "command",      "bat",  "(b:bat[:any_1], 
del:bat[:oid]):bat[:oid] ",    "BKCreuseBATmap;"       ]
-[ 54@0,        "replace",      "command",      "bat",  "(b:bat[:any_1], 
del:bat[:oid]):bat[:any_1] ",  "BKCreuseBAT;"  ]
-[ 55@0,        "replace",      "command",      "bat",  "(b:bat[:any_1], 
rid:bat[:oid], val:bat[:any_1], force:bit):bat[:any_1] ",      
"BKCbat_inplace_force;" ]
-[ 56@0,        "replace",      "command",      "bat",  "(b:bat[:any_1], 
rid:bat[:oid], val:bat[:any_1]):bat[:any_1] ", "BKCbat_inplace;"       ]
-[ 57@0,        "reuse",        "command",      "bat",  "(b:bat[:any_1], h:oid, 
t:any_1, force:bit):bat[:any_1] ",      "BKCbun_inplace_force;" ]
-[ 58@0,        "reuseMap",     "command",      "bat",  "(b:bat[:any_1], h:oid, 
t:any_1):bat[:any_1] ", "BKCbun_inplace;"       ]
-[ 59@0,        "save", "pattern",      "bat",  "(val:any_1):bat[:any_1] ",     
"CMDBATsingle;" ]
-[ 60@0,        "save", "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCsetImprints;"       ]
-[ 61@0,        "setAccess",    "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCsetHash;"   ]
-[ 62@0,        "setColumn",    "command",      "bat",  "(nme:str):bit ",       
"BKCsave;"      ]
-[ 63@0,        "setHash",      "command",      "bat",  "(nme:bat[:any_1]):void 
",      "BKCsave2;"     ]
-[ 64@0,        "setImprints",  "command",      "bat",  "(b:bat[:any_1]):void 
",        "BKCsetPersistent;"     ]
-[ 65@0,        "setKey",       "command",      "bat",  "(b:bat[:any_1]):void 
",        "BKCsetTransient;"      ]
-[ 66@0,        "setName",      "command",      "bat",  "(b:bat[:any_1], 
t:str):void ", "BKCsetColumn;" ]
-[ 67@0,        "setPersistent",        "command",      "bat",  
"(b:bat[:any_1], s:str):void ", "BKCsetName;"   ]
-[ 68@0,        "setTransient", "command",      "bat",  "(b:bat[:any_1], 
mode:str):bat[:any_1] ",       "BKCsetAccess;" ]
-[ 69@0,        "single",       "command",      "bat",  "(b:bat[:any_1], 
mode:bit):bat[:any_1] ",       "BKCsetkey;"    ]
+[ 51@0,        "pack", "pattern",      "bat",  "(X_0:any_2...):bat[:any_2] ",  
"MATpackValues;"        ]
+[ 52@0,        "partition",    "pattern",      "bat",  "(b:bat[:any_1], 
pieces:int, n:int):bat[:any_1] ",      "CMDBATpartition2;"     ]
+[ 53@0,        "partition",    "pattern",      "bat",  
"(b:bat[:any_1]):bat[:any_1]... ",      "CMDBATpartition;"      ]
+[ 54@0,        "replace",      "command",      "bat",  "(b:bat[:any_1], 
del:bat[:oid]):bat[:oid] ",    "BKCreuseBATmap;"       ]
+[ 55@0,        "replace",      "command",      "bat",  "(b:bat[:any_1], 
del:bat[:oid]):bat[:any_1] ",  "BKCreuseBAT;"  ]
+[ 56@0,        "replace",      "command",      "bat",  "(b:bat[:any_1], 
rid:bat[:oid], val:bat[:any_1], force:bit):bat[:any_1] ",      
"BKCbat_inplace_force;" ]
+[ 57@0,        "replace",      "command",      "bat",  "(b:bat[:any_1], 
rid:bat[:oid], val:bat[:any_1]):bat[:any_1] ", "BKCbat_inplace;"       ]
+[ 58@0,        "reuse",        "command",      "bat",  "(b:bat[:any_1], h:oid, 
t:any_1, force:bit):bat[:any_1] ",      "BKCbun_inplace_force;" ]
+[ 59@0,        "reuseMap",     "command",      "bat",  "(b:bat[:any_1], h:oid, 
t:any_1):bat[:any_1] ", "BKCbun_inplace;"       ]
+[ 60@0,        "save", "pattern",      "bat",  "(val:any_1):bat[:any_1] ",     
"CMDBATsingle;" ]
+[ 61@0,        "save", "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCsetImprints;"       ]
+[ 62@0,        "setAccess",    "command",      "bat",  "(b:bat[:any_1]):bit ", 
"BKCsetHash;"   ]
+[ 63@0,        "setColumn",    "command",      "bat",  "(nme:str):bit ",       
"BKCsave;"      ]
+[ 64@0,        "setHash",      "command",      "bat",  "(nme:bat[:any_1]):void 
",      "BKCsave2;"     ]
+[ 65@0,        "setImprints",  "command",      "bat",  "(b:bat[:any_1]):void 
",        "BKCsetPersistent;"     ]
+[ 66@0,        "setKey",       "command",      "bat",  "(b:bat[:any_1]):void 
",        "BKCsetTransient;"      ]
+[ 67@0,        "setName",      "command",      "bat",  "(b:bat[:any_1], 
t:str):void ", "BKCsetColumn;" ]
+[ 68@0,        "setPersistent",        "command",      "bat",  
"(b:bat[:any_1], s:str):void ", "BKCsetName;"   ]
+[ 69@0,        "setTransient", "command",      "bat",  "(b:bat[:any_1], 
mode:str):bat[:any_1] ",       "BKCsetAccess;" ]
+[ 70@0,        "single",       "command",      "bat",  "(b:bat[:any_1], 
mode:bit):bat[:any_1] ",       "BKCsetkey;"    ]
 
 # 08:55:30 >  
 # 08:55:30 >  Done.
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
@@ -364,6 +364,50 @@ CLTwakeup(void *ret, int *id)
        return MCawakeClient(*id);
 }
 
+/* Set session time out based in seconds. As of December 2019, this function 
is deprecated */
+str
+CLTsetSessionTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       lng sto;
+       int idx = cntxt->idx;
+
+       (void) mb;
+       if( idx < 0 || idx > MAL_MAXCLIENTS)
+               throw(MAL,"clients.setsession","Illegal session id %d", idx);
+       if (mal_clients[idx].mode == FREECLIENT)
+               throw(MAL,"clients.setsession","Session not active anymore");
+       sto =  *getArgReference_lng(stk,pci,1);
+       if (sto < 0)
+               throw(MAL,"clients.setsession","Session timeout should be >= 
0");
+       mal_clients[idx].sessiontimeout = sto * 1000000;
+       return MAL_SUCCEED;
+}
+
+/* Set the current query timeout in seconds. As of December 2019, this 
function is deprecated */
+str
+CLTsetTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       lng qto,sto;
+       int idx = cntxt->idx;
+
+       (void) mb;
+       if( idx < 0 || idx > MAL_MAXCLIENTS)
+               throw(MAL,"clients.settimeout","Illegal session id %d", idx);
+       if (mal_clients[idx].mode == FREECLIENT)
+               throw(MAL,"clients.settimeout","Session not active anymore");
+       qto = *getArgReference_lng(stk,pci,1);
+       if (qto < 0)
+               throw(MAL,"clients.settimeout","Query timeout should be >= 0");
+       if (pci->argc == 3) {
+               sto = *getArgReference_lng(stk,pci,2);
+               if( sto < 0)
+                       throw(MAL,"clients.settimeout","Session timeout should 
be >= 0");
+               mal_clients[idx].sessiontimeout = sto * 1000000;
+       }
+       mal_clients[idx].querytimeout = qto * 1000000;
+       return MAL_SUCCEED;
+}
+
 /* set session time out based in seconds, converted into microseconds */
 str
 CLTqueryTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
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
@@ -26,6 +26,8 @@ mal_export str CLTLogin(bat *ret, bat *n
 mal_export str CLTInfo(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 mal_export str CLTstop(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 mal_export str CLTsuspend(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+mal_export str CLTsetSessionTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+mal_export str CLTsetTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 mal_export str CLTqueryTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 mal_export str CLTsessionTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 mal_export str CLTsetoptimizer(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
@@ -60,6 +60,22 @@ pattern getprofile()(opt:str, q:int, s:i
 address CLTgetProfile
 comment "Retrieve the profile settings for a client";
 
+# As of December 2019, the pattern setsession is deprecated, use 
setsessiontimeout
+pattern setsession(n:lng):void
+address CLTsetSessionTimeout
+comment "Abort a session after  n seconds.";
+
+# As of December 2019, the pattern settimeout is deprecated, use 
setquerytimeout
+pattern settimeout(n:lng):void
+address CLTsetTimeout
+comment "Abort a query after  n seconds.";
+
+pattern settimeout(q:lng,s:lng):void
+address CLTsetTimeout
+comment "Abort a query after q seconds (q=0 means run undisturbed).
+The session timeout aborts the connection after spending too
+many seconds on query processing.";
+
 # set properties of others
 pattern setquerytimeout(n:int):void
 address CLTqueryTimeout;
diff --git a/monetdb5/optimizer/opt_garbageCollector.c 
b/monetdb5/optimizer/opt_garbageCollector.c
--- a/monetdb5/optimizer/opt_garbageCollector.c
+++ b/monetdb5/optimizer/opt_garbageCollector.c
@@ -63,8 +63,6 @@ OPTgarbageCollectorImplementation(Client
        for(i = 0; i < limit; i++)
                if(mb->stmt[i] && getModuleId(mb->stmt[i]) == querylogRef && 
getFunctionId(mb->stmt[i]) == defineRef ){
                        p = getInstrPtr(mb,i);
-                       if( i != 1)
-                               fprintf(stderr, "define statement not in 
expected place %d\n", i);
                        break;
                }
        
diff --git a/monetdb5/optimizer/opt_mitosis.c b/monetdb5/optimizer/opt_mitosis.c
--- a/monetdb5/optimizer/opt_mitosis.c
+++ b/monetdb5/optimizer/opt_mitosis.c
@@ -11,23 +11,6 @@
 #include "mal_interpreter.h"
 #include "gdk_utils.h"
 
-static int
-eligible(MalBlkPtr mb)
-{
-       InstrPtr p;
-       int i;
-       for (i = 1; i < mb->stop; i++) {
-               p = getInstrPtr(mb, i);
-               if (getModuleId(p) == sqlRef && getFunctionId(p) == assertRef &&
-                       p->argc > 2 && getArgType(mb, p, 2) == TYPE_str &&
-                       isVarConstant(mb, getArg(p, 2)) &&
-                       getVarConstant(mb, getArg(p, 2)).val.sval != NULL &&
-                       (strstr(getVarConstant(mb, getArg(p, 2)).val.sval, 
"PRIMARY KEY constraint") ||
-                        strstr(getVarConstant(mb, getArg(p, 2)).val.sval, 
"UNIQUE constraint")))
-                       return 0;
-       }
-       return 1;
-}
 
 str
 OPTmitosisImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
@@ -48,14 +31,20 @@ OPTmitosisImplementation(Client cntxt, M
                //return 0;
        (void) cntxt;
        (void) stk;
-       if (!eligible(mb))
-               return MAL_SUCCEED;
 
        activeClients = mb->activeClients = MCactiveClients();
        old = mb->stmt;
        for (i = 1; i < mb->stop; i++) {
                InstrPtr p = old[i];
 
+               if (getModuleId(p) == sqlRef && getFunctionId(p) == assertRef &&
+                       p->argc > 2 && getArgType(mb, p, 2) == TYPE_str &&
+                       isVarConstant(mb, getArg(p, 2)) &&
+                       getVarConstant(mb, getArg(p, 2)).val.sval != NULL &&
+                       (strstr(getVarConstant(mb, getArg(p, 2)).val.sval, 
"PRIMARY KEY constraint") ||
+                        strstr(getVarConstant(mb, getArg(p, 2)).val.sval, 
"UNIQUE constraint")))
+                       goto bailout;
+
                /* mitosis/mergetable bailout conditions */
                
                if (p->argc > 2 && getModuleId(p) == aggrRef && 
@@ -72,7 +61,7 @@ OPTmitosisImplementation(Client cntxt, M
                        getFunctionId(p) != avgRef &&
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to