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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list