Changeset: 395887ac6745 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=395887ac6745 Modified Files: monetdb5/mal/mal_runtime.c monetdb5/mal/mal_runtime.h monetdb5/optimizer/opt_statistics.c monetdb5/optimizer/opt_wrapper.c Branch: default Log Message:
Fix edit on runtimeProfile diffs (106 lines): diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c --- a/monetdb5/mal/mal_runtime.c +++ b/monetdb5/mal/mal_runtime.c @@ -72,31 +72,31 @@ runtimeProfileInit(Client cntxt, MalBlkP MT_lock_unset(&mal_delayLock); return; } + // check for recursive call for( i = 0; i < qtop; i++) - if ( QRYqueue[i].mb == mb) - break; + if ( QRYqueue[i].mb == mb && stk->up == QRYqueue[i].stk){ + QRYqueue[i].stk = stk; + stk->tag = QRYqueue[i].tag; + MT_lock_unset(&mal_delayLock); + return; + } - stk->tag = calltag++; - if ( i == qtop ) { - mb->tag = qtag; - QRYqueue[i].mb = mb; // for detecting duplicates - QRYqueue[i].stk = stk; // for status pause 'p'/running '0'/ quiting 'q' - QRYqueue[i].tag = qtag++; - QRYqueue[i].start = (lng)time(0); - QRYqueue[i].runtime = mb->runtime; - q = isaSQLquery(mb); - QRYqueue[i].query = q? GDKstrdup(q):0; - QRYqueue[i].status = "running"; - QRYqueue[i].cntxt = cntxt; - } - + // add new invokation + QRYqueue[i].mb = mb; + QRYqueue[i].tag = qtag++; + QRYqueue[i].stk = stk; // for status pause 'p'/running '0'/ quiting 'q' + QRYqueue[i].start = (lng)time(0); + QRYqueue[i].runtime = mb->runtime; // the estimated execution time + q = isaSQLquery(mb); + QRYqueue[i].query = q? GDKstrdup(q):0; + QRYqueue[i].status = "running"; + QRYqueue[i].cntxt = cntxt; qtop += i == qtop; - MT_lock_unset(&mal_delayLock); } void -runtimeProfileFinish(Client cntxt, MalBlkPtr mb) +runtimeProfileFinish(Client cntxt, MalBlkPtr mb, MalStkPtr stk) { int i,j; @@ -104,9 +104,15 @@ runtimeProfileFinish(Client cntxt, MalBl MT_lock_set(&mal_delayLock); for( i=j=0; i< qtop; i++) - if ( QRYqueue[i].mb != mb) + if ( QRYqueue[i].stk != stk) QRYqueue[j++] = QRYqueue[i]; else { + if( stk->up){ + // recursive call + QRYqueue[i].stk = stk->up; + MT_lock_unset(&mal_delayLock); + return; + } QRYqueue[i].mb->calls++; QRYqueue[i].mb->runtime += (lng) (((lng)time(0) - QRYqueue[i].start) * 1000.0/QRYqueue[i].mb->calls); diff --git a/monetdb5/mal/mal_runtime.h b/monetdb5/mal/mal_runtime.h --- a/monetdb5/mal/mal_runtime.h +++ b/monetdb5/mal/mal_runtime.h @@ -36,7 +36,7 @@ typedef struct QRYQUEUE{ } *QueryQueue; mal_export void runtimeProfileInit(Client cntxt, MalBlkPtr mb, MalStkPtr stk); -mal_export void runtimeProfileFinish(Client cntxt, MalBlkPtr mb); +mal_export void runtimeProfileFinish(Client cntxt, MalBlkPtr mb, MalStkPtr stk); mal_export void runtimeProfileBegin(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, RuntimeProfile prof); mal_export void runtimeProfileExit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, RuntimeProfile prof); mal_export void finishSessionProfiler(Client cntxt); diff --git a/monetdb5/optimizer/opt_statistics.c b/monetdb5/optimizer/opt_statistics.c --- a/monetdb5/optimizer/opt_statistics.c +++ b/monetdb5/optimizer/opt_statistics.c @@ -9,7 +9,6 @@ #include "monetdb_config.h" #include "opt_statistics.h" /* - * @ * Upon loading the module it should inspect the scenario table * for any unresolved references to the MALoptimizer and set the * callback function. diff --git a/monetdb5/optimizer/opt_wrapper.c b/monetdb5/optimizer/opt_wrapper.c --- a/monetdb5/optimizer/opt_wrapper.c +++ b/monetdb5/optimizer/opt_wrapper.c @@ -110,6 +110,9 @@ str OPTwrapper (Client cntxt, MalBlkPtr if( p == NULL) throw(MAL, "opt_wrapper", "missing optimizer statement"); + + if( mb->errors) + throw(MAL, "opt_wrapper", "MAL block contains errors"); snprintf(optimizer,256,"%s", fcnnme = getFunctionId(p)); curmodnme = getModuleId(p); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list